Repository: sfrwmaker/F1-T12-858D Branch: master Commit: 19be82d662f8 Files: 153 Total size: 32.2 MB Directory structure: gitextract_hhypdf8s/ ├── BINARY/ │ ├── F1-T12+858D_sh1106.hex │ ├── F1-T12+858D_ssd1305.hex │ ├── F1-T12+858D_ssd1306.hex │ ├── F1-T12+858D_ssd1309.hex │ └── README ├── Drivers/ │ └── u8g2/ │ ├── Inc/ │ │ ├── U8g2lib.h │ │ ├── U8x8lib.h │ │ ├── u8g2.h │ │ └── u8x8.h │ └── Src/ │ ├── U8x8lib.cpp-disable │ ├── u8g2_bitmap.c │ ├── u8g2_box.c │ ├── u8g2_buffer.c │ ├── u8g2_circle.c │ ├── u8g2_cleardisplay.c │ ├── u8g2_d_memory.c │ ├── u8g2_d_setup.c │ ├── u8g2_font.c │ ├── u8g2_fonts.c │ ├── u8g2_hvline.c │ ├── u8g2_input_value.c │ ├── u8g2_intersection.c │ ├── u8g2_kerning.c │ ├── u8g2_line.c │ ├── u8g2_ll_hvline.c │ ├── u8g2_message.c │ ├── u8g2_polygon.c │ ├── u8g2_selection_list.c │ ├── u8g2_setup.c │ ├── u8log.c │ ├── u8log_u8g2.c │ ├── u8log_u8x8.c │ ├── u8x8_8x8.c │ ├── u8x8_byte.c │ ├── u8x8_cad.c │ ├── u8x8_d_a2printer.c │ ├── u8x8_d_il3820_296x128.c │ ├── u8x8_d_ist3020.c │ ├── u8x8_d_ks0108.c │ ├── u8x8_d_lc7981.c │ ├── u8x8_d_ld7032_60x32.c │ ├── u8x8_d_ls013b7dh03.c │ ├── u8x8_d_max7219.c │ ├── u8x8_d_pcd8544_84x48.c │ ├── u8x8_d_pcf8812.c │ ├── u8x8_d_pcf8814_hx1230.c │ ├── u8x8_d_sbn1661.c │ ├── u8x8_d_sed1330.c │ ├── u8x8_d_sh1106_64x32.c │ ├── u8x8_d_sh1106_72x40.c │ ├── u8x8_d_sh1107.c │ ├── u8x8_d_sh1108.c │ ├── u8x8_d_sh1122.c │ ├── u8x8_d_ssd1305.c │ ├── u8x8_d_ssd1306_128x32.c │ ├── u8x8_d_ssd1306_128x64_noname.c │ ├── u8x8_d_ssd1306_48x64.c │ ├── u8x8_d_ssd1306_64x32.c │ ├── u8x8_d_ssd1306_64x48.c │ ├── u8x8_d_ssd1306_96x16.c │ ├── u8x8_d_ssd1309.c │ ├── u8x8_d_ssd1316.c │ ├── u8x8_d_ssd1317.c │ ├── u8x8_d_ssd1318.c │ ├── u8x8_d_ssd1322.c │ ├── u8x8_d_ssd1325.c │ ├── u8x8_d_ssd1326.c │ ├── u8x8_d_ssd1327.c │ ├── u8x8_d_ssd1329.c │ ├── u8x8_d_ssd1606_172x72.c │ ├── u8x8_d_ssd1607_200x200.c │ ├── u8x8_d_st7511.c │ ├── u8x8_d_st75256.c │ ├── u8x8_d_st75320.c │ ├── u8x8_d_st7565.c │ ├── u8x8_d_st7567.c │ ├── u8x8_d_st7586s_erc240160.c │ ├── u8x8_d_st7586s_s028hn118a.c │ ├── u8x8_d_st7588.c │ ├── u8x8_d_st7920.c │ ├── u8x8_d_stdio.c │ ├── u8x8_d_t6963.c │ ├── u8x8_d_uc1601.c │ ├── u8x8_d_uc1604.c │ ├── u8x8_d_uc1608.c │ ├── u8x8_d_uc1610.c │ ├── u8x8_d_uc1611.c │ ├── u8x8_d_uc1617.c │ ├── u8x8_d_uc1638.c │ ├── u8x8_d_uc1701_dogs102.c │ ├── u8x8_d_uc1701_mini12864.c │ ├── u8x8_debounce.c │ ├── u8x8_display.c │ ├── u8x8_fonts.c │ ├── u8x8_gpio.c │ ├── u8x8_input_value.c │ ├── u8x8_message.c │ ├── u8x8_selection_list.c │ ├── u8x8_setup.c │ ├── u8x8_string.c │ ├── u8x8_u16toa.c │ └── u8x8_u8toa.c ├── F1-T12+858D.ioc ├── Inc/ │ ├── buzzer.h │ ├── cfgtypes.h │ ├── config.h │ ├── core.h │ ├── display.h │ ├── eeprom.h │ ├── encoder.h │ ├── font.h │ ├── gun.h │ ├── hw.h │ ├── iron.h │ ├── iron_tips.h │ ├── main.h │ ├── mode.h │ ├── myU8g2lib.h │ ├── oled.h │ ├── pid.h │ ├── stat.h │ ├── stm32f1xx_hal_conf.h │ ├── stm32f1xx_it.h │ ├── tools.h │ ├── unit.h │ └── vars.h ├── README.md ├── Src/ │ ├── buzzer.cpp │ ├── config.cpp │ ├── core.cpp │ ├── display.cpp │ ├── eeprom.cpp │ ├── encoder.cpp │ ├── font.c │ ├── gun.cpp │ ├── iron.cpp │ ├── iron_tips.cpp │ ├── main.c │ ├── mode.cpp │ ├── oled.cpp │ ├── pid.cpp │ ├── stat.cpp │ ├── stm32f1xx_hal_msp.c │ ├── stm32f1xx_it.c │ ├── syscalls.c │ ├── system_stm32f1xx.c │ ├── tools.cpp │ ├── unit.cpp │ └── vars.cpp └── eagle/ ├── display_board.brd ├── display_board.sch ├── stm32_T12+858D.sch └── stm32_T12+858D_v4.sch ================================================ FILE CONTENTS ================================================ ================================================ FILE: BINARY/F1-T12+858D_sh1106.hex ================================================ :020000040800F2 :100000000050002099B2000819B100081BB1000887 :100010001DB100081FB1000821B100080000000058 :1000200000000000000000000000000023B10008F4 :1000300025B100080000000027B1000829B1000820 :10004000E1B20008E1B20008E1B20008E1B2000844 :10005000E1B20008E1B20008B94F0008E1B20008BF :10006000E1B20008E1B20008E1B200082DB10008D9 :10007000E1B20008E1B20008E1B20008E1B2000814 :10008000E1B20008E1B20008E1B20008E1B2000804 :10009000E1B20008E1B20008E1B20008E1B20008F4 :1000A000E1B20008E1B20008E1B2000839B100088D :1000B00045B10008E1B20008E1B20008E1B2000871 :1000C000E1B20008E1B20008E1B20008E1B20008C4 :1000D000E1B20008E1B20008E1B20008E1B20008B4 :1000E000E1B20008E1B20008E1B20008000000003F :1000F0000000000000000000000000000000000000 :0C01000000000000000000005FF808F1A3 :1001100010B5054C237833B9044B13B10448AFF341 :1001200000800123237010BD400200200000000069 :10013000F0D3000808B5034B1BB103490348AFF3E4 :10014000008008BD0000000044020020F0D3000839 :10015000034613F8012B002AFBD1181A0138704707 :1001600081F0004102E000BF83F0004330B54FEA68 :1001700041044FEA430594EA050F08BF90EA020FD5 :100180001FBF54EA000C55EA020C7FEA645C7FEA68 :10019000655C00F0E2804FEA5454D4EB5555B8BF8B :1001A0006D420CDD2C4480EA020281EA030382EAFC :1001B000000083EA010180EA020281EA0303362D8E :1001C00088BF30BD11F0004F4FEA01314FF4801C61 :1001D0004CEA113102D0404261EB410113F0004F73 :1001E0004FEA03334CEA133302D0524263EB43032A :1001F00094EA050F00F0A780A4F10104D5F1200EC8 :100200000DDB02FA0EFC22FA05F2801841F1000122 :1002100003FA0EF2801843FA05F359410EE0A5F1F6 :1002200020050EF1200E012A03FA0EFC28BF4CF027 :10023000020C43FA05F3C01851EBE37101F00045DD :1002400007D54FF0000EDCF1000C7EEB00006EEBEA :100250000101B1F5801F1BD3B1F5001F0CD3490874 :100260005FEA30004FEA3C0C04F101044FEA4452CB :1002700012F5800F80F09A80BCF1004F08BF5FEA52 :10028000500C50F1000041EB045141EA050130BD32 :100290005FEA4C0C404141EB0101013C28BFB1F544 :1002A000801FE9D291F0000F04BF01460020B1FA8F :1002B00081F308BF2033A3F10B03B3F120020CDA62 :1002C0000C3208DD02F1140CC2F10C0201FA0CF040 :1002D00021FA02F10CE002F11402D8BFC2F1200CA5 :1002E00001FA02F120FA0CFCDCBF41EA0C0190405B :1002F000E41AA2BF01EB0451294330BD6FEA0404A4 :100300001F3C1CDA0C340EDC04F11404C4F120028E :1003100020FA04F001FA02F340EA030021FA04F3A0 :1003200045EA030130BDC4F10C04C4F1200220FAF7 :1003300002F001FA04F340EA0300294630BD21FA35 :1003400004F0294630BD94F0000F83F4801306BFFB :1003500081F480110134013D4EE77FEA645C18BFEF :100360007FEA655C29D094EA050F08BF90EA020F86 :1003700005D054EA000C04BF1946104630BD91EA7E :10038000030F1EBF0021002030BD5FEA545C05D181 :100390004000494128BF41F0004130BD14F58004C0 :1003A0003CBF01F5801130BD01F0004545F0FE4134 :1003B00041F470014FF0000030BD7FEA645C1ABF69 :1003C000194610467FEA655C1CBF0B46024650EAA0 :1003D000013406BF52EA033591EA030F41F40021CC :1003E00030BD00BF90F0000F04BF0021704730B552 :1003F0004FF4806404F132044FF000054FF0000127 :1004000050E700BF90F0000F04BF0021704730B5E7 :100410004FF4806404F1320410F0004548BF4042BC :100420004FF000013EE700BF42004FEAE2014FEA11 :1004300031014FEA02701FBF12F07F4393F07F4FEC :1004400081F06051704732F07F4208BF704793F0EF :100450007F4F04BF41F40021704730B54FF4607402 :1004600001F0004521F000411CE700BF50EA010205 :1004700008BF704730B54FF000050AE050EA0102AE :1004800008BF704730B511F0004502D5404261EB1E :1004900041014FF4806404F132045FEA915C3FF45F :1004A000D8AE4FF003025FEADC0C18BF03325FEAFC :1004B000DC0C18BF033202EBDC02C2F1200300FAAD :1004C00003FC20FA02F001FA03FE40EA0E0021FAD2 :1004D00002F11444BDE600BF70B54FF0FF0C4CF4C0 :1004E000E06C1CEA11541DBF1CEA135594EA0C0F72 :1004F00095EA0C0F00F0DEF82C4481EA030621EAAD :100500004C5123EA4C5350EA013518BF52EA0335E7 :1005100041F4801143F4801338D0A0FB02CE4FF099 :100520000005E1FB02E506F00042E0FB03E54FF0C9 :100530000006E1FB03569CF0000F18BF4EF0010EC1 :10054000A4F1FF04B6F5007F64F5407404D25FEABD :100550004E0E6D4146EB060642EAC62141EA555170 :100560004FEAC52040EA5E504FEACE2EB4F1FD0CB2 :1005700088BFBCF5E06F1ED8BEF1004F08BF5FEA30 :10058000500E50F1000041EB045170BD06F00046E2 :1005900046EA010140EA020081EA0301B4EB5C048F :1005A000C2BFD4EB0C0541EA045170BD41F4801187 :1005B0004FF0000E013C00F3AB8014F1360FDEBFAC :1005C000002001F0004170BDC4F10004203C35DA88 :1005D0000C341BDC04F11404C4F1200500FA05F30B :1005E00020FA04F001FA05F240EA020001F00042AC :1005F00021F0004110EBD37021FA04F642EB060122 :100600005EEA430E08BF20EAD37070BDC4F10C044B :10061000C4F1200500FA04F320FA05F001FA04F20F :1006200040EA020001F0004110EBD37041F10001FB :100630005EEA430E08BF20EAD37070BDC4F1200506 :1006400000FA05F24EEA020E20FA04F301FA05F26E :1006500043EA020321FA04F001F0004121FA04F216 :1006600020EA020000EBD3705EEA430E08BF20EAE6 :10067000D37070BD94F0000F0FD101F00046400020 :1006800041EB010111F4801F08BF013CF7D041EAA2 :10069000060195F0000F18BF704703F000465200A6 :1006A00043EB030313F4801F08BF013DF7D043EA77 :1006B0000603704794EA0C0F0CEA135518BF95EA2D :1006C0000C0F0CD050EA410618BF52EA4306D1D1B4 :1006D00081EA030101F000414FF0000070BD50EAD3 :1006E000410606BF1046194652EA430619D094EA5D :1006F0000C0F02D150EA013613D195EA0C0F05D147 :1007000052EA03361CBF104619460AD181EA03019A :1007100001F0004141F0FE4141F470014FF0000052 :1007200070BD41F0FE4141F4780170BD70B54FF0ED :10073000FF0C4CF4E06C1CEA11541DBF1CEA13556D :1007400094EA0C0F95EA0C0F00F0A7F8A4EB05044F :1007500081EA030E52EA03354FEA013100F0888046 :100760004FEA03334FF0805545EA131343EA12630F :100770004FEA022245EA111545EA10654FEA0026C4 :100780000EF000419D4208BF964244F1FD0404F57D :10079000407402D25B084FEA3202B61A65EB0305D9 :1007A0005B084FEA32024FF480104FF4002CB6EB96 :1007B000020E75EB030E22BFB61A754640EA0C0016 :1007C0005B084FEA3202B6EB020E75EB030E22BF56 :1007D000B61A754640EA5C005B084FEA3202B6EB97 :1007E000020E75EB030E22BFB61A754640EA9C0056 :1007F0005B084FEA3202B6EB020E75EB030E22BF26 :10080000B61A754640EADC0055EA060E18D04FEAE3 :10081000051545EA16754FEA06164FEAC30343EA83 :1008200052734FEAC2025FEA1C1CC0D111F4801F50 :100830000BD141EA00014FF000004FF0004CB6E749 :1008400011F4801F04BF01430020B4F1FD0C88BFE8 :10085000BCF5E06F3FF6AFAEB5EB030C04BFB6EBF3 :10086000020C5FEA500C50F1000041EB045170BDE6 :100870000EF0004E4EEA113114EB5C04C2BFD4EB13 :100880000C0541EA045170BD41F480114FF0000E97 :10089000013C90E645EA060E8DE60CEA135594EA13 :1008A0000C0F08BF95EA0C0F3FF43BAF94EA0C0F16 :1008B0000AD150EA01347FF434AF95EA0C0F7FF48B :1008C00025AF104619462CE795EA0C0F06D152EADF :1008D00003353FF4FDAE1046194622E750EA4106C3 :1008E00018BF52EA43067FF4C5AE50EA41047FF4D4 :1008F0000DAF52EA43057FF4EBAE12E74A0011D286 :1009000012F5001211D20DD56FF47873B3EB625269 :100910000ED44FEAC12343F0004343EA505323FA75 :1009200002F070474FF00000704750EA013002D1EA :100930004FF0FF3070474FF0000070474FEA410220 :10094000B2F1E04324BFB3F5001CDCF1FE5C0DD92D :1009500001F0004C4FEAC0024CEA5070B2F1004F77 :1009600040EB830008BF20F00100704711F0804F7A :1009700021D113F13872BCBF01F00040704741F43F :1009800080114FEA5252C2F11802C2F1200C10FA43 :100990000CF320FA02F018BF40F001004FEAC12327 :1009A0004FEAD32303FA0CFC40EA0C0023FA02F3CB :1009B0004FEA4303CCE77FEA625307D150EA0133A1 :1009C0001EBF4FF0FE4040F44000704701F0004071 :1009D00040F0FE4040F40000704700BF80F000404F :1009E00002E000BF81F0004142001FBF5FEA410307 :1009F00092EA030F7FEA226C7FEA236C6AD04FEA07 :100A00001262D2EB1363C1BFD2184140484041404B :100A1000B8BF5B42192B88BF704710F0004F40F4FD :100A2000000020F07F4018BF404211F0004F41F419 :100A3000000121F07F4118BF494292EA030F3FD0E5 :100A4000A2F1010241FA03FC10EB0C00C3F12003F8 :100A500001FA03F100F0004302D5494260EB400087 :100A6000B0F5000F13D3B0F1807F06D340084FEAF2 :100A7000310102F10102FE2A51D2B1F1004F40EBE7 :100A8000C25008BF20F0010040EA0300704749004F :100A900040EB0000013A28BFB0F5000FEDD2B0FAEC :100AA00080FCACF1080CB2EB0C0200FA0CF0AABF0F :100AB00000EBC25052421843BCBFD04018437047AD :100AC00092F0000F81F4000106BF80F400000132B3 :100AD000013BB5E74FEA41037FEA226C18BF7FEA8A :100AE000236C21D092EA030F04D092F0000F08BFCC :100AF0000846704790EA010F1CBF0020704712F0B3 :100B00007F4F04D1400028BF40F00040704712F1F1 :100B100000723CBF00F50000704700F0004343F056 :100B2000FE4040F4000070477FEA226216BF08468C :100B30007FEA23630146420206BF5FEA412390EA4F :100B4000010F40F4800070474FF0000304E000BF45 :100B500010F0004348BF40425FEA000C08BF7047F6 :100B600043F0964301464FF000001CE050EA0102BA :100B700008BF70474FF000030AE000BF50EA0102CF :100B800008BF704711F0004302D5404261EB4101BC :100B90005FEA010C02BF84460146002043F0B643E1 :100BA00008BFA3F18053A3F50003BCFA8CF2083A06 :100BB000A3EBC25310DB01FA02FC634400FA02FC0F :100BC000C2F12002BCF1004F20FA02F243EB020016 :100BD00008BF20F00100704702F1200201FA02FC78 :100BE000C2F1200250EA4C0021FA02F243EB02006B :100BF00008BF20EADC7070474FF0FF0C1CEAD052AF :100C00001EBF1CEAD15392EA0C0F93EA0C0F6FD06F :100C10001A4480EA010C400218BF5FEA41211ED04D :100C20004FF0006343EA501043EA5111A0FB013139 :100C30000CF00040B1F5000F3EBF490041EAD3710E :100C40005B0040EA010062F17F02FD2A1DD8B3F18A :100C5000004F40EBC25008BF20F00100704790F0F9 :100C6000000F0CF0004C08BF49024CEA502040EA4B :100C700051207F3AC2BFD2F1FF0340EAC250704711 :100C800040F400004FF00003013A5DDC12F1190F4F :100C9000DCBF00F000407047C2F10002410021FAC1 :100CA00002F1C2F1200200FA02FC5FEA310040F1D9 :100CB000000053EA4C0308BF20EADC70704792F052 :100CC000000F00F0004C02BF400010F4000F013A8A :100CD000F9D040EA0C0093F0000F01F0004C02BF85 :100CE000490011F4000F013BF9D041EA0C018FE7F4 :100CF0000CEAD15392EA0C0F18BF93EA0C0F0AD0FA :100D000030F0004C18BF31F0004CD8D180EA01001F :100D100000F00040704790F0000F17BF90F0004FB8 :100D2000084691F0000F91F0004F14D092EA0C0F9A :100D300001D142020FD193EA0C0F03D14B0218BF2D :100D4000084608D180EA010000F0004040F0FE4073 :100D500040F40000704740F0FE4040F4400070470F :100D60004FF0FF0C1CEAD0521EBF1CEAD15392EA8E :100D70000C0F93EA0C0F69D0A2EB030280EA010C7E :100D800049024FEA402037D04FF0805343EA111117 :100D900043EA10130CF000408B4238BF5B0042F175 :100DA0007D024FF4000C8B4224BF5B1A40EA0C001A :100DB000B3EB510F24BFA3EB510340EA5C00B3EB4C :100DC000910F24BFA3EB910340EA9C00B3EBD10F3A :100DD00024BFA3EBD10340EADC001B0118BF5FEA8C :100DE0001C1CE0D1FD2A3FF650AF8B4240EBC250B5 :100DF00008BF20F0010070470CF0004C4CEA502076 :100E00007F32C2BFD2F1FF0340EAC250704740F4C4 :100E100000004FF00003013A37E792F0000F00F0B6 :100E2000004C02BF400010F4000F013AF9D040EA34 :100E30000C0093F0000F01F0004C02BF490011F4C8 :100E4000000F013BF9D041EA0C0195E70CEAD153C0 :100E500092EA0C0F08D142027FF47DAF93EA0C0FA7 :100E60007FF470AF084676E793EA0C0F04D14B028B :100E70003FF44CAF08466EE730F0004C18BF31F03D :100E8000004CCAD130F000427FF45CAF31F0004337 :100E90007FF43CAF5FE700BF4FF0FF3C06E000BFD0 :100EA0004FF0010C02E000BF4FF0010C4DF804CDF3 :100EB0004FEA40024FEA41037FEA226C18BF7FEA03 :100EC000236C11D001B052EA530C18BF90EA010F05 :100ED00058BFB2EB030088BFC81738BF6FEAE17094 :100EE00018BF40F0010070477FEA226C02D15FEA30 :100EF000402C05D17FEA236CE4D15FEA412CE1D09C :100F00005DF8040B704700BF844608466146FFE762 :100F10000FB5FFF7C9FF002848BF10F1000F0FBD44 :100F20004DF808EDFFF7F4FF0CBF012000205DF83D :100F300008FB00BF4DF808EDFFF7EAFF34BF0120C2 :100F400000205DF808FB00BF4DF808EDFFF7E0FF5B :100F500094BF012000205DF808FB00BF4DF808EDAC :100F6000FFF7D2FF94BF012000205DF808FB00BF0F :100F70004DF808EDFFF7C8FF34BF012000205DF8F1 :100F800008FB00BF4FEA40024FEA41037FEA226CB0 :100F900002D15FEA402C08D17FEA236C02D15FEADC :100FA000412C02D14FF0000070474FF00100704714 :100FB0004FEA4002B2F1FE4F0FD34FF09E03B3EB66 :100FC00012620DD94FEA002343F0004310F0004FA6 :100FD00023FA02F018BF404270474FF000007047FC :100FE00012F1610F01D1420205D110F0004008BF9B :100FF0006FF0004070474FF00000704738B50E4B5F :1010000005461A784FF47A73B3FBF2F30B4A106873 :10101000B0FBF3F000F004FC044658B90F2D09D8DA :10102000024629464FF0FF3000F0BCFB2046044B3F :101030001D6038BD0120FCE700000020EC0100200D :1010400004000020074A08B51368032043F010038A :10105000136000F095FB0020FFF7D0FF09F0B6FE0B :10106000002008BD00200240034A044B11681B7891 :101070000B441360704700BF5C020020000000209A :10108000014B1868704700BF5C02002038B5044669 :10109000FFF7F6FF0546631C1EBF044B1B78E418E0 :1010A000FFF7EEFF431BA342FAD338BD0000002038 :1010B000436A10B59A6A12F0500F1BD19A6A42F433 :1010C00000729A621A68926802F46022B2F5602F88 :1010D0000CD11A7B52B99A6A22F480729A629A6A87 :1010E000D2045EBF9A6A42F001029A62184603F087 :1010F0008DFE10BD1B6ABDE810401B6B1847704782 :1011000008B5406AFFF7FBFF08BD406A08B5836A6F :1011100043F040038362C36A43F00403C36203F0F5 :1011200049FF08BD002373B5019390F824300446AD :10113000012B6CD0012380F824304D680268062D05 :10114000086805EB850322D81F26556B053B9E409A :1011500025EA060500FA03F32B43536309288B683D :1011600000EB40054FF0070129D9D6681E3DA94084 :1011700026EA0101AB400B43D360A0F11003012B21 :1011800025D90020002384F8243002B070BD0C2D36 :101190004FF01F0509D8166B233B9D4026EA050535 :1011A00000FA03F32B431363D8E7D66A413B9D4013 :1011B00026EA050500FA03F32B43D362CEE7106954 :1011C000A94020EA0101AB400B431361D9E7114B61 :1011D0009A4216D193681B02D3D49368102843F423 :1011E00000039360CDD10C4B0C4A1B68B3FBF2F3A8 :1011F0000A2253430193019B002BC2D0019B013B68 :10120000F8E7A36A012043F02003A362BAE70220B3 :10121000BBE700BF00240140EC01002040420F006A :10122000002337B50193036804469A68D20702D5B4 :10123000002003B030BD9A6842F001029A60144B5E :10124000144A1B68B3FBF2F30193019BE3B9FFF768 :1012500017FF054623689B68DB07E9D4FFF710FFFB :10126000401B0228F6D923689B6813F00103F1D1D3 :10127000A26A012042F01002A262E26A84F82430DD :1012800042F00102E262D4E7019B013BDCE700BFD0 :10129000EC01002040420F0010B590F824300446C5 :1012A000012B54D0012380F82430FFF7B9FF002828 :1012B00049D1A36A274A23F4407323F0010343F47E :1012C0008073A3622368934204D123494A6812F4CD :1012D000702F2ED1A26A22F48012A2625A6852059F :1012E00041BFA26A22F4405242F48052A262A26A32 :1012F00012F480521CBFE26A22F00602E26200226F :1013000084F824206FF002021A609A6802F46022C6 :10131000B2F5602F13D10F4A934205D1A2F5806236 :10132000526812F4702F0AD19A6842F4A0029A60AF :1013300010BDA26A42F48012A2624A68CFE79A689E :1013400042F48012F3E7002384F82430F0E702200F :10135000EEE700BF002801400024014038B50368D3 :1013600004469A68D10701D4002038BD9A6822F05B :1013700001029A60FFF784FE054623689B68DB073D :10138000F2D5FFF77DFE401B0228F6D923689B6843 :10139000DA07F2D5A36A012043F01003A362E36ADF :1013A00043F00103E362E0E7F8B5044600286DD09E :1013B000836A23B9C36280F8243009F029FD2046EE :1013C000FFF7CCFFA36A13F0100361D100285FD1AF :1013D000A26A616822F4885222F0020242F00202FC :1013E000E569A668A262227B2943B6F5807F41EABF :1013F000420136D0771E7D427D412D02277D012F8F :1014000006D182BBA269013A45EA423242F4006544 :101410002268B6F5807F576827F4694745EA0705D3 :10142000556097681D4D05EA070545EA0105956079 :1014300001D0012E02D12369013B1B05D56A25F499 :1014400070052B43D3629268154B1340994213D118 :101450000023E362A36A23F0030343F00103A362C2 :10146000F8BD3546CAE7A26A42F02002A262E26AEB :1014700042F00102E262CBE7A36A23F0120343F0D9 :101480001003A362E36A43F00103E3620120E7E78C :10149000A36A43F01003A362F8E700BFFDF7E1FF82 :1014A000FE0E1FFF10B590F824300446012B11D01A :1014B000012380F82430FFF751FF38B9A36A23F4E1 :1014C000885323F0010343F00103A362002384F84F :1014D000243010BD0220FCE7002373B5019390F87F :1014E00024300446012B62D0012380F82430FFF71A :1014F00035FF2046FFF794FE054600282FD1A36A4A :10150000022023F4885323F0020343F00203A36272 :10151000284B1E6801F0C0FBB6FBF0F67600019682 :10152000019B03BB2268936843F008039360FFF7B5 :10153000A7FD064623689A68110718D49A6842F0F6 :1015400004029A60FFF79CFD064623689B685B07D0 :1015500023D4A36A23F0030343F00103A36200230F :1015600084F8243016E0019B013B0193D8E7FFF794 :1015700087FD801B0A28DDD923689B681807D9D509 :10158000A36A012523F0120343F01003A362002392 :1015900084F82430284602B070BDFFF771FD801B2F :1015A0000A28D2D923689B685A07CED5E8E70225D6 :1015B000F0E700BFEC0100202DE9B04104468DB0FA :1015C0000F4690460021302268460BF0FDFA94F851 :1015D0002430012B5BD001252E4B84F8245000933E :1015E0009B6803F46023B3F5602F07D0A36A43F030 :1015F0002003A362002384F8243044E02046FFF750 :101600000FFE05460028F5D16846FFF709FE05469E :101610000028EFD1A26A204B2168134043F4807365 :10162000A3624B683A465B054FF0000348BFA06ACF :1016300084F8243042BF20F4405040F48050A0622F :10164000E362206A154B4C318362154BC362154B24 :1016500003636FF0020341F84C3C51F8443C43F4FF :10166000807341F8443C434600F020F923689A68AF :1016700002F46022B2F5602F9A680CBF42F4A00217 :1016800042F480129A6028460DB0BDE8B081022570 :10169000F9E700BF00280140FEFCEFFFB110000891 :1016A000011100080B11000870B504468CB03022FF :1016B000002168460BF088FA94F82430012B30D0D2 :1016C0000126204684F82460FFF748FE054620BB2B :1016D000154B68460093FFF741FE48B184F824504B :1016E0003546A36A43F01003A36228460CB070BDD0 :1016F0002368206A9A6822F480729A605A6822F4F9 :1017000070225A6000F011F90546A36A23F4885349 :1017100023F0010343F00103A362002384F8243083 :10172000E3E70225E1E700BF0028014010B590F88B :1017300024300246012B1FD00123046880F8243096 :10174000A368DB0712D40D4B986810F001000DD18F :10175000A3F580639C4209D16368096823F4702370 :101760000B436360002382F8243010BD936A01208C :1017700043F020039362F5E70220F6E700280140DA :1017800007490302CA6803F4E06322F4E06212042A :10179000120C134343F0BF6343F40033CB60704734 :1017A00000ED00E0154B30B5DC68C4F30224C4F151 :1017B0000703251D042B28BF0423062D4FF0FF35FA :1017C00094BF0024033C05FA03F321EA0303A54078 :1017D00022EA0502A340002843EA0203ACBF00F15D :1017E0006040074A4FEA0313DBB2ABBF00F561402C :1017F00000F00F0080F80033135430BD00ED00E01E :1018000014ED00E0002807DB01234109034A00F042 :101810001F00834042F82130704700BF00E100E024 :101820000138B0F1807F0BD24FF0E023F021054A60 :10183000586182F823100020072298611A617047CE :101840000120704700ED00E0034610B540B31421BD :101850000068144A0244B2FBF1F292001A64124A80 :10186000DA63022283F82120D3E901242243DC68D1 :10187000016822431C6921F47F5122435C6921F0F5 :10188000300122439C692243DC6922430A430260FF :1018900000200122986383F8200083F8212010BDE6 :1018A0000120FCE7F8FFFDBF00000240F0B505464F :1018B00090F82000012836D0012085F8200095F806 :1018C000210000240128C6B24FF0020028D185F87B :1018D0002100AC632C68206820F001002060D5E96D :1018E0000F7006FA00F0786063606B68102BEB6A8B :1018F0000BBFA260A160E160E2604BB1236843F0DE :101900000E0300202360236843F001032360F0BD31 :10191000236823F004032360236843F00A03F0E7FD :1019200085F82040F3E70220F1E790F821200346F4 :10193000022A06D0042282630120002283F820209C :1019400070470268C06B116821F00E0111601168C8 :1019500021F00101116001211A6C01FA02F24260CA :10196000002083F82110E8E770B40425C66B026CF0 :101970003468036895402542196832D04D0730D548 :101980001A6896065EBF1A6822F004021A603E4A80 :10199000934219D01432934218D01432934217D084 :1019A0001432934217D01432934217D01432934218 :1019B0000CBF4FF480034FF08063344A5360C36A16 :1019C000002B5ED070BC18470423F6E74023F4E7F1 :1019D0004FF48063F1E74FF48043EEE74FF4802348 :1019E000EBE702259540254235D08D0733D51A689F :1019F000940606D41A6822F00A021A60012280F8BE :101A00002120214A934219D01432934218D0143223 :101A1000934217D01432934217D01432934217D006 :101A2000143293420CBF4FF400134FF00073174A67 :101A30005360002380F82030836AC1E70223F6E771 :101A40002023F4E74FF40073F1E74FF40053EEE77F :101A50004FF40033EBE708259540254211D00907E4 :101A60000FD5196821F00E011960012303FA02F263 :101A70007260836380F82130002380F82030036B8C :101A80009EE770BC704700BF0800024000000240A3 :101A90002DE9F74F00221646644F654BDFF894C1DD :101AA000DFF894E10D6835FA06F402D103B0BDE821 :101AB000F08F4FF0010808FA06F805EA080438EA42 :101AC00005057AD14D68032D07D8013D022D00F29E :101AD0008780DFE805F0959AA000122D00F098802D :101AE0006DD8112D00F08E80FF2C98BF82464FF0EC :101AF0000F0988BF00F1040A4FEA8605DAF8008072 :101B000088BF203D09FA05FB28EA0B0802FA05F513 :101B100048EA0505CAF80050D1F804A01AF0805F21 :101B20004BD0BD6926F0030845F00105BD61BD69D4 :101B300008F1804805F00105019508F5803806F0A8 :101B4000030B019D4FEA8B0BD8F8085009FA0BF9EB :101B500025EA0909394DA84261D005F58065A842FA :101B60005FD005F58065A8425DD005F58065A84287 :101B70000CBF0325042505FA0BF545EA0905C8F84D :101B800008509D681AF4801F14BF2543A5439D602B :101B9000DD681AF4001F14BF2543A543DD605D68AE :101BA0001AF4003F14BF2543A5435D601D681AF475 :101BB000803F14BF2543A5431D60013672E7DFF85F :101BC00080904D450CD017D8A9F580194D4507D008 :101BD00009F570294D4503D0A9F580194D4583D1EC :101BE0008A68D2B1012A08BFC0F810804FF00802FD :101BF00018BFC0F8148077E76545F1D07545EEE76A :101C0000CA6871E7CA6804326EE7CA6808326BE7CF :101C1000CA680C3268E7002266E7042264E7002500 :101C2000A9E70125A7E70225A5E700BF00100240AC :101C30000004014000003110000032100008014093 :101C4000000022108368194214BF01200020704751 :101C50000AB1016170470904FBE7016800224B6982 :101C600013F4806310D06FF480634B612023026310 :101C700080F83D3080F83E20036C80F83C2043F033 :101C80000403036401207047184670472DE9F846A5 :101C900006460F4691461D464FEA114A3368BAF18F :101CA000010F0CBF5C699C6927EA0404A4B2B4FA72 :101CB00084F46409A14501D0002025E06A1CEED01F :101CC000FFF7DEF9089BC01AA84201D8002DE5D124 :101CD0003368BAF1010F0CBF5B699B6927EA030304 :101CE0009BB2B3FA83F35B099945D7D10023202235 :101CF0000120336386F83D2086F83E30326C86F84A :101D00003C3042F020023264BDE8F8862DE9F04113 :101D100004460F46164698462568686927EA00007B :101D200080B2B8B16B695A0516D52B68202243F4EE :101D300000732B606FF480636B610023236384F86E :101D40003D2084F83E30226C42F0040201202264DF :101D500084F83C30BDE8F081731CDED0FFF790F9C9 :101D6000A0EB0800B04201D8002ED5D123685A69F3 :101D700027EA020292B2002ACED000232022236357 :101D800084F83D2084F83E30226C42F02002DDE7EA :101D900070B504460D46164623685B691B0601D5DF :101DA000002070BD2046FFF758FFC8B96A1CF3D069 :101DB000FFF766F9801BA84201D8002DECD12368FB :101DC0005B6913F08003E7D12022236384F83D2070 :101DD00084F83E30226C84F83C3042F020022264C9 :101DE0000120DEE72DE9F0431546026899461368A5 :101DF00085B043F480731360DDE90C780E463B46F2 :101E000000224FF00111CDF800800446FFF73EFF9D :101E1000236838B11B68DB0502D54FF400732364D7 :101E200003200AE006F0FE061E613A4643462046BD :101E30001749FFF76BFF18B1012005B0BDE8F0832B :101E4000236803905A69394603929B69424603937B :101E50002046039BFFF79CFF40B1236C042B01BF7E :101E60002268136843F400731360E5E7B9F1010FCA :101E7000236802D1EDB21D61DFE72A0A1A613946F3 :101E800042462046FFF784FF0028E6D12368F1E7A9 :101E9000020001002DE9FF479A46DDE90C7803684E :101EA00015461A680E4642F480621A601A684FF0AE :101EB000011142F480721A603B460022CDF8008086 :101EC0000446FFF7E3FE236848B11B68DB0502D533 :101ED0004FF400732364032004B0BDE8F0875FFA79 :101EE00086F906F0FE061E613A4643462046294919 :101EF000FFF70CFF08B10120EEE7236803905A6951 :101F0000394603929B69424603932046039BFFF7A1 :101F10003FFF40B1236C042B01BF2268136843F4D8 :101F200000731360E7E7BAF1010F23681AD1EDB22D :101F30004246394620461D61FFF72AFF0246002827 :101F4000E8D1216820460B6843F480730B603B4660 :101F50004FF00111CDF80080FFF798FE226860B1C4 :101F60001368B3E72A0A1A61394642462046FFF74A :101F70000FFF0028CED12368D9E749F00103136190 :101F8000204643463A460349FFF7C0FE003818BFD3 :101F90000120A1E70200010070B504460D46164677 :101FA00023685B695B0701D5002070BD2046FFF701 :101FB00054FEC8B96A1CF3D0FFF762F8801BA84230 :101FC00001D8002DECD123685B6913F00403E7D13D :101FD0002022236384F83D2084F83E30226C84F86C :101FE0003C3042F0200222640120DEE770B5044656 :101FF0000D46164621684B6913F0400301D00020BE :1020000010E04A69D2060ED56FF010024A61202214 :10201000236384F83D2084F83E30226C0120226442 :1020200084F83C3070BDFFF72BF8801BA84201D824 :10203000002DDFD123685B6913F04003DAD1202241 :10204000236384F83D2084F83E30226C42F0200265 :10205000E4E7000070B5044608B9012070BD90F8AF :102060003D3003F0FF021BB980F83C2008F03EFF32 :10207000242384F83D3023681A6822F001021A6094 :102080001A6842F400421A601A6822F400421A6088 :1020900000F068FD3F4B65689D4294BF3E4B3F4B4F :1020A00098428CBF00230123002BD6D1394E3C4BE4 :1020B000B542B0FBF3F388BF4FF4967622685168BF :1020C00021F03F0141EA030182BF73434FF47A7666 :1020D000B3FBF6F35160116A013321F03F010B436A :1020E0001362D169431E2B4821F44F41854221F0F0 :1020F000FF0132D86D00B3FBF5F340F6FC700133FD :10210000034242D0C3F30B031943D1611168D4E9F0 :10211000073021F0C00103430B4313609168D4E9F9 :10212000030321F40341034321F0FF010B439360B8 :10213000D168D4E9053021F0FF0103430B43D3609C :102140001368002043F0010313602023206484F807 :102150003D30206384F83E0080E7A06850B905EB6D :102160004505B3FBF5F30133C3F30B037BB143F434 :102170000043C9E719206843B3FBF0F30133C3F30D :102180000B0323B143F44043BEE70423BCE7012320 :10219000BAE700BFA08601007F841E00FF083D0053 :1021A00040420F002DE9F743044699460F469046FA :1021B0000C9EFEF765FF94F83D300546202B03D0BA :1021C000022003B0BDE8F0830090192301222046CD :1021D0003A49FFF75BFD0028F2D194F83C30012B1F :1021E000EED00123206884F83C3003684246D907CA :1021F00058BF036839465CBF43F0010303600368BE :1022000023F400630360212384F83D30402384F8E5 :102210003E30002323640A9B20466362BDF82C30C5 :10222000CDE900656385638D2385254BE3624B46CD :10223000FFF7D8FD00282AD00120C2E7FFF7A8FD4C :1022400040B1236C042B01BF2268136843F4007370 :102250001360F1E7636A27681A4612F8011B3961B7 :102260006262628D218D013A92B262857A69481E5E :1022700080B2520720850AD548B15A7802333A61B4 :102280006362638D0239013B9BB221856385238D97 :102290002A4631462046002BD0D1FFF77DFE00288C :1022A000CFD12268136843F400731360202384F8AD :1022B0003C0084F83D3084F83E0082E702001000C4 :1022C0000000FFFF2DE9F04399460023044689B042 :1022D00003930D469046129FFEF7D2FE94F83D30D0 :1022E0000646202B04D00225284609B0BDE8F0831D :1022F00000901923012220468D49FFF7C7FC0028D2 :10230000F1D194F83C30012BEDD00123206884F802 :102310003C3003682946DB0758BF036842465CBF70 :1023200043F001030360036823F400630360222386 :1023300084F83D30402384F83E3000232364109B12 :1023400020466362BDF84430CDE900766385638D35 :102350002385784BE3624B46FFF79CFD054608B1A9 :102360000125C1E7228D2368C2B904905A690492FD :102370009A690492049A1A6842F400721A60DFF8AB :10238000B881DFF8B891238D002B37D1202284F853 :102390003C3084F83D2084F83E30A5E7012A11D175 :1023A0001A6822F480621A6072B6236805905A692E :1023B00005929A690592059A1A6842F400721A60A9 :1023C00062B6DCE7022A1A680ED142F400621A6093 :1023D00072B6236806905A6906929A690692069A1E :1023E0001A6822F48062EAE742F480621A60079079 :1023F0005A6907929B690793079BC0E7032B78D81C :10240000012B15D1324639462046FFF7EFFD002853 :10241000A6D123681A69636A1A70636A013363621A :10242000238D013B2385638D013B9BB26385AAE726 :10243000022B4FF000023B4641462046009618D141 :10244000FFF724FC00288BD172B623681A6842F487 :1024500000721A601A69636A1A70636A01336362F0 :10246000238D013B2385638D013B9BB2638562B65F :10247000CFE7FFF70BFC00287FF472AF22681368E8 :1024800023F48063136072B646F2A81123681A69B8 :10249000636A1A70626A531C6362238D013B238551 :1024A000638D013B9BB26385D9F80030B3FBF1F338 :1024B00023214B430393039B013B0393039B6BB982 :1024C0002022236384F83D2084F83E30226C42F0C1 :1024D0002002226462B684F83C3041E723685969DF :1024E0004807E8D5196841F4007119601B695370F9 :1024F000B3E7324639462046FFF778FD00287FF4DF :102500002FAF23681A69636A1A70626A531C636288 :10251000238D013B2385638D013B9BB2638523683B :10252000596949077FF52FAF1B69537075E700BFE5 :10253000020010000000FFFF04000100EC01002079 :102540002DE9F04F044685B01F4688469246FEF7B7 :1025500097FD94F83D300546202B03D0022005B0AE :10256000BDE8F08F00901923012220464A49FFF769 :102570008DFB0028F2D194F83C30012BEED00123E2 :1025800084F83C30236800261A68DFF80CB1D207C3 :1025900058BF1A6808F0FE085CBF42F001021A60DA :1025A0001A6822F400621A60242384F83D303B4B01 :1025B0002664E36222684FF001111368204643F459 :1025C000807313603B4600220095FFF75FFB236892 :1025D00038B11B68DB0502D54FF400732364032078 :1025E000BDE7C3F81080FEF74BFD4FF0A00905468C :1025F00023685A695B69C2F34002C3F3802394F8ED :102600003D10A02901D013431DD04FF020092368AD :1026100084F83D905A6912F0020F1A6842F4007271 :102620001A6025D0002203925A69204603929B69C2 :1026300001220393039B184919230095FFF726FBFA :1026400088B101208BE7FEF71BFD401BB84200D884 :102650000FB984F83D9023685A695B69C2F3400260 :10266000C3F38023CBE784F83D9084F83C0076E701 :102670006FF4806259465A61204619230122009561 :10268000FFF704FB0028DCD10136564592D384F8CD :102690003D9084F83C00D4E7020010000000FFFFEA :1026A00090F83D00704700002DE9F341054638B32E :1026B0000368DB0710D42B689F075ED42B681907CB :1026C00000F195802B685A0700F1C180E869002865 :1026D00040F02C81002029E0904C636803F00C034B :1026E000042B07D0636803F00C03082B0AD163683E :1026F000DE0307D523689C03DDD56B68002BDAD198 :10270000012013E06B68B3F5803F12D1236843F4D6 :1027100080332360FEF7B4FC064623689803CAD4CE :10272000FEF7AEFC801B6428F7D9032002B0BDE899 :10273000F0819BB9236823F480332360236823F45A :1027400080232360FEF79CFC064623689903B2D5DC :10275000FEF796FC801B6428F7D9E6E7B3F5A02FB7 :10276000236803D143F480232360CFE723F480332D :102770002360236823F48023CBE7684C636813F05D :102780000C0F07D0636803F00C03082B10D16368AB :10279000DA030DD423689B0702D52B69012BAFD137 :1027A00023686A6923F0F80343EAC203236085E7DC :1027B0002A695B4B6AB101221A60FEF761FC06468A :1027C00023689F07ECD4FEF75BFC801B0228F7D937 :1027D000ABE71A60FEF754FC0646236898077FF5BE :1027E0006DAFFEF74DFC801B0228F6D99DE7AA6964 :1027F0004A4E4B4BE2B10122C3F88024FEF740FC65 :102800000446736A9B070DD54FF4FA52454B1B687B :10281000B3FBF2F3019300BF019B5A1E0192002B00 :10282000F9D14FE7FEF72CFC001B0228E9D97CE721 :10283000C3F88024FEF724FC0446736A9F077FF5E3 :1028400041AFFEF71DFC001B0228F6D96DE7334CA3 :10285000E369D80024D40127E36943F08053E3619E :10286000E36903F080530093009B2F4E3368D90532 :1028700018D5EB68012B26D1236A43F001032362AC :10288000FEF7FEFB41F288380646236A9B073FD5D8 :10289000002F3FF41BAFE36923F08053E36115E79A :1028A0000027E2E7336843F480733360FEF7E8FB08 :1028B00080463368DA05DCD4FEF7E2FBA0EB0800C3 :1028C0006428F6D931E7ABB9236A41F2883823F09E :1028D00001032362236A23F004032362FEF7D0FB83 :1028E0000646236A9807D3D5FEF7CAFB801B4045EE :1028F000F7D91AE7052B236A03D143F004032362B7 :10290000BAE723F001032362236A23F00403B6E746 :10291000FEF7B6FB801B4045B7D906E70010024022 :1029200000004242EC010020007000402A4C636825 :1029300003F00C03082B3ED00022284B02281A6615 :102940002CD1FEF79DFB06462368990120D42B6A03 :10295000B3F5803F05D16268A96822F400320A43CA :102960006260696A62680B4322F4741213430122A5 :1029700063601A4B1A66FEF783FB054623689A01CB :102980003FF5A8AEFEF77CFB401B0228F6D9CCE64B :10299000FEF776FB801B0228D6D9C6E6FEF770FB51 :1029A000054623689B017FF595AEFEF769FB401B4A :1029B0000228F6D9B9E601283FF4B8AE63682A6A5E :1029C00003F4803191427FF49BAE6A6A03F4701382 :1029D00093423FF47FAE93E6001002400000424273 :1029E0000D4A536803F00C01082912D10B48C3F3B8 :1029F0008341DB03405C09D55368094AC3F3404374 :102A00005043084AD35CB0FBF3F07047064B584381 :102A100070470348704700BF00100240A0D4000870 :102A200000127A00B0D4000800093D002DE9F04101 :102A30000D46044610B90120BDE8F081444A1368F0 :102A400003F007038B4228D321688E0730D4CA07CE :102A500043D43F4A136803F00703AB4265D82268AA :102A60003C4D12F0040F6CD1130706D56B68226938 :102A700023F4605343EAC2036B60FFF7B1FF6B6856 :102A8000354AC3F30313D35CD840344B1860344B3E :102A90001868FEF7B3FA0020CEE7136823F00703A7 :102AA0000B431360136803F007038B42C3D1CBE7DA :102AB000284B11F0040F1EBF5A6842F4E0625A60BE :102AC000080742BF5A6842F460525A605A68A068C8 :102AD00022F0F00202435A60B9E762681D4E012AF3 :102AE00033681AD113F4003FA5D0736841F28838D7 :102AF00023F0030313437360FEF7C2FA07467368BB :102B0000626803F00C03B3EB820FA2D0FEF7B8FAB1 :102B1000C01B4045F3D903208EE7022A02D113F0EF :102B2000007FE1E713F0020FDEE7136823F00703ED :102B30002B431360136803F00703AB427FF47BAFB2 :102B40008DE76B68E16823F4E0630B436B608BE710 :102B5000002002400010024034DD0008EC0100209B :102B600004000020044B054A5B68C3F30223D35CD6 :102B7000034A1068D84070470010024044DD000846 :102B8000EC010020044B054A5B68C3F3C223D35C0D :102B9000034A1068D84070470010024044DD000826 :102BA000EC01002003682DE9F341D907054621D542 :102BB000364CE369DA0033D40126E36943F08053ED :102BC000E361E36903F080530193019B304F3B685D :102BD000DB0527D5236A6A6813F4407336D1236A6C :102BE0006A6823F44073134323621EB1E36923F040 :102BF0008053E3612868830706D52449AB684A6897 :102C000022F440421A434A6010F010001BD01F4AC1 :102C1000E9685368002023F480030B43536012E0FB :102C20000026D3E73B6843F480733B60FEF728FA45 :102C300080463B68D805CDD4FEF722FAA0EB080009 :102C40006428F6D9032002B0BDE8F08102F4407296 :102C50009A42C4D001200F4A236AC2F840040020DF :102C600023F44071C2F840042162D907B7D5FEF7BA :102C700007FA41F288380746236A9A07AFD4FEF76D :102C8000FFF9C01B4045F7D9DCE700BF0010024048 :102C90000070004000004242022808B544D01028CD :102CA00003D0012822D0002034E0254B5A68186850 :102CB00010F080702ED0C2F383412248D20348BF67 :102CC0005A68405C41BF2049C2F34042895C1F4AB8 :102CD0005B684CBFB2FBF1F21D4A5B0202FB00F0E5 :102CE00018D403234000B0FBF3F013E040F20231AC :102CF000134A136A1940B1F5817F1ED003F4407363 :102D0000B3F5007F07D149F64043506A10F0020046 :102D100018BF184608BDB3F5407FC4D110684FF204 :102D2000244310F40030F3E7FFF72CFF044B5B68FB :102D3000C3F3813301335B00D5E74FF40040E9E78B :102D400000100240B2D40008C2D4000800127A0079 :102D500000093D002DE9F3411C4616460F46054685 :102D6000FEF78EF93444241AFEF78AF98046234B85 :102D70001B68C3F3CB3363432A680193936837EA34 :102D8000030301D000202EE0731CF7D0FEF778F982 :102D9000A0EB0800A04229D32B685A6822F0E00279 :102DA0005A606A68B2F5827F0AD1AA68B2F5004F0C :102DB00002D0B2F5806F03D11A6822F040021A6087 :102DC000AA6AB2F5005F07D11A6822F400521A60AD :102DD0001A6842F400521A60012385F8513000232A :102DE000032085F8503002B0BDE8F081019B002B34 :102DF000019B08BF0024013BBEE700BFEC0100209F :102E000010B513460A4680210446FFF7A3FF20B100 :102E10000320636D43F02003636510BD10B50446C5 :102E2000002851D0436A002B4AD14268B2F5827F14 :102E300000D0C3610023A36294F8513003F0FF0275 :102E400023B9204684F8502008F082F80223226833 :102E500084F851301368A06823F04003136063685E :102E600000F4044003F482730343E068A16900F4B2 :102E700000600343206900F002000343606900F032 :102E80000100034301F400700343E069090C00F002 :102E900038000343206A01F0040100F0800003437E :102EA000A06A00F40050034313605160D36900200E :102EB00023F40063D3610123606584F8513010BDB1 :102EC0000023C0E90433B5E70120F8E72DE9F34713 :102ED0001F4690F850300446012B0D46904600F0F6 :102EE000A680012380F85030FEF7CAF894F85130DC :102EF0008246012B5FFA83F940F09680002D67D05F :102F0000B8F1000F64D0032384F8513000236365C7 :102F1000C4E91033A4F83680A363A387E387A368CA :102F20002668B3F5004F2563A4F8348007D13368D1 :102F300023F040033360336843F4804333603368E5 :102F400062685B065EBF336843F040033360E3684A :102F5000B3F5006F43D112B1B8F1010F07D135F8C5 :102F6000023BF3602563E38E013B9BB2E386E38E75 :102F70009BB2B3B9524639462046FFF741FF0028BD :102F80004FD1A36833B901932368DA6801929B6833 :102F90000193019B636DDBB90122994684F85120AE :102FA00016E022689368980705D5236B33F8021B57 :102FB000D1602363D7E7FEF763F8A0EB0A00B842BD :102FC000D5D3791CD3D001234FF0030984F85130B5 :102FD000002384F85030484602B0BDE8F08712B1B3 :102FE000B8F1010F08D12B783373236B01332363BE :102FF000E38E013B9BB2E386E38E9BB2002BB9D0FC :1030000023689A68920703D5226B12781A73ECE74B :10301000FEF736F8A0EB0A00B842EDD37B1CEBD0EC :10302000D1E720236365ACE74FF00209D0E74FF00A :103030000209D0E790F8510070470000036A026A65 :1030400070B522F001020262446882690D6822F0C4 :1030500073022A438D6823F002032B430A4DA842D2 :103060000BD1CD6823F008032B4324F44074D1E93D :103070000556354323F004032C43446082614A68BB :103080004263036270BD00BF002C0140036A026A04 :1030900070B522F4807202624468C2690D6822F041 :1030A00073022A438D6823F4007343EA05230B4D12 :1030B000A8420DD1CD6823F4006343EA052324F42C :1030C0004054D1E90556354323F4806344EA05149E :1030D0004460C2614A68C263036270BD002C014053 :1030E000036A026A30B522F4805202624468C269FF :1030F0000D6822F4E64242EA05228D6823F400536B :1031000043EA0533064DA84202BF4D6924F48044CA :1031100044EA85144460C2614A680264036230BDB7 :10312000002C0140704770477047704770477047E8 :10313000036810B51A69044691070ED5DA6892073C :103140000BD56FF002021A61012202779B699B077F :1031500077D0FFF7EAFF0023237723681A69500727 :1031600010D5DA6851070DD56FF004021A610222FA :1031700022779B69204613F4407F68D0FFF7D5FF84 :103180000023237723681A6912070FD5DA6810071E :103190000CD56FF008021A6104222277DB69204601 :1031A00099075AD0FFF7C1FF0023237723681A69D4 :1031B000D20610D5DA68D0060DD56FF010021A616C :1031C00008222277DB69204613F4407F4BD0FFF7BB :1031D000ACFF0023237723681A69D10708D5DA6882 :1031E000D20705D56FF0010220461A61FFF79CFF58 :1031F00023681A69100608D5DA68110605D56FF03C :10320000800220461A6100F05AFB23681A695206B0 :1032100008D5DA68500605D56FF0400220461A61DD :10322000FFF785FF23681A69910622D5DA689206AE :103230001FD56FF020022046BDE810401A6100F053 :103240003DBB01F0B9FD2046FFF770FF83E701F0B9 :10325000B3FD2046FFF76AFF92E701F0ADFD20467F :10326000FFF764FFA0E701F0A7FD2046FFF75EFF30 :10327000AFE710BD1A4A036890420AD0B0F1804F00 :1032800007D0A2F59432904203D002F580629042BA :1032900015D14A6823F070031343114A90420AD0B3 :1032A000B0F1804F07D0A2F59432904203D002F5DE :1032B0008062904203D1CA6823F4407313434A6981 :1032C00023F08003134303608B68C3620B6883623F :1032D000034B984204BF0B690363012343617047AA :1032E000002C014010B5044630B390F83D3003F097 :1032F000FF021BB980F83C2007F05CFE0223206827 :1033000084F83D30211DFFF7B5FF0123002084F82C :10331000463084F83E3084F83F3084F8403084F8FA :10332000413084F8423084F8433084F8443084F8E3 :10333000453084F83D3010BD0120FCE710B504464F :1033400030B390F83D3003F0FF021BB980F83C2009 :10335000FFF7E8FE0223206884F83D30211DFFF7C7 :1033600089FF0123002084F8463084F83E3084F839 :103370003F3084F8403084F8413084F8423084F89B :10338000433084F8443084F8453084F83D3010BD33 :103390000120FCE710B5044630B390F83D3003F04F :1033A000FF021BB980F83C20FFF7BDFE0223206816 :1033B00084F83D30211DFFF75DFF0123002084F8D4 :1033C000463084F83E3084F83F3084F8403084F84A :1033D000413084F8423084F8433084F8443084F833 :1033E000453084F83D3010BD0120FCE7036A026AD5 :1033F00070B522F010020262446882690D6822F4FE :10340000E64242EA05228D6823F0200343EA0513D1 :103410000B4DA8420DD1CD6823F0800343EA05137C :1034200024F44064D1E90556354323F0400344EACF :103430008504446082614A688263036270BD00BF94 :10344000002C014038B590F83C300546012B1DD0CA :10345000082A17D007D862B1042A0FD00120002310 :1034600085F83C3038BD0C2AF8D10068FFF738FEEB :1034700002E00068FFF7E2FD0020F0E70068FFF7D8 :10348000B5FFF9E70068FFF701FEF5E70220E9E77D :1034900070B590F83C300546012B50D00123082A26 :1034A00080F83C303BD007D8C2B1042A27D0184658 :1034B000002385F83C3070BD0C2AF8D10068FFF776 :1034C0000FFEC3690A6943F40063C361C36923F44F :1034D0008063C361C36943EA02232EE00068FFF7FB :1034E000ADFD83690A6943F008038361836923F0B2 :1034F000040383618369134383610020D8E7006874 :10350000FFF774FF83690A6943F400638361836989 :1035100023F480638361836943EA0223ECE7006854 :10352000FFF7B4FDC3690A6943F00803C361C369C7 :1035300023F00403C361C3691343C361DDE70220C1 :10354000B9E710B584680A4324F47F4442EA0322B1 :103550002243826010BD38B590F83C300446012B00 :103560004FF0020000F08E80012284F83D002068B8 :1035700084F83C20836823F47F4323F0770383603F :103580000B68602B4FD032D8402B64D016D8202B3C :103590000DD00AD833F0100109D0012384F83D3052 :1035A000002384F83C30104638BD302BF5D18268BA :1035B00022F07002134343F0070328E0502BECD1B4 :1035C0004A68CD68016A036A21F00A0123F0010309 :1035D000036283690A4323F0F00343EA051383611E :1035E0000262836823F0700343F057030FE0B3F5E2 :1035F000805F0DD0B3F5005F0CD0702BCDD1CB68C0 :10360000D1E90121FFF79DFF836843F077038360D1 :103610000022C2E7CB68D1E90121FFF792FF83685E :1036200043F48043F3E7036A026A4D6822F0100214 :10363000C9680262826923F0A00322F4704243EA5F :10364000051342EA013282610362836823F070034A :1036500043F06703DBE74A68CD68016A036A21F03B :103660000A0123F00103036283690A4323F0F00394 :1036700043EA051383610262836823F0700343F019 :103680004703C4E702468EE710B50124036A01F040 :103690001F018C4023EA04030362036A8A401A4331 :1036A000026210BD08B529B990F83E30012B21D037 :1036B000012008BD042907D190F83F30012BF7D134 :1036C000022380F83F3018E0082907D190F84030F5 :1036D000012BEDD1022380F840300EE090F841300C :1036E000012BE5D10429EBD00829F3D0022380F87F :1036F000413002E0022380F83E3000680122FFF7EB :10370000C3FF0E4B98420AD1436C43F40043436419 :10371000836803F00703062B0BD10020C9E7B0F143 :10372000804FF5D0064B9842F2D003F58063984263 :10373000EED0036843F001030360EEE7002C014084 :1037400000040040FFF7AEBF08B5034629B990F862 :103750003E20012A30D0012008BD04290BD190F869 :103760003F20012AF7D10222186883F83F20C2685F :1037700042F0040227E008290BD190F84020012AEA :10378000E9D10222186883F84020C26842F008029A :1037900019E090F84120012AD0B2DCD10429E2D00E :1037A0000829EED002220C2983F84120D4D11868D0 :1037B000C26842F0100206E0022280F83E20006853 :1037C000C26842F00202C26018680122FFF75CFF83 :1037D0000E4B98420AD1436C43F400434364836820 :1037E00003F00703062B0BD10020B5E7B0F1804FA3 :1037F000F5D0074B9842F2D003F580639842EED0A3 :10380000036843F001030360EEE700BF002C0140B2 :103810000004004030B590F83C300246012B4FF0D8 :10382000020022D0136882F83D005C680D6824F025 :1038300070042C4398685C600C4CA3420AD0B3F12E :10384000804F07D0A4F59434A34203D004F58064DC :10385000A34204D1496820F080000143996001230C :10386000002082F83D3082F83C0030BD002C014041 :1038700090F83C300246012B1ED0CB68886823F4B8 :1038800040730343486823F480630343086823F4C8 :1038900000630343086923F480530343486923F416 :1038A000005303430020C96923F480430B4311688C :1038B0004B6482F83C0070470220704770477047A5 :1038C000012300220370014B1A6470470008004076 :1038D00010B5054C4B1E4908E36210462164FDF704 :1038E000D5FB0023236410BD00080040037823B1FA :1038F000A0224FF48E71FFF7EBBF7047037810B52D :1039000004467BB1A0224FF48E71FFF7E1FF6420E3 :10391000FDF7BCFB2046BDE81040A0224FF48E719D :10392000FFF7D6BF10BD037823B1A02240F61831AF :10393000FFF7CEBF7047037810B50446C3B1A0228D :103940004FF48E71FFF7C4FF3220FDF79FFB3C223E :1039500040F618312046FFF7BBFF3220FDF796FBFB :103960002046BDE81040A02240F28C51FFF7B0BFC6 :1039700010BD90F88C3013B990F8510070470020BA :10398000704790F88C3073B504460D46D3B1B0F84B :10399000966032462946B4F84C0007F047FC0A22EC :1039A00094F88C30A4F84C0002FB0344B4F8743053 :1039B000324600932946002380B207F009FC80B20A :1039C00002B070BDB0F88E60E3E71FB54FF6FF732D :1039D000144643850A46694602F0DDFF58B904F1F2 :1039E000080302AA0D3412F8010F13F8011F8842D0 :1039F00004D1A342F7D1012004B010BD0020FBE7A1 :103A00002DE9F04304460026012785B000F1340873 :103A1000404603F01DFEF5B2854224DAD4F8A0300A :103A20004FEA450903EB450213F81530FF2B01D18E :103A30000136EDE7537803F00303032BF8D12A4650 :103A40006946204602F0A7FF0028F1D1D4F8A03043 :103A50008DF808704B442A46694620465F7002F094 :103A6000D1FF0028E4D005B0BDE8F0832DE9F04394 :103A7000002406460D464FF0FF08A14685B000F130 :103A80003407384603F0E4FD631CE4B284420BDBE8 :103A90004FF000084446304602F03AFE40450BDC49 :103AA000E0B205B0BDE8F08305EB440205F81480F0 :103AB0001C4682F80190E4E75FFA88F94A466946B5 :103AC000304602F068FF20B10128E9D008F1010872 :103AD000E1E738460DF1090103F0C6FD031EF5DBF1 :103AE0009DF80820002AF1D015F8130005EB4301DA :103AF000FF2802BF05F8139001344A70E6E7000082 :103B000070B534300C461146164603F0A3FD054649 :103B1000C0B116B103784E2B08D1052229462046A4 :103B200009F06CF800236371204670BD08492046F7 :103B300009F0B4F805222946201D09F05FF800239A :103B40006372F1E72046034909F0A8F8ECE700BFEB :103B5000C4D40008C9D4000890F88C3023B990F878 :103B600051200249FFF7CCBF0022FAE76002002093 :103B70002DE9F84F1446D0F8A02080460E461F4687 :103B80009DF828906AB911460C20023403E000FB2E :103B900002F30132E154D3B29F42F8D80020BDE8CD :103BA000F88F4B1E0132002B01DC002513E0590079 :103BB000B9F1000F03D012F81300C0071FD5DAB215 :103BC0002270D8F8A03040460B445B78A11C63708B :103BD000FFF796FF01254FF00C0B08F1340A504611 :103BE00003F036FD86420CDB0C23002203FB054468 :103BF0002B46BB4204F10C0423D32846CFE7013BFC :103C0000D1E7DEB17200B9F1000F05D0D8F8A030CD :103C100013445B78DB0711D50BFB05F3E654E11881 :103C2000D8F8A030013513445B7832464B704046DB :103C30000231EDB2FFF764FFBD42DED20136F6B2CB :103C4000CDE7013304F80A2CDBB2D2E7C288C38C7B :103C50009A422BD10289038D9A4227D14289438D02 :103C60009A4223D1028B038F9A421FD1827E90F811 :103C70003A309A421AD1427F90F83D309A4215D19B :103C8000827F90F83E309A4210D1C27F90F83F3048 :103C90009A420BD1C27E90F83B309A4206D1037F04 :103CA00090F83C209B1A58425841704700207047BA :103CB0002DE9F0410546002600F13408284602F0BF :103CC00027FDF4B2844211DB0026404603F0C0FC1D :103CD000F4B2844214DBFF240FE0D5F8A0200137B2 :103CE00012F81330A34202D10136E7E7002740461D :103CF00003F0AEFCFBB28342EFDB2046BDE8F0816F :103D0000D5F8A030610003EB440213F81430FF2B08 :103D10000AD0537813F0010306D1FF201070D5F8B4 :103D2000A0200A445370E8E70136CEE7F0B5D0F89A :103D3000A03004460D4685B013B9002005B0F0BD93 :103D400013F811604F00FF2E2DD1FFF7B1FFFF28B0 :103D50000646F2D0294604F1340003F07BFC01460C :103D60000028EAD005220DF1090008F047FF0123E1 :103D70003246694620468DF8083002F043FE00289E :103D8000DBD16A4631462046FFF71FFE0028D4D01B :103D9000D4F8A03003F81560D4F8A0309DF80820BE :103DA0003B445A70CAE73246694602F0F4FD0028E7 :103DB000C3D19DF80830324683F00103694620469E :103DC0008DF8083002F01EFE0028B6D1D4F8A030DD :103DD0009DF808203B4401205A70AFE7EB234FF4D5 :103DE000A02C064AC380064B0649C0E90223064BB5 :103DF000C0E90413054BC0E906C370472C01B004A9 :103E0000FC083200DF02C8004000C30000010003CC :103E100010B5044602F02DFD04F13400FFF7DEFF7B :103E20000146204602F06BFD2046BDE81040FFF73A :103E3000E7BD0000F8B5CB7F0746DA070C46CE8811 :103E40000D8907D430B207F002FA86B228B207F023 :103E5000FEF985B2194B30461A88194B198807F0BC :103E6000E5F9184B06461A88174B2846198807F0BB :103E7000DDF9E37F0546DB0717D5B6B285B2A37F30 :103E800025811E2B88BF1E23384688BFA377E68076 :103E9000657F03F0DDFB8542C4BF01236377E37ECA :103EA0003C2B84BF3C23E376F8BD30B207F0C7F962 :103EB00086B228B207F0C3F985B2E0E758DD000802 :103EC0005ADD000850DD000852DD00082DE9F047FA :103ED0001D4691469DF83820C37FC276BDF830203C :103EE00003F0010302839DF83420AB4204469DF8A1 :103EF00020A09DF824809DF828709DF82C60817783 :103F000082760AD0B0F906002DB307F0A0F9E08060 :103F1000B4F9080007F09BF92081B9F1000F22D114 :103F2000E577BAF1000F03D0E37F43F00403E377B2 :103F3000B8F1000F03D0E37F43F00803E3771FB12C :103F4000E37F63F07F03E3771EB1E37F43F0100369 :103F5000E377BDE8F08707F072F9E080B4F9080074 :103F600007F06DF9D8E745F00205D9E7C180704741 :103F700001814281704700F120031A4650F8041B6A :103F8000984242F8041BF9D1704738B500F1340566 :103F900004462846FFF75AFE40B92946204602F05B :103FA000AEFC2846BDE83840FFF7E5BF38BD38B560 :103FB0000D888C880B897AB1A0F84050A0F8424057 :103FC000A0F8443000F13404214602F098FC204669 :103FD000BDE83840FFF7CFBFA0F84650A0F84840F2 :103FE000A0F84A30EEE700F1200300F1400253F858 :103FF000041B934240F8041BF9D17047007F00096D :1040000000EB80007047007F00F00F00013000EBF4 :104010008000800070474B2928BF4B21052A38BFFC :104020000522B2F5A07F28BF4FF4A072531E1422C0 :10403000B3FBF2F305220431C9B2B1FBF2F143EA5A :1040400001130377704710B5044632B10B8ACA8951 :10405000898906F039FD204610BDCB8A8A8A498AB3 :10406000F7E710B504463AB1C8230A2240F23F21CF :1040700006F02AFD204610BD32231E22C821F7E794 :104080000A235A4310B50C88831884524A885A80F0 :104090008A889A80CA88DA800A7A1A7291F90E2080 :1040A0005A7210BD39B1064B1B888382054B1B88A1 :1040B0000176C3827047044B1B888382034BF6E76B :1040C00052DD000850DD00085ADD000858DD000808 :1040D00003290DD82AB1022A06D000EB4100408BFB :1040E0007047037E002BF8D000EB4100408C7047F6 :1040F000002070472DE9F04F04460D461646007E1D :1041000085B07BB907460A227A43A118A25A91F9D1 :104110000980AA42A6EB08081CD93BB1022B07D0A4 :10412000638B06E09A1E57425741ECE70028F7D010 :10413000638C4344009300213346284607F048F837 :1041400000B240F2E732314607F070F880B205B0B5 :10415000BDE8F08FCA88B1F802A0AA422AD355451B :1041600022D3B1F804A0554521D3AA4235D99246AD :104170004FF0030909F1FF311A46C9B22046FFF793 :10418000A7FF494600EB080320460393FFF7A0FF73 :1041900007EB870709F1FF3B5F4440445246039B0E :1041A00034F817100090C8E74FF00109E2E74FF02C :1041B0000209DFE723B1022B04D00021A38B03E027 :1041C0000028FAD00121A38C434421B1218D414420 :1041D00000915146B1E7218CF9E70020B1E710B515 :1041E00004467430FFF786FF94F85330DB0703D49E :1041F00000B207F024F880B210BD00002DE9F347AB :1042000017460A2290F88C30054602FB030292F909 :104210007D4088463C1B002B64D0B0F89660A4B269 :104220002644B6B2002B60D0B5F89C301C4495F8FB :104230005330B5F88890DB07B5F88AA0A4B213D440 :1042400030B206F0FCFF86B220B206F0F8FF84B26E :104250000FFA89F006F0F3FF1FFA80F90FFA8AF0DF :1042600006F0EDFF1FFA80FA52464946404606F036 :10427000DDFF264B95F88C20B3F800A00A2303FB42 :104280000252B2F87430B2F87A201FFA80F931463F :1042900000924846224606F09BFF14264FF0000885 :1042A00084B2B4EB5A0F4FEAAA03CCBFE41AE41865 :1042B000A4B200233A4621462846FFF790FF8145E5 :1042C00022D017D90AEB0400C0F34F00A04201D15D :1042D000601C80B2A046013E16F0FF0608D102B075 :1042E000BDE8F087B0F88E6099E7B5F894309DE7A7 :1042F0000446DEE708EB0400C0F34F00A04201D102 :10430000631E98B2A246E6E72046E8E756DD0008BD :104310000A22037E5343C218C35A0B8053884B8032 :1043200093888B80D388CB80704700000A2330B5F8 :10433000047E0D885C43055303194888588088889B :104340009880C9885A7203221A72034A12889142CD :1043500028BF1146D98030BD56DD00080A234FF42E :104360002A72594342524FF4717243185A8040F2F4 :104370000A529A804FF4C862DA80034A12785A725D :1043800001221A72704700BF4DDD0008017EFFF761 :10439000E5BF4A880B88934208D28B889A4205D29F :1043A000C888984294BF00200120704700207047C1 :1043B0007FB5D0F8A04006466CB1B1FA81F514F88B :1043C00011207436FF2A4FEA551507D12946304689 :1043D000FFF7C4FF0024204604B070BD694602F018 :1043E000DAFA0028F2D19DF808309B0705D4294657 :1043F0003046FFF7B3FF0124EDE769463046FFF78B :10440000C8FF04460028F2D02A463046FFF738FE9F :10441000E1E7F8B5054600F174070021384605F1DB :104420003406FFF73FFE304603F012F9400008F073 :10443000EFFAC5F8A000284602F0D1F9044628B3E7 :10444000D5F8A010E1B12846FFF710FB044631462D :10445000284602F037FAA8B131463046FFF7EAFCA9 :1044600000212846FFF7A4FF95F851102846FFF7D2 :104470009FFF3046FFF77FFDB4FA84F04009F8BD96 :104480000C46E4E73046FFF7A9FCE9E73046FFF7C2 :10449000A5FC21463846FFF761FF01212846FFF7BA :1044A00087FF3046FFF767FD0220E8E738B504468E :1044B0000D46FFF77DFF30B1204684F85150BDE82E :1044C0003840FFF762BD38BD2DE9FF411E46138815 :1044D0008DF80860ADF8003053880446ADF802301E :1044E00093883430ADF80430D3880D46ADF80630EB :1044F0009DF928304FEA41088DF80E30C36E03EB6A :1045000041035E7003F0A6F8074688B3694604F1DC :104510007400FFF73EFF58B3394605220DF109003C :1045200008F06CFBD4F8A03004F19E0713F81530A6 :10453000FF2B10D12046FFF7BBFBFF2803D13846E5 :10454000FFF7F9F914E0D4F8A03003F81500D4F817 :10455000A03043445E70D4F8A0306946204613F87A :10456000152002F04FFA0028E9D13846FFF7BEF9CE :1045700004B0BDE8F081704700207047704710B567 :104580000446242108F086F8204610BD38B50B4DAE :1045900004462B783BB100234FF08042536302F571 :1045A0009632136438BD0648FCF776FE08220549AA :1045B0000548FDF701F82C70F4E700BF400B002020 :1045C0006C0D0020A00300203C0D002000221421CF :1045D000C0E901120A21C0E90411C0E90621052140 :1045E00001620B218184012180F82610254980F881 :1045F0006A20097880F8682080F8691080F8AE2079 :1046000080F8AC2080F8AD1080F8F22080F8F0201F :1046100080F8F1101C49A0F8F42030B5A0F8F6207D :104620004FF0C875A0F8F8204FF4FA74A0F8FA20FB :10463000C26080F8FC20C0F8002180F8042180F8D6 :104640000521A0F80621A0F80821A0F80A210160A0 :104650000821C0F8145180F80C11A0F81841C0F8D6 :104660001021C0F8245180F80C11A0F82841C0F89E :10467000102180F81C11C0F8202180F81C11C0F80E :10468000202130BD4CDD000810D500084FF6FF7327 :104690002DE9F34143854FF0401300250446A02740 :1046A000984A994EC0E90B23984B05710360336813 :1046B000C580C0F88E3073680581C0F89230B36849 :1046C000A0F88850C0F89630F368A0F88A5080F8B7 :1046D0008C50C0F89A309E30FFF7F2F88C4B04F102 :1046E000A400C4F82C31C4F8A050A4F8305107F04D :1046F0001DFE29462822C4F83251C4F83651C4F8A8 :104700003A51C4F83E51A4F8425104F5A27008F0A1 :104710005BFA29461922C4F86C5104F5B87008F008 :1047200053FA3A462946A4F8895184F88B5104F586 :10473000C67008F049FA3A46294604F50B7008F0AD :1047400043FA3369A4F8CC52C4F8CE32B38A04F5E4 :104750003570A4F8D232FFF739FF6E4B0826C4F843 :10476000D4326D4B4FF06408C4F83C34142384F801 :1047700040346A4B84F80654C4F8005484F8075453 :10478000A4F80454A4F8085484F80C64C4F8105431 :1047900084F80C64C4F8105484F81464C4F81854F1 :1047A00084F81464C4F8185484F81C64C4F82054C1 :1047B00084F81C64C4F8205484F82464C4F8285491 :1047C00084F82464C4F8285484F82C64C4F8305461 :1047D00084F82C64C4F8305484F83464C4F8385431 :1047E00084F83464C4F83854A4F84284C4F84434D7 :1047F0004B4B0127C4F8483440F21453A4F84C340E :10480000022384F84E3440F63C734FF4007245495D :10481000A4F85434C4F85084434B009704F58B60DB :1048200002F02EF904F59460FFF7D0FE3F4B84F8B8 :10483000CC55C4F8A0343E4B84F8DC651B78C4F832 :10484000E05584F8DC35C4F8E05584F8E465C4F834 :10485000E85584F8E43546F24633A4F80636354B7D :10486000C4F8E855C4F80836334B84F8EC6584F88E :10487000CD55C4F8F055A4F8CE5584F8EC6584F80D :10488000D075C4F8F055A4F8D25584F8F465A4F8AE :10489000D455C4F8F855C4F8D85584F8F465C4F86C :1048A000F85584F8FC65C4F8005684F8FC65C4F833 :1048B0000056A4F80456C4F80C36204BA4F8108611 :1048C000C4F814364EF66023C4F818361C4BC4F8EE :1048D0002476C4F81C3643F61E43A4F820360A2377 :1048E00084F82236174B04F22C60C4F82836FEF701 :1048F000E7FF2046C4F83056A4F8345602B0BDE8AD :10490000F08100BF8000500008D40008E00D0020B6 :104910001DC30008B0D90008CF07E8030A08F40156 :10492000E803030E00080140000C014070D90008A4 :1049300054DD00085802CF0740062003407E0500E2 :10494000F401E803E0930400064A8160026001225A :1049500002710022C0E90422C0E9062282810262BB :10496000704700BF50D50008014B1878704700BF52 :10497000140B002070B5FCF783FB1B4B00F59675FC :104980005B6A9BB29C1CA4B2632C01D9613B9CB2B4 :10499000154EFCF775FBA84206D2736AA342F8D104 :1049A0004FF0804300225A62FCF76AFB0E4B00F581 :1049B00096755B6A9BB29C1CA4B2632C01D9613BC7 :1049C0009CB2094EFCF75CFBA84204D34FF0804335 :1049D000D86A013005E0736AA342F3D14FF08043F7 :1049E000586A80B270BD00BF002C014010B5037939 :1049F000044633B1FCF744FB4EF66022237902FBF8 :104A0000030323600023637110BD026810B543796E :104A100004463AB133B9FCF733FB2368984224BF0C :104A200001236371607910BD2DE9F041044686B021 :104A3000A43000F017FC04F5357002F083FC04F597 :104A4000946002F019FA02221B4904F58B6002F00F :104A500049F82046FFF7DDFC6D46074604F13408AF :104A6000012241462846FFF7EEFA03AE294604F537 :104A7000367006F02EF8414630460022FFF7E3FA82 :104A800096E8070085E80700294604F2A44006F0EE :104A900020F894F8533004F5C660C3F3400384F85B :104AA0002C3694F84F3084F83436FFF79FFF3846A1 :104AB00006B0BDE8F08100BF000C01402DE9F047D1 :104AC0005D4F5E4C3846FFF7AFFF06465C48FCF78B :104AD00003FD5C48FCF700FD0C215B48FEF732FE4D :104AE00008215948FEF730FE00215848FEF72AFEFB :104AF00004215648FEF726FE08215448544DFEF77F :104B000023FE0C215148FEF71FFE0C215148FEF7F1 :104B100019FEDFF844A120462A46504B504904F0C4 :104B20005EFD2246214628464E4B04F058FDDFF834 :104B3000388121462B462A46504604F050FD2B462C :104B40002A462946474804F04AFD21464246434B3F :104B5000434804F044FD2246214640463F4B04F0C2 :104B60003EFD234622462146404804F038FD2346B8 :104B700022463F493F4804F032FDDFF8FC902346CF :104B8000224621463A4804F02AFD23462246214681 :104B90003A4804F024FD234622462146484604F0C4 :104BA0001EFD2E4A23461146354804F018FD2346C3 :104BB00022462146334804F012FD23462246274967 :104BC000314804F00CFD234622462146234804F0D8 :104BD00006FD224621462D4B2D4804F000FD2346BC :104BE00022462146294804F0FAFC2A4B012EC3E94B :104BF0000B456362C5E9093A274C07D0022E13D052 :104C000097F85330DB0648BF256001E0C4F8008008 :104C1000FFF7B0FE4FF47A70FCF738FA2068BDE871 :104C2000F04703681B6818471C4907F1A40001F00E :104C30009DFCC4F80090EBE7C00300206C0300204B :104C40003C0D00206C0D00208C0E0020D40E0020A6 :104C5000E40C00201C0F00200C0C0020380C00205D :104C6000C40A00206C0A0020180B00206C020020EF :104C7000BC02002034030020F80900201C0A002098 :104C8000FC0200208C0B0020440B0020940A002022 :104C9000480A0020C00B00200C000020D1D40008DE :104CA00070B5FCF7EDF9364C236898421AD9FCF739 :104CB000E7F96430082120603248FCF7C3FF01287F :104CC0000CBF64210021304806F05CF84FF480717D :104CD0002E48FCF7B7FF01280CBF642100212C48A7 :104CE00006F050F82B4D286804F07DFC0446A0B176 :104CF0002B68834211D02848FEF700FE2748002188 :104D000002F08EFA4FF0804300225A632368204657 :104D10002C601B68BDE870401847286803685B6812 :104D200098472B680446834214D01D4B002100286D :104D300008BF1C46194802F073FA1A48002102F015 :104D4000D7F94FF0804300225A63236820461B683E :104D50002C609847FCF794F9134C236898420ED3C3 :104D60001249134A4B6A10681B1A18BF01231148D5 :104D700003704B6A1360FCF783F92930206070BD23 :104D8000300D0020000C0140B00700200008014059 :104D90007C0900200C000020EC0900209406002073 :104DA000F8090020600800202C0D0020002C014094 :104DB000E00C0020140B002038B50568114B0446A8 :104DC0009D420AD1037F042B1BD10F4802F09EF8AD :104DD0006322002106F02AFA28642368B3F1804F89 :104DE0000FD1227F042A08D15A6B0AB99B6B43B1B9 :104DF0000120BDE83840FFF7C9BB082A01D10220D5 :104E0000F7E738BD002C014060080020F0B50268CB :104E10005D4B87B09A4275D15C485D4CFCF744FC11 :104E20005C48FCF73FFB2378022B71D100255A4BDD :104E30000195029503955A88DE885889B6B2D989BA :104E400092B280B23244019F89B202440A443A4489 :104E500001921A89029992B20A4402929A8903999C :104E600092B20A4403925A8ADE8A588B92B2D98B44 :104E7000B6B280B23244019F89B202440A443A4435 :104E800001921A8B029992B20A4402929B8B039A66 :104E90009BB213440393019B404804330193019B4D :104EA000DB080193029B01330293029B5B08029390 :104EB000039B01330393039B5B080393039905F062 :104EC0000DFF374A1378013BDBB2137013B9062389 :104ED00001251370334890F8E933ABB1019900F51F :104EE000357002F09FFA4FF4F562294606F09EF9FC :104EF0004FF08043586302992B4889B201F081FF3B :104F00000023237007B0F0BD4FF080435D63F2E7EC :104F10002378012BF4D100231F4A049305931388AF :104F200004999BB20B440493938805999BB20B445C :104F30000593138A04999BB20B440493938A059AB0 :104F40009BB213440593049B01330493049B5B08B9 :104F50000493059B01330593059B5B0805934FF074 :104F600080435B6B23B10499104889B205F00AFFB6 :104F70004FF080439B6B002BC2D005990C4889B23F :104F800005F000FFBCE700BF002401403C0D0020FD :104F9000400B00206C0D0020A0030020D40700204F :104FA00008000020C003002060080020A0070020A7 :104FB0006C0900207047000008B5034801F01DFE91 :104FC0000122024B5A6108BD18080020000401406C :104FD0002DE9F04F00247C4D7C4E87B02846FFF72A :104FE00055FB29463046FFF7AFFC794BC6E909442B :104FF0003360B48586F82E403486764E2946304696 :10500000FFF7A2FC744BC6E909443360082386F815 :105010002C30346386F82C304FF0FA733364052358 :10502000C6E90E443463B48686F844306B4E294694 :105030003046FFF789FC6A4B4FF0030B33604FF4A7 :105040007A7386F82440F4843385664E29463046C8 :10505000FFF77AFC644BB484336086F82640634ED5 :1050600029463046FFF770FCDFF88491614B2946F2 :105070003360B46486F84CB04846FFF765FC5E4B7D :105080005E4EC9F80030FF232946304689F82430A7 :10509000FFF75AFC5A4B5B4F33604FF44033B36415 :1050A0004FF41673294686F82440A6F84640A6F821 :1050B0004C303846FFF748FC534BDFF850A13B60BB :1050C000534B3246294687F82440FC853C637B637A :1050D00050483B4604F010FD29465046FFF734FC8B :1050E0004D4A4E4ECAF800204FF4803229463046D1 :1050F000DFF82C81CAE90924FFF726FC494A294632 :1051000032604046FFF720FC474A08F12C06C8F8F9 :105110000020464A88F8244007CA86E80700444E23 :1051200029463046A8F82640A8F82840FFF70CFC8E :10513000404A534632603A463F4FA6F830B02946BF :10514000C6E90944B48586F82E403C48009605F02F :1051500091F929463846FFF7F7FB394ADFF8E4B002 :105160003A6001223A87384A2946BA64C7E90B44B3 :10517000C7E90F447C623C857C637C645846FFF73A :10518000E3FB324F32493846CBF800102946FFF78F :10519000DBFB3049294B39602F49BC84B96240F2AE :1051A000CF7187F82640B9854246CDE9026329468A :1051B000CDE9009A174BCDF810B0284804F05EFCFA :1051C00007B0BDE8F08F00BFC00300206C030020D3 :1051D000A4DB0008E40C0020BCDB00080C0C002061 :1051E0008CDB00086C0A0020ACDC0008C40A00203C :1051F000180B002034DC00084CDC00086C02002096 :10520000C4DC000834030020D4DB00081C0A0020A2 :105210000400DC05BC0200207CDC0008F80900204A :10522000FC020020ECDB000804DC000820D40008AD :105230008C0B002064DC0008C00B0020440B002015 :1052400024DD0008480A00200000B80B940A002062 :1052500094DC0008DCDC00082C015802380C00202B :1052600006F07CBC022310B51A46044678210F488C :10527000FDF766F90E490F4A0F4B002808BF0A4692 :105280000E49204606F0E0F94023A4F82A322023F4 :105290002046A4F82C3207F0BAF9204606F0BFF9F0 :1052A0002046BDE81040002107F0B9B9E00D00200C :1052B00059AA0008C1A9000889A90008A4E10008AA :1052C00010B5072204468E3007F098FC002384F8BE :1052D000953010BD0149FFF7F3BF00BF60D500084E :1052E0000149FFF7EDBF00BF02D600080149FFF7F3 :1052F000E7BF00BF64D500080149FFF7E1BF00BF69 :1053000069D500080149FFF7DBBF00BF6FD5000872 :105310000149FFF7D5BF00BF74D500080149FFF769 :10532000CFBF00BF79D500080A468E30014907F08B :105330002BBC00BF7FD5000810B50922044696306B :1053400007F05CFC002384F89F3010BD0A4625233B :105350000149963007F018BC83D5000813B50A4BF5 :1053600001F0030103EB4113019310230446009362 :1053700018220223002105F0F4FF204602B0BDE808 :10538000104006F066B800BF32D700082DE9F04F94 :105390008DB09846BDF86430154605939DF8683089 :1053A00040F2E73206939DF86C300446084600212F :1053B00007939DF860A005F039FF40F2E73281467F :1053C0000021284605F032FF6422074600219DF89F :1053D000580005F02BFF9DF85C30BFB2002B14BFC6 :1053E00043224622954BB845C6B21A701FFA89F976 :1053F00080F2FA80A7EB0803142B40F3F5805623C4 :105400004A4600933846002308F1140105F0E0FEF7 :10541000C5B2752D28BF75251E220A21304605F01C :10542000E7FE0646204606F00AF82046844906F0C4 :10543000CFFB4A46834909A807F0A6FB824B4FF0F1 :105440000F0B0193012300211A462046CDF800B02E :1054500005F087FF09A9204606F0CAFB5946814698 :105460000C22204609ABFFF7FBFE05230093012326 :10547000DFF8D8B109F110011A462046C9B2CDF8BB :1054800004B005F06EFF09F118010C226B4B2046A9 :10549000C9B204F18E09FFF7E3FE4946204606F043 :1054A000A7FBC0F17B00C1B24B460C222046FFF7A0 :1054B000D7FE40220C21204604F19603FFF7D0FED0 :1054C000BAF1000F09D1624B3722019309235146EB :1054D00000932046012305F044FF7EB1C6F12D0361 :1054E000C6F387061BB2C6F17A06CDE900360293F1 :1054F0007B232D221946204606F036FE059B002B05 :1055000074D01A464F4909A807F03EFB09A9204666 :1055100006F06EFBC0F16C0106464022204609AB46 :10552000C9B2FFF79DFE0F23C6F1640100933B2231 :1055300002232046C9B206F02FF8052601233422A3 :105540006C212046CDF804B0009605F00AFF3B4BD5 :10555000402274212046FFF783FE3A46394909A8C4 :1055600007F012FB20463B4906F032FB09A9204612 :1055700006F03EFBC0F1810101EBD1712A222046E9 :1055800009ABC1F34701FFF76BFE762333223146A7 :10559000204606F0A7FB06232F225B21204606F0BB :1055A000A8FB032D0ED90323302231462046009359 :1055B0002B4605F0FBFE6B1E2F2231462046DBB248 :1055C00006F090FB079B43B3234B1C220193092356 :1055D000002100930223204605F0C3FE204605F07B :1055E00038FF0DB0BDE8F08F002515E708F109037D :1055F0009BB26C2BA1D84246184909A807F0C4FAFF :1056000009A9204606F0F4FAC0F16C0140222046B8 :1056100009ABC9B2FFF724FE8FE7069B002BDDD054 :105620000F4A013B03F0030302EB431301931023E2 :105630001822009307990223CDE700BF1200002033 :105640005CDD0008B3D5000852D60008C4D70008B6 :1056500061D60008DCD7000840D600087FD50008D6 :1056600032D700082DE9F34104461F460E46154681 :1056700005F0E5FE2046584906F0AAFA574B002FE0 :1056800072D053F826802046414606F0B1FAB4F8AD :105690002A62B4F82C22A6EB5000103A4346C1B25D :1056A000D2B22046FFF7DCFD3A464D49684607F086 :1056B0006BFA6946204606F09BFAB4F82C22B4F83F :1056C0002A121F32A1EB50016B46D2B22046C9B25A :1056D000FFF7C6FD2046434906F07AFA2A464049BC :1056E000684607F051FA6946204606F081FAB4F898 :1056F0002C22B4F82A120F32A1EB500105466B465A :105700002046D2B2C9B2FFF7ABFD3E26204605F0D7 :10571000A0FE94F92E32C5F34705002BB4F82A32C7 :1057200052DD2B447F2B02DDFF2384F82E3294F9C7 :105730002F22B4F82C32002A4FEA560648DD1E44C8 :105740003F2E02DDFF2284F82F22B4F82A1294F9AA :105750002E220A44A4F82A2294F92F221344A4F8F2 :105760002C3202B0BDE8F08153F82670204639464D :1057700006F03EFAB4F82A62B4F82C22A6EB5000E8 :105780000A3A3B46D2B2C1B22046FFF769FD204635 :10579000144906F01DFA2A461149684607F0F4F943 :1057A0006946204606F024FAB4F82C22B4F82A12EE :1057B0001732A1EB500105466B462046D2B2C9B262 :1057C000FFF74EFD2E26A1E7AB42B0DC0123ACE78C :1057D000B342BADC0122B6E75CDD0008CCD7000892 :1057E000B3D50008DCD700082DE9F04F1D460E4662 :1057F0008BB09146044625232A46724906A807F035 :10580000C3F93246704908A807F0BEF94323204681 :105810006E49ADF8143006F0DBF906A9204606F013 :10582000E7F9461DF6B2C6F1760300930023642221 :105830001946284605F0CCFC14220A215FFA80F8AC :10584000284605F0D5FC40F6FF72914507464846CC :1058500028BF1046B9F5006F00F2AD801423009305 :1058600000234FF40062194605F0B2FC4FF0700AB5 :10587000142340F6FF7240F60101C5B2CDF800A036 :105880004FF4616005F0A4FC8146204605F0D7FD89 :105890004F49204606F0ACF9C0F1800101EBD1710F :1058A0000F224B4B2046C1F3470104F18E0BFFF74B :1058B000D7FC5946204606F09BF9C0F17B00C1B2E7 :1058C0005B460C222046C7F12307FFF7C9FC3FB215 :1058D00008F10503CDE90137232705213A46204683 :1058E000009706F041FCC6F180013A46204606AB1F :1058F000C9B2FFF7B5FC374B282201930A230021D8 :1059000020460093012305F02CFD334B2A220193FE :105910000623782120460093012305F022FD5346FB :105920002A220821204606F0DDF953462F220821BD :10593000204606F0D7F909F1080104232F2220465A :10594000C9B206F0D6F92B462C220821204606F0D3 :10595000C9F9012D0CD92B462B220821204606F02F :10596000C1F96B1E2D2208212046DBB206F0BAF9E0 :1059700008A9204606F03CF9184B0546019305237B :105980002046009334220123702105F0EAFCC5F182 :105990007001204608AB4022C9B2FFF761FC4022EB :1059A0007821204605ABFFF75BFC204605F051FD52 :1059B0000BB0BDE8F08F702340F601010093142373 :1059C00052E700BF87D50008B3D500085CDD0008AA :1059D0008DD500086AD6000874D60008C4D7000820 :1059E0000023A0F82832C0F8C83070470B7880F840 :1059F000E5304B7880F8E630002380F8E7307047D8 :105A0000022970B504460D4616460FD8FBF738FB41 :105A1000074B00F57A70C4F8C800324653F82510D9 :105A200004F1CC00BDE8704007F0AEB870BD00BF17 :105A3000B8D70008F8B50546174608464FF4FA727D :105A40000E4995F8284205F0F1FB40F2E732064690 :105A50000021384605F0EAFB05EB4403A3F8E860B3 :105A6000A3F88801631CDBB24F2B82BF012385F8AA :105A70002932002385F82832F8BD00BF0CFEFFFF55 :105A80002DE9F04F0446B3B008466322002105F02B :105A9000CDFB94F829520390002D40F0A98094F892 :105AA0002872002247F6FF769F4B04F1E601D0B240 :105AB000874200F29F80002EBCBF764236B29E42E3 :105AC000B8BF1E46002347F6FF7A994604F5C37215 :105AD000D9B28F4200F2988035B194F8285201353E :105AE000EDB2502D28BF00254FF0000B28230DF1FB :105AF00028085FFA8BF2974200F29080B6F57A7F21 :105B0000C0F2D48000238DF8183025239DF80C2096 :105B1000864908A807F038F8D4F8C850002D40F09E :105B2000CB8000230126C4F8C830B9F57A7F80F015 :105B3000CA804A467E4905A807F026F84FF00108BA :105B40007C49204606F044F8204605F078FC5E23A8 :105B500014221A21204606F0C5F8774B1222019331 :105B600005236F2120460093012305F0FAFB0F2245 :105B700076212046714BFFF773FB0125013FBD42A3 :105B8000C0F2A4809DF818302BB10F2200212046CE :105B900006ABFFF765FB28220021204608ABFFF784 :105BA0005FFB002E00F0BA8094F8E5306BB104F191 :105BB000E5052946204606F01BF8C0F17E00C1B27B :105BC0002B463C222046FFF74BFB0125AF4200F35A :105BD0009180B8F1000F05D03C22002105AB204692 :105BE000FFF73EFB204605F034FC33B0BDE8F08FF4 :105BF000502756E731F9020F01328642A8BF064608 :105C00008342B8BF034652E732F8021F01338A4588 :105C100028BF8A46894538BF894659E7002E40D0BB :105C200005F1740234F91220002A0BDD5A4392FB6D :105C3000F6F2C2F1140252B2002AD8BF012288F84B :105C400000200AE0524212B25A4392FBF6F214329A :105C500052B2282AF3DD88F80030D14524D905F165 :105C6000C40234F81200A9EB0A02A0EB0A00C0EB50 :105C7000001090FBF2F000210F2200B205F0D6FADE :105C80002823C0F13F0040B20135EDB21EAA502DCD :105C90000BF8020008BF00250BF1010B08F1010809 :105CA00027E74FF01402CAE73F20EDE732462449C8 :105CB00006A806F069FF28E7FBF7E2F985427FF6C0 :105CC00030AF002631E74FF0000839E705F1C80290 :105CD0006A4412F8A00C05F11B03009005F11A01AB :105CE000204612F8A12CDBB2C9B2013506F047F804 :105CF000EDB244E705F1C8026A4412F8500C05F110 :105D00001B03009005F11A01204612F8512CDBB25A :105D1000C9B2013506F033F8EDB257E73E223146FD :105D200004F1CC035BE700BF0180FFFF92D50008C0 :105D3000B3D500085CDD0008B2D700089EDA000881 :105D40007FD500082DE9F047044686B00F46254967 :105D5000904605F03DFF204605F071FB22492046A4 :105D600005F046FF0646C0F1800505EBD575C5F385 :105D7000470529460D2220461B4BFFF771FA334693 :105D800029460F22204605F0ADFF1C250026DFF82E :105D90005C90DFF85CA037F8162059F8041B03A8C4 :105DA00006F0F2FE03AB2A4614212046FFF758FA0C :105DB000F3B298450BD10723A5F108020093002107 :105DC00001232046CDF804A0D2B205F0CAFA01366C :105DD0000D35032EEDB2DED1204605F03AFB06B0BC :105DE000BDE8F0875CDD000898D50008B8D700084A :105DF00029D600082DE9F04F8FB098469DF8643001 :105E0000DFF8B8A1002B14BF4323462304460F46F6 :105E10000AA86B498AF800309DF870B09DF86C9024 :105E200006F0B2FE2D220A219DF8680005F0E0F987 :105E300064490546204605F0CBFE204605F0FFFAF2 :105E40006149204605F0D4FE39460646204605F055 :105E5000CFFE81190531C9B2C1F1800101EBD171C9 :105E600041F3470121EAE171C9B20D222046564BA8 :105E70000591FFF7F5F90599053631443B460D22AA :105E80002046C9B2FFF7ECF976230F220521204600 :105E900005F028FF0AA9204605F0AAFE0AAB212238 :105EA00005212046FFF7DCF94246484907A806F0DD :105EB0006BFE474B2A2201930F23052120460093B6 :105EC000012305F04EFA07A9204605F091FE39227C :105ED00006461021204607ABFFF7C2F93D4B06F1FD :105EE0001101019305232D2220460093C9B20123FD :105EF00005F037FA06F11901534639222046C9B296 :105F0000FFF7AEF9BBF1000F15D0334B32220193EE :105F10000723462120460093012305F022FABDF80D :105F200060202A4907A806F02FFE3922502120467A :105F300007ABFFF795F955B9B9F1000F1CD0274908 :105F4000204605F055FE254BC0F17B011BE0C5F155 :105F50003F03C5F387021BB2C2F17A02CDE90032DA :105F600002937B233F221946204606F0FDF81B2DA5 :105F7000E2D9B9F1000F0BD11949204605F038FEDE :105F8000174BC0F17B0121222046C9B2FFF768F907 :105F9000642200219DF8740005F048F9C3B2012B7A :105FA00006D902220E21009220463E2205F0FEF97B :105FB000204605F04EFA0FB0BDE8F08F1400002027 :105FC000A1D500085CDD0008A9D50008B3D50008FC :105FD00052D60008C4D7000829D6000802D6000807 :105FE00060D500082DE9F04F89B01E469DF84C3071 :105FF0008946002B14BF43214621874B9DF85070E2 :1060000019700546854904A8BDF848409DF854A07C :106010009DF858B006F0B8FD0A2F09D92D23A7F135 :106020000A0000935A220A23002105F0D1F8C7B2D2 :10603000A642C0F0B880301B48BF07301E220021A6 :10604000C01005F0F3F800F142047549284605F048 :10605000BFFD284605F0F3F97249284605F0C8FD52 :1060600049468046284605F0C3FD00EB0806053684 :10607000F6B2C6F1800606EBD67646F3470626EA68 :10608000E676F6B231460D222846664B08F1050841 :10609000FFF7E6F806EB08014B460D222846C9B289 :1060A000FFF7DEF876230F220521284605F01AFEB9 :1060B0002122052104AB284605F050FD5A4B064627 :1060C00001930523411D152228460093C9B20123DF :1060D00005F047F906F10D01212228464E4BC9B2C1 :1060E000A4B2FFF7BDF8BBF1000F0BD04F49284613 :1060F00005F07EFDC0F17B01212228464B4BC9B241 :10610000FFF7AEF84A4B2D2201930A2300212846BF :106110000093012305F025F9464B2F220193062316 :10612000682128460093012305F01BF960232F22E4 :106130000821284605F0D6FD602334220821284690 :1061400005F0D0FD042334224221284605F0D1FD7C :1061500004232B224221284605F0CBFD0A2C16D918 :10616000E4B2A4F10906F6B23346312208212846EA :1061700005F0B8FD0A3C334630220821284605F0D8 :10618000B1FD322208212846E3B205F0ABFDF7B994 :10619000BAF1000F2ED02849284605F029FD264BDC :1061A000C0F17B012DE0A41B48BF0734C4F3CF042A :1061B0001E2C02D8C4F1420447E71E3CC4F3CC00B5 :1061C0001C22002105F032F8C0F124043DE7BB0891 :1061D000C7F13F02C3F17A03CDE900237B2302928A :1061E00019463F22284605F0BFFF1B2FD0D9BAF130 :1061F000000F0BD11149284605F0FAFC0F4BC0F1F6 :106200007B0121222846C9B2FFF72AF8284605F06B :1062100020F909B0BDE8F08F10000020AED50008CD :106220005CDD0008A9D50008C4D70008B7D5000870 :106230006AD6000874D6000802D6000860D50008A7 :106240002DE9F74F04468A463F491E4615469DF8FC :1062500034709DF830B005F0BBFC204605F0EFF837 :106260005146204605F0C4FC8146C0F1800808EB89 :10627000D878C8F34708414653460D222046FEF71A :10628000EFFF4B4641460F22204605F02BFD06EB63 :10629000460306EB8306002F06F114065FFA86F923 :1062A0000CBF4FF000084FF00F081426DFF89CA039 :1062B00002354E4505D1204603B0BDE8F04F05F04C :1062C000C8B82B78002B3AD015F8023C5B4509D1B1 :1062D0001F4B32460193072341460093204601237A :1062E00005F03FF806F108022B4618212046D2B2ED :1062F000FEF7B6FF15F8013C9B070AD4154B721E3A :10630000019309236421009320460123D2B205F0B2 :1063100028F8A7B915F8013C0C2113F0010F4FF034 :10632000080308BF0C4A009308BF01924FF0010315 :106330003246204618BFCDF804A005F012F80D36FD :10634000F6B20C35B5E700BF5CDD000830D60008BA :1063500029D6000861D6000838D600082DE9F04794 :1063600006468A46374990461F469DF8209005F01C :106370002FFC304605F063F85146304605F038FCF6 :106380000546C0F1800404EBD474C4F347042146ED :1063900053460D223046FEF763FF2B460F2221465F :1063A000304605F09FFC4146304605F021FC394659 :1063B0000546304605F01CFC0446CFB33B78BBB322 :1063C00043462D220A213046FEF74AFFB9F1000F5D :1063D00014D12544662D0CDC3B462D22C4F17101FD :1063E000C9B23046FEF73CFF3046BDE8F04705F045 :1063F00030B83B46C4F180013C22F1E7C4F180058E :1064000005EBD575C5F347053B463C22294630468A :10641000FEF726FFA5F10A010B4BC9B23C2230461C :10642000FEF71EFF04F180014910084B0231E3E73B :10643000C5F1800505EBD57543462D22C5F347010F :10644000CFE700BF5CDD0008BAD50008BCD5000866 :106450002DE9F74F044604F0F2FF94F8A0308BBB0F :1064600017253E4B3E4E14220A21204601930095EB :10647000022304F076FF032314221C212046CDE9D9 :10648000005604F06EFF0323142230212046CDE98C :10649000005604F066FF334B142244212046CDE918 :1064A0000053032304F05DFF032314225E212046E2 :1064B000CDE9005604F055FF204603B0BDE8F04F8B :1064C00004F0C7BF2046284905F082FB04F1A00074 :1064D000F9F73EFE00234FF00D0A98464FF00A09E7 :1064E000C6B2B342E8D29A1CD2B25D1C9F32EDB262 :1064F00022442F460135EDB2AE4226D8A03304EB3C :10650000030B5946204605F073FB03065FBFC0F13D :106510008000C0F347015B46524642BF5B4652468D :1065200000212046FEF79CFEBAF1340FC4D0AE42E3 :1065300088BF2D1907F102070AF10D0A88BF85F8F7 :10654000A090FBB25FFA8AFACBE712F8011F0A2982 :10655000CFD1621982F8A080D0E700BF7AD60008B8 :10656000EDD60008A8D600085CDD00080B781BB14A :106570002822A03006F042BB80F8A030704700000F :106580002DE9F04104460E4686B0264915461F46C1 :1065900005F01EFB204604F052FF4EB1224B0022B4 :1065A00001931023114600932046022304F0D9FEE4 :1065B0002A460F251D4902A806F0E6FA1E220021F0 :1065C000204602ABFEF74CFE0D9EDFF86080023ED7 :1065D000414636F8022F02A806F0D6FA2A460F35B1 :1065E0003C21204602ABEDB2FEF73AFE4B2DEFD137 :1065F0009DF83030002F14BF69222022002B14BFD9 :10660000672320230A4902A806F0BEFA3A22052190 :10661000204602ABFEF724FE204604F01AFF06B027 :10662000BDE8F0815CDD000832D7000825D60008FF :10663000BED50008F0B5044689B02E492E4F05F0AE :10664000C7FA204604F0FBFE3946204605F0D0FA92 :106650000646C0F1800505EBD575C5F347053B46F9 :10666000294620460D22FEF7FBFD33460F22294620 :10667000204605F037FB6846204906F00FFB6946C7 :10668000204605F0B5FAC0F1800101EBD1716B46EF :1066900020461E22C1F34701FEF7E2FD184A684674 :1066A000184906F071FA6946204605F0A1FAC0F1D2 :1066B000800101EBD1716B462D222046C1F34701C9 :1066C000FEF7CEFD6846104906F0E8FA6946204616 :1066D00005F08EFAC0F1800101EBD1716B463D22CD :1066E0002046C1F34701FEF7BBFD204604F0B1FE92 :1066F00009B0F0BD5CDD0008C6D50008CCD50008A7 :10670000DFD50008E4D50008F4D500081020704754 :1067100008B502462023FFF7F9FFB3FBF0F3508ED4 :10672000584380B208BD30B5438D04468B420D46B8 :1067300085B018D0838D8B4202D8002005B030BDC3 :1067400020234A01C18D64204900CDE9013004F1C4 :106750000A0300932068102392B289B2FBF7B2FDBE :106760000028EAD165850120E8E730B5838D04462D :106770008B420D4685B01BD943854A012023C18D2C :1067800064204900CDE9013004F10A030093206838 :10679000102392B289B2FBF705FD30B9142065854C :1067A000FAF774FC012005B030BD1420FAF76EFC36 :1067B0000020F8E7002388888B80752370B54C1E75 :1067C00001F11F0514F8016F06EB4303A5429BB2CC :1067D000F8D1C41A6042604102B18B8070BD2DE9CE :1067E000F84F0223C18D044649001A46006889B259 :1067F000FBF7A6FE0546002015B12071BDE8F88F15 :1068000001232E46AA46A8464FF0FF39237104F112 :106810000A0B238EAFB2BB4217D939462046FFF789 :1068200082FF88B1002259462046FFF7C3FF60B1BE :10683000D4F80A304B453CBFB8469946534501D978 :106840003E469A460135E4E72071207917B9E78082 :106850002781D3E7238EE680BB4207D90136B6B243 :10686000B34296BF002326812381C7E7A4F808809E :10687000C4E72DE9FF4100F10A0604462022FF216A :10688000304606F0A1F9002564274FF02008238E3A :10689000AB420CDDE18D6A0149001023CDE901878F :1068A000206892B289B20096FBF77CFC28B12046A2 :1068B00004B0BDE8F041FFF792BF0A20FAF7E6FB0B :1068C0000135E4E770B50D46C1880446FFF72BFF9C :1068D000064610B90026304670BD0022204604F15D :1068E0000A01FFF767FF0028F4D00B4629462A3437 :1068F00053F8042BA34241F8042BF9D1EBE738B548 :10690000037904460BB9002038BD0B68012201331E :106910000B60FFF74FFF04F10A0301F1200251F869 :10692000040B914243F8040BF9D120462189FFF76B :106930001CFF0028E7D02389228EE38001339BB21D :106940009A4223819CBF00232381DDE708884B887E :1069500030B503EB4003888801F10D0400EB4300E0 :10696000CB8803EB4003087A00EB430091F90E302B :1069700003EB400301F1080010F8015F844205EBCE :106980004303F9D1C87B7533DCB2041B604260411C :1069900002B1CB7330BD2DE9F84305464FF0200816 :1069A000FFF7B4FEB8FBF0F817466B8E0E4608FBF7 :1069B00003F2974204461FDCB7FBF8F9A98D28467D :1069C000C91A494489B2FFF7AEFEB8B108FB19777E :1069D0007C43E1B20A31002228462944FFF7B6FF82 :1069E00070B101F1100351F8042B994246F8042BC1 :1069F000F9D10020BDE8F8830320FBE70120F9E787 :106A00000220F7E72DE9F04705464FF02009FFF790 :106A10007DFEB9FBF0F990466B8E0F4609FB03F241 :106A20009045044627DCB8FBF9FAAE8D2846F61AE5 :106A30005644B6B23146FFF776FEF0B109FB1A882C :106A400008FB04F4E4B20A3429190B4607F11002DA :106A500057F8040B974243F8040BF9D1012228465A :106A6000FFF774FF31462846FFF77FFE80F00100F4 :106A7000C0B2BDE8F0870320FBE70120F9E7000082 :106A800070B500250826C0E90C13BDF8103006705B :106A900083874560104B067043F2642683600123B0 :106AA000DFF838C0C6870E4E4560C0E9095545611C :106AB000C0E910C685618581858385738577C57733 :106AC000456180F820508583C562856105874287CE :106AD000C3738577037470BD0180FE7F0414DC05E9 :106AE0002C01C40900230287B0F84620436282814A :106AF00090F84020C16202704360704738B5044688 :106B0000FAF7BEFAA36A984201D2002038BDFAF71C :106B1000B7FA94F84130218F0344A362E06AFBF78F :106B200091F8C0B994F83E104900C9B294F82030E9 :106B3000204693B104F0DFF894F83F30984221DA10 :106B4000002384F82030636A0BB1E57F55B3002041 :106B50006062E077DAE70021E8E704F0CCF894F827 :106B60003E3098420EDD012384F82030FAF788FA8F :106B7000636A1BB1C01AA389834208D2FAF780FA6C :106B80006062C2E794F82030002BDCD0EEE7B4F866 :106B900042308342B9D2E37F002BB6D101230220D9 :106BA000E377B3E7FAF76CFA636A6562C31AA08900 :106BB000984294BF00200120A8E7B0F908308B422A :106BC00006DCB0F90A308B4202DB8183012070477A :106BD0000020704738B50446438102819DF810506B :106BE000FFF7EBFF9DF81430E5739D4238BF1D465B :106BF0009DF818302574A37338BD70B5418F0446D5 :106C0000006BFBF71FF80646FAF73AFA012E054625 :106C100063690FD023B16369A289C31A934208D96B :106C2000A18F606B6561FBF70DF8431E5842584118 :106C3000A07770BD002BFCD0A18F606BA67FFBF707 :106C400001F8B0FA80F0F6B24009B0421FD1626993 :106C5000A189AA1A8A42E37B19D2A269B4F8441026 :106C6000AA1A8A42A56138BF237CA27F9BB28AB14F :106C7000A28BD31A1BB2A383A28BB4F90A3012B22F :106C80009A420ADDA27B0AB1B4F90830A38300233B :106C90006361CEE7A28B1344ECE7A28BB4F9081032 :106CA00012B28A42F3DAA27B002A08BF0B46EDE754 :106CB00090F82D01023801288CBF00200120704778 :106CC000B0F832017047B0F8640180B2704790F8B4 :106CD0006601704708B503681B6A984780B208BD13 :106CE000704790F82D3113B5032B04460FD1642360 :106CF00000930023194690F8662190F82E0104F0C5 :106D000067FAC0B2642828BF642002B010BD00F545 :106D10009E7003F0FCFF64230093002394F8672126 :106D20001946ECE708B500F5A67003F0F0FF80B255 :106D300008BD08B500F5AA7003F0E9FF80B208BDF0 :106D400010B5044600F5A27003F0E1FFB4F870310D :106D50009842ACBF0020012010BD0000054B10B5CB :106D60001A8804460846002104F060FAA4F83201AB :106D700010BD00BF56DD000810B504464FF4C671C3 :106D800005F088FC204610BD10B5044601224FF4E2 :106D900000410448FAF75CFF94F8843184F82C3100 :106DA00010BD00BF0008014070B5044621B9BDE820 :106DB000704003681B69184790F8675103238D42A0 :106DC00028BF0D4680F82D31FFF7DEFF84F82E51E5 :106DD00070BD08B54FF0804340F2CF720021986B30 :106DE00004F024FA80B208BD10B5044600F5A27084 :106DF00003F08DFF94F82D31002B08BF002080B2E6 :106E000010BD38B590F8153104460D465BB100F55C :106E1000A27003F070FF411B494304F5AA70BDE85E :106E2000384003F05BBF38BD642307B500930023EF :106E3000B0F86A211946B0F8340104F0C9F980B2FB :106E4000642828BF6420C0B203B05DF804FB0000D2 :106E500038B505460C4619B1BDE83840FFF794BF78 :106E60000A4604484FF40041FAF7F2FE85F82C4137 :106E700038BD00BF0008014030B50025044690F839 :106E8000813185B090F88211A0F8345180F82D51ED :106E9000A0F82E51029390F88031CDE90013B0F89C :106EA0007E31B0F87C2104F0D8F929462046FFF75E :106EB000CFFF0E4BC4F840511B78C4F8485184F8FA :106EC0004C31C4F8505184F85431C4F8585104344A :106ED00020462B460D224FF47A7103F00CFE294612 :106EE000204605B0BDE8304003F013BE4EDD00087B :106EF00000214FF0804310B580F82D1199630446AE :106F0000FFF7A6FF012384F8303110BD73B50446A6 :106F100000F5A27003F0FBFE83B21D46A4F86431B5 :106F2000714B06461B886333AB4294F82D3105DB69 :106F3000B4F8322102F5C872AA4213DA022B11D139 :106F4000012384F82F31694BB4F834211B689A630C :106F500094F82F31E3B1B4F83231023BAB4211DC8B :106F6000002552E0013B042BFAD801A252F823F08D :106F7000476F0008476F0008ED6F00084F7000086A :106F8000D97000080021201D84F82F1103F0C1FDE5 :106F900094F82D31012B0AD1B4F832311333AB42BE :106FA000BFBF022384F82D31D4F88831E36094F810 :106FB0002C3103F0FF0563B194F82C31013BDBB2B7 :106FC00084F82C3194F82C3103F0070384F82C3129 :106FD000C6E7B4F9321132B2201D03F0B7FD2946DD :106FE00094F8672104F022F905460EE094F82C315C :106FF00053B3002594F82C31013BDBB284F82C31DB :107000003A4BB4F834211B689A632046FFF7E1FE3F :10701000B4F86831834265D894F81531002B08BF65 :10702000002504F59E762946304603F057FE294692 :10703000304603F060FE411B494304F5A67003F09F :107040004DFEA8B202B070BD94F82E51D8E720468C :10705000FFF7BFFEB4F86821904203D22046FFF745 :1070600047FF7DE794F815319BB1B4F86431B4F86B :1070700070119BB28B4219D294F830314BB9012375 :1070800084F83031F9F7FCFFD4F878310344C4F8C0 :107090003831D4F83831002B3FF462AFF9F7F0FF04 :1070A000D4F838319842FFF45BAFD7E7B4F8640105 :1070B000B4F86C31009280B2B4F8322104F088F850 :1070C000B4F86A21B4F8681180B204F0AFF8074B45 :1070D00080B21B689863DCE7294604F1280003F0BE :1070E00069FD81E700259CE756DD0008D40E0020ED :1070F00038B50023C0F8383190F82D3104460D46DC :10710000052B0ED8DFE803F0032929384F29FFF7B4 :1071100060FE60B92DB12046FFF736FE012384F8EA :107120002D310023C4F84031C4F8503138BD94F8F3 :10713000153145B383B32046FFF726FE04F5A27050 :1071400003F0E5FDB4F8323182B2934203D9104620 :10715000C8309842E2DB0223E1E70029E1D10423B1 :1071600084F82D31F9F78CFFD4F8743184F830515C :107170000344C4F83831D4E7FFF72BFE80B1002D6B :10718000E9D194F81531002BCBD0B4F86431B4F8C0 :1071900070219BB29A42E2D92046FFF7A9FEC0E7D0 :1071A000002DBED1F8E7FFF714FE0028B2D094F806 :1071B0001531002DBED1002BEED0B4F86431B4F8F7 :1071C00070219BB29A42ACD9F9F75AFFD4F87831C2 :1071D0000344C4F83831012384F83031A1E790F832 :1071E0003201431E584258417047B0F82C01704795 :1071F000B0F86A01704790F83201B0FA80F04009A7 :1072000070470023A0F83011C0F84C31C0F85C3151 :1072100019B9032380F8323170470223FAE7704727 :1072200010B5044679B990F83231A0F8301113B195 :10723000032384F832310023C4F84C31A4F82E31F2 :10724000C4F85C3110BD0021043003F062FC01235E :10725000EFE7000090F8323170B5012B05460E467D :1072600003D10021043003F054FC0A4B05F5A8704B :107270001C88B44228BF3446A5F82C4103F047FDD2 :10728000143480B28442ACBF0024012485F8334119 :1072900070BD00BF56DD000810B5044600F5A470AF :1072A00003F035FD94F83231022B14BF83B2B4F8E9 :1072B0003031B4F86801984228BF184610BD08B5AF :1072C00000F5AC7003F023FD80B208BD08B500F5F1 :1072D000B07003F01CFD80B208BD08B500F5A870C1 :1072E00003F015FD80B208BD37B5044600F5A47063 :1072F00003F00DFD94F83231B4F86851022B80B2DE :1073000004D1B4F83001B4F86A5103E094F8323192 :10731000042BF8D02A46002103F088FF6423009351 :1073200000232A46194680B203F052FFC0B203B0D0 :1073300030BD10B504464FF4C27105F0ABF92046DC :1073400010BD000030B50025044690F8783185B0B6 :1073500080F83251A0F8305180F83351029390F800 :1073600077310434019390F87A310093B0F8743196 :10737000B0F8722190F8761103F06FFF94F86D3138 :1073800084F8343194F86C31C4F8385184F83C31C5 :1073900094F86831C4F8405184F84431C4F8485135 :1073A00084F84C31C4F8505184F85431C4F8585121 :1073B00084F85C314FF08043C4F860519A6AD96A0E :1073C0000B4B013102FB01114FF47A721B6820460E :1073D000B3FBF2F3B1FBF3F10B22012389B203F00B :1073E0008AFB2946204605B0BDE8304003F091BB3A :1073F000EC01002010B5044600F5A87003F087FCEE :1074000094F83231002B08BF002080B210BD00007C :10741000034B1B888B4228BF0B46A0F82C317047CA :1074200056DD000870B5044600F59C7003F063FC5F :1074300083B2A4F83431B4F83411054689B204F5A6 :10744000A87003F058FCB4F83411064689B2411A0A :10745000494304F5B07003F041FC2E4B1B886333A5 :10746000AB4205DBB4F82C3103F5C873AB4206DA46 :1074700094F83231DAB2012B08BF84F8332194F842 :107480003231013B032B40D8DFE803F016360239D6 :10749000B4F86E310025B34201DD84F8325129463B :1074A00004F5A47003F027FC411B494304F5AC70BC :1074B00003F014FCA8B270BDB4F82E31B4F82C61FE :1074C000002B18BF1E4694F833314BB1B31EAB42AC :1074D0004FF000011BDD84F83311201D03F019FB70 :1074E0002AB231B2201D03F031FB0021B4F868212B :1074F00003F09CFE0546D2E7B4F83051CFE72946A9 :1075000004F1280003F056FBF4E70025C7E70D4619 :10751000C5E700BF56DD00080023C0F83C31C0F8C5 :107520004C31C0F85431C0F85C31C0F8643180F897 :107530003231704790F83231012BDAB20CD1B0F809 :107540002C318B4208D9002380F83321A0F82E116A :10755000C0F84C31C0F85C317047000000000000FA :10756000F8B590F81531044613B9334B1878F8BDC7 :1075700000F5A077384603F0CAFB304E304D336833 :10758000C01A0028B8BF4042132801DC2868EEE783 :10759000384603F0BCFBB4F880213060904239DA01 :1075A000F9F7D6FAF8F740FF02460B461CA1D1E9DD :1075B0000001F9F7BBF80022224BF8F7D5FDF9F7E7 :1075C000BDF901462048F9F7CBFB1F49F9F7C8FB85 :1075D00005F064F81D49F9F7C3FBF8F725FF12A37E :1075E000D3E90023F8F7C2FDF9F7A8F901464FF0F7 :1075F0007E50F9F7B5FBF8F717FF0DA3D3E9002389 :10760000F8F7B2FDF9F79AF905F0BAF8F9F7D0FCF6 :107610002860ACE7084B1878FAE700BFAFF30080AA :107620000000000000FEAF4083DBB5DCE1796B3F7A :1076300066666666661271404DDD0008380D0020F2 :10764000340D00200000F03F00401C4600E076456D :107650005E2070475D29DDBF024801EB81014018C3 :10766000002070471600002070B500230E46094D1B :107670000522294630461C4605F0AEFA38B15D2C8D :1076800004F1010305F10505F2D14FF0FF34204666 :1076900070BD00BF1600002010B5142494B022461F :1076A00000210CA805F090FA22460DEB0400002101 :1076B00005F08AFA0021102201A805F085FA0224BB :1076C00001224FF48033CDE90A23CDE911434FF471 :1076D000E0130AA80E921393FAF7E6FF0F234FF474 :1076E0008062CDE905340023214605A8CDE90732A3 :1076F0000993FBF79BF94FF4004301A8019403930E :10770000FBF750FA14B010BD2DE980480126002483 :107710004FF002099BB0CD4DF9F794FCFFF7BCFF89 :107720001022002112A805F04FFAAB69002243F0A5 :107730002003AB61AB694FF4406103F02003029377 :10774000029BAB69C24843F00403AB61AB694FF4E1 :10775000807803F004030393039BAB694FF4007A32 :1077600043F00803AB61AB69082703F008030493F7 :10777000049BFAF76DFA00224FF40441B548FAF77A :1077800067FAB54BB24812A9CDE912631496FAF71D :107790007FF9AF4812A9CDE912941496FAF778F957 :1077A0004FF44063AA4812A9CDE91236CDE9144935 :1077B000FAF76EF9A74812A9CDE912841494FAF7E2 :1077C00067F9A44812A9CDE912A41496FAF760F952 :1077D0004FF404439F4812A9CDE91236CDE914496C :1077E000FAF756F99A4812A9CDE912741494FAF7E7 :1077F0004FF9224621460620F9F7D4FF0620FAF772 :1078000001F86B69214633436B616B692246334053 :107810000B200193019BF9F7C5FF0B20F9F7F2FF4D :107820004FF482738D488E4A8E4DC0E900230A239F :10783000C0E906A74FF4602BC362C0E90244C0E967 :107840000444C0E908448462FBF7E8FAC5F80880FC :107850004FF00408844B28462B602E732C75C5F816 :107860001CB06C60C5F81080CDE912440B941494E0 :10787000F9F79AFD4FF4E0234FF0060A28460BA9CA :107880000B93F9F753FF284612A9CDE91296CDF8CC :1078900050A0F9F747FC0323284612A9CDE9123975 :1078A000F9F740FC05220323284612A9CDE912234B :1078B000F9F738FC12A928466C4DCDE912A8F9F762 :1078C00031FC6B4B28462B602E732E61AC602C75FF :1078D000C5F81CB06C60CDE912441494F9F764FD4E :1078E000284612A9CDE91286CDF850A0F9F71AFC66 :1078F00060486149614BC0E90244C0E900134FF49C :107900008043C0E90644C0E904340462FAF7A2FBEC :107910001022214607A805F057F91C2221460BA882 :10792000CDE9054405F050F92022214612A8544D16 :1079300005F04AF9534B4FF40059C5E9003463236D :107940002846C5E90334C5E90544AC60FBF7CAFC29 :1079500007A92846CDE90794CDE90944FBF7FBFDCB :107960002846FBF7EBFC2846FBF714FD284605A943 :10797000CDE90544FBF74EFF612360263A462846D1 :107980000BA9CDE90C34CDE90E44CDE910440B949C :10799000FBF758FD0C2228460BA9CDE90B64FBF739 :1079A00077FD12A92846CDE91649CDE91244CDE963 :1079B00014441994FBF75CFF284603F059FB10228E :1079C00021460BA805F000F91C22214612A8CDE99A :1079D000074405F0F9F84FF0804040F2CF232A4DDC :1079E0004FF48059C5E9000340F2CF732846C5E93A :1079F0000334AC60AC61FBF775FC0BA92846CDF8ED :107A00002C90FBF7A8FD2846FBF7C4FC2846FBF7A3 :107A100095FC284607A9CDE90744FBF7FBFE224663 :107A2000284612A9CDE9126414941694FBF730FD90 :107A30004246284612A9FBF72BFD3A46284612A9D2 :107A40001294FBF7FFFC40F2BC731FE000100240F1 :107A5000000C01400008014000003110340E0020ED :107A6000003800403C0D0020002401406C0D002037 :107A700000280140E00D002000540040801A06005C :107A80008C0E0020002C0140D40E00200C2212A9E4 :107A900028461393FBF7D6FC284603F0E9FA102298 :107AA00021460BA805F090F81C22214612A8CDE92A :107AB000074405F089F84723164D174F2846C5E9B6 :107AC00000734FF6FF73AC60C5E90334AC61FBF79C :107AD00009FC0BA92846CDF82C90FBF73CFD284665 :107AE000FBF758FC07A92846CDE90744FBF792FEAF :107AF0000C2212A92846CDE9126414941694FBF7BF :107B0000C7FC284603F0B4FAFCF7D8FFFDF7C8F825 :107B1000FCE700BF1C0F00200008004070477047C2 :107B2000704770477047704770477047704770479D :107B3000704770477047704770477047704770478D :107B400070471FB501230022044680681146CDE925 :107B50000133009300F58B600323FFF73BF8042308 :107B600084F82C300023636104B010BD1FB50123DD :107B70000022044680681146CDE90133009300F5E8 :107B80008B600423FFF726F8052384F830300023A8 :107B9000636104B010BD30B5002504460123052201 :107BA00080F82650806885B0CDE9003229462A4603 :107BB000B4F92830029500F58B60FFF70BF865618A :107BC00005B030BD1FB50446826892F8523002F508 :107BD0008B6084F84030B2F84C30A4F8423092F810 :107BE0004E3084F8443092F85330C3F3400184F8A7 :107BF000461003F0010184F84710C3F3800184F8B4 :107C00004810C3F3C00184F84910D909C3F3001325 :107C100084F84A1084F84B3092F84F3084F845309D :107C2000002384F84C3092F87C3000229B075CBF24 :107C300094F8A23084F84D30012394F84D10CDE92A :107C4000013300931323FEF7C5FF0023636104B0E3 :107C500010BD2DE9F04F846885B0D4F8D43204F516 :107C6000357800211B690546404698470023404669 :107C700084F83A3184F8323194F853B0FFF770FC4D :107C8000678F02B239462046FCF7B8FAD4F8D432EE :107C900001469B6904F1A406404698473046FDF72B :107CA00019FB2046FBF758FF0BF0010B014630464D :107CB000FDF742FB04F58B69B4F888A0B4F88A603C :107CC000BBF1000F09D10FFA8AF003F0B8FA1FFADE :107CD00080FA30B203F0B3FA86B294F953100FFA77 :107CE0008AF2002933B21FDA05200026B7FBF0F133 :107CF000CDE9010601EB81018FB2009009B248463F :107D0000FEF768FF002385F82E306B61AB62D4F874 :107D1000D43240469B682F86984780F0010085F852 :107D20002C0005B0BDE8F08F012100200091CDE9C5 :107D3000011039B2E3E72DE9F04F846887B094F879 :107D4000533004F5357803F00103054640460593AA :107D5000FFF706FC678F02B239462046FCF74EFA61 :107D6000059A0646B4F888B0B4F88A3004F1A4093C :107D700004F58B6A5AB90FFA8BF0059303F05FFA9A :107D8000059B1FFA80FB18B203F059FA83B294F9ED :107D900053100FFA8BF200291BB238DA05204FF08E :107DA000000CB7FBF0F1CDE9010C01EB81018FB2C2 :107DB000009009B25046FEF70DFF31460026D4F878 :107DC000D43240469B699847484684F83A6184F823 :107DD0003261FDF785FA2046FBF7BEFE01464846B4 :107DE000FDF7AAFA0121404695F84430AE8685F8A1 :107DF0002C30D4F8D4322E631B692E63EE632E61CF :107E0000A5F840706E6107B0BDE8F04F184701213A :107E100000200091CDE9011039B2CBE72DE9F04FF8 :107E20008568044689B005F58B60B5F87474FEF773 :107E300065FEE369804605F5357613B395F8531072 :107E40003046C1F3C00103F01EFA28B1D4F81C90EB :107E5000484609B0BDE8F08FA068012100F59460A4 :107E600003F011FA0028F1D1B8F1000F03D1E38C2F :107E7000BFB2BB4205D0A06800F5C660FCF7B6FDF6 :107E8000E4E7F9F7FDF86369A1469842E0D3F9F712 :107E9000F7F8238D034463613046FFF761FBD5F8A3 :107EA000D43207B2DB6930469847D5F8D4328046E1 :107EB0001B6A30469847414600233A4606902846BA :107EC000FCF78DF98046A068B5F84CB000F59460D9 :107ED000FEF78AFF064630B1014602233A4628469D :107EE000FCF77DF90646216905F1A40AD1B1079195 :107EF000F9F7C6F807991D4B091A994212D84FF4A1 :107F00007A73B1FBF3F15046C9B2FDF70DFA94F85C :107F100024303BB9A06800F22C60FBF704FD01237C :107F200084F82430A06800F5C660FCF76EFD30B11F :107F30003346424602215046FDF794FB88E7CDE9DF :107F40000400039695F87C304246C3F34003029345 :107F500095F85330594603F001030193069B5046B0 :107F600000933B46FDF712FA72E700BF9F860100BF :107F70007FB58668044606F134052846FCF73EF8CE :107F800084F824002846FCF73EF800250123E0840D :107F9000CDE9013300932A460223294684F828506C :107FA00006F58B60FEF716FE84F82950656104B073 :107FB00070BD2DE9F04F846885B0D4F8D43204F553 :107FC00035765B690546304698478146304694F8D9 :107FD00053A0FFF7C5FA07B2494600233A462046A8 :107FE000FCF7FDF804F1340983464846FCF706F82F :107FF0000AF0010A014604F58B68BAF1000F34D08B :1080000089B259443A46204689B2FCF7F7F8D4F8C9 :10801000D43201469B69304698474846FBF7F3FF48 :10802000D4F8D43207464FF6FF7130461B6B9847A1 :10803000F9F726F84FF47A73002403FB07000123B5 :1080400022462146CDE90134286100934046FEF7DF :10805000C1FDA86800F22C60FBF748FCAC846C61A1 :1080600085F8264005B0BDE8F08F052300EBC00180 :108070000331B1FBF3F1C3E72DE9F047846806460D :10808000B4F8745486B004F58B602DB2FEF736FD5B :1080900010B9B38CAB4204D0B669304606B0BDE827 :1080A000F08796F8267004F53575002F5ED1D4F868 :1080B000D4322846DB699847D4F8D43207465B6946 :1080C00028469847874208D3D4F8D43201211B6947 :1080D00028469847012386F82630F8F7D1FF7369C0 :1080E0009842DAD3F8F7CCFF00F5FA7070612846B1 :1080F000FFF736FAD4F8D4320746DB6928469847AA :10810000D4F8D43280461B6A284698473FB23A4694 :108110004146814600232046FCF761F8D4F8D4326A :1081200080465B69284698473A4601460023204628 :10813000FCF755F804F1A40A05465046FDF7EEF8A1 :108140000023CDE90433039394F87C304246C3F313 :108150004003029394F85330294603F00103CDE91C :10816000009350463B46FDF711F996E7012FB4D135 :10817000D4F8D4322846DB699847D4F8D432804604 :108180005B69284698478045A7D8D4F8D432394649 :108190001B692846984702239DE72DE9F043846830 :1081A00085B005462046FBF7E4FB012305F12409D1 :1081B00001460093074603234A462046FBF7D8FCB6 :1081C0000026C3B23146FF204FF00C0C04F58B683B :1081D000F2B2934214D8002401224046CDE9012492 :1081E0000092013B224609B2FEF7F4FCF8F748FF83 :1081F0000323A86485F84C306C6105B0BDE8F083BA :108200000CFB06F419F8044001363C1B002CB8BFE7 :108210006442E4B2A04284BF20461146D8E7000081 :108220002DE9F74F866890F84C30B6F8747406F56F :108230008B683DB2FFB2BB4218BF002304461CBF8F :10824000836443614046FEF759FC814606F21440C0 :1082500002F05DFDB6F85434984203DBA06903B028 :10826000BDE8F08F96F8E93373B1A36CABB90C237A :1082700003FB0743304693F82410FCF717F906F583 :108280003570FFF749F9E9E7FCF76EFB0028ECD001 :10829000B9F1020F0AD1206AE1E7F8F7F1FEA36C09 :1082A000C01AB0F57A7FE2D20020D8E7F8F7E8FEEE :1082B0006369984201D22046D1E7F8F7E1FE00F564 :1082C0009C40203060610C206BB204F132011A0630 :1082D00001D53A4606E0DAB2013B00FB03F54D5DFD :1082E000002DF4D00C270025012384F84C2007FB37 :1082F000024292F8249004F1240A00935246032388 :108300004946304684F8265084F8325084F83E506E :10831000FBF72EFC10F0FF0B01D1E0699FE707FB94 :1083200005F31AF803304B4503D1404629B2FEF756 :1083300044FC0135EBB29B45F1D801235246CDE90F :1083400000930349032306F1A400FDF779FFB2E788 :10835000E8D90008F0B5856885B004462846FBF7E3 :1083600008FB064605F13400FFF772F900270122E9 :10837000431ECDE9012700921BB231B205F58B6097 :10838000FEF728FCFF23676184F8243005B0F0BDB8 :108390002DE9F041866804468CB006F58B60B6F88E :1083A0007454FEF7ABFB012806F1A408EDB234D1FA :1083B00029463046FBF7BAFC074638B9404619490A :1083C000FEF7D4F838460CB0BDE8F08100236361B5 :1083D00094F82430AB421EBF002384F8245063611C :1083E000F8F74EFE6369984215D300270323294608 :1083F00003AA30460097FBF7BBFB0B49C3B203AAA5 :108400004046CDE90057FDF71BFFF8F739FE00F5B0 :108410006A40603060612046D5E70228D8D1206AE2 :10842000D1E700BFF3D9000806DA000810B504460A :10843000302104F02FF9204610BD10B50446242148 :1084400004F028F9204610BD10B50446242104F09C :1084500021F9204610BD10B50446482104F01AF950 :10846000204610BD10B504464C2104F013F92046F7 :1084700010BD10B50446342104F00CF9204610BD9F :1084800010B504462C2104F005F9204610BD10B5A6 :108490000446382104F0FEF8204610BD10B504460D :1084A000382104F0F7F8204610BD10B504465021DD :1084B00004F0F0F8204610BD10B50446402104F049 :1084C000E9F8204610BD10B50446A82104F0E2F8F2 :1084D000204610BD10B50446282104F0DBF82046E4 :1084E00010BD10B50446502104F0D4F8204610BD4C :1084F00010B50446282104F0CDF8204610BD10B573 :1085000004462C2104F0C6F8204610BD10B50446E0 :10851000482104F0BFF8204610BD10B504463421B0 :1085200004F0B8F8204610BD2DE9F04387680446F2 :1085300007F58B6840468DB0B7F87454FEF7DEFA45 :1085400094F84D30EDB2AB42064694F84C900FD003 :10855000A9F1070384F84D50032B07D8DFE803F097 :10856000022A34371DB3AB1C84F84030002363610A :10857000B9F1000F40F05281002E5AD0132D00F2B5 :108580004881DFE815F02C00500088008F0096002D :108590009D00A400AB00BE00D500E100F200460142 :1085A00025012A012F0136013B013F01410184F8D9 :1085B0004050DBE7B4F8A4309D42B6BF0023A4F8D6 :1085C0004250A4F84230D1E784F84450CEE71DB1C0 :1085D000AB1C84F84530C9E784F84550C6E794F8E9 :1085E000453094F84620069394F8443094F84010AF :1085F0000593B4F8423007F13400049394F84B30FB :10860000039394F84A30029394F84930019394F814 :108610004830009394F84730FBF758FC666A3046C0 :108620000DB0BDE8F08394F8473083F0010384F87F :10863000473094F84C3094F8A0209A4200F2008120 :1086400094F8A1209A422ABF1D464FF000084FF02F :1086500001080EB100236361F8F712FD6369264635 :108660009842DCD3F8F70CFD002200F51C501030C6 :108670006B1E60618DF82520092B00F25981DFE81F :1086800013F0E200F700010107010E0119012501B5 :108690002B013A01540194F8463083F0010384F829 :1086A0004630C6E794F8483083F0010384F8483038 :1086B000BFE794F8493083F0010384F84930B8E704 :1086C00094F84A3083F0010384F84A30B1E794F813 :1086D0004B3083F0010384F84B30AAE707230022D4 :1086E00084F84C300123CDE9013200931C2394F827 :1086F0004010022984BF0239C9B24046FEF76AFA27 :1087000097E70823002284F84C30114607F17400E3 :10871000FBF7DEFC05230021CDE901310123B4F88C :10872000A4200093013AB4F9421003B212B2E4E774 :108730000923012284F84C30002394F84410CDE939 :1087400001230092FF23D8E70A23002284F84C304B :10875000012394F84510CDE90132022988BF02397E :10876000009388BFC9B23A23C7E794F8453094F81C :108770004620069394F8443094F840100593B4F8DA :10878000423007F13400049394F84B30039394F88B :108790004A30029394F84930019394F8483000939A :1087A00094F84730FBF792FB3846FBF7EEFBA068E6 :1087B00094F8463000F5C66000F8043C97F84F3056 :1087C0000371FCF713F90023A66984F84D3026E7FE :1087D0000823A66A84F84D3021E70023E66A84F86E :1087E0004D301CE7002384F84D300123266B337194 :1087F00015E70B23A66B84F84D3010E73846FBF7DE :1088000007FBE0E7666B0AE70023E66B84F84D3070 :1088100005E707F13400FBF7E6FBD4E7012E7FF410 :1088200008AF0022132349464046CDE9016684F88B :108830004D9084F84C200096FEF7CCF94D46F8E6B2 :108840004FF0000805E746238DF8243094F84730B0 :1088500013B143238DF82430143554F825203649BC :10886000CDF8008009AB07F1A400FDF777FDD6E64F :1088700094F8463023B1314909A804F00FFAEBE728 :108880002F49F9E794F84830002BF9D02D49F3E748 :1088900094F849300BB12C49EEE72C49ECE794F8F9 :1088A0004A302B49002B14BF0522012209A804F0ED :1088B0006BF9D1E794F84B10204A214B09A8002905 :1088C00014BF1146194604F05FF9C5E794F840203B :1088D000002AD5D01F49E9E7B4F84220002ACFD0BA :1088E00094F847300BB11C49E0E710B202F0A7FC46 :1088F0001A490246DAE7B4F84230002BC0D094F8A7 :10890000442002EB82023B2A01D81549CEE73C23E2 :10891000B2FBF3F103FB11239BB28AB2002BD9D037 :10892000104909A804F030F996E794F84520CFE7FC :108930008DF8242090E700BFB7DA000802D60008BF :1089400060D5000813DA000818DA00081DDA0008FC :1089500022DA00082BDA000833DA000839DA0008D6 :108960003FDA000847DA0008F7B58768044607F5DC :108970008B60B7F87454FEF7C1F801280646EDB2D3 :1089800010D10023636194F82C30AB421EBF00234A :1089900084F82C506361F8F773FB6369984206D240 :1089A000204602E00228EED1206A03B0F0BDF8F7BD :1089B00067FB00F51C501030012E606110D1012DB5 :1089C00005D0022D06D04DB9606A0671EDE7A06AA8 :1089D0000571EAE707F17400FBF7D8FCA069E4E74A :1089E00000230C3554F825200349009307F1A40017 :1089F000FDF7B4FCD4E700BF51DA0008F7B587688B :108A0000044607F58B60B7F87454FEF777F8012831 :108A10000646EDB210D10023636194F83030AB42CA :108A20001EBF002384F830506361F8F729FB6369A7 :108A3000984206D2204602E00228EED1206A03B016 :108A4000F0BDF8F71DFB00F51C501030012E6061E1 :108A500014D1032D10D8DFE805F00207090B606A76 :108A600060B100230371EAE7A06AF9E7E06AF7E77B :108A700007F17400FBF78AFCA069E0E7002304EB30 :108A8000850500936A6B034907F1A400FDF766FCB6 :108A9000D0E700BF5BDA00082DE9F041856888B0B7 :108AA00095F85330012203F00103002B05F1340146 :108AB000044605A814BF4FF032084FF07A0840F280 :108AC000574605F58B6718BF4FF41676FBF7C9FAC2 :108AD00005F53670002505A901F0FBFF012342468C :108AE000A8463846CDE90135009329463346FEF7BE :108AF00071F8104B04F124071E88760827F8028FBE :108B0000284607220021B4F84C30009602F060FBA2 :108B10000135082D3882F1D14FF0000384F824305C :108B20004FF44033C4F81480A364A4F8466008B03E :108B3000BDE8F08156DD00082DE9F0418668044665 :108B400006F58B68404688B0B6F87454FDF7D6FF3A :108B500001280746EDB22CD10023636194F8293037 :108B6000AB4209D094F8283084F82950012B2ED03C :108B7000022B2FD000236361F8F782FA63699842D1 :108B800021D3F8F77DFA94F8281000F51C50103026 :108B90006061002948D1012F2BD1EDB1012D37D0D3 :108BA000E28C94F8241006F13400FBF734FAA4693F :108BB00009E00228D2D1E28C94F8241006F13400A6 :108BC000FBF729FA246A204608B0BDE8F08184F852 :108BD0002450CFE7E584CDE7052384F828702A46A2 :108BE000CDE900334B23029594F824104046FDF75D :108BF000F1FF00238DF8153094F828300BB1013BBC :108C0000DDB205B3012D48D000238DF814302FE0DC :108C10000223142284F82830CDE9002202914FF477 :108C2000A073B4F92610E1E7012FE2D1022300225C :108C30004046CDE9017700970139FDF7CBFF0023CE :108C400084F82830BFE794F824200AB396F853300C :108C50001549DB075FBF052302EBC2020332B2FBFB :108C6000F3F24ABF4323462392B205A803F08CFFD8 :108C700094F8283004EB8505003B18BF01230093CE :108C8000EA6A0A4905AB06F1A400FDF767FB9AE71B :108C9000074905A804F002F8EAE7E28C054905A8AF :108CA00003F072FFE4E700BF63DA000879D500083B :108CB00060D500086BDA00082DE9F04785680446A6 :108CC00005F58B60B5F87464FDF718FF94F827304C :108CD000814605F1A40705F5357A05F5946836B2A5 :108CE000002B52D1F8F7CCF9A36A984234BF002088 :108CF000012084F82700B9F1010F5DD194F82630E6 :108D0000384683F0010384F82630002B51D0FCF75D :108D1000E7FA0023636194F82630002B08BF002691 :108D2000A38CB6B2B3420BD02379002B4ED0314680 :108D30005046D5F8D4321B6B98470023A684636154 :108D4000F8F79EF96369984226D3F8F799F9284B0A :108D500000F5FA70B3F8009023796061002B3BD0E6 :108D6000244B5046B3F80090D5F8D432DB699847CD :108D700006465046D5F8D4321B6A98473246034619 :108D800049463846FCF730FD06E023793BB195F8BB :108D9000E933002BAFD100242046BDE8F0874046E0 :108DA000FEF717F8B5F808368342A4D895F8B5351C :108DB000EFE7FCF78FFAACE7B9F1020FABD1A0688F :108DC00000F22C60FAF792FD246AE5E7D5F8A034AA :108DD000314640461B6BAFE7D5F8A0344046DB690F :108DE0009847D5F8A03406461B6A4046C5E700BF41 :108DF00050DD000858DD00082DE9F04F85688BB084 :108E0000B5F87474044605F58B63049305F58B601F :108E10003BB20593FDF772FE2379064605F1A409DE :108E200005F5357B05F5946ABFB2002B55D095F852 :108E3000E933002B4CD016B9238EBB4201D000235E :108E40006361F8F71DF9636A98421FD3F8F718F9C0 :108E5000237964306062002B4AD0D5F8D43258466A :108E6000DB699847D5F8D43280465B695846984705 :108E7000A8EB00085846D5F8D4320FFA88F8DB6A18 :108E80009847414682B24846FCF7D4FDF8F7F8F817 :108E9000636998421DD32379002B3DD105F2A44884 :108EA00094F82D30002B7CD0F8F7EAF8012E00F171 :108EB0006400606133D10022022394F82C1084F8FE :108EC0002D20CDE9016600960498FDF783FE00E0B1 :108ED000002420460BB0BDE8F08FA36A002BAAD077 :108EE000F8F7CEF8A36A9842A5D995F8B535A0E76A :108EF000D5F8A0345046DB699847D5F8A0348046B1 :108F00005B6950469847D5F8A034A8EB0008DB6AA7 :108F100050460FFA88F8B3E705F53678C0E7022E19 :108F200017D194F82E10237981F0010184F82E10C6 :108F30006BB35846D5F8D4321B69984794F82E3055 :108F400013B14846FCF74CFDA06800F22C60FAF71C :108F5000CDFC238EBB420ED094F82C103A46013142 :108F6000C9B24046278601F0DAFD3A46484694F8F1 :108F70002C10FCF745FD237973B15846D5F8D4324F :108F80001B6A984701464846FCF77AFDA1E7D5F8E9 :108F9000A03450461B69D0E7D5F8A03450461B6A70 :108FA000EFE7F8F76DF8238E00F57A70BB421EBF2D :108FB000059B278684F82C30012E606115D19DF821 :108FC00014104FF0FF3284F82C100131C9B2404622 :108FD00084F82D6001F0A3FD0A2300220096CDE95C :108FE000013201B244F620636EE7022E12D1D8E9B5 :108FF0000423D8F80C1007A801F066FD2279284652 :1090000007A9FAF7D4FFA06800F22C60FAF76EFC0B :10901000246A5EE7012507AEE9B24FF0FF32404611 :1090200001F07DFD0135042D26F8020BF4D14846F0 :1090300094F82C2007A9FCF785FE4AE730B50123F8 :1090400000250446806885B02A462946CDE90135C9 :10905000009300F58B60FDF7BDFDA06800F22C6069 :10906000FAF769FC656105B030BD38B5856804461E :1090700005F58B60FDF742FD10B1A469204638BDAF :10908000F7F7FEFF63699842F8D3F7F7F9FF00F5A9 :109090006A406030606105F1A400FDF7D9F9EDE7A1 :1090A00038B58568044605F58B60FDF727FD012876 :1090B00002D1A469204638BD022801D1246AF9E70B :1090C000F7F7DEFF63699842F4D3F7F7D9FF00F5AD :1090D0006A406030606105F1A400FDF7ABFAE9E792 :1090E0002DE9F0418568044605F594680121404664 :1090F00086B002F0C8F894F8263005F5357783423B :1091000023D0D5F8D43200211B6B84F826003846D2 :1091100098470021B5F80A26084602F087F84FF074 :1091200080439863002394F82620A068A3846AB340 :1091300002930123B4F92A20CDE90033B4F92C308D :10914000114600F58B60FDF745FDA368B3F8746424 :10915000A38CB6B2B3420DD0002194F82630A68479 :109160006161DBB13046B5F80A2602F05FF84FF0D6 :1091700080439863A06800F58B60FDF7BFFC022870 :1091800013D1276A384606B0BDE8F08101230521D6 :109190000292CDE90031B4F92830D1E7D5F8D432C4 :1091A000314638461B6B9847E4E7F7F769FF636978 :1091B00027469842E6D3F7F763FF00F2EB106061B1 :1091C00005F2144001F0A3FD94F82630ADF8140028 :1091D0003BB3D5F8A0344046DB699847ADF81000A2 :1091E00005F2AC5001F093FD164BADF812005B6A2E :1091F000ADF81630FBF7B8FB20B1BDF8163064337C :10920000ADF8163004AA95F8E933019295F8B52522 :1092100094F82610009205F1A4003246FDF7B0F94B :10922000B0E7B5F8083405F57870ADF8103001F006 :109230006EFDADF8120005F57C7001F068FDADF82B :109240001600DFE7002C01402DE9F04F8568044649 :1092500005F58B6A504689B0B5F87474FDF74EFC7D :10926000636A064605F5946863B10121404602F041 :109270000AF838B10023666A86F84930304609B0EA :10928000BDE8F08F05F21449484601F040FDB5F8FD :10929000543498420FDBBFB2BEB1A06800F5C6607F :1092A000FBF7B3FB00287FD1012E40F09580E669E3 :1092B000002EE3D184E095F8E933002BEBD1FBF7E6 :1092C00053FB0028E7D0A669D8E7238EBB42E4D140 :1092D000F7F7D6FE636926469842CFD3F7F7D0FE5C :1092E00094F82C3000F57A7005F1A40705F5357A6D :1092F0006061B3B1D5F8D43250469B68984780B1CD :109300003846FBF7F3FFA06800F22C60FAF70BFB7E :10931000F7F7B6FE002300F56A406030A06284F8DB :109320002C30A36A4BB1F7F7ABFEA36A984204D383 :1093300000233846A362FBF7CDFF484601F0E7FC67 :10934000B5F85434984294F82E3069DB6BB901219A :1093500005F1740084F82E10FAF7A4FE2846FAF7F7 :10936000FBFB01463846FBF7E7FFD5F8A034404643 :10937000DB699847554B014693F800B02846002317 :109380005A46B5F83CA0FAF72AFF8146A06800F5D6 :10939000C660FBF73AFB044638B300234A46032174 :1093A0003846FCF75FF969E7B4F930105046FDF72D :1093B00004FCA06800F5C660FBF718FB002363619E :1093C000238EBB4284D03946278605F13400FAF754 :1093D000CDFD002363617BE7022EF1D1A06800F28E :1093E0002C60FAF783FA266A62E7D5F8A034404683 :1093F0001B6A98470123CDE90343059495F87C3017 :109400004A46C3F34003029395F85330514603F0A4 :109410000103CDE900035B463846FBF7B7FF2DE7B4 :109420006BB1002105F1740084F82E10FAF73AFEB2 :109430002846FAF791FB01463846FBF77DFF504678 :10944000FEF78EF8D5F8D4320FFA80F8DB69504673 :1094500098470023014642462846FAF7C0FE814657 :10946000A068B5F83AB000F59460FDF7BDFC014680 :1094700028B1022342462846FAF7B1FE0146A06809 :10948000079100F5C660FBF7C0FA0799044618B1CA :109490000B464A46002183E7D5F8D43207911B6A70 :1094A00050469847CDE9044407994A46039195F8F8 :1094B0007C305946C3F34003029395F8533003F0D0 :1094C0000103CDE900034346A6E700BF4DDD0008D8 :1094D00010B504460846B4F86A21B4F86E1101F0DC :1094E000A5FEA4F8340110BD30B50446856889B0E6 :1094F000027905F1340105A8FAF7B3FD2379A068D4 :1095000005A92BB300F5367001F0E3FA2179743523 :10951000284681F00101FAF7C5FD00220123A06869 :109520001146CDE90133009300F58B600323FDF76D :1095300051FB284604F12601FAF7EAFE0023042233 :1095400084F82430E3852363A286636109B030BDCB :1095500000F2A44001F0BDFAA068E18E00F594602D :10956000FFF7B6FFD2E7F0B583680279044685B00D :1095700003F58B670AB30020B3F83E540026052399 :109580000321CDE90136B5FBF1F10123A06200937F :1095900038462BB2324609B2FDF71CFB4FF480333C :1095A0006362A36883F83A6183F83261A068A430EB :1095B00005B0BDE8F040FBF793BE03F59466D3F821 :1095C000A03430465B6B984740F2DC51054630468C :1095D000FFF77EFFF7F754FD00F5FA60CEE7C0E92C :1095E000061203627047836910B504463BB10369F4 :1095F0002BB1F7F745FD2369984228BFA46920469F :1096000010BD838910B504463BB1F7F739FD4FF41F :109610007A72A38902FB0300206110BDF8B585684A :109620000446B5F8743405F53576C38495F85230A0 :10963000C3EB03139B008381FFF7E3FF3046FDF785 :109640008FFF01B22846FAF79CF9D5F8D4320746C5 :109650001B69304601219847304600263946FDF700 :1096600069FF05F1A40084F82460FBF751FEA068AF :10967000666100F22C60BDE8F840FAF754B930B5E5 :10968000012300250446806885B02A462946CDE995 :109690000135009300F58B60FDF79CFA14232046FA :1096A000A381FFF7AEFF656105B030BDF8B58468F2 :1096B000D4F8D43204F535755B69284698470646D8 :1096C0002846678FFDF74CFF394602B22046FAF76D :1096D00095FD8642014604D02846BDE8F840FDF7D6 :1096E00097BEF8BD70B504460D468668F7F7C8FC0E :1096F000E36B03B135B141F2883296F84E3002FB8C :109700000303E363E36B83428CBF0020012070BD41 :109710002DE9F74F894690460C9B00F12C0A87688B :1097200004465046DDF834B0BDF83850019301F0DE :10973000EEFAC14507F1A4060ED8A8EB0908B8F166 :10974000040F09DC019BC82B06D8BBF1190F03D805 :109750002946504601F0CFFA281A0028B8BF4042E7 :10976000952811DDF7F78CFC4EF6602297F8523001 :1097700002FB030000232061304684F8343003B03C :10978000BDE8F04FFBF7ACBD236943B9F7F778FCB0 :109790004EF6602297F8523002FB030020612569E3 :1097A000F7F76EFC0F4B291A994215D84FF47A73CC :1097B000B1FBF3F13046C9B2FBF7B6FD94F8343093 :1097C0003BB9A06800F22C60FAF7ADF8012384F8E9 :1097D000343003B0BDE8F08F304603B0BDE8F04F41 :1097E000FBF790BD9F8601002DE9F04F8568044688 :1097F00005F58B6738468FB0B5F874B4FDF77EF980 :10980000636A06460FFA8BF983B1A068012100F55F :10981000946001F038FD48B195F85330606AC3F3A5 :10982000800380F849300FB0BDE8F08F1EB9B4F85E :1098300040304B451AD0A06800F5C660FBF7E5F84C :1098400040B9012E41D12846FAF79FFBE069002874 :10985000E9D10BE0B4F940103846FDF7AEF9A06845 :1098600000F5C660FBF7C2F80023636105F53578A3 :109870004046FDF775FEB4F8403007B24B451DD0A9 :1098800000261FFA8BF93A4649462846A4F840902C :109890002661A6866661FAF7B1FCD5F8D432014696 :1098A0009B694046984705F134004946FAF75EFB4C :1098B000A068266300F5C660FBF798F8F7F7E0FBB1 :1098C000636998420BD22046ADE7022ECED105F156 :1098D0003400FAF793FB0028C8D0206AB7E7F7F7FF :1098E000CFFBB4F8423003446361D5F8D43240462C :1098F000DB699847D5F8D43207905B6940469847B2 :10990000D5F8D43208901B6A404698473A460799E2 :1099100000230A902846FAF762FCD5F8D432824632 :109920009B6A40469847D5F8D4320B90DB6A404694 :109930009847D5F8D4320C905B6A40469847099016 :10994000A06800F59460FDF74FFA064630B1014675 :1099500002233A462846FAF742FC0646B5F84C3050 :10996000002B49D095F853104046C1F3C0010D9328 :1099700001F089FC80460D9BDDE90702121A0532D1 :109980000A2A94F8351005F1A40937D80B9AB2F5D4 :10999000FA7F33D8099A8AB389BB012384F835301A :1099A000F7F76EFB00F5FA60A0634846FBF7A4FCEE :1099B000A06800F22C60F9F799FFA06800F5C66076 :1099C000FBF723F800287FF47EAFCDE90408039667 :1099D00095F87C305246C3F34003029395F8533018 :1099E000484603F0010301930A9B1FFA8BF1009391 :1099F0003B46FBF7CBFC66E79846BDE759B1A26B47 :109A00004AB943B341462046FFF76CFE18B1A06A3D :109A100000287FF408AF2046FFF748FE94F8353061 :109A20005BB1A36B4BB1F7F72BFBA36B984204D34D :109A300000234846A363FBF753FCA06800F5C6600B :109A4000FAF7E3FF0028C0D03346524601214846CA :109A5000FBF708FE37E795F85230002BDBD0DDE945 :109A60000712099B204602930C9B01930B9B0093CA :109A70001FFA8BF3FFF74CFECDE7000070B51D46D3 :109A80000123044603710020184B16462360184B2F :109A90005022C4E911304FF48073C4E90400C4E9D2 :109AA0000600A0812062A16084F84000A4F8420072 :109AB000A4F84C300F49A01803F0F8F840F607233B :109AC000A4F8A0300D2384F8A2307823A4F8A430A1 :109AD000049B2046E362059BC4E909652363069B5A :109AE0006363079BA363089BE36370BD1CDC0008F2 :109AF000000001012CD40008F0B51E4601230371BB :109B00000023C0E90433C0E9063383810362094BB3 :109B1000044603600423174680F82C30064B00F1FE :109B2000300581600FCB85E80F002046C4E9097637 :109B3000F0BD00BFF4DC00087CD400082DE9F04F34 :109B400000F1240C054600F13409002004460746C4 :109B50008046064687B001913CF8021F9142BCF84E :109B600010E008D3994206D80EFB016601FB0144C0 :109B7000884477440130CC45EED102287CDDF6F7ED :109B800041FC824640468B46F6F73CFC8046384610 :109B90008946F6F737FCCDE902013046F6F732FC8C :109BA00052465B46F6F798FCDDE9022306460F466F :109BB00040464946F6F790FC02460B463046394689 :109BC000F6F7D2FACDE904012046F6F71BFC52461F :109BD0005B46F6F781FC424606460F464B4640463A :109BE0004946F6F779FC02460B4630463946F6F709 :109BF000BBFA02460B46DDE90401F6F797FD024683 :109C00000B4606460F4640464946F6F765FC0246B7 :109C10000B46DDE90201F6F7A7FA52465B46F6F776 :109C200085FD4FF0000A80468946A86800225FFA49 :109C30008AF17430FAF74CFAF6F7D4FB32463B4619 :109C4000F6F74AFC4B464246F6F790FA02F052FD10 :109C5000F6F754FE019B23F81A000AF1010ABAF143 :109C6000040FE2D1064B019A1B88D2889A4201D98F :109C7000019AD380012000E0002007B0BDE8F08FFA :109C800056DD000870B5002200F124044FF47A7507 :109C9000082034F8023FD6B23BB15B1A002BB8BFA4 :109CA0005B42AB42BCBF30469DB20132082AF0D1C4 :109CB00070BD000073B50C4682680546B2F8883066 :109CC000B2F88A20002100922046082201F080FA92 :109CD00005EB440283B2042C1846D28C26D803EB41 :109CE00093018A4222DDB5F84630214AA3EB930363 :109CF00012889BB29108B3EB920F38BF0B46013428 :109D0000A5F84630E4B205F13606E3B2072B2CD8AD :109D1000B5F846302046009307220021B5F84C30B4 :109D200001F056FA26F814000134EEE700EBD306F2 :109D3000B2424FEAD30104DDB5F8463003EBD3035A :109D400009E0042C0ED8A0EB93039A420ADAB5F886 :109D5000463003EB9303064A9BB21288934228BF16 :109D60001346CCE7401A8242E6DB02B070BD00BF6A :109D700056DD00082DE9FF418668044606F17405AA :109D8000002202212846FAF7A3F99622034602A9E7 :109D90002046FFF7D3FE00283CD0002203212846AE :109DA000FAF796F901462046FFF76CFF002280463D :109DB00003212846FAF78CF900220746022128469B :109DC000FAF786F904EB4804E38E01460093E28C2F :109DD0003846BDF80C3001F0FBF9104A83B2108808 :109DE000984228BF1846ADF80E003046F9F7C1FD7D :109DF000074606F53570FDF7B3FB44B22246284608 :109E000002A9FAF793FA032339463046009402AACE :109E1000FAF75AFB04B0BDE8F08100BF56DD000838 :109E20002DE9F04F044685688DB005F58B6BB5F8CC :109E300074845846FCF762FEB4F94A301FFA88FA77 :109E40009A451EBF0023A4F84A806361012894F854 :109E5000493005F535760FFA88F740F0E580002B9C :109E600045D0D5F8D43200211B693046984794F884 :109E70004830002B00F0D180002384F84830D5F81A :109E8000D4323046DB69984795F853308046DB077B :109E900000F1BD80384601F0DAF983B294F824105D :109EA00004EB4102D384A2F83680B5F88A20143A34 :109EB000934280F2AE802046FFF7FCFE94F82430F7 :109EC0009622013384F8243020464FF4167309A9F2 :109ED000FFF734FE40B13046FDF742FB09A942B21C :109EE00005F17400FAF722FA002384F8493094F857 :109EF0002430072B00F29E800127D5F8D42204EBF2 :109F00004303D98E3046926984F849709047D5F85A :109F1000D43239461B693046984700236361F7F70E :109F2000AFF8636998427BD3F7F7AAF800F5FA70A7 :109F300060613046FDF714FBD5F8D43280465B698A :109F400030469847D5F8D4320790DB6930469847B9 :109F5000D5F8D43207461B6A30469847002306904E :109F60000FFA88F239462846FAF739F93A4B804613 :109F7000B3F80090B9455DD994F84930F3B1079B27 :109F8000DB1B1033202B19D8D5F8D4323046DB6ACE :109F90009847C82812D8069B012B0FD994F848304F :109FA00063B9A06800F22C60F9F7A0FC58460FFADC :109FB00088F1FCF702FE012384F84830B4F84C1015 :109FC000B94247D864234A4600933846002301F03B :109FD000FFF8C6B22846F9F7BFFD94F8242005968D :109FE00094F848300132049394F8493001460393C1 :109FF000069BD2B2029395F8533005F1A40003F00A :10A000000103CDE900A34346FBF7F4FE08E0534605 :10A0100044E7082384F8243066E784F84930636114 :10A0200020460DB0BDE8F08F002B7FF478AF0228FA :10A030007FF475AF2046FFF79DFE227905F13401CC :10A0400009A8FAF700F809A905F5367000F041FDF6 :10A05000246AE5E70026BDE756DD00081549D088EB :10A06000098830B5884288BFD180032B14D802EB11 :10A070004300032B11D1D3888B4288BFD180911D1F :10A080000B8831F8020D181AC728DEBFC83B23EA37 :10A09000E3730B808A42F3D130BD054630F8024BA2 :10A0A0006D8801332D1BC72DDCBFC8340480DBB2A3 :10A0B000DFE700BF56DD0008F0B5054685B00C4669 :10A0C00017463431027901A81E46F9F7BCFF2D79F5 :10A0D00001A925B1381D00F0FCFC05B0F0BD301D14 :10A0E00000F0F7FC294604F17400F9F7DBFFF4E710 :10A0F0002DE9F04F85680446B5F8748405F58B6B3F :10A100000FFA88F38DB058460993FCF7F7FCB4F9C1 :10A1100034301FFA88FA9A45814605F5357605F5FB :10A12000946717D094F82F30A4F8348083B1237942 :10A1300043B351463046D5F8D4329B699847002343 :10A1400084F82E30F6F79CFF00F59C500830206311 :10A15000002363613046FDF703FA0790BDF91C3018 :10A1600008932379A3B195F8E983B8F1000F19D1C9 :10A170003B46324629462046FFF79EFF40460DB03B :10A18000BDE8F08FD5F8A034514638469B69D5E735 :10A19000236B3BB1F6F774FF236B984202D995F815 :10A1A000B585E2E7B9F1010F40F0F38094F82F3064 :10A1B000002B00F0B380D5F8D432002130461B6963 :10A1C0009847D5F8A03400211B693846984794F881 :10A1D0002E304BB3002384F82E302379002B00F06F :10A1E00098803046D5F8D432DB69984794F824300B :10A1F0009DF91C8004EB4302D084E28C4146ADF80B :10A200002820228D2046ADF82A20628DADF82C2022 :10A21000A28DADF82E200AAAFFF720FF42460AA918 :10A2200005F17400FAF782F801230022CDE9013329 :10A2300000935846032394F8241084F82F2094F8B0 :10A2400024A0FCF7C7FC002363615FFA8AF309933B :10A2500094F82F30002B00F0C58094F824B0F6F766 :10A260000FFF6369A046984288D3F6F709FF237968 :10A2700000F5FA706061002B00F0B780D5F8D43299 :10A2800030465B699847D5F8D4328146DB69304661 :10A290009847D5F8D43282461B6A30469847D5F89D :10A2A000D4320790DB6A30469847C82294F82F30A2 :10A2B00005F17406002B40F0B18000220999304668 :10A2C000F9F706FF089A01462846F9F797FF8146F5 :10A2D000A3682846A4330893F9F73EFC594607467D :10A2E00000223046F9F7F4FE94F82E30024604932B :10A2F00094F82F3039460393079B0898029395F8FA :10A30000533003F00103CDE900935346FBF76AFE97 :10A3100034E7D5F8A0343846DB6966E79DF82410A9 :10A320001A4684F8241084F82F9005F174000793DE :10A33000F9F7CEFE089A01462846F9F75FFF079B1A :10A340000A2202930523CDE90032494B01B2B3F949 :10A350000030804664225846FCF73CFC237963B108 :10A36000D5F8D432414630469B6998474946304635 :10A37000D5F8D4321B69984765E7D5F8A034414633 :10A3800038469B699847D5F8A034494638461B693A :10A39000F1E7B9F1020F7FF458AF2846F9F7E9FA6F :10A3A0008146334BA28D1B889DF91C809A4204F193 :10A3B000260A88BFA3854246514605F17400F9F785 :10A3C000B5FF0323524649462846CDF80080FAF7E8 :10A3D0007BF83B46324629462046FFF76DFED4F80F :10A3E0002080CBE6DDF824B039E7D5F8A034384634 :10A3F0005B699847D5F8A0348146DB6938469847B1 :10A40000D5F8A03482461B6A38469847D5F8A03460 :10A410000790DB6A38469847282247E7A9EB0A03EA :10A420001033202B3FF654AF90423FF651AF079BBD :10A43000012B7FF64DAF94F82E70002F7FF448AFBC :10A44000236B002B3FF444AFF6F71AFE236B9842C0 :10A4500008D9A06800F22C60F9F748FA01232763B5 :10A4600084F82E3094F82F30002B7FF431AF24E79E :10A4700056DD0008F0B51F46012303710023C0E933 :10A480000433C0E90633838103620A4B0446036048 :10A4900005239446084E00F13405816080F8303081 :10A4A0000FCE0FC5336820462B60059BC4E909C752 :10A4B000E362F0BD0CDD00088CD400082DE9F84300 :10A4C0004FF00008012604468568314605F594677B :10A4D000C0F83C800687C0F8408005F17400F9F7A9 :10A4E000E1FD05F1A409E98F384685F83A8185F840 :10A4F0003281FEF7EDFF4846FAF7ECFEA06800F562 :10A500003570FDF72DF8A98F02B22846F9F776FECF :10A51000D5F8A03401469B69384698473846FCF781 :10A5200083FC01464846FAF711FFD5F8A0343146BE :10A530001B69384698474846FAF7D2FE94F84930E6 :10A540002BB1A068314600F53570FCF769FE002399 :10A55000012263636361E263626484F8483095F8C2 :10A560004F3004F1240084F82830BDE8F843FAF7AE :10A570003DBA2DE9F04F8568044689B005F5357080 :10A58000FCF7EEFFE36B064605F5946A05F58B686C :10A59000ABB3F6F775FDE36B984230D395F85330C3 :10A5A000B5F83C90DB07B5F888B0B5F88A7009D4E7 :10A5B0000FFA8BF000F043FE1FFA80FB38B200F078 :10A5C0003EFE87B295F953100FFA8BF200293BB289 :10A5D00033DA05200027B9FBF0F1CDE9010701EBE3 :10A5E00081011FFA81F9009009B24046FCF7F2FAA6 :10A5F000012384F838300023C4F83490E3634046E4 :10A60000B5F87474FCF77AFAE26A03468146BFB281 :10A61000DAB9002B37D004F1240B5846FAF7F5F9D4 :10A62000A0B3B4F934104046FCF7C7FA5846FAF71D :10A63000DDF900239946636128E0012100200091A3 :10A64000CDE901100FFA89F1CFE7079001215046BB :10A6500000F019FE079B83460028DAD12846F9F757 :10A6600094FC594605F17400F9F71CFD94F8493043 :10A670003BB1276B2FB184F849B0384609B0BDE82B :10A68000F08FE76AF9E7636B9F42C4D195F85330C6 :10A690005B0702D5B9F1020F36D0B9F1000F51D1E5 :10A6A000636B05F1A4089F4236B200F08280D5F8B2 :10A6B000A03450465B696763984794F83830814608 :10A6C000B5F8D4B5002B62D0394632462846F9F7A2 :10A6D00095FDD5F8A034014681469B6950469847C0 :10A6E0005F460023324649462846F9F778FD3A4648 :10A6F000014605F13400F9F73BFC0023636104F1E6 :10A700002400FAF773F957E0A06894F8493000F58F :10A71000357073B10021FCF783FDA06800F22C6056 :10A72000F9F701F994F8493083F0010384F84930CE :10A73000B6E70121FCF774FDA06800F22C60F9F780 :10A74000D5F8EFE7002294F838306261D3B14FF0CA :10A750000A0C0520B5F90A36B5F8D4B5B5F9D41503 :10A76000CDE9000C02924046FCF734FA0022C4F80E :10A7700034B084F83820F6F783FCB4F84A30034448 :10A78000E3638DE7F6F77CFC2746E06375E739461F :10A790005046FEF79DFE5046FCF746FB01464046FC :10A7A000FAF7D4FDF6F76CFCB4F84A300344E363DF :10A7B00097E7B9F1000FA2D1636CBBB1F6F760FC6B :10A7C000636C984212D395F8B5357BB1404694F846 :10A7D0004810FAF7C3FD94F84830013303F003033F :10A7E00084F84830F6F74CFC64306064F6F748FCB7 :10A7F000636927469842FFF440AFF6F741FCD5F86D :10A80000A03400F5FA705B69606150469847D5F84E :10A81000A0348346DB6950469847D5F8A03481467A :10A82000DB6A50469847D5F8A0240790126A504634 :10A83000904794F839208246FAB90FFA8BFB0FFA49 :10A8400089F2ABEB020B0BF1310BBBF1620F14D8A9 :10A85000079B072B11D880B1012384F83930F6F714 :10A860000FFC00F59C5008302064A06800F22C60BA :10A87000F9F73CF84046FAF73FFD236C4BB1F6F789 :10A88000FFFB236C984204D34046FAF729FD0023CE :10A8900023644946002332462846B5F83CB0F9F710 :10A8A0009EFC8146A06800F53570FCF7A3FD0146CB :10A8B00028B1012332462846F9F791FC014604F1FC :10A8C00024000791FAF7A1F8079930B10B464A46E0 :10A8D00003214046FAF7C6FECFE694F848300590CB :10A8E0000133DBB2CDE9031395F87C304A46C3F35C :10A8F0004003029395F85330594603F00103CDE924 :10A9000000A340463346FAF741FDB6E67FB58568B9 :10A91000044605F1A4063046FBF762F830461849B4 :10A92000FBF764F8002201231146CDE901330093BF :10A9300005F58B600223FCF74DF9A0684FF4966192 :10A9400000F53570FCF786FC0E4B00211A884FF499 :10A950009660A56800F06AFCA5F8D205A06840F2F0 :10A96000DC5100F59460FEF7B3FD0323238600233A :10A97000C4E90933A38584F82E30636104B070BD47 :10A9800072DA000856DD00084A29104608B50FD0D3 :10A9900005D8282908D0292907D0012008BD4B292E :10A9A000FBD14FF4806105E00120F6F76FFBF4E77F :10A9B0004FF400610148F7F74BF9EEE7000C014056 :10A9C00070B51546A1F1140204461E460C2A3BD868 :10A9D000DFE802F02C3A3A071E2E3A3A3A3A3A3A6F :10A9E00015001A48F8F726FB01280446F9D164231C :10A9F0002A4631461548F8F769FA204670BD2A1EE6 :10AA000018BF01224FF400611148F7F721F90DE05A :10AA100003684FF480611A780E48F7F719F9226835 :10AA200000232C21204665699278A8470124E4E799 :10AA3000026800232C21D2784569A84723684FF487 :10AA400080615A780348E0E70024D6E7340E0020FE :10AA5000000C01400008014030B5143914461D4671 :10AA600085B00C292AD8DFE801F01F2929071C1C12 :10AA700029292929292926001148F7F711FE20281C :10AA8000FAD1104B78211A784FF0FF33003A18BFF3 :10AA90000122CDE901430A48012300959201F7F70D :10AAA00081FB012005B030BD026800232C214469E0 :10AAB0009278A047F5E7034B1A70F2E70020F1E720 :10AAC000E00D0020640F002010B5C0E90012836083 :10AAD00010BD4B680A68312BC26002EB82028968A4 :10AAE0008261C8BF0A220361CCBF93FBF2F3052346 :10AAF0004161C361704730B501600A24002505211A :10AB0000C0E9034445618461C161028480F8223058 :10AB100030BD002309B28180C18083607047022963 :10AB200008D003290BD001290ED1002AA8BFC2608A :10AB3000C0687047002AA8BF026100697047002AF8 :10AB4000A8BF42614069704700207047F0B590F897 :10AB50002260B0F90440B0F906508B1ADEB102F160 :10AB600064068E4217DAD0E9066159436CB903FBDB :10AB70000613C280012283608580B0F92000411E47 :10AB80008A40134443FA00F0F0BDAB1A06FB0311F0 :10AB900083680B44EDE7D0E903615943002CE6D00C :10ABA000AF1A06FB071143691444A4EB450403FBE9 :10ABB0000411EDE790F8D43070B503F0FF020446BD :10ABC0000D460EB2002B60D090F8DD306BB1B0F8BE :10ABD000D0309BB2B34208DA002380F8DD30B0F801 :10ABE000E010883089B200F09AF8B4F8D030B4F8A8 :10ABF000D2209BB292B21344B34220DA002384F8ED :10AC0000D430D4F8D830002B3AD0F6F739FA0646CB :10AC1000D4F8D810411A204600F081F8C4F8D86062 :10AC2000B4F8E23001339BB2A4F8E230002384F898 :10AC3000DD30012384F8DC30ABB2A4F8DE3094F8C8 :10AC4000DC303BB1B4F8DE309BB2AB423CBFABB2C0 :10AC5000A4F8DE3094F8DD303BB1B4F8E0309BB2BC :10AC6000AB4284BFADB2A4F8E050B4F8CC0094F885 :10AC7000D43080B273B3B4F8CE30184480B270BD13 :10AC8000F6F7FEF9C4F8D800D0E790F8DC3063B1ED :10AC9000B0F8D0309BB2B34207DD80F8DC20B0F8CA :10ACA000DE10443089B200F03AF8B4F8D030B4F88D :10ACB000D2209BB292B29B1AB342C0DD0123002284 :10ACC00084F8D43084F8DC2084F8DD30ABB2A4F80A :10ACD000E030B4E7B4F8CE30C01ACFE730B504782E :10ACE0004368027803EB5403B3FBF2F3456829444D :10ACF000C91A416030BD38B50578FFF7EFFF4368EA :10AD0000EDB2007803EB5503B3FBF0F038BD0278E9 :10AD10004368007803EB5203B3FBF0F0704790F800 :10AD2000402090F841309A4209D290F84030DAB28F :10AD30000133DBB280F8403040F82210704790F8C1 :10AD40004230DBB240F8231090F842300133DBB2DE :10AD500080F8423090F84120934224BF002380F8CD :10AD6000423070479342017038BF1346002143813F :10AD700041608281417270470346007A08B1002227 :10AD80001A72704710B504460846B4F90A20B4F99F :10AD90000C1002EB6202A1EB610192B289B200F0E9 :10ADA00045FA81B22046FFF7A6FF637A80B233B13D :10ADB000B4F90C30834201DD0123238110BDB4F9C5 :10ADC0000A308342FADA40F20113F6E70E4B82B002 :10ADD0009A6942F001029A619A6902F001020092B6 :10ADE000009ADA6942F08052DA61DB69074A03F0BF :10ADF00080530193019B536823F0E06343F0007399 :10AE0000536002B0704700BF0010024000000140D4 :10AE1000102230B5054689B00DEB0200002101F08B :10AE2000D3FE2B682B4A934235D12B4B7C219A6958 :10AE30002A4842F400729A619A69294C02F400721D :10AE40000092009A9A6942F004029A619B6903F0A9 :10AE500004030193019B0323CDE9041304A9F6F72E :10AE600017FE4FF400724FF0800C0023C4E903C2B8 :10AE70004FF400621B48C4E90523C4E900032046DF :10AE8000A360E361F6F7E0FC08B1FCF747FE2C6233 :10AE9000656209B030BD144A9342FAD10E4B0F4897 :10AEA0009A6904A942F480629A619A6902F4806204 :10AEB0000292029A9A6942F004029A619B697C228A :10AEC00003F004030393039B0323CDE90423F6F764 :10AED000DFFDDEE7002401400010024000080140D1 :10AEE0009C0D0020080002400028014010B50446D7 :10AEF00086B01022002102A801F066FE2268114BE4 :10AF00009A421CD1104CC022A369104843F0080398 :10AF1000A361A36902A903F008030093009B122315 :10AF2000CDE9022303230593F6F7B2FDE36943F469 :10AF30000013E361E36903F400130193019B06B07E :10AF400010BD00BF0054004000100240000C014042 :10AF500010B5044686B01022002102A801F034FE8C :10AF60002268124B9A421ED103F5EC33DA6910487D :10AF700042F48042DA61DA6902A902F48042009266 :10AF8000009A9A6942F008029A619B694FF4204244 :10AF900003F008030193019B0223CDE9022303235D :10AFA0000593F6F775FD06B010BD00BF00380040F0 :10AFB000000C0140102210B5044688B00DEB0200D1 :10AFC000002101F001FE2368254A934225D1254B3B :10AFD00025489A6904A942F400629A619A6902F4C8 :10AFE00000620092009A9A6942F004029A619B6999 :10AFF00003F004030193019B4FF480530493012356 :10B000000693F6F745FD00221B201146F6F7CAFB12 :10B010001B20F6F7F7FB08B010BDB3F1804F11D13C :10B0200003F50433DA691C2042F00102DA610022E0 :10B03000DB69114603F001030293029BF6F7B2FBB2 :10B040001C20E6E7094A9342E5D1064BDA6942F053 :10B050000402DA61DB6903F004030393039BDAE77C :10B06000002C014000100240000801400008004090 :10B07000102210B5044688B00DEB0200002101F04B :10B08000A3FD23681F4A934215D11F4B9A6942F0D2 :10B0900004029A619B6903F004030193019B4FF43E :10B0A00000630493022319480593079304A9F6F754 :10B0B000EFFC08B010BDB3F1804F0CD103F50433A1 :10B0C0009A6942F004029A619B6903F004030293B7 :10B0D000029B0323E5E70E4A9342EAD10A4B0D484F :10B0E0009A6904A942F008029A619B694FF40072C0 :10B0F00003F008030393039B0223CDE90423079382 :10B10000D5E700BF002C01400010024000080140BC :10B1100000080040000C01407047FEE7FEE7FEE734 :10B12000FEE7704770477047F5F79EBF0148F6F796 :10B130001BBC00BF9C0D00200148F7F7F9BF00BF02 :10B140008C0E00200148F7F7F3BF00BFD40E00209B :10B150000A4A08B51168034609B9094911606946E8 :10B16000106803448B4206D901F06CFD0C23036088 :10B170004FF0FF3008BD1360FCE700BF680F0020F0 :10B18000001500200F4B1A6842F001021A6059683E :10B190000D4A0A405A601A6822F0847222F4803202 :10B1A0001A601A6822F480221A605A6822F4FE0299 :10B1B0005A604FF41F029A604FF00062034B9A608E :10B1C000704700BF001002400000FFF800ED00E0F3 :10B1D000914210B50446184609D0029B521A641ACF :10B1E000191A531001FB043393FBF2F3184410BDFA :10B1F000642807B528BF6420462928BF46210A2AAB :10B2000038BF0A2281424FEA520309D30093002338 :10B210000A461946FFF7DCFFC0B203B05DF804FB35 :10B220000131009201336422C9B2F3E703468B4235 :10B23000084603DB9342A8BF134618467047052310 :10B2400000EBC000A23090FBF3F000B2704709237E :10B250009B3890FBF3F000B270472DE9F0410446B3 :10B260009DF81850BDF81C60BDF8207000F5867080 :10B27000FFF778FD3B463246294604F58E70BDE85F :10B28000F041FFF76FBD19B900F58E70FFF774BD7F :10B2900090F8250170470000FFF774FF0B480C4938 :10B2A0000C4A002302E0D458C4500433C4188C4222 :10B2B000F9D3094A094C002301E013600432A24289 :10B2C000FBD301F0C5FCFCF71FFA7047000000201B :10B2D0004002002058E20008400200200015002033 :10B2E000FEE72DE9F74FCE18531CDBB2F6B290F80B :10B2F00086900093334605460C46904600F027FDA5 :10B3000050B1B9FA89FA80274FF0000B4FEA5A1A68 :10B31000A64204D185F8869003B0BDE8F08F0C9B5F :10B320001B781F4215D085F88690CDF800B0012318 :10B3300042462146284600F06DFC7F0808BF0C9B62 :10B3400004F1010404BF01338027E4B208BF0C9369 :10B35000DEE795F88530002BEFD185F886A00093C5 :10B36000E5E72DE9F3479DF82850DE00F6B21544D5 :10B370009846EDB273180095DBB281460F4614462D :10B38000DDF82CA000F0E3FC68B902B0BDE8F0875E :10B390002246CDF800A0334639464846FFF7A1FFC4 :10B3A0000134C244E4B2A542F2D1EEE72DE9F743FD :10B3B0009DF828501F461544EDB2CB180095DBB21E :10B3C00080460E46144600F0C2FC18B14FF000094A :10B3D000A54202D103B0BDE8F08322463B46314688 :10B3E0004046CDF80090013400F014FCE4B2EFE7E1 :10B3F0002DE9F74304460026036890F83C9090F846 :10B400003D7093F811802368A06B1B7CF5B203FBA1 :10B4100006F1C90089B208447A190135009000216B :10B420002046D2B2EDB201F0DAF8A94504D90136CE :10B43000BB19DBB29845E6D803B0BDE8F0830368DA :10B4400000211A7C90F83C30806B5A43D20001F006 :10B45000BBBB10B50446FFF7CBFF2046BDE810404C :10B4600001F0E5B810B50446436B80F83D101B6849 :10B470009847636B2046BDE810405B68184710B5DD :10B4800090F8873004460BB1FFF7D9FF2046BDE89E :10B4900010400021FFF7E6BF38B50446FFF7A8FFCC :10B4A00094F83C3094F83D501D442368EDB25B7C29 :10B4B000AB4204D8204601F0BAF8002038BD94F819 :10B4C000873013B12046FFF7BAFF20462946FFF721 :10B4D000C9FF0120F2E72DE9F0479DF824900746C7 :10B4E00019F0010F0C4616461D469DF8208012D01B :10B4F000531C6918A8EB0202DBB2D2B2C9B200F049 :10B50000F8FB631CA8EB0402A9193846DBB2D2B2DF :10B51000C9B200F0EEFB19F0020F13D0731CA8EBB8 :10B520000602291B3846DBB2D2B2C9B200F0E1FBF9 :10B53000631CA8EB0402A91B3846DBB2D2B2C9B225 :10B5400000F0D7FB19F0080F0FD0731C29194246E1 :10B550003846DBB2C9B200F0CCFB631CA9194246E5 :10B560003846DBB2C9B200F0C4FB19F0040F11D0A9 :10B57000291B731C42463846DBB2C9B200F0B9FB46 :10B580000134A91B42463846E3B2C9B2BDE8F047D0 :10B5900000F0AFBBBDE8F0872DE9F74F91461C46A0 :10B5A00009F10105013325440B448846121B091B90 :10B5B000EDB20095DBB2D2B2C9B282469DF830B08E :10B5C00000F0C5FB88B14346224600215046CDE934 :10B5D000009BFFF780FF0026C4EBC417C4F10105F0 :10B5E0007F006DB27FB2B44202D803B0BDE8F08FE5 :10B5F000002D05DBBB1C013C5FB22B44E4B25DB205 :10B600000136F6B205EB4605434622463146504622 :10B61000CDE9009B01356DB2FFF75DFFE3E710B5A3 :10B620000446FFF72CFF2046FFF736FF01460028AF :10B63000F9D12046BDE81040FFF714BF082303707E :10B64000004870476C0F002030B585B00D46009360 :10B6500009491346094A044601F00EF80DF10F009E :10B66000FFF7ECFF064B01469DF80F2020460095A2 :10B6700000F035FE05B030BD3DC500081DC4000812 :10B6800047BE00084218435C507800EB032080B2AC :10B690007047012B05D0022B05D033B91044C0B23E :10B6A00070470844FBE7801AF9E7401AF7E7012BD7 :10B6B00005D0022B05D033B90844C0B27047801AB8 :10B6C000FBE7401AF9E71044F7E70020704738B568 :10B6D0000B780D4603704B78044643708B7883706B :10B6E000CB78C3700B7903714B7943718B7983717C :10B6F000CB79C3710B7A03724B7A43728B7A837264 :10B70000CB7AC3720B7B03734B7B43738B7B83734B :10B71000CB7BC3730B7C112103742846FFF7B2FF68 :10B72000132160822846FFF7ADFF1521A08228462D :10B73000FFF7A8FFE08238BD70B5847A036862180D :10B740001D78D2B2072A45FA04F507D8EBB2827207 :10B750004FF0FF30884023EA000070BD5E1C066099 :10B760005B78C4F10804E4B2A3402B43083ADBB28F :10B77000D2B2ECE738B5002300F15805044680F852 :10B780006230816590F86C102846FFF7D5FF94F879 :10B790006D1084F860002846FFF7CEFF94F88630DD :10B7A00084F8610084F86430B3FA83F35B0984F8A9 :10B7B000653038BD10B5FFF7BFFF01234C1EE4B262 :10B7C000A340C01A40B210BD2DE9F04F04460E460A :10B7D00087B090F85E5090F85F70059294F860B072 :10B7E0004FFA87F9ABEB0503DBB2B3429A460393FA :10B7F00094F85D304A4669B2049394F85C0094F87A :10B80000663028BFB246FFF752FF80460498FFF724 :10B8100040FF05990246A9B194F8641084F8861097 :10B82000009341465346204600F0F4F9039B35440B :10B830009E42EDB20DD3A5EB0B050137EEB2FFB280 :10B840000025CBE794F863100029EFD194F8651038 :10B85000E4E784F85E5084F85F9007B0BDE8F08FAD :10B860002DE9F74F044600F15807FFF783FF94F8DE :10B870006E10384694F96190FFF79CFF94F86F10B2 :10B8800083463846FFF796FF94F870100646384610 :10B89000FFF790FF94F960A08046BAF1000F4DDDEC :10B8A0005FFA89F5AA19524252B2594694F86630A5 :10B8B00094F85C00FFF7FBFE84F85C00064694F801 :10B8C0005D00FFF7E6FE024684F85D00032B5BD8BF :10B8D000DFE803F00238425006EB0A032918DBB216 :10B8E000C9B200912046314600F031FA30B300234E :10B8F000A4F85E3094F86A103846FFF71DFF94F8FC :10B900006B1006463846FFF717FF05460022314602 :10B910002046FFF759FF294620460122FFF754FF32 :10B9200001213846FFF708FF0028EFD194F95F3076 :10B930004B45DFDB94F8643084F88630404603B032 :10B94000BDE8F08FC5F10105731C354400EB0A0119 :10B95000DBB2C9B2EEB2C4E7CAF1010AC5F1010512 :10B96000731CB2440544411CDBB2C9B2EAB25FFAAF :10B970008AF6B6E7CAF1010A35448244411CEBB2AB :10B98000C9B25FFA8AF2ACE701463346A9E7036D14 :10B99000FF2970B503F117030D4612D8602909D9A4 :10B9A000B0F87C201344587818B11A78AA4206D10E :10B9B000981C70BD4029F6D9B0F87A20F2E703440C :10B9C000F1E7B0F87E209C18264600213046FFF7AC :10B9D00059FE022104443046FFF754FE854206F129 :10B9E0000406F2D8208840BA80B20028E1D085420F :10B9F00001D1E01CDDE7A3781C44F3E738B5044629 :10BA0000FFF7C5FF0146B8B104F158052046FFF71E :10BA1000B1FE94F86E102846FFF7CCFE94F86F1034 :10BA200084F884002846FFF7C5FE284694F8701075 :10BA3000BDE83840FFF7BEBE38BD2DE9F84300240D :10BA40000F4680F860400546264600F06FFC4FF632 :10BA5000FF784FF6FE79013F17F8011F28466B6803 :10BA600098474045014608D04845F5D02846FFF79D :10BA7000C5FFC4B22644F6B2EEE795F9602032B1B4 :10BA800095F88430134433441B1B03F0FF06304603 :10BA9000BDE8F883F8B51F4690F8663004460E46B8 :10BAA0001546032B07D8DFE803F002151A1E436D75 :10BAB00098472844C5B23946204684F85C6084F82B :10BAC0005D50FFF764FF014618B12046FFF7C8FE3E :10BAD000C0B2F8BD436D9847301AC6B2EBE7436D6C :10BAE0009847281AE6E7436D98473044F5E72DE973 :10BAF000F0471E4607460C4615464FF0000A00F078 :10BB000015FC4FF6FF784FF6FE79013E7B6838460C :10BB100016F8011F9847404503461BD04845F5D00D :10BB20002A4621463846FFF7B5FF97F86630032BC3 :10BB300005D8DFE803F002080B0D0444E4B25044DA :10BB40005FFA80FAE2E70544EDB2F8E7241AF5E778 :10BB50002D1AF9E75046BDE8F087000010B4024CFA :10BB6000446010BCFFF7C3BF1DC30008036D10B5D0 :10BB7000CBB190F9754090F9761090F8813080F84B :10BB8000824080F8831073B1012B0DD190F977308A :10BB9000A342B8BF234680F8823090F978309942AA :10BBA00001DD80F8833010BD90F9742090F9723077 :10BBB00013449C42B8BF80F882309142C8BF80F8DD :10BBC0008320F0E7014B4365704700BFCBB6000808 :10BBD000026D10B58A42044608D001656830FFF74F :10BBE00076FD2046BDE81040FFF7C0BF10BD000045 :10BBF000014B4360FFF721BF1DC3000870B490F8EC :10BC000040609DF80C50046B921BA4460395D2B281 :10BC100070BC6047F0B490F880409DF81050002C44 :10BC20003AD0002B38D0012B04D0022D2BD101317A :10BC3000C91AC9B215F0010530D190F847409442B5 :10BC40002AD890F84840944226D90B44DCB28C4262 :10BC500090F8457090F846601CD28E4219D9741E37 :10BC6000E4B2A74218D2B94238BF3946A64294BFBF :10BC7000C1EB0603C1EB0403446B0495A468DBB27B :10BC8000A446F0BC6047032D02BF0132D21AD2B2E3 :10BC9000D0E739468E42E4D8F0BC704790F8454072 :10BCA0008C42F9D890F846408C42F5D91344DCB266 :10BCB000944290F8477090F8486010D296420DD99F :10BCC000741EE4B2A742E7D2BA4238BF3A46A6424F :10BCD00094BFC2EB0603C2EB0403CDE73A4696429B :10BCE000F0D8D9E713B500240094FFF793FF02B012 :10BCF00010BD13B501240094FFF78CFF02B010BDF6 :10BD000073B590F84760964210D890F84860964214 :10BD10000CD990F845508D4208D890F846308B42A7 :10BD200004D9002300930123FFF774FF02B070BD14 :10BD30008A4206D2834208D89A4294BF002001204A :10BD400070478342F8D8002070470120704770B5D3 :10BD500004460D461E4690F848109DF8103090F8A5 :10BD60004700FFF7E5FF48B133462A4694F84610EE :10BD700094F84500BDE87040FFF7DABF70BD2DE9CB :10BD8000F74F9DF8309099428CBFA1EB0308A3EBCD :10BD900001084A450C4615461E465FFA88F812D936 :10BDA000A2EB0907FFB2B84517D33B46B44247465A :10BDB000984605D92B464D469946234634461E469D :10BDC0004FF0000B0FE0A9EB0207FFB2B845ECD231 :10BDD0004E46144699460D4603E04C461D4616460F :10BDE00089464FF0010B4D4534BF4FF001094FF02C :10BDF000FF39FE2E28BFFE2647F3470AF6B2B442AB :10BE000002D903B0BDE8F08FBBF1000F18D12A466C :10BE10002146AAEB080A0190FFF772FF5FFA8AF346 :10BE20004FFA8AFABAF1000FBCBF4D44DB1904F196 :10BE300001040198BCBFEDB24FFA83FAE4B2DEE729 :10BE400022462946E5E7F0B5012490F8865002F035 :10BE50000706B440012D9DF81470E4B216D82546AB :10BE600016D0D0F800C002F0F8029CF810E00EFBEB :10BE70000211826B11446FB90A78013B2A43624078 :10BE800013F0FF0301F8012BF6D1F0BD0025E8E720 :10BE90000024E6E70A7801362A436240013B16F0A7 :10BEA00007060A70DBB20CD190F83E20114490F8DE :10BEB0008620012A0AD80BD001242546002BE9D17F :10BEC000E3E76D006400EDB2E4B2F7E70124F5E7C3 :10BED0001546F3E7B0F90810B0F90A3010B58B42F7 :10BEE00016DD83898288C4881344C2899BB22244A8 :10BEF00094B212B2002A8381C28105DD0288134404 :10BF000083814388E31AC38101310181012010BD7F :10BF10000020FCE7037E0131C9B28B428CBF08468A :10BF200000207047037E0139C9B28B429CBF03F1E8 :10BF3000FF33D9B20846704718232DE9F04703FBB9 :10BF400000F5DFF88C9009F11C067419217D484634 :10BF500009EB8103B3F90280236939F9217098470D :10BF600039F820A009EB8002BBB2B2F80290AAEB2C :10BF70000301B2F902C009B21FFA88F2A9EB020E5E :10BF800000290FFA8EFE1DDA0132A2EB09024FF0F2 :10BF9000FF39A3EB0A031BB212B22075A4F802E02A :10BFA000A4F80AC0A4F80880A78126F80590E281C9 :10BFB00093FBFEF291FBFEF10EFB1233A180E380B6 :10BFC000BDE8F0870B464FF001090022E5E700BF0E :10BFD0006C130020182370B50546094E03FB01645D :10BFE00094F83010E36A3046984706EB8003B3F9C3 :10BFF00002300146AB4202D184F83000F2E770BD56 :10C000006C13002000222DE9F041524B524C0546A2 :10C010006364524B0121E362B4F9023094461E4638 :10C0200094F818E084F83020CFB2BE4563D8BCF154 :10C03000000F01D084F830209B1B1BB26383002BC0 :10C0400070D094F830300121304684F84830FFF742 :10C05000C1FF00213046FFF7BDFF012394F83020D7 :10C06000637694F8483034F9222034F923309A4228 :10C0700052D0002363760020B4F91A60FFF75CFF0A :10C080000120FFF759FF637E2BB13548FFF722FFF0 :10C090003448FFF71FFF324F07F11808B4F93C206E :10C0A000002A1BDB95F844309A4217DAB4F928309D :10C0B000B4F94000834237DA00280FDB95F84310CB :10C0C0008B420BDA23EAE3738142D8BF08B2D9B2BC :10C0D000431A2846DBB2D2B2FFF704FE3846FFF718 :10C0E000F9FE80B34046FFF7F5FE78B3013E36B265 :10C0F000002ED3DC16E004EB8100B0F90200013120 :10C100008342B8BF0346B042A6BF174630464FF041 :10C11000010C3A46064687E7638B013B1BB26383FB :10C12000002BA8D1BDE8F081002BD7DB95F8431098 :10C130008842D3DA0028B8BF00239942D8BF0BB297 :10C14000C1B25B1AC5E7FFF7F7FEC7E70120FFF7AB :10C15000F3FEC7E715BF00086C13002025BF0008D9 :10C1600088130020A0130020F0B4094CBDF9107012 :10C17000A3800323BDF91460BDF9185021806280AB :10C18000E780268165812376F0BCFFF73BBF00BFC7 :10C190006C13002070B590F83C100268CB0080F85A :10C1A0003F30137C90F83D501F2B28BF1F23DB002E :10C1B00080F83E30EB00DBB280F84030547C4E1902 :10C1C000A642C4BF641BE1B280F8413003EBC10357 :10C1D00080F84230F02380F84330918A994298BF2A :10C1E0000B4680F84330D38A80F8443070BD30B4B9 :10C1F00090F844409DF80850A21A90F84340D2B2FB :10C20000611AC9B23DB9013AC91AD2B2C9B202958E :10C2100030BCFFF7F3BC012D01BF01F1FF31D21A91 :10C22000C9B2D2B2F3E713B590F84C30044600938C :10C2300090F84A3090F84B2090F84910FFF787FDAE :10C2400018B984F8800002B010BD012394F845208D :10C2500084F8803094F849309A4238BF84F84530E9 :10C2600094F8462094F84A309A4288BF84F84630C1 :10C2700094F8472094F84B309A4238BF84F84730FE :10C2800094F8482094F84C309A4288BF84F848309B :10C29000D9E7002390F8432080F8473080F84530F4 :10C2A00080F8462090F8443090F84220934224BF12 :10C2B0009A1A80F8472090F841209B1A80F848305D :10C2C000FFF7B1BFFFF766BF002280F84920FF22C9 :10C2D000436BA0F84A2080F84C205B68184770B583 :10C2E0000025036340F201130446049E80F83C20BD :10C2F00080F83D5080F8635080F88550A0F8863073 :10C30000816333680565466398472046FFF7DCFF85 :10C310002046FFF757FC84F8665070BD19B10A2912 :10C3200001D088B270474FF6FF707047002380F845 :10C330002730704710B404690A46A4460023202120 :10C3400010BC604710B404691346A4460A4610BCEA :10C350001721604707B58DF807100DF1070201217D :10C36000FFF7F0FF03B05DF804FB10B4C4680A46A1 :10C37000A4460023152110BC604710B4C4680A46C7 :10C38000A4460023162110BC604710B4C4681346AD :10C39000A4460A4610BC17216047002310B4C468A5 :10C3A0001A46A446182110BC6047002310B4C46884 :10C3B0001A46A446192110BC604773B505460C46C1 :10C3C000217819290DD8172919D80ED014290AD97E :10C3D000627800232846EE688DF80720B0470234C3 :10C3E000EEE7FE2912D002B070BD63780121284625 :10C3F0000DF107028DF80730FFF7C7FFEFE70023C5 :10C4000028461A46EE680134B047D9E762782921F8 :10C4100028468DF8072000F012F9E0E72DE9F041F9 :10C420001F46A1F1140304460D461646052B1BD8E2 :10C43000DFE803F01003030D10100021FFF77AFF6F :10C4400031462046FFF786FF0120BDE8F08101213B :10C45000FFF770FFD4F810E03B46324629462046ED :10C46000F446BDE8F04160470020EEE70B39F8B52F :10C47000044615461E46042955D8DFE801F003544A :10C480000C1B29002AB929492046FFF796FF0120F5 :10C49000F8BD2749F8E73AB92649FFF78EFF236828 :10C4A0009B7C84F82230F2E72349FFF786FF23685C :10C4B000DB7CF6E7FFF771FF81212046FFF755FF90 :10C4C00029462046FFF759FF2046FFF76EFFDEE7BB :10C4D000FFF763FF737994F82270402107EBC307DD :10C4E00007F0FF072046FFF740FF390941F0100130 :10C4F0002046FFF73AFF07F00F012046FFF73DFF08 :10C50000B179204641F0B001FFF737FF317920467D :10C51000C900326801F0F801013DFFF736FF15F060 :10C52000FF05F3D1D0E70020B2E700BFF3E1000838 :10C53000F8E10008B0E10008B7E1000838B50446AA :10C540000D46FFF793FF50B9092D0AD00A2D07D1E8 :10C55000204600F014F820460449FFF72EFF012082 :10C5600038BD2046024900F005F8F8E7BEE10008B2 :10C5700000E2000801608B7C80F82230704738B5FB :10C58000002328211A4645690446A84700231421A0 :10C590001A462046E568A847204601224B2100F0B4 :10C5A0004EF8236820461A79292100F048F82046E1 :10C5B00000224B2100F043F8236820461A792921F4 :10C5C00000F03DF8204601224B2100F038F82368A6 :10C5D00020465A792921BDE8384000F030B813B51B :10C5E0008DF80430049B8DF805108DF8062000931B :10C5F00001226B460F218468A04702B010BD0023C2 :10C6000010B484681A46A446092110BC6047002370 :10C6100010B484681A46A4460A2110BC604710B4BE :10C6200084680A46A44600230B2110BC60470023FF :10C6300010B484681A46A446102110BC604710B498 :10C6400044690023A44610BC6047002070470000E6 :10C650000023036080F82330C3848361FF23054AED :10C6600080F82430C0E90222C0E9042280F8293091 :10C67000704700BF4BC60008F8B516461D46069F1A :10C68000FFF7E6FFC0E90216C0E90457BDE8F8402D :10C69000FFF7B5BF00F000B800F0C2B938B50446E6 :10C6A00000F092F8214605462046F4F76BFC70B97D :10C6B00000212046F4F75CFC48B900212046F4F73D :10C6C0002FFC30B100F0BEFA2223064D036028464D :10C6D00038BD00F0B7FA212303600348BDE83840B5 :10C6E00000F004B8000080FF1DE200080048704719 :10C6F0000000C07FF8B5C1F30A57A7F2FF32132A32 :10C700000B4605460C4618DC002A09DA013201F016 :10C71000004303D143F07F5343F44013002229E048 :10C72000164810410140294311D04FF4002141FA2D :10C7300002F2134423EA0003F0E7332A0ADDB2F5DC :10C74000806F04D10246F3F711FD05460C462846DA :10C750002146F8BD4FF0FF30A7F21347F8402842BA :10C76000F5D0C2F1330101228A40521928BF0133AA :10C7700022EA000219461046E7E700BFFFFF0F005C :10C78000C0F3C7537F3B162B014610B514DC002BBA :10C7900007DA013300F0004101D141F07E51084633 :10C7A00010BD084A1A411042F9D04FF480011941D6 :10C7B000014421EA0201F2E7802BF0D1F4F714F9E9 :10C7C0000146ECE7FFFF7F0030F000422DE9F84F13 :10C7D0000146034606D100214FF04C40F4F7C0FA61 :10C7E000BDE8F88F002803DAF4F7FCF80021F5E73C :10C7F000B0F1FF4F02DBF4F7F7F8F1E7B0F5000F07 :10C8000035DA4FF09841F4F7F7F96FF01802034664 :10C81000C3F31604DE15714B7F3E234403F400007E :10C8200080F07E5016444FF07E51204306EBD356E5 :10C83000F4F7D8F86A4B04F10F0213400546002BB9 :10C840003AD10021F4F76CFB98B1002E00F0C480BF :10C850003046F4F77DF963490546F4F7CDF96249AE :10C8600004462846F4F7C8F901462046C3E70022EB :10C87000CEE75E492846F4F7BFF901464FF07C50F9 :10C88000F4F7B0F8294604462846F4F7B5F901460E :10C890002046F4F7B1F904460EB921466FE0304660 :10C8A000F4F756F94F490746F4F7A6F90646384615 :10C8B0004D49F4F7A1F972E04FF08041F4F794F894 :10C8C00001462846F4F74CFA81463046F4F740F921 :10C8D000494680464846F4F78FF901468346F4F707 :10C8E0008BF907464249F4F787F94249F4F77CF897 :10C8F0003946F4F781F94049F4F776F83946F4F708 :10C900007BF93E49F4F770F85946F4F775F93C495C :10C9100083463846F4F770F93A49F4F765F8394632 :10C92000F4F76AF93849F4F75FF83946F4F764F92F :10C9300001465846F4F758F8DFF8D0A0C4F557136D :10C94000A24403F5227343EA0A03002B074630DDB5 :10C950004FF07C512846F4F74FF92946F4F74CF98B :10C96000014604463846F4F73FF84946F4F744F9DF :10C97000074646B901462046F4F734F801462846F2 :10C98000F4F730F82CE717494046F4F735F9164923 :10C9900006464046F4F730F93946F4F725F80146E3 :10C9A0002046F4F71FF82946F4F71CF801463046F4 :10C9B000E6E701462846F4F715F84946F4F71CF96E :10C9C0000446002E3FF469AF06494046F4F714F9D7 :10C9D0000549064640466CE7002001E720FB4A0077 :10C9E000F0FF7F008071313FD1F71737ABAAAA3E25 :10C9F0009788173E25333A3E2549923EABAA2A3FF7 :10CA00004FD01C3E298E633ECDCCCC3E305CCFFF58 :10CA1000024B0146186800F02BB800BF3C02002012 :10CA2000024B0146186800F04FB900BF3C020020DD :10CA300070B50E4E0C463168054611B900F0F2F89B :10CA400030602146284600F0EDF8431C0AD0C41C93 :10CA500024F00304A04207D0211A284600F0E2F88F :10CA6000013001D14FF0FF34204670BDBC130020CF :10CA70002DE9F843CD1C25F0030508350C2D38BFF2 :10CA80000C25002D074601DBA94205D90C23002601 :10CA90003B603046BDE8F883DFF8D08000F068F8EE :10CAA000D8F800301C465CBB29463846FFF7C0FF6B :10CAB000431C044655D1D8F800402646002E45D1E7 :10CAC000002C48D023683146384604EB030900F0B7 :10CAD000A9F881453FD1216838466D1A2946FFF7EC :10CAE000A7FF013037D023682B442360D8F80030EB :10CAF000002B38D05A68A2422BD100225A600FE096 :10CB00002268521B1FD40B2A17D96119A342256032 :10CB100018BF5960636808BFC8F8001062514B60C5 :10CB2000384604F10B0600F029F826F00706231D0D :10CB3000F21AAED09B1BA350ABE7A3426268DDD1D3 :10CB4000C8F80020ECE723466468ACE73446766812 :10CB5000B4E71346CCE70C2338463B6000F00EF8F0 :10CB600097E72560DCE75B60FFDE00BFB8130020BD :10CB7000014800F091B800BFFC140020014800F00B :10CB80008CB800BFFC1400200EB46FF0004100B55B :10CB90009CB01DAB0290069007910491084809498A :10CBA00053F8042B0591006802A9019300F02EF9B7 :10CBB0000022029B1A701CB05DF804EB03B07047B2 :10CBC0003C0200200802FFFF03460244934200D1CA :10CBD000704703F8011BF9E710B56AB101398418F1 :10CBE00010F8012B11F8013F9A4203D1A04201D065 :10CBF000002AF5D1D01A10BD1046FCE7034610B547 :10CC0000013932B111F8014F013A03F8014B002C00 :10CC1000F7D100211A44934200D110BD03F8011B43 :10CC2000F9E7000038B50023054D044608462B609F :10CC3000FEF78EFA431C02D12B6803B1236038BD86 :10CC4000F8140020014B1868704700BF3C02002018 :10CC500070B500260C4D0D4C641BA410A64209D1E2 :10CC600000F0C6FB00260A4D0A4C641BA410A64225 :10CC700005D170BD55F8043B98470136EEE755F8ED :10CC8000043B98470136F2E74CE200084CE200080A :10CC90004CE2000854E2000870477047034611F860 :10CCA000012B03F8012B002AF9D170470A44914265 :10CCB00000F1FF3300D1704710B511F8014B9142DC :10CCC00003F8014FF9D110BD38B50546002940D011 :10CCD00051F8043C0C1F002BB8BFE418FFF748FFC5 :10CCE0001C4A136833B9636014602846BDE83840B5 :10CCF000FFF744BFA34208D9206821188B4201BF27 :10CD000019685B6809182160EDE71A465B680BB18A :10CD1000A342FAD911685018A0420BD120680144EF :10CD2000501883421160E0D118685B6808441060B5 :10CD30005360DAE702D90C232B60D6E7206821186C :10CD40008B4201BF19685B680918216063605460F9 :10CD5000CBE738BDB81300202DE9F0471F468E6899 :10CD60008246BE420C4690460B682CD88A8912F443 :10CD7000906F26D06569096905EB4505A3EB0109AC :10CD800005EBD5757B1C4B446D109D4238BF1D468D :10CD9000530527D52946FFF76BFE064660B34A4682 :10CDA0002169FFF783FFA38923F4906343F0800395 :10CDB000A38126614E4426603E466561A5EB0905C8 :10CDC000A560BE4200D93E4632464146206800F08A :10CDD000AFFA0020A3689B1BA36023683344236041 :10CDE000BDE8F0872A4600F0CBFA06460028E0D1DD :10CDF00050462169FFF768FF0C23CAF80030A38969 :10CE00004FF0FF3043F04003A381E9E72DE9F04FF5 :10CE100098468B8907461B060D4614469DB00ED5D5 :10CE20000B6963B94021FFF723FE2860286120B910 :10CE30000C233B604FF0FF30D0E040236B610023B8 :10CE4000099320238DF8293030234FF00109CDF8C4 :10CE50000C80DFF8A0818DF82A3023469A4613F81B :10CE6000012B0AB1252AF9D1BAEB040B0BD05B4692 :10CE7000224629463846FFF76FFF013000F0A980AF :10CE8000099A5A4409929AF80030002B00F0A180C8 :10CE900000234FF0FF32CDE905230AF1010A049384 :10CEA00007938DF853301A935446052214F8011B4A :10CEB000504800F057FA049AD8B9D00644BF20234E :10CEC0008DF85330110744BF2B238DF853309AF857 :10CED00000302A2B15D0544600204FF00A0C079A38 :10CEE000214611F8013B303B092B4DD9B0B10792D7 :10CEF00014E0A0EB080309FA03F31343A2460493DA :10CF0000D2E7039B191D1B680391002BBBBF5B423B :10CF100042F0020207930793B8BF049223782E2BA6 :10CF20000CD163782A2B34D1039B02341A1D1B6861 :10CF30000392002BB8BF4FF0FF330593DFF8B8A082 :10CF400003225046217800F00DFA38B14022049BAC :10CF5000A0EB0A00824013430134049314F8011B30 :10CF6000062226488DF8281000F0FCF9002838D059 :10CF7000234B1BBB039B073323F0070308330393A7 :10CF8000099B3344099368E70C4601200CFB0232ED :10CF9000A6E700234FF00A0C1946013405932046FA :10CFA00010F8012B303A092A03D9002BC6D005917D :10CFB000C4E7044601230CFB0121F0E703AB009317 :10CFC0002A4638460F4B04A9AFF30080421C0646A0 :10CFD000D6D1AB895B063FF52DAF09981DB0BDE8F2 :10CFE000F08F03AB00932A463846064B04A900F0A5 :10CFF0007DF8EBE718E200081EE2000822E20008D4 :10D000000000000059CD00082DE9F047164699466A :10D010008A680B6907469342B8BF1346336091F89C :10D0200043200C46DDF820800AB1013333602368C9 :10D03000990642BF336802333360256815F0060550 :10D0400006D104F1190AE36832689B1AAB422BDC63 :10D0500094F84320131E226818BF0123920630D48F :10D060004946384604F14302C047013023D02368C3 :10D07000226903F00603042B14BF002533684FF028 :10D08000000608BFE56804F11A0408BFED1A54F859 :10D09000123C08BF25EAE5759342C4BF9B1AED1800 :10D0A000B5421AD1002008E00123524649463846CD :10D0B000C047013003D14FF0FF30BDE8F0870135A4 :10D0C000C1E73020E11881F843005A1C94F845105C :10D0D0002244023382F84310C2E701232246494624 :10D0E0003846C0470130E6D00136D9E72DE9FF4781 :10D0F0000F7E9146782F80460C469A460C9D01F192 :10D10000430207D8622F0AD8002F00F0D580582F8D :10D1100000F0C18004F1420584F842703AE0A7F1C2 :10D120006303152BF6D801A151F823F085D100082F :10D1300099D1000815D1000815D1000815D10008B3 :10D1400015D1000899D1000815D1000815D10008A3 :10D1500015D1000815D100089FD20008C5D10008DC :10D1600059D2000815D1000815D10008C1D2000815 :10D1700015D10008C5D1000815D1000815D1000847 :10D1800061D200082B681A1D1B682A6004F1420551 :10D1900084F842300123A0E020682B68070603F1E1 :10D1A0000401296001D51E6803E04606FBD5B3F9EA :10D1B0000060002E03DA2D23764284F843300A23E0 :10D1C000594812E02B682068191D2960050601D511 :10D1D0001E6802E04106FBD51E886F2F0CBF082396 :10D1E0000A235148002184F843106568002DA8BF28 :10D1F0002168A560A4BF21F0040121600EB9002DB3 :10D200004BD01546B6FBF3F103FB1167C75D05F87C :10D21000017D3746BB420E46F4D9082B0BD123685B :10D22000DE0708D5236961689942DEBF302305F81F :10D23000013C05F1FF35521B22614B462146404619 :10D24000CDF800A003AAFFF7DFFE01304AD14FF06E :10D25000FF3004B0BDE8F087236843F0200323606B :10D260007827324884F84570236829681F0651F8EA :10D27000046B02D45F0648BFB6B2DF0748BF43F075 :10D280002003296048BF23601EB9236823F02003D0 :10D2900023601023A6E72448E4E71546BDE72B6882 :10D2A0002668181D6169286035061B6801D519605C :10D2B00002E07006FBD51980002315462361BCE708 :10D2C0002B6800211A1D2A601D686268284600F03C :10D2D00049F808B1401B606063682361002384F84B :10D2E0004330AAE72A46494640462369D0470130E1 :10D2F000ADD023689B0713D4E068039B9842B8BF66 :10D300001846A6E70123324649464046D047013039 :10D310009DD00135E36803995B1AAB42F2DCEBE781 :10D32000002504F11906F5E729E200083AE20008B1 :10D33000884210B501EB020402D98442234607D883 :10D34000431EA14208D011F8012B03F8012FF8E782 :10D35000014602448A4200D110BD13F8014D02F883 :10D36000014DF7E7034610B5C9B20244934218468F :10D3700001D1002003E0047801338C42F6D110BDC6 :10D380002DE9F041804614460E4621B91146BDE80C :10D39000F041FFF76DBB2AB9FFF796FC25462846FA :10D3A000BDE8F08100F01BF88442074602D8B4EBD8 :10D3B000500F12D821464046FFF75AFB0546002879 :10D3C000EDD0BC422246314628BF3A46FFF76EFCFC :10D3D00031464046FFF778FCE1E73546DFE751F894 :10D3E000043C181F002BBCBF0B58C018704700002E :10D3F000F8B500BFF8BC08BC9E467047F8B500BF42 :08D40000F8BC08BC9E46704711 :10D40800C80004014A019001C8002C019001F401F0 :10D418004000200001010000E3D40008EFD4000818 :10D42800F8D40008B1DA0008BDDA0008C3DA000849 :10D43800CADA0008D4DA0008E0DA0008EBDA0008F3 :10D44800F6DA0008FFDA00080CDB000819DB000830 :10D4580026DB00082BDB000832DB000840DB000875 :10D468004EDB000858DB000861DB00086EDB0008B3 :10D478007CDB0008A0DA0008AADA000895DA0008C0 :10D488009BDA000875DA00087FDA000888DA0008F5 :10D4980095DA00089BDA0008020304050607080964 :10D4A8000A0B0C0D0E0F10100102020304050607EB :10D4B80008090A0B0C0D0E0F101001025431322D01 :10D4C800005431322D64656600454550524F4D0A6F :10D4D800726561640A6572726F720074656D706559 :10D4E800726174757265006475726174696F6E003B :10D4F8006261636B20746F206D656E7500000000BB :10D508000000000000000000000000000000000013 :10D518000000000000000000000000000000000003 :10D5280000000000000000000000000000000000F3 :10D5380000000000000000000000000000000000E3 :10D548000000000000000000774500087945000849 :10D558007D4500087F4500084F464600436F6C64D0 :10D568000052656164790049646C6500537462799E :10D5780000426F6F7374002532640046616E3A256D :10D58800336425630054756E650025326425630095 :10D5980054756E6520504944005265662320256401 :10D5A800005469703A005365743A20253364004F7B :10D5B8004B005B005D002825632D2563290041622F :10D5C8006F75740049524F4E202620486F742041D1 :10D5D80069722047756E00342E303800436F6E74C0 :10D5E800726F6C6C657220762E2573004E6F7620F4 :10D5F800203720323032330049524F4E00535442C4 :10D60800590047554E004B70203D20253564004B8E :10D6180069203D20253564004B64203D2025356474 :10D62800006070787C7870607E81A59999A5817E6C :10D638007E8181818181817E040044402E801B008F :10D64800F1E01B002E804440040010286828683848 :10D658003878387CFEFEFE7C385A999999999981D8 :10D66800995A3C7E7FFFFFFFFBF3623CFC020101FD :10D6780002FCFFFEFFFEFFFEFFFEFC00FC00FC00BC :10D68800FC00FC00FFFCFFFCFFFCFFFCFC00FC00B6 :10D69800FC00FC00FC00FC00FFFEFFFEFFFEFFFE9E :10D6A80001FF8007FFE01FFFF03FFFF87FC3FC7F0B :10D6B80001FC7E00FEFE00FEFC007EFC007EFC00FD :10D6C8007EFC007EFC007EFC007EFC00FEFE00FE70 :10D6D800FE00FC7F01FC7F87F83FFFF81FFFF00F7B :10D6E800FFC003FF00FFF800FFFE00FFFF00FFFF81 :10D6F80080FC3F80FC1FC0FC1FC0FC1FC0FC1F80BB :10D70800FC3F80FFFF00FFFE00FFF800FFFC00FC6D :10D71800FE00FC7F00FC3F00FC3F80FC1F80FC1FDC :10D72800C0FC1FC0FC0FE0FC0FE0070007000380EF :10D73800038001800180018003C003C00F701C3B7F :10D74800381F380F70003800000000C000E000707B :10D758000070006000C001C02B807FC0F180E0C075 :10D7680000E0007000780038001800000000000693 :10D77800000E201E7838FD70D7E003C0018001003C :10D7880001800380038001C000E000002000F80051 :10D79800FC00DE000603038F01FF03FE0380060082 :10D7A8000E001C003C003E000E00E03CFF3CE00088 :10D7B8000ED6000817D6000820D60008384444447E :10D7C8003800000060D5000800D6000805D600081B :10D7D8000AD600080A000403050504010611170209 :10D7E80000170017000000000001713024F1EABAA8 :10D7F8002E0FE4A688E66626472647262766FDB745 :10D80800139323932393337343547307925700312D :10D8180010EBF69AA68C8E6206F7FF8F0E1E043266 :10D8280021EFEE9AAE0E4AC828064D9B0ECFCE9237 :10D8380052925292920E4B4A884A88D2D21E7C400B :10D848003326F0EA9AEE0E88A868E648244724476B :10D8580024A78767296BAFC9A7A96B6B4D272467D6 :10D86800A68A0EE6AE003432F1EA5AA7A923842527 :10D87800644544654465248504A5E4A6E4C4D44904 :10D88800094A090A1D1C4C1C1CC8CA03C803C80342 :10D89800C803081F441E44003526EF6E1A5E1C5C40 :10D8A8004C4A4C4A0C6F2C63247120434532381281 :10D8B80049BC7169E5C4E00415CD01D91500362AC3 :10D8C800F1EADA0E0FA8C668064746454645C4D7AA :10D8D800584D1CCC5891504E50DE7A3B213B313983 :10D8E8003338434575407805371BEFEE1A7E40DA2A :10D8F800724270787678769676787678967678ED3D :10D90800F08600382CF1EABA0E0FA8D8D0914C8EC8 :10D918004C8E4C8E4CCECC4DADA3989C88189B9BBE :10D92800999C98F5F6926272A4AAE880F00A0039E8 :10D938002BF06ABA0C0FA68868E6660627462546C5 :10D948003D3DA498AB2832399818B2999E16911C7F :10D95800911C999BA19A3A1834030000000000001A :10D968000000000000000000E16C0008796D00086C :10D97800416D0008B16C0008F1700008C16C000826 :10D988005D6D0008C76C0008E36C0008D56C0008E2 :10D99800336D0008256D0008A96D0008CF6C0008DC :10D9A80000000000000000001F7200083373000828 :10D9B800F7710008DF71000821720008EB71000898 :10D9C80055720008DB720008E972000899720008B5 :10D9D800CD720008BF72000803720008F1710008D8 :10D9E80053656C6563742074697000454550524FE7 :10D9F8004D0A77726974650A6572726F72004163C5 :10DA080074697661746520746970004B45455000EF :10DA1800524545440054494C5400253164206465FE :10DA2800672E00253264206D696E0025336420431B :10DA38000025336420460025326420736563002581 :10DA480032646D20253264730043616C69627261CF :10DA5800746500486F742047756E002B253264206A :10DA680025630025336420732E0044700063616CC5 :10DA78006962726174650074756E652067756E0001 :10DA880074756E652067756E2050494400636C6537 :10DA980061720065786974006175746F6D6174698D :10DAA80063006D616E75616C00626F6F73742073D3 :10DAB8006574757000756E6974730062757A7A653D :10DAC80072006B6565702069726F6E007377697498 :10DAD800636820747970650074656D702E207374A6 :10DAE8006570006175746F2073746172740061757C :10DAF800746F206F6666007374616E646279207457 :10DB0800656D70007374616E6462792074696D6507 :10DB18000073637265656E20736176657200736168 :10DB280076650063616E63656C0063616C6962723F :10DB380061746520746970006163746976617465E5 :10DB480020746970730074756E652069726F6E0059 :10DB580067756E206D656E750072657365742063F8 :10DB68006F6E6669670074756E652069726F6E20E6 :10DB78005049440061626F757400000000000000A5 :10DB8800000000001D9600081D7E00083D7B00086F :10DB9800FF8400080000000000000000537C00081B :10DBA80049920008417B00081B850008000000001E :10DBB80000000000377D0008E99700083F7B000857 :10DBC8000D8500080000000000000000E99400082E :10DBD800F1A000082F7B00089D84000800000000C9 :10DBE800000000003D9000086B900008237B0008AF :10DBF800498400080000000000000000717F000850 :10DC0800398B00082D7B00088F8400080000000075 :10DC180000000000C57B000829850008357B000846 :10DC2800C784000800000000000000009B81000875 :10DC380021820008397B0008E38400080000000006 :10DC4800000000005583000891830008377B000816 :10DC5800D584000800000000000000000DA900089D :10DC6800F98D0008297B0008738400080000000073 :10DC78000000000067950008B98C00082B7B00089D :10DC88008184000800000000000000007F96000862 :10DC9800A1900008217B00083B84000800000000D8 :10DCA80000000000B37F0008798000083B7B000873 :10DCB800F18400080000000000000000998A0008B4 :10DCC800219E0008317B0008AB840008000000009A :10DCD80000000000977B0008E19000081F7B000807 :10DCE8002D8400080000000000000000437B0008AD :10DCF80069890008337B0008B98400080000000027 :10DD0800000000006D7B0008FD890008257B0008E5 :10DD1800578400080000000000000000BDA40008AF :10DD280073A50008277B0008658400080000000030 :10DD380000000000010203040607080900000000B3 :10DD4800010203041019C800F40150000A00740EFF :10DD5800C201B400600003020304030504070F00B6 :10DD6800FD09FD0BFE016E02DE0428200500C20736 :10DD78002107C9C3C721092207A4DE47E414230DDC :10DD880036CE4F940C4BD4322C510224136DBA5713 :10DD9800982D15254AB22D8912A5B2851100251393 :10DDA8004FC2CF30249912256D492D694AB4444C8D :10DDB8000026104EC2CF94255125AC6451A2454B84 :10DDC800002706A1DFC7102809ECBA5FD4D6C7061A :10DDD800290AECBA47D8D6A736002A0B35CE57A55C :10DDE800322D4D11002B0A2DC657180D5218012C33 :10DDF80008ABB68F2929012D068CCEC7102E061226 :10DE0800C3C7102F0E66BA6F310DD3300DD3304D06 :10DE18000130104EC2CF9084DA9428D1268AC99056 :10DE280000310A4FC25F38F76D1802320B4EC2CF6D :10DE3800908469B1E330330E4EC2CF908469694E45 :10DE4800C5644800340E4EC267A82551254B86315B :10DE58000D07350E4EC2C7214D07394DC564480020 :10DE6800360E4EC2CF90A4E9A0848EC9900037091F :10DE78004EC2C7B5D8DA06380F4EC2CF9084C664F2 :10DE8800484263322400390D4EC2CF90848EC9A017 :10DE98005686043A083AC3C7100F013B0AD3B68F17 :10DEA8001D53A4A4043C08CDC267D6B5033D08267B :10DEB800CEC71D1D063E09CDC247DAAD23003F0C73 :10DEC8004EC2CF908469B11DCC00400F4EC2CF9096 :10DED80084D290444A6449E341410D4EC297A84513 :10DEE8002DE13088C600420D4EC2C7A084C6610924 :10DEF8008DC302430C4EC2CF90846A8FC9900044F0 :10DF08000B4EC2C7A0847E1C1600450C4EC2C7210A :10DF1800AD0E4A5A1D06460B4EC2C721AD0E4ADA4F :10DF28000A470D4EC2CF90846A6D34264302480BCF :10DF38004EC247E8380CA26300490B4FC2C7218B79 :10DF4800FB360C014A0B4EC26F57D1980C09004B97 :10DF5800104EC247A825512513932CAA2561004CC1 :10DF6800094EC247DAAFC3004D0D4FC247BA2D154F :10DF7800299222D5354E0D4EC247B829919468A3EF :10DF880063004F0B4EC2CF90847E4C8604500C4EDB :10DF9800C2C7A084C661495B01510E56BECF9084AA :10DFA800BE4452920C7100520C4EC2C7A084C66186 :10DFB800091D03530F4EC2CF90846A3CC4A9980C24 :10DFC800090054094FC2C7218BFB0D550A4EC247A1 :10DFD800E88FC99000560F4FC2476A4DB228AB84EC :10DFE800491A6700570D4FC247EA299222A5B2ADD8 :10DFF80001580E4EC247684CA24CD4A224140359AF :10E008000C4FC2476A4DB24A1AB7015A0A4EC2C7E4 :10E0180035EC351D065B0963BFC710F54F035C0E71 :10E02800E6BA471AA7711AA7711AA7015D09E3BED4 :10E03800C7D43F0D015E089DDA5796D4025F060FDC :10E04800BAC72160069BE24756610B36C2CF30DA69 :10E05800A6249102620C4EC2475A1D94D0715800F2 :10E06800630A36C2CF90846A7910640B4EC26FCBB4 :10E07800303A268300650C36C2CF9084C3A0C6838D :10E0880000660ACCC297924553D609670D4EB6CFA3 :10E09800303A26835A191200680B4EC2475A1D940B :10E0A800D0630069094BC34F0E485D066A0AE3B6A0 :10E0B800570E487D5A006B0E4EC247DA9644954C6F :10E0C80089B2240C6C084BC387D42F036D0D37C25B :10E0D800C7258AA4488AA4482A6E0A36C247A49447 :10E0E80036D1186F0B36C2CF90848EC99000700C51 :10E0F8004EB6C7A0848EC3925601710B4EB6CF3070 :10E108003A2683DA00720A36C247A494C6B40A7360 :10E118000B36C2CF300F713A2C00740ACCC24F565E :10E128009AB24601750A36C247E836258914760B35 :10E1380036C2472826519B2801770E37C247144913 :10E148009114499154B100780C36C247984499A863 :10E15800454918790C4EB647E83119D4CA90007A67 :10E168000836C2C7B1E3307B0BFCB69792F514664C :10E178003D0A7C07E9BBC787007D0CFCB68798F58C :10E188001865BD48007E0716D28F64017F0500C25E :10E198000700000004FFFF0000000000C5C20008DF :10E1A80093C20008EFC100081815A115C819FF1877 :10E1B80015A015C019FF1815AE15D5168015A81687 :10E1C8003F15D316001540158D1614152016001589 :10E1D800A115C815DA1612158116CF15D916F1151D :10E1E800DB1640152E15A415A619FF1815AF19FF33 :10E1F8001815AE19FF0000000001140A64643232D9 :10E2080000093D000304289610080202800040001F :10E21800232D302B2000686C4C0065666745464707 :10E22800003031323334353637383941424344458A :10E2380046003031323334353637383961626364F9 :04E248006566000007 :08E24C0035010008D14F000864 :04E2540011010008AC :10E258000100000010000000010000006C03002015 :10E26800430043004300484F47554E42000000001A :10E2780042310000004232000000423300000042F8 :10E288003400000042325A00004243310000424349 :10E29800312E3542433200004243330000424331BD :10E2A8005A004243325A004243345A0042434631EC :10E2B800004243463200424346330042434634005C :10E2C800424346315A424346325A424346335A42FF :10E2D800434D320042434D3300424C000000425A45 :10E2E80000000043310000004332000000433300C7 :10E2F800000043340000004430380000443132004C :10E308000044313600004432340000443332000007 :10E3180044353200004434000000444C313200449B :10E328004C333200444C3532004431325A004432C6 :10E33800345A0044345A00004900000000494C0097 :10E348000000494C5300004A303200004A4C303239 :10E35800004A533032004B000000004B46000000DA :10E368004B4C0000004B520000004B465A00004B3B :10E37800525A00004B5500000057423200005744E3 :10E38800303800574431320057443136005744354D :10E39800320057490000004E312D30364E312D30B5 :10E3A800384E312D31304E312D31334E312D3136FD :10E3B8004E312D32304E312D32334E312D4C3131DC :10E3C80030303100313030320031303033003130CC :10E3D80030340031303035003130303600313030B3 :10E3E8003700313030380031303039003130313099 :10E3F80000313230310031323032003132303300C6 :10E40800313230340031323035003132303600317B :10E41800323037003132303800313230390031345F :10E42800303100313430320031343033003134305F :10E438003400313430350031343036000024F400F3 :10E4480000000000C01300202814002090140020B1 :10E4580000000000000000000000000000000000B4 :10E4680000000000000000000000000000000000A4 :10E478000000000000000000000000000000000094 :10E48800000000000000000000000000F001002073 :040000050800B299A4 :00000001FF ================================================ FILE: BINARY/F1-T12+858D_ssd1305.hex ================================================ :020000040800F2 :100000000050002099B2000819B100081BB1000887 :100010001DB100081FB1000821B100080000000058 :1000200000000000000000000000000023B10008F4 :1000300025B100080000000027B1000829B1000820 :10004000E1B20008E1B20008E1B20008E1B2000844 :10005000E1B20008E1B20008B94F0008E1B20008BF :10006000E1B20008E1B20008E1B200082DB10008D9 :10007000E1B20008E1B20008E1B20008E1B2000814 :10008000E1B20008E1B20008E1B20008E1B2000804 :10009000E1B20008E1B20008E1B20008E1B20008F4 :1000A000E1B20008E1B20008E1B2000839B100088D :1000B00045B10008E1B20008E1B20008E1B2000871 :1000C000E1B20008E1B20008E1B20008E1B20008C4 :1000D000E1B20008E1B20008E1B20008E1B20008B4 :1000E000E1B20008E1B20008E1B20008000000003F :1000F0000000000000000000000000000000000000 :0C01000000000000000000005FF808F1A3 :1001100010B5054C237833B9044B13B10448AFF341 :1001200000800123237010BD400200200000000069 :10013000F4D3000808B5034B1BB103490348AFF3E0 :10014000008008BD0000000044020020F4D3000835 :10015000034613F8012B002AFBD1181A0138704707 :1001600081F0004102E000BF83F0004330B54FEA68 :1001700041044FEA430594EA050F08BF90EA020FD5 :100180001FBF54EA000C55EA020C7FEA645C7FEA68 :10019000655C00F0E2804FEA5454D4EB5555B8BF8B :1001A0006D420CDD2C4480EA020281EA030382EAFC :1001B000000083EA010180EA020281EA0303362D8E :1001C00088BF30BD11F0004F4FEA01314FF4801C61 :1001D0004CEA113102D0404261EB410113F0004F73 :1001E0004FEA03334CEA133302D0524263EB43032A :1001F00094EA050F00F0A780A4F10104D5F1200EC8 :100200000DDB02FA0EFC22FA05F2801841F1000122 :1002100003FA0EF2801843FA05F359410EE0A5F1F6 :1002200020050EF1200E012A03FA0EFC28BF4CF027 :10023000020C43FA05F3C01851EBE37101F00045DD :1002400007D54FF0000EDCF1000C7EEB00006EEBEA :100250000101B1F5801F1BD3B1F5001F0CD3490874 :100260005FEA30004FEA3C0C04F101044FEA4452CB :1002700012F5800F80F09A80BCF1004F08BF5FEA52 :10028000500C50F1000041EB045141EA050130BD32 :100290005FEA4C0C404141EB0101013C28BFB1F544 :1002A000801FE9D291F0000F04BF01460020B1FA8F :1002B00081F308BF2033A3F10B03B3F120020CDA62 :1002C0000C3208DD02F1140CC2F10C0201FA0CF040 :1002D00021FA02F10CE002F11402D8BFC2F1200CA5 :1002E00001FA02F120FA0CFCDCBF41EA0C0190405B :1002F000E41AA2BF01EB0451294330BD6FEA0404A4 :100300001F3C1CDA0C340EDC04F11404C4F120028E :1003100020FA04F001FA02F340EA030021FA04F3A0 :1003200045EA030130BDC4F10C04C4F1200220FAF7 :1003300002F001FA04F340EA0300294630BD21FA35 :1003400004F0294630BD94F0000F83F4801306BFFB :1003500081F480110134013D4EE77FEA645C18BFEF :100360007FEA655C29D094EA050F08BF90EA020F86 :1003700005D054EA000C04BF1946104630BD91EA7E :10038000030F1EBF0021002030BD5FEA545C05D181 :100390004000494128BF41F0004130BD14F58004C0 :1003A0003CBF01F5801130BD01F0004545F0FE4134 :1003B00041F470014FF0000030BD7FEA645C1ABF69 :1003C000194610467FEA655C1CBF0B46024650EAA0 :1003D000013406BF52EA033591EA030F41F40021CC :1003E00030BD00BF90F0000F04BF0021704730B552 :1003F0004FF4806404F132044FF000054FF0000127 :1004000050E700BF90F0000F04BF0021704730B5E7 :100410004FF4806404F1320410F0004548BF4042BC :100420004FF000013EE700BF42004FEAE2014FEA11 :1004300031014FEA02701FBF12F07F4393F07F4FEC :1004400081F06051704732F07F4208BF704793F0EF :100450007F4F04BF41F40021704730B54FF4607402 :1004600001F0004521F000411CE700BF50EA010205 :1004700008BF704730B54FF000050AE050EA0102AE :1004800008BF704730B511F0004502D5404261EB1E :1004900041014FF4806404F132045FEA915C3FF45F :1004A000D8AE4FF003025FEADC0C18BF03325FEAFC :1004B000DC0C18BF033202EBDC02C2F1200300FAAD :1004C00003FC20FA02F001FA03FE40EA0E0021FAD2 :1004D00002F11444BDE600BF70B54FF0FF0C4CF4C0 :1004E000E06C1CEA11541DBF1CEA135594EA0C0F72 :1004F00095EA0C0F00F0DEF82C4481EA030621EAAD :100500004C5123EA4C5350EA013518BF52EA0335E7 :1005100041F4801143F4801338D0A0FB02CE4FF099 :100520000005E1FB02E506F00042E0FB03E54FF0C9 :100530000006E1FB03569CF0000F18BF4EF0010EC1 :10054000A4F1FF04B6F5007F64F5407404D25FEABD :100550004E0E6D4146EB060642EAC62141EA555170 :100560004FEAC52040EA5E504FEACE2EB4F1FD0CB2 :1005700088BFBCF5E06F1ED8BEF1004F08BF5FEA30 :10058000500E50F1000041EB045170BD06F00046E2 :1005900046EA010140EA020081EA0301B4EB5C048F :1005A000C2BFD4EB0C0541EA045170BD41F4801187 :1005B0004FF0000E013C00F3AB8014F1360FDEBFAC :1005C000002001F0004170BDC4F10004203C35DA88 :1005D0000C341BDC04F11404C4F1200500FA05F30B :1005E00020FA04F001FA05F240EA020001F00042AC :1005F00021F0004110EBD37021FA04F642EB060122 :100600005EEA430E08BF20EAD37070BDC4F10C044B :10061000C4F1200500FA04F320FA05F001FA04F20F :1006200040EA020001F0004110EBD37041F10001FB :100630005EEA430E08BF20EAD37070BDC4F1200506 :1006400000FA05F24EEA020E20FA04F301FA05F26E :1006500043EA020321FA04F001F0004121FA04F216 :1006600020EA020000EBD3705EEA430E08BF20EAE6 :10067000D37070BD94F0000F0FD101F00046400020 :1006800041EB010111F4801F08BF013CF7D041EAA2 :10069000060195F0000F18BF704703F000465200A6 :1006A00043EB030313F4801F08BF013DF7D043EA77 :1006B0000603704794EA0C0F0CEA135518BF95EA2D :1006C0000C0F0CD050EA410618BF52EA4306D1D1B4 :1006D00081EA030101F000414FF0000070BD50EAD3 :1006E000410606BF1046194652EA430619D094EA5D :1006F0000C0F02D150EA013613D195EA0C0F05D147 :1007000052EA03361CBF104619460AD181EA03019A :1007100001F0004141F0FE4141F470014FF0000052 :1007200070BD41F0FE4141F4780170BD70B54FF0ED :10073000FF0C4CF4E06C1CEA11541DBF1CEA13556D :1007400094EA0C0F95EA0C0F00F0A7F8A4EB05044F :1007500081EA030E52EA03354FEA013100F0888046 :100760004FEA03334FF0805545EA131343EA12630F :100770004FEA022245EA111545EA10654FEA0026C4 :100780000EF000419D4208BF964244F1FD0404F57D :10079000407402D25B084FEA3202B61A65EB0305D9 :1007A0005B084FEA32024FF480104FF4002CB6EB96 :1007B000020E75EB030E22BFB61A754640EA0C0016 :1007C0005B084FEA3202B6EB020E75EB030E22BF56 :1007D000B61A754640EA5C005B084FEA3202B6EB97 :1007E000020E75EB030E22BFB61A754640EA9C0056 :1007F0005B084FEA3202B6EB020E75EB030E22BF26 :10080000B61A754640EADC0055EA060E18D04FEAE3 :10081000051545EA16754FEA06164FEAC30343EA83 :1008200052734FEAC2025FEA1C1CC0D111F4801F50 :100830000BD141EA00014FF000004FF0004CB6E749 :1008400011F4801F04BF01430020B4F1FD0C88BFE8 :10085000BCF5E06F3FF6AFAEB5EB030C04BFB6EBF3 :10086000020C5FEA500C50F1000041EB045170BDE6 :100870000EF0004E4EEA113114EB5C04C2BFD4EB13 :100880000C0541EA045170BD41F480114FF0000E97 :10089000013C90E645EA060E8DE60CEA135594EA13 :1008A0000C0F08BF95EA0C0F3FF43BAF94EA0C0F16 :1008B0000AD150EA01347FF434AF95EA0C0F7FF48B :1008C00025AF104619462CE795EA0C0F06D152EADF :1008D00003353FF4FDAE1046194622E750EA4106C3 :1008E00018BF52EA43067FF4C5AE50EA41047FF4D4 :1008F0000DAF52EA43057FF4EBAE12E74A0011D286 :1009000012F5001211D20DD56FF47873B3EB625269 :100910000ED44FEAC12343F0004343EA505323FA75 :1009200002F070474FF00000704750EA013002D1EA :100930004FF0FF3070474FF0000070474FEA410220 :10094000B2F1E04324BFB3F5001CDCF1FE5C0DD92D :1009500001F0004C4FEAC0024CEA5070B2F1004F77 :1009600040EB830008BF20F00100704711F0804F7A :1009700021D113F13872BCBF01F00040704741F43F :1009800080114FEA5252C2F11802C2F1200C10FA43 :100990000CF320FA02F018BF40F001004FEAC12327 :1009A0004FEAD32303FA0CFC40EA0C0023FA02F3CB :1009B0004FEA4303CCE77FEA625307D150EA0133A1 :1009C0001EBF4FF0FE4040F44000704701F0004071 :1009D00040F0FE4040F40000704700BF80F000404F :1009E00002E000BF81F0004142001FBF5FEA410307 :1009F00092EA030F7FEA226C7FEA236C6AD04FEA07 :100A00001262D2EB1363C1BFD2184140484041404B :100A1000B8BF5B42192B88BF704710F0004F40F4FD :100A2000000020F07F4018BF404211F0004F41F419 :100A3000000121F07F4118BF494292EA030F3FD0E5 :100A4000A2F1010241FA03FC10EB0C00C3F12003F8 :100A500001FA03F100F0004302D5494260EB400087 :100A6000B0F5000F13D3B0F1807F06D340084FEAF2 :100A7000310102F10102FE2A51D2B1F1004F40EBE7 :100A8000C25008BF20F0010040EA0300704749004F :100A900040EB0000013A28BFB0F5000FEDD2B0FAEC :100AA00080FCACF1080CB2EB0C0200FA0CF0AABF0F :100AB00000EBC25052421843BCBFD04018437047AD :100AC00092F0000F81F4000106BF80F400000132B3 :100AD000013BB5E74FEA41037FEA226C18BF7FEA8A :100AE000236C21D092EA030F04D092F0000F08BFCC :100AF0000846704790EA010F1CBF0020704712F0B3 :100B00007F4F04D1400028BF40F00040704712F1F1 :100B100000723CBF00F50000704700F0004343F056 :100B2000FE4040F4000070477FEA226216BF08468C :100B30007FEA23630146420206BF5FEA412390EA4F :100B4000010F40F4800070474FF0000304E000BF45 :100B500010F0004348BF40425FEA000C08BF7047F6 :100B600043F0964301464FF000001CE050EA0102BA :100B700008BF70474FF000030AE000BF50EA0102CF :100B800008BF704711F0004302D5404261EB4101BC :100B90005FEA010C02BF84460146002043F0B643E1 :100BA00008BFA3F18053A3F50003BCFA8CF2083A06 :100BB000A3EBC25310DB01FA02FC634400FA02FC0F :100BC000C2F12002BCF1004F20FA02F243EB020016 :100BD00008BF20F00100704702F1200201FA02FC78 :100BE000C2F1200250EA4C0021FA02F243EB02006B :100BF00008BF20EADC7070474FF0FF0C1CEAD052AF :100C00001EBF1CEAD15392EA0C0F93EA0C0F6FD06F :100C10001A4480EA010C400218BF5FEA41211ED04D :100C20004FF0006343EA501043EA5111A0FB013139 :100C30000CF00040B1F5000F3EBF490041EAD3710E :100C40005B0040EA010062F17F02FD2A1DD8B3F18A :100C5000004F40EBC25008BF20F00100704790F0F9 :100C6000000F0CF0004C08BF49024CEA502040EA4B :100C700051207F3AC2BFD2F1FF0340EAC250704711 :100C800040F400004FF00003013A5DDC12F1190F4F :100C9000DCBF00F000407047C2F10002410021FAC1 :100CA00002F1C2F1200200FA02FC5FEA310040F1D9 :100CB000000053EA4C0308BF20EADC70704792F052 :100CC000000F00F0004C02BF400010F4000F013A8A :100CD000F9D040EA0C0093F0000F01F0004C02BF85 :100CE000490011F4000F013BF9D041EA0C018FE7F4 :100CF0000CEAD15392EA0C0F18BF93EA0C0F0AD0FA :100D000030F0004C18BF31F0004CD8D180EA01001F :100D100000F00040704790F0000F17BF90F0004FB8 :100D2000084691F0000F91F0004F14D092EA0C0F9A :100D300001D142020FD193EA0C0F03D14B0218BF2D :100D4000084608D180EA010000F0004040F0FE4073 :100D500040F40000704740F0FE4040F4400070470F :100D60004FF0FF0C1CEAD0521EBF1CEAD15392EA8E :100D70000C0F93EA0C0F69D0A2EB030280EA010C7E :100D800049024FEA402037D04FF0805343EA111117 :100D900043EA10130CF000408B4238BF5B0042F175 :100DA0007D024FF4000C8B4224BF5B1A40EA0C001A :100DB000B3EB510F24BFA3EB510340EA5C00B3EB4C :100DC000910F24BFA3EB910340EA9C00B3EBD10F3A :100DD00024BFA3EBD10340EADC001B0118BF5FEA8C :100DE0001C1CE0D1FD2A3FF650AF8B4240EBC250B5 :100DF00008BF20F0010070470CF0004C4CEA502076 :100E00007F32C2BFD2F1FF0340EAC250704740F4C4 :100E100000004FF00003013A37E792F0000F00F0B6 :100E2000004C02BF400010F4000F013AF9D040EA34 :100E30000C0093F0000F01F0004C02BF490011F4C8 :100E4000000F013BF9D041EA0C0195E70CEAD153C0 :100E500092EA0C0F08D142027FF47DAF93EA0C0FA7 :100E60007FF470AF084676E793EA0C0F04D14B028B :100E70003FF44CAF08466EE730F0004C18BF31F03D :100E8000004CCAD130F000427FF45CAF31F0004337 :100E90007FF43CAF5FE700BF4FF0FF3C06E000BFD0 :100EA0004FF0010C02E000BF4FF0010C4DF804CDF3 :100EB0004FEA40024FEA41037FEA226C18BF7FEA03 :100EC000236C11D001B052EA530C18BF90EA010F05 :100ED00058BFB2EB030088BFC81738BF6FEAE17094 :100EE00018BF40F0010070477FEA226C02D15FEA30 :100EF000402C05D17FEA236CE4D15FEA412CE1D09C :100F00005DF8040B704700BF844608466146FFE762 :100F10000FB5FFF7C9FF002848BF10F1000F0FBD44 :100F20004DF808EDFFF7F4FF0CBF012000205DF83D :100F300008FB00BF4DF808EDFFF7EAFF34BF0120C2 :100F400000205DF808FB00BF4DF808EDFFF7E0FF5B :100F500094BF012000205DF808FB00BF4DF808EDAC :100F6000FFF7D2FF94BF012000205DF808FB00BF0F :100F70004DF808EDFFF7C8FF34BF012000205DF8F1 :100F800008FB00BF4FEA40024FEA41037FEA226CB0 :100F900002D15FEA402C08D17FEA236C02D15FEADC :100FA000412C02D14FF0000070474FF00100704714 :100FB0004FEA4002B2F1FE4F0FD34FF09E03B3EB66 :100FC00012620DD94FEA002343F0004310F0004FA6 :100FD00023FA02F018BF404270474FF000007047FC :100FE00012F1610F01D1420205D110F0004008BF9B :100FF0006FF0004070474FF00000704738B50E4B5F :1010000005461A784FF47A73B3FBF2F30B4A106873 :10101000B0FBF3F000F004FC044658B90F2D09D8DA :10102000024629464FF0FF3000F0BCFB2046044B3F :101030001D6038BD0120FCE700000020EC0100200D :1010400004000020074A08B51368032043F010038A :10105000136000F095FB0020FFF7D0FF09F0B6FE0B :10106000002008BD00200240034A044B11681B7891 :101070000B441360704700BF5C020020000000209A :10108000014B1868704700BF5C02002038B5044669 :10109000FFF7F6FF0546631C1EBF044B1B78E418E0 :1010A000FFF7EEFF431BA342FAD338BD0000002038 :1010B000436A10B59A6A12F0500F1BD19A6A42F433 :1010C00000729A621A68926802F46022B2F5602F88 :1010D0000CD11A7B52B99A6A22F480729A629A6A87 :1010E000D2045EBF9A6A42F001029A62184603F087 :1010F0008DFE10BD1B6ABDE810401B6B1847704782 :1011000008B5406AFFF7FBFF08BD406A08B5836A6F :1011100043F040038362C36A43F00403C36203F0F5 :1011200049FF08BD002373B5019390F824300446AD :10113000012B6CD0012380F824304D680268062D05 :10114000086805EB850322D81F26556B053B9E409A :1011500025EA060500FA03F32B43536309288B683D :1011600000EB40054FF0070129D9D6681E3DA94084 :1011700026EA0101AB400B43D360A0F11003012B21 :1011800025D90020002384F8243002B070BD0C2D36 :101190004FF01F0509D8166B233B9D4026EA050535 :1011A00000FA03F32B431363D8E7D66A413B9D4013 :1011B00026EA050500FA03F32B43D362CEE7106954 :1011C000A94020EA0101AB400B431361D9E7114B61 :1011D0009A4216D193681B02D3D49368102843F423 :1011E00000039360CDD10C4B0C4A1B68B3FBF2F3A8 :1011F0000A2253430193019B002BC2D0019B013B68 :10120000F8E7A36A012043F02003A362BAE70220B3 :10121000BBE700BF00240140EC01002040420F006A :10122000002337B50193036804469A68D20702D5B4 :10123000002003B030BD9A6842F001029A60144B5E :10124000144A1B68B3FBF2F30193019BE3B9FFF768 :1012500017FF054623689B68DB07E9D4FFF710FFFB :10126000401B0228F6D923689B6813F00103F1D1D3 :10127000A26A012042F01002A262E26A84F82430DD :1012800042F00102E262D4E7019B013BDCE700BFD0 :10129000EC01002040420F0010B590F824300446C5 :1012A000012B54D0012380F82430FFF7B9FF002828 :1012B00049D1A36A274A23F4407323F0010343F47E :1012C0008073A3622368934204D123494A6812F4CD :1012D000702F2ED1A26A22F48012A2625A6852059F :1012E00041BFA26A22F4405242F48052A262A26A32 :1012F00012F480521CBFE26A22F00602E26200226F :1013000084F824206FF002021A609A6802F46022C6 :10131000B2F5602F13D10F4A934205D1A2F5806236 :10132000526812F4702F0AD19A6842F4A0029A60AF :1013300010BDA26A42F48012A2624A68CFE79A689E :1013400042F48012F3E7002384F82430F0E702200F :10135000EEE700BF002801400024014038B50368D3 :1013600004469A68D10701D4002038BD9A6822F05B :1013700001029A60FFF784FE054623689B68DB073D :10138000F2D5FFF77DFE401B0228F6D923689B6843 :10139000DA07F2D5A36A012043F01003A362E36ADF :1013A00043F00103E362E0E7F8B5044600286DD09E :1013B000836A23B9C36280F8243009F029FD2046EE :1013C000FFF7CCFFA36A13F0100361D100285FD1AF :1013D000A26A616822F4885222F0020242F00202FC :1013E000E569A668A262227B2943B6F5807F41EABF :1013F000420136D0771E7D427D412D02277D012F8F :1014000006D182BBA269013A45EA423242F4006544 :101410002268B6F5807F576827F4694745EA0705D3 :10142000556097681D4D05EA070545EA0105956079 :1014300001D0012E02D12369013B1B05D56A25F499 :1014400070052B43D3629268154B1340994213D118 :101450000023E362A36A23F0030343F00103A362C2 :10146000F8BD3546CAE7A26A42F02002A262E26AEB :1014700042F00102E262CBE7A36A23F0120343F0D9 :101480001003A362E36A43F00103E3620120E7E78C :10149000A36A43F01003A362F8E700BFFDF7E1FF82 :1014A000FE0E1FFF10B590F824300446012B11D01A :1014B000012380F82430FFF751FF38B9A36A23F4E1 :1014C000885323F0010343F00103A362002384F84F :1014D000243010BD0220FCE7002373B5019390F87F :1014E00024300446012B62D0012380F82430FFF71A :1014F00035FF2046FFF794FE054600282FD1A36A4A :10150000022023F4885323F0020343F00203A36272 :10151000284B1E6801F0C0FBB6FBF0F67600019682 :10152000019B03BB2268936843F008039360FFF7B5 :10153000A7FD064623689A68110718D49A6842F0F6 :1015400004029A60FFF79CFD064623689B685B07D0 :1015500023D4A36A23F0030343F00103A36200230F :1015600084F8243016E0019B013B0193D8E7FFF794 :1015700087FD801B0A28DDD923689B681807D9D509 :10158000A36A012523F0120343F01003A362002392 :1015900084F82430284602B070BDFFF771FD801B2F :1015A0000A28D2D923689B685A07CED5E8E70225D6 :1015B000F0E700BFEC0100202DE9B04104468DB0FA :1015C0000F4690460021302268460BF0FFFA94F84F :1015D0002430012B5BD001252E4B84F8245000933E :1015E0009B6803F46023B3F5602F07D0A36A43F030 :1015F0002003A362002384F8243044E02046FFF750 :101600000FFE05460028F5D16846FFF709FE05469E :101610000028EFD1A26A204B2168134043F4807365 :10162000A3624B683A465B054FF0000348BFA06ACF :1016300084F8243042BF20F4405040F48050A0622F :10164000E362206A154B4C318362154BC362154B24 :1016500003636FF0020341F84C3C51F8443C43F4FF :10166000807341F8443C434600F020F923689A68AF :1016700002F46022B2F5602F9A680CBF42F4A00217 :1016800042F480129A6028460DB0BDE8B081022570 :10169000F9E700BF00280140FEFCEFFFB110000891 :1016A000011100080B11000870B504468CB03022FF :1016B000002168460BF08AFA94F82430012B30D0D0 :1016C0000126204684F82460FFF748FE054620BB2B :1016D000154B68460093FFF741FE48B184F824504B :1016E0003546A36A43F01003A36228460CB070BDD0 :1016F0002368206A9A6822F480729A605A6822F4F9 :1017000070225A6000F011F90546A36A23F4885349 :1017100023F0010343F00103A362002384F8243083 :10172000E3E70225E1E700BF0028014010B590F88B :1017300024300246012B1FD00123046880F8243096 :10174000A368DB0712D40D4B986810F001000DD18F :10175000A3F580639C4209D16368096823F4702370 :101760000B436360002382F8243010BD936A01208C :1017700043F020039362F5E70220F6E700280140DA :1017800007490302CA6803F4E06322F4E06212042A :10179000120C134343F0BF6343F40033CB60704734 :1017A00000ED00E0154B30B5DC68C4F30224C4F151 :1017B0000703251D042B28BF0423062D4FF0FF35FA :1017C00094BF0024033C05FA03F321EA0303A54078 :1017D00022EA0502A340002843EA0203ACBF00F15D :1017E0006040074A4FEA0313DBB2ABBF00F561402C :1017F00000F00F0080F80033135430BD00ED00E01E :1018000014ED00E0002807DB01234109034A00F042 :101810001F00834042F82130704700BF00E100E024 :101820000138B0F1807F0BD24FF0E023F021054A60 :10183000586182F823100020072298611A617047CE :101840000120704700ED00E0034610B540B31421BD :101850000068144A0244B2FBF1F292001A64124A80 :10186000DA63022283F82120D3E901242243DC68D1 :10187000016822431C6921F47F5122435C6921F0F5 :10188000300122439C692243DC6922430A430260FF :1018900000200122986383F8200083F8212010BDE6 :1018A0000120FCE7F8FFFDBF00000240F0B505464F :1018B00090F82000012836D0012085F8200095F806 :1018C000210000240128C6B24FF0020028D185F87B :1018D0002100AC632C68206820F001002060D5E96D :1018E0000F7006FA00F0786063606B68102BEB6A8B :1018F0000BBFA260A160E160E2604BB1236843F0DE :101900000E0300202360236843F001032360F0BD31 :10191000236823F004032360236843F00A03F0E7FD :1019200085F82040F3E70220F1E790F821200346F4 :10193000022A06D0042282630120002283F820209C :1019400070470268C06B116821F00E0111601168C8 :1019500021F00101116001211A6C01FA02F24260CA :10196000002083F82110E8E770B40425C66B026CF0 :101970003468036895402542196832D04D0730D548 :101980001A6896065EBF1A6822F004021A603E4A80 :10199000934219D01432934218D01432934217D084 :1019A0001432934217D01432934217D01432934218 :1019B0000CBF4FF480034FF08063344A5360C36A16 :1019C000002B5ED070BC18470423F6E74023F4E7F1 :1019D0004FF48063F1E74FF48043EEE74FF4802348 :1019E000EBE702259540254235D08D0733D51A689F :1019F000940606D41A6822F00A021A60012280F8BE :101A00002120214A934219D01432934218D0143223 :101A1000934217D01432934217D01432934217D006 :101A2000143293420CBF4FF400134FF00073174A67 :101A30005360002380F82030836AC1E70223F6E771 :101A40002023F4E74FF40073F1E74FF40053EEE77F :101A50004FF40033EBE708259540254211D00907E4 :101A60000FD5196821F00E011960012303FA02F263 :101A70007260836380F82130002380F82030036B8C :101A80009EE770BC704700BF0800024000000240A3 :101A90002DE9F74F00221646644F654BDFF894C1DD :101AA000DFF894E10D6835FA06F402D103B0BDE821 :101AB000F08F4FF0010808FA06F805EA080438EA42 :101AC00005057AD14D68032D07D8013D022D00F29E :101AD0008780DFE805F0959AA000122D00F098802D :101AE0006DD8112D00F08E80FF2C98BF82464FF0EC :101AF0000F0988BF00F1040A4FEA8605DAF8008072 :101B000088BF203D09FA05FB28EA0B0802FA05F513 :101B100048EA0505CAF80050D1F804A01AF0805F21 :101B20004BD0BD6926F0030845F00105BD61BD69D4 :101B300008F1804805F00105019508F5803806F0A8 :101B4000030B019D4FEA8B0BD8F8085009FA0BF9EB :101B500025EA0909394DA84261D005F58065A842FA :101B60005FD005F58065A8425DD005F58065A84287 :101B70000CBF0325042505FA0BF545EA0905C8F84D :101B800008509D681AF4801F14BF2543A5439D602B :101B9000DD681AF4001F14BF2543A543DD605D68AE :101BA0001AF4003F14BF2543A5435D601D681AF475 :101BB000803F14BF2543A5431D60013672E7DFF85F :101BC00080904D450CD017D8A9F580194D4507D008 :101BD00009F570294D4503D0A9F580194D4583D1EC :101BE0008A68D2B1012A08BFC0F810804FF00802FD :101BF00018BFC0F8148077E76545F1D07545EEE76A :101C0000CA6871E7CA6804326EE7CA6808326BE7CF :101C1000CA680C3268E7002266E7042264E7002500 :101C2000A9E70125A7E70225A5E700BF00100240AC :101C30000004014000003110000032100008014093 :101C4000000022108368194214BF01200020704751 :101C50000AB1016170470904FBE7016800224B6982 :101C600013F4806310D06FF480634B612023026310 :101C700080F83D3080F83E20036C80F83C2043F033 :101C80000403036401207047184670472DE9F846A5 :101C900006460F4691461D464FEA114A3368BAF18F :101CA000010F0CBF5C699C6927EA0404A4B2B4FA72 :101CB00084F46409A14501D0002025E06A1CEED01F :101CC000FFF7DEF9089BC01AA84201D8002DE5D124 :101CD0003368BAF1010F0CBF5B699B6927EA030304 :101CE0009BB2B3FA83F35B099945D7D10023202235 :101CF0000120336386F83D2086F83E30326C86F84A :101D00003C3042F020023264BDE8F8862DE9F04113 :101D100004460F46164698462568686927EA00007B :101D200080B2B8B16B695A0516D52B68202243F4EE :101D300000732B606FF480636B610023236384F86E :101D40003D2084F83E30226C42F0040201202264DF :101D500084F83C30BDE8F081731CDED0FFF790F9C9 :101D6000A0EB0800B04201D8002ED5D123685A69F3 :101D700027EA020292B2002ACED000232022236357 :101D800084F83D2084F83E30226C42F02002DDE7EA :101D900070B504460D46164623685B691B0601D5DF :101DA000002070BD2046FFF758FFC8B96A1CF3D069 :101DB000FFF766F9801BA84201D8002DECD12368FB :101DC0005B6913F08003E7D12022236384F83D2070 :101DD00084F83E30226C84F83C3042F020022264C9 :101DE0000120DEE72DE9F0431546026899461368A5 :101DF00085B043F480731360DDE90C780E463B46F2 :101E000000224FF00111CDF800800446FFF73EFF9D :101E1000236838B11B68DB0502D54FF400732364D7 :101E200003200AE006F0FE061E613A4643462046BD :101E30001749FFF76BFF18B1012005B0BDE8F0832B :101E4000236803905A69394603929B69424603937B :101E50002046039BFFF79CFF40B1236C042B01BF7E :101E60002268136843F400731360E5E7B9F1010FCA :101E7000236802D1EDB21D61DFE72A0A1A613946F3 :101E800042462046FFF784FF0028E6D12368F1E7A9 :101E9000020001002DE9FF479A46DDE90C7803684E :101EA00015461A680E4642F480621A601A684FF0AE :101EB000011142F480721A603B460022CDF8008086 :101EC0000446FFF7E3FE236848B11B68DB0502D533 :101ED0004FF400732364032004B0BDE8F0875FFA79 :101EE00086F906F0FE061E613A4643462046294919 :101EF000FFF70CFF08B10120EEE7236803905A6951 :101F0000394603929B69424603932046039BFFF7A1 :101F10003FFF40B1236C042B01BF2268136843F4D8 :101F200000731360E7E7BAF1010F23681AD1EDB22D :101F30004246394620461D61FFF72AFF0246002827 :101F4000E8D1216820460B6843F480730B603B4660 :101F50004FF00111CDF80080FFF798FE226860B1C4 :101F60001368B3E72A0A1A61394642462046FFF74A :101F70000FFF0028CED12368D9E749F00103136190 :101F8000204643463A460349FFF7C0FE003818BFD3 :101F90000120A1E70200010070B504460D46164677 :101FA00023685B695B0701D5002070BD2046FFF701 :101FB00054FEC8B96A1CF3D0FFF762F8801BA84230 :101FC00001D8002DECD123685B6913F00403E7D13D :101FD0002022236384F83D2084F83E30226C84F86C :101FE0003C3042F0200222640120DEE770B5044656 :101FF0000D46164621684B6913F0400301D00020BE :1020000010E04A69D2060ED56FF010024A61202214 :10201000236384F83D2084F83E30226C0120226442 :1020200084F83C3070BDFFF72BF8801BA84201D824 :10203000002DDFD123685B6913F04003DAD1202241 :10204000236384F83D2084F83E30226C42F0200265 :10205000E4E7000070B5044608B9012070BD90F8AF :102060003D3003F0FF021BB980F83C2008F03EFF32 :10207000242384F83D3023681A6822F001021A6094 :102080001A6842F400421A601A6822F400421A6088 :1020900000F068FD3F4B65689D4294BF3E4B3F4B4F :1020A00098428CBF00230123002BD6D1394E3C4BE4 :1020B000B542B0FBF3F388BF4FF4967622685168BF :1020C00021F03F0141EA030182BF73434FF47A7666 :1020D000B3FBF6F35160116A013321F03F010B436A :1020E0001362D169431E2B4821F44F41854221F0F0 :1020F000FF0132D86D00B3FBF5F340F6FC700133FD :10210000034242D0C3F30B031943D1611168D4E9F0 :10211000073021F0C00103430B4313609168D4E9F9 :10212000030321F40341034321F0FF010B439360B8 :10213000D168D4E9053021F0FF0103430B43D3609C :102140001368002043F0010313602023206484F807 :102150003D30206384F83E0080E7A06850B905EB6D :102160004505B3FBF5F30133C3F30B037BB143F434 :102170000043C9E719206843B3FBF0F30133C3F30D :102180000B0323B143F44043BEE70423BCE7012320 :10219000BAE700BFA08601007F841E00FF083D0053 :1021A00040420F002DE9F743044699460F469046FA :1021B0000C9EFEF765FF94F83D300546202B03D0BA :1021C000022003B0BDE8F0830090192301222046CD :1021D0003A49FFF75BFD0028F2D194F83C30012B1F :1021E000EED00123206884F83C3003684246D907CA :1021F00058BF036839465CBF43F0010303600368BE :1022000023F400630360212384F83D30402384F8E5 :102210003E30002323640A9B20466362BDF82C30C5 :10222000CDE900656385638D2385254BE3624B46CD :10223000FFF7D8FD00282AD00120C2E7FFF7A8FD4C :1022400040B1236C042B01BF2268136843F4007370 :102250001360F1E7636A27681A4612F8011B3961B7 :102260006262628D218D013A92B262857A69481E5E :1022700080B2520720850AD548B15A7802333A61B4 :102280006362638D0239013B9BB221856385238D97 :102290002A4631462046002BD0D1FFF77DFE00288C :1022A000CFD12268136843F400731360202384F8AD :1022B0003C0084F83D3084F83E0082E702001000C4 :1022C0000000FFFF2DE9F04399460023044689B042 :1022D00003930D469046129FFEF7D2FE94F83D30D0 :1022E0000646202B04D00225284609B0BDE8F0831D :1022F00000901923012220468D49FFF7C7FC0028D2 :10230000F1D194F83C30012BEDD00123206884F802 :102310003C3003682946DB0758BF036842465CBF70 :1023200043F001030360036823F400630360222386 :1023300084F83D30402384F83E3000232364109B12 :1023400020466362BDF84430CDE900766385638D35 :102350002385784BE3624B46FFF79CFD054608B1A9 :102360000125C1E7228D2368C2B904905A690492FD :102370009A690492049A1A6842F400721A60DFF8AB :10238000B881DFF8B891238D002B37D1202284F853 :102390003C3084F83D2084F83E30A5E7012A11D175 :1023A0001A6822F480621A6072B6236805905A692E :1023B00005929A690592059A1A6842F400721A60A9 :1023C00062B6DCE7022A1A680ED142F400621A6093 :1023D00072B6236806905A6906929A690692069A1E :1023E0001A6822F48062EAE742F480621A60079079 :1023F0005A6907929B690793079BC0E7032B78D81C :10240000012B15D1324639462046FFF7EFFD002853 :10241000A6D123681A69636A1A70636A013363621A :10242000238D013B2385638D013B9BB26385AAE726 :10243000022B4FF000023B4641462046009618D141 :10244000FFF724FC00288BD172B623681A6842F487 :1024500000721A601A69636A1A70636A01336362F0 :10246000238D013B2385638D013B9BB2638562B65F :10247000CFE7FFF70BFC00287FF472AF22681368E8 :1024800023F48063136072B646F2A81123681A69B8 :10249000636A1A70626A531C6362238D013B238551 :1024A000638D013B9BB26385D9F80030B3FBF1F338 :1024B00023214B430393039B013B0393039B6BB982 :1024C0002022236384F83D2084F83E30226C42F0C1 :1024D0002002226462B684F83C3041E723685969DF :1024E0004807E8D5196841F4007119601B695370F9 :1024F000B3E7324639462046FFF778FD00287FF4DF :102500002FAF23681A69636A1A70626A531C636288 :10251000238D013B2385638D013B9BB2638523683B :10252000596949077FF52FAF1B69537075E700BFE5 :10253000020010000000FFFF04000100EC01002079 :102540002DE9F04F044685B01F4688469246FEF7B7 :1025500097FD94F83D300546202B03D0022005B0AE :10256000BDE8F08F00901923012220464A49FFF769 :102570008DFB0028F2D194F83C30012BEED00123E2 :1025800084F83C30236800261A68DFF80CB1D207C3 :1025900058BF1A6808F0FE085CBF42F001021A60DA :1025A0001A6822F400621A60242384F83D303B4B01 :1025B0002664E36222684FF001111368204643F459 :1025C000807313603B4600220095FFF75FFB236892 :1025D00038B11B68DB0502D54FF400732364032078 :1025E000BDE7C3F81080FEF74BFD4FF0A00905468C :1025F00023685A695B69C2F34002C3F3802394F8ED :102600003D10A02901D013431DD04FF020092368AD :1026100084F83D905A6912F0020F1A6842F4007271 :102620001A6025D0002203925A69204603929B69C2 :1026300001220393039B184919230095FFF726FBFA :1026400088B101208BE7FEF71BFD401BB84200D884 :102650000FB984F83D9023685A695B69C2F3400260 :10266000C3F38023CBE784F83D9084F83C0076E701 :102670006FF4806259465A61204619230122009561 :10268000FFF704FB0028DCD10136564592D384F8CD :102690003D9084F83C00D4E7020010000000FFFFEA :1026A00090F83D00704700002DE9F341054638B32E :1026B0000368DB0710D42B689F075ED42B681907CB :1026C00000F195802B685A0700F1C180E869002865 :1026D00040F02C81002029E0904C636803F00C034B :1026E000042B07D0636803F00C03082B0AD163683E :1026F000DE0307D523689C03DDD56B68002BDAD198 :10270000012013E06B68B3F5803F12D1236843F4D6 :1027100080332360FEF7B4FC064623689803CAD4CE :10272000FEF7AEFC801B6428F7D9032002B0BDE899 :10273000F0819BB9236823F480332360236823F45A :1027400080232360FEF79CFC064623689903B2D5DC :10275000FEF796FC801B6428F7D9E6E7B3F5A02FB7 :10276000236803D143F480232360CFE723F480332D :102770002360236823F48023CBE7684C636813F05D :102780000C0F07D0636803F00C03082B10D16368AB :10279000DA030DD423689B0702D52B69012BAFD137 :1027A00023686A6923F0F80343EAC203236085E7DC :1027B0002A695B4B6AB101221A60FEF761FC06468A :1027C00023689F07ECD4FEF75BFC801B0228F7D937 :1027D000ABE71A60FEF754FC0646236898077FF5BE :1027E0006DAFFEF74DFC801B0228F6D99DE7AA6964 :1027F0004A4E4B4BE2B10122C3F88024FEF740FC65 :102800000446736A9B070DD54FF4FA52454B1B687B :10281000B3FBF2F3019300BF019B5A1E0192002B00 :10282000F9D14FE7FEF72CFC001B0228E9D97CE721 :10283000C3F88024FEF724FC0446736A9F077FF5E3 :1028400041AFFEF71DFC001B0228F6D96DE7334CA3 :10285000E369D80024D40127E36943F08053E3619E :10286000E36903F080530093009B2F4E3368D90532 :1028700018D5EB68012B26D1236A43F001032362AC :10288000FEF7FEFB41F288380646236A9B073FD5D8 :10289000002F3FF41BAFE36923F08053E36115E79A :1028A0000027E2E7336843F480733360FEF7E8FB08 :1028B00080463368DA05DCD4FEF7E2FBA0EB0800C3 :1028C0006428F6D931E7ABB9236A41F2883823F09E :1028D00001032362236A23F004032362FEF7D0FB83 :1028E0000646236A9807D3D5FEF7CAFB801B4045EE :1028F000F7D91AE7052B236A03D143F004032362B7 :10290000BAE723F001032362236A23F00403B6E746 :10291000FEF7B6FB801B4045B7D906E70010024022 :1029200000004242EC010020007000402A4C636825 :1029300003F00C03082B3ED00022284B02281A6615 :102940002CD1FEF79DFB06462368990120D42B6A03 :10295000B3F5803F05D16268A96822F400320A43CA :102960006260696A62680B4322F4741213430122A5 :1029700063601A4B1A66FEF783FB054623689A01CB :102980003FF5A8AEFEF77CFB401B0228F6D9CCE64B :10299000FEF776FB801B0228D6D9C6E6FEF770FB51 :1029A000054623689B017FF595AEFEF769FB401B4A :1029B0000228F6D9B9E601283FF4B8AE63682A6A5E :1029C00003F4803191427FF49BAE6A6A03F4701382 :1029D00093423FF47FAE93E6001002400000424273 :1029E0000D4A536803F00C01082912D10B48C3F3B8 :1029F0008341DB03405C09D55368094AC3F3404374 :102A00005043084AD35CB0FBF3F07047064B584381 :102A100070470348704700BF00100240A4D400086C :102A200000127A00B4D4000800093D002DE9F041FD :102A30000D46044610B90120BDE8F081444A1368F0 :102A400003F007038B4228D321688E0730D4CA07CE :102A500043D43F4A136803F00703AB4265D82268AA :102A60003C4D12F0040F6CD1130706D56B68226938 :102A700023F4605343EAC2036B60FFF7B1FF6B6856 :102A8000354AC3F30313D35CD840344B1860344B3E :102A90001868FEF7B3FA0020CEE7136823F00703A7 :102AA0000B431360136803F007038B42C3D1CBE7DA :102AB000284B11F0040F1EBF5A6842F4E0625A60BE :102AC000080742BF5A6842F460525A605A68A068C8 :102AD00022F0F00202435A60B9E762681D4E012AF3 :102AE00033681AD113F4003FA5D0736841F28838D7 :102AF00023F0030313437360FEF7C2FA07467368BB :102B0000626803F00C03B3EB820FA2D0FEF7B8FAB1 :102B1000C01B4045F3D903208EE7022A02D113F0EF :102B2000007FE1E713F0020FDEE7136823F00703ED :102B30002B431360136803F00703AB427FF47BAFB2 :102B40008DE76B68E16823F4E0630B436B608BE710 :102B5000002002400010024038DD0008EC01002097 :102B600004000020044B054A5B68C3F30223D35CD6 :102B7000034A1068D84070470010024048DD000842 :102B8000EC010020044B054A5B68C3F3C223D35C0D :102B9000034A1068D84070470010024048DD000822 :102BA000EC01002003682DE9F341D907054621D542 :102BB000364CE369DA0033D40126E36943F08053ED :102BC000E361E36903F080530193019B304F3B685D :102BD000DB0527D5236A6A6813F4407336D1236A6C :102BE0006A6823F44073134323621EB1E36923F040 :102BF0008053E3612868830706D52449AB684A6897 :102C000022F440421A434A6010F010001BD01F4AC1 :102C1000E9685368002023F480030B43536012E0FB :102C20000026D3E73B6843F480733B60FEF728FA45 :102C300080463B68D805CDD4FEF722FAA0EB080009 :102C40006428F6D9032002B0BDE8F08102F4407296 :102C50009A42C4D001200F4A236AC2F840040020DF :102C600023F44071C2F840042162D907B7D5FEF7BA :102C700007FA41F288380746236A9A07AFD4FEF76D :102C8000FFF9C01B4045F7D9DCE700BF0010024048 :102C90000070004000004242022808B544D01028CD :102CA00003D0012822D0002034E0254B5A68186850 :102CB00010F080702ED0C2F383412248D20348BF67 :102CC0005A68405C41BF2049C2F34042895C1F4AB8 :102CD0005B684CBFB2FBF1F21D4A5B0202FB00F0E5 :102CE00018D403234000B0FBF3F013E040F20231AC :102CF000134A136A1940B1F5817F1ED003F4407363 :102D0000B3F5007F07D149F64043506A10F0020046 :102D100018BF184608BDB3F5407FC4D110684FF204 :102D2000244310F40030F3E7FFF72CFF044B5B68FB :102D3000C3F3813301335B00D5E74FF40040E9E78B :102D400000100240B6D40008C6D4000800127A0071 :102D500000093D002DE9F3411C4616460F46054685 :102D6000FEF78EF93444241AFEF78AF98046234B85 :102D70001B68C3F3CB3363432A680193936837EA34 :102D8000030301D000202EE0731CF7D0FEF778F982 :102D9000A0EB0800A04229D32B685A6822F0E00279 :102DA0005A606A68B2F5827F0AD1AA68B2F5004F0C :102DB00002D0B2F5806F03D11A6822F040021A6087 :102DC000AA6AB2F5005F07D11A6822F400521A60AD :102DD0001A6842F400521A60012385F8513000232A :102DE000032085F8503002B0BDE8F081019B002B34 :102DF000019B08BF0024013BBEE700BFEC0100209F :102E000010B513460A4680210446FFF7A3FF20B100 :102E10000320636D43F02003636510BD10B50446C5 :102E2000002851D0436A002B4AD14268B2F5827F14 :102E300000D0C3610023A36294F8513003F0FF0275 :102E400023B9204684F8502008F082F80223226833 :102E500084F851301368A06823F04003136063685E :102E600000F4044003F482730343E068A16900F4B2 :102E700000600343206900F002000343606900F032 :102E80000100034301F400700343E069090C00F002 :102E900038000343206A01F0040100F0800003437E :102EA000A06A00F40050034313605160D36900200E :102EB00023F40063D3610123606584F8513010BDB1 :102EC0000023C0E90433B5E70120F8E72DE9F34713 :102ED0001F4690F850300446012B0D46904600F0F6 :102EE000A680012380F85030FEF7CAF894F85130DC :102EF0008246012B5FFA83F940F09680002D67D05F :102F0000B8F1000F64D0032384F8513000236365C7 :102F1000C4E91033A4F83680A363A387E387A368CA :102F20002668B3F5004F2563A4F8348007D13368D1 :102F300023F040033360336843F4804333603368E5 :102F400062685B065EBF336843F040033360E3684A :102F5000B3F5006F43D112B1B8F1010F07D135F8C5 :102F6000023BF3602563E38E013B9BB2E386E38E75 :102F70009BB2B3B9524639462046FFF741FF0028BD :102F80004FD1A36833B901932368DA6801929B6833 :102F90000193019B636DDBB90122994684F85120AE :102FA00016E022689368980705D5236B33F8021B57 :102FB000D1602363D7E7FEF763F8A0EB0A00B842BD :102FC000D5D3791CD3D001234FF0030984F85130B5 :102FD000002384F85030484602B0BDE8F08712B1B3 :102FE000B8F1010F08D12B783373236B01332363BE :102FF000E38E013B9BB2E386E38E9BB2002BB9D0FC :1030000023689A68920703D5226B12781A73ECE74B :10301000FEF736F8A0EB0A00B842EDD37B1CEBD0EC :10302000D1E720236365ACE74FF00209D0E74FF00A :103030000209D0E790F8510070470000036A026A65 :1030400070B522F001020262446882690D6822F0C4 :1030500073022A438D6823F002032B430A4DA842D2 :103060000BD1CD6823F008032B4324F44074D1E93D :103070000556354323F004032C43446082614A68BB :103080004263036270BD00BF002C0140036A026A04 :1030900070B522F4807202624468C2690D6822F041 :1030A00073022A438D6823F4007343EA05230B4D12 :1030B000A8420DD1CD6823F4006343EA052324F42C :1030C0004054D1E90556354323F4806344EA05149E :1030D0004460C2614A68C263036270BD002C014053 :1030E000036A026A30B522F4805202624468C269FF :1030F0000D6822F4E64242EA05228D6823F400536B :1031000043EA0533064DA84202BF4D6924F48044CA :1031100044EA85144460C2614A680264036230BDB7 :10312000002C0140704770477047704770477047E8 :10313000036810B51A69044691070ED5DA6892073C :103140000BD56FF002021A61012202779B699B077F :1031500077D0FFF7EAFF0023237723681A69500727 :1031600010D5DA6851070DD56FF004021A610222FA :1031700022779B69204613F4407F68D0FFF7D5FF84 :103180000023237723681A6912070FD5DA6810071E :103190000CD56FF008021A6104222277DB69204601 :1031A00099075AD0FFF7C1FF0023237723681A69D4 :1031B000D20610D5DA68D0060DD56FF010021A616C :1031C00008222277DB69204613F4407F4BD0FFF7BB :1031D000ACFF0023237723681A69D10708D5DA6882 :1031E000D20705D56FF0010220461A61FFF79CFF58 :1031F00023681A69100608D5DA68110605D56FF03C :10320000800220461A6100F05AFB23681A695206B0 :1032100008D5DA68500605D56FF0400220461A61DD :10322000FFF785FF23681A69910622D5DA689206AE :103230001FD56FF020022046BDE810401A6100F053 :103240003DBB01F0B9FD2046FFF770FF83E701F0B9 :10325000B3FD2046FFF76AFF92E701F0ADFD20467F :10326000FFF764FFA0E701F0A7FD2046FFF75EFF30 :10327000AFE710BD1A4A036890420AD0B0F1804F00 :1032800007D0A2F59432904203D002F580629042BA :1032900015D14A6823F070031343114A90420AD0B3 :1032A000B0F1804F07D0A2F59432904203D002F5DE :1032B0008062904203D1CA6823F4407313434A6981 :1032C00023F08003134303608B68C3620B6883623F :1032D000034B984204BF0B690363012343617047AA :1032E000002C014010B5044630B390F83D3003F097 :1032F000FF021BB980F83C2007F05CFE0223206827 :1033000084F83D30211DFFF7B5FF0123002084F82C :10331000463084F83E3084F83F3084F8403084F8FA :10332000413084F8423084F8433084F8443084F8E3 :10333000453084F83D3010BD0120FCE710B504464F :1033400030B390F83D3003F0FF021BB980F83C2009 :10335000FFF7E8FE0223206884F83D30211DFFF7C7 :1033600089FF0123002084F8463084F83E3084F839 :103370003F3084F8403084F8413084F8423084F89B :10338000433084F8443084F8453084F83D3010BD33 :103390000120FCE710B5044630B390F83D3003F04F :1033A000FF021BB980F83C20FFF7BDFE0223206816 :1033B00084F83D30211DFFF75DFF0123002084F8D4 :1033C000463084F83E3084F83F3084F8403084F84A :1033D000413084F8423084F8433084F8443084F833 :1033E000453084F83D3010BD0120FCE7036A026AD5 :1033F00070B522F010020262446882690D6822F4FE :10340000E64242EA05228D6823F0200343EA0513D1 :103410000B4DA8420DD1CD6823F0800343EA05137C :1034200024F44064D1E90556354323F0400344EACF :103430008504446082614A688263036270BD00BF94 :10344000002C014038B590F83C300546012B1DD0CA :10345000082A17D007D862B1042A0FD00120002310 :1034600085F83C3038BD0C2AF8D10068FFF738FEEB :1034700002E00068FFF7E2FD0020F0E70068FFF7D8 :10348000B5FFF9E70068FFF701FEF5E70220E9E77D :1034900070B590F83C300546012B50D00123082A26 :1034A00080F83C303BD007D8C2B1042A27D0184658 :1034B000002385F83C3070BD0C2AF8D10068FFF776 :1034C0000FFEC3690A6943F40063C361C36923F44F :1034D0008063C361C36943EA02232EE00068FFF7FB :1034E000ADFD83690A6943F008038361836923F0B2 :1034F000040383618369134383610020D8E7006874 :10350000FFF774FF83690A6943F400638361836989 :1035100023F480638361836943EA0223ECE7006854 :10352000FFF7B4FDC3690A6943F00803C361C369C7 :1035300023F00403C361C3691343C361DDE70220C1 :10354000B9E710B584680A4324F47F4442EA0322B1 :103550002243826010BD38B590F83C300446012B00 :103560004FF0020000F08E80012284F83D002068B8 :1035700084F83C20836823F47F4323F0770383603F :103580000B68602B4FD032D8402B64D016D8202B3C :103590000DD00AD833F0100109D0012384F83D3052 :1035A000002384F83C30104638BD302BF5D18268BA :1035B00022F07002134343F0070328E0502BECD1B4 :1035C0004A68CD68016A036A21F00A0123F0010309 :1035D000036283690A4323F0F00343EA051383611E :1035E0000262836823F0700343F057030FE0B3F5E2 :1035F000805F0DD0B3F5005F0CD0702BCDD1CB68C0 :10360000D1E90121FFF79DFF836843F077038360D1 :103610000022C2E7CB68D1E90121FFF792FF83685E :1036200043F48043F3E7036A026A4D6822F0100214 :10363000C9680262826923F0A00322F4704243EA5F :10364000051342EA013282610362836823F070034A :1036500043F06703DBE74A68CD68016A036A21F03B :103660000A0123F00103036283690A4323F0F00394 :1036700043EA051383610262836823F0700343F019 :103680004703C4E702468EE710B50124036A01F040 :103690001F018C4023EA04030362036A8A401A4331 :1036A000026210BD08B529B990F83E30012B21D037 :1036B000012008BD042907D190F83F30012BF7D134 :1036C000022380F83F3018E0082907D190F84030F5 :1036D000012BEDD1022380F840300EE090F841300C :1036E000012BE5D10429EBD00829F3D0022380F87F :1036F000413002E0022380F83E3000680122FFF7EB :10370000C3FF0E4B98420AD1436C43F40043436419 :10371000836803F00703062B0BD10020C9E7B0F143 :10372000804FF5D0064B9842F2D003F58063984263 :10373000EED0036843F001030360EEE7002C014084 :1037400000040040FFF7AEBF08B5034629B990F862 :103750003E20012A30D0012008BD04290BD190F869 :103760003F20012AF7D10222186883F83F20C2685F :1037700042F0040227E008290BD190F84020012AEA :10378000E9D10222186883F84020C26842F008029A :1037900019E090F84120012AD0B2DCD10429E2D00E :1037A0000829EED002220C2983F84120D4D11868D0 :1037B000C26842F0100206E0022280F83E20006853 :1037C000C26842F00202C26018680122FFF75CFF83 :1037D0000E4B98420AD1436C43F400434364836820 :1037E00003F00703062B0BD10020B5E7B0F1804FA3 :1037F000F5D0074B9842F2D003F580639842EED0A3 :10380000036843F001030360EEE700BF002C0140B2 :103810000004004030B590F83C300246012B4FF0D8 :10382000020022D0136882F83D005C680D6824F025 :1038300070042C4398685C600C4CA3420AD0B3F12E :10384000804F07D0A4F59434A34203D004F58064DC :10385000A34204D1496820F080000143996001230C :10386000002082F83D3082F83C0030BD002C014041 :1038700090F83C300246012B1ED0CB68886823F4B8 :1038800040730343486823F480630343086823F4C8 :1038900000630343086923F480530343486923F416 :1038A000005303430020C96923F480430B4311688C :1038B0004B6482F83C0070470220704770477047A5 :1038C000012300220370014B1A6470470008004076 :1038D00010B5054C4B1E4908E36210462164FDF704 :1038E000D5FB0023236410BD00080040037823B1FA :1038F000A0224FF48E71FFF7EBBF7047037810B52D :1039000004467BB1A0224FF48E71FFF7E1FF6420E3 :10391000FDF7BCFB2046BDE81040A0224FF48E719D :10392000FFF7D6BF10BD037823B1A02240F61831AF :10393000FFF7CEBF7047037810B50446C3B1A0228D :103940004FF48E71FFF7C4FF3220FDF79FFB3C223E :1039500040F618312046FFF7BBFF3220FDF796FBFB :103960002046BDE81040A02240F28C51FFF7B0BFC6 :1039700010BD90F88C3013B990F8510070470020BA :10398000704790F88C3073B504460D46D3B1B0F84B :10399000966032462946B4F84C0007F047FC0A22EC :1039A00094F88C30A4F84C0002FB0344B4F8743053 :1039B000324600932946002380B207F009FC80B20A :1039C00002B070BDB0F88E60E3E71FB54FF6FF732D :1039D000144643850A46694602F0DDFF58B904F1F2 :1039E000080302AA0D3412F8010F13F8011F8842D0 :1039F00004D1A342F7D1012004B010BD0020FBE7A1 :103A00002DE9F04304460026012785B000F1340873 :103A1000404603F01DFEF5B2854224DAD4F8A0300A :103A20004FEA450903EB450213F81530FF2B01D18E :103A30000136EDE7537803F00303032BF8D12A4650 :103A40006946204602F0A7FF0028F1D1D4F8A03043 :103A50008DF808704B442A46694620465F7002F094 :103A6000D1FF0028E4D005B0BDE8F0832DE9F04394 :103A7000002406460D464FF0FF08A14685B000F130 :103A80003407384603F0E4FD631CE4B284420BDBE8 :103A90004FF000084446304602F03AFE40450BDC49 :103AA000E0B205B0BDE8F08305EB440205F81480F0 :103AB0001C4682F80190E4E75FFA88F94A466946B5 :103AC000304602F068FF20B10128E9D008F1010872 :103AD000E1E738460DF1090103F0C6FD031EF5DBF1 :103AE0009DF80820002AF1D015F8130005EB4301DA :103AF000FF2802BF05F8139001344A70E6E7000082 :103B000070B534300C461146164603F0A3FD054649 :103B1000C0B116B103784E2B08D1052229462046A4 :103B200009F06EF800236371204670BD08492046F5 :103B300009F0B6F805222946201D09F061F8002396 :103B40006372F1E72046034909F0AAF8ECE700BFE9 :103B5000C8D40008CDD4000890F88C3023B990F870 :103B600051200249FFF7CCBF0022FAE76002002093 :103B70002DE9F84F1446D0F8A02080460E461F4687 :103B80009DF828906AB911460C20023403E000FB2E :103B900002F30132E154D3B29F42F8D80020BDE8CD :103BA000F88F4B1E0132002B01DC002513E0590079 :103BB000B9F1000F03D012F81300C0071FD5DAB215 :103BC0002270D8F8A03040460B445B78A11C63708B :103BD000FFF796FF01254FF00C0B08F1340A504611 :103BE00003F036FD86420CDB0C23002203FB054468 :103BF0002B46BB4204F10C0423D32846CFE7013BFC :103C0000D1E7DEB17200B9F1000F05D0D8F8A030CD :103C100013445B78DB0711D50BFB05F3E654E11881 :103C2000D8F8A030013513445B7832464B704046DB :103C30000231EDB2FFF764FFBD42DED20136F6B2CB :103C4000CDE7013304F80A2CDBB2D2E7C288C38C7B :103C50009A422BD10289038D9A4227D14289438D02 :103C60009A4223D1028B038F9A421FD1827E90F811 :103C70003A309A421AD1427F90F83D309A4215D19B :103C8000827F90F83E309A4210D1C27F90F83F3048 :103C90009A420BD1C27E90F83B309A4206D1037F04 :103CA00090F83C209B1A58425841704700207047BA :103CB0002DE9F0410546002600F13408284602F0BF :103CC00027FDF4B2844211DB0026404603F0C0FC1D :103CD000F4B2844214DBFF240FE0D5F8A0200137B2 :103CE00012F81330A34202D10136E7E7002740461D :103CF00003F0AEFCFBB28342EFDB2046BDE8F0816F :103D0000D5F8A030610003EB440213F81430FF2B08 :103D10000AD0537813F0010306D1FF201070D5F8B4 :103D2000A0200A445370E8E70136CEE7F0B5D0F89A :103D3000A03004460D4685B013B9002005B0F0BD93 :103D400013F811604F00FF2E2DD1FFF7B1FFFF28B0 :103D50000646F2D0294604F1340003F07BFC01460C :103D60000028EAD005220DF1090008F049FF0123DF :103D70003246694620468DF8083002F043FE00289E :103D8000DBD16A4631462046FFF71FFE0028D4D01B :103D9000D4F8A03003F81560D4F8A0309DF80820BE :103DA0003B445A70CAE73246694602F0F4FD0028E7 :103DB000C3D19DF80830324683F00103694620469E :103DC0008DF8083002F01EFE0028B6D1D4F8A030DD :103DD0009DF808203B4401205A70AFE7EB234FF4D5 :103DE000A02C064AC380064B0649C0E90223064BB5 :103DF000C0E90413054BC0E906C370472C01B004A9 :103E0000FC083200DF02C8004000C30000010003CC :103E100010B5044602F02DFD04F13400FFF7DEFF7B :103E20000146204602F06BFD2046BDE81040FFF73A :103E3000E7BD0000F8B5CB7F0746DA070C46CE8811 :103E40000D8907D430B207F002FA86B228B207F023 :103E5000FEF985B2194B30461A88194B198807F0BC :103E6000E5F9184B06461A88174B2846198807F0BB :103E7000DDF9E37F0546DB0717D5B6B285B2A37F30 :103E800025811E2B88BF1E23384688BFA377E68076 :103E9000657F03F0DDFB8542C4BF01236377E37ECA :103EA0003C2B84BF3C23E376F8BD30B207F0C7F962 :103EB00086B228B207F0C3F985B2E0E75CDD0008FE :103EC0005EDD000854DD000856DD00082DE9F047EE :103ED0001D4691469DF83820C37FC276BDF830203C :103EE00003F0010302839DF83420AB4204469DF8A1 :103EF00020A09DF824809DF828709DF82C60817783 :103F000082760AD0B0F906002DB307F0A0F9E08060 :103F1000B4F9080007F09BF92081B9F1000F22D114 :103F2000E577BAF1000F03D0E37F43F00403E377B2 :103F3000B8F1000F03D0E37F43F00803E3771FB12C :103F4000E37F63F07F03E3771EB1E37F43F0100369 :103F5000E377BDE8F08707F072F9E080B4F9080074 :103F600007F06DF9D8E745F00205D9E7C180704741 :103F700001814281704700F120031A4650F8041B6A :103F8000984242F8041BF9D1704738B500F1340566 :103F900004462846FFF75AFE40B92946204602F05B :103FA000AEFC2846BDE83840FFF7E5BF38BD38B560 :103FB0000D888C880B897AB1A0F84050A0F8424057 :103FC000A0F8443000F13404214602F098FC204669 :103FD000BDE83840FFF7CFBFA0F84650A0F84840F2 :103FE000A0F84A30EEE700F1200300F1400253F858 :103FF000041B934240F8041BF9D17047007F00096D :1040000000EB80007047007F00F00F00013000EBF4 :104010008000800070474B2928BF4B21052A38BFFC :104020000522B2F5A07F28BF4FF4A072531E1422C0 :10403000B3FBF2F305220431C9B2B1FBF2F143EA5A :1040400001130377704710B5044632B10B8ACA8951 :10405000898906F039FD204610BDCB8A8A8A498AB3 :10406000F7E710B504463AB1C8230A2240F23F21CF :1040700006F02AFD204610BD32231E22C821F7E794 :104080000A235A4310B50C88831884524A885A80F0 :104090008A889A80CA88DA800A7A1A7291F90E2080 :1040A0005A7210BD39B1064B1B888382054B1B88A1 :1040B0000176C3827047044B1B888382034BF6E76B :1040C00056DD000854DD00085EDD00085CDD0008F8 :1040D00003290DD82AB1022A06D000EB4100408BFB :1040E0007047037E002BF8D000EB4100408C7047F6 :1040F000002070472DE9F04F04460D461646007E1D :1041000085B07BB907460A227A43A118A25A91F9D1 :104110000980AA42A6EB08081CD93BB1022B07D0A4 :10412000638B06E09A1E57425741ECE70028F7D010 :10413000638C4344009300213346284607F048F837 :1041400000B240F2E732314607F070F880B205B0B5 :10415000BDE8F08FCA88B1F802A0AA422AD355451B :1041600022D3B1F804A0554521D3AA4235D99246AD :104170004FF0030909F1FF311A46C9B22046FFF793 :10418000A7FF494600EB080320460393FFF7A0FF73 :1041900007EB870709F1FF3B5F4440445246039B0E :1041A00034F817100090C8E74FF00109E2E74FF02C :1041B0000209DFE723B1022B04D00021A38B03E027 :1041C0000028FAD00121A38C434421B1218D414420 :1041D00000915146B1E7218CF9E70020B1E710B515 :1041E00004467430FFF786FF94F85330DB0703D49E :1041F00000B207F024F880B210BD00002DE9F347AB :1042000017460A2290F88C30054602FB030292F909 :104210007D4088463C1B002B64D0B0F89660A4B269 :104220002644B6B2002B60D0B5F89C301C4495F8FB :104230005330B5F88890DB07B5F88AA0A4B213D440 :1042400030B206F0FCFF86B220B206F0F8FF84B26E :104250000FFA89F006F0F3FF1FFA80F90FFA8AF0DF :1042600006F0EDFF1FFA80FA52464946404606F036 :10427000DDFF264B95F88C20B3F800A00A2303FB42 :104280000252B2F87430B2F87A201FFA80F931463F :1042900000924846224606F09BFF14264FF0000885 :1042A00084B2B4EB5A0F4FEAAA03CCBFE41AE41865 :1042B000A4B200233A4621462846FFF790FF8145E5 :1042C00022D017D90AEB0400C0F34F00A04201D15D :1042D000601C80B2A046013E16F0FF0608D102B075 :1042E000BDE8F087B0F88E6099E7B5F894309DE7A7 :1042F0000446DEE708EB0400C0F34F00A04201D102 :10430000631E98B2A246E6E72046E8E75ADD0008B9 :104310000A22037E5343C218C35A0B8053884B8032 :1043200093888B80D388CB80704700000A2330B5F8 :10433000047E0D885C43055303194888588088889B :104340009880C9885A7203221A72034A12889142CD :1043500028BF1146D98030BD5ADD00080A234FF42A :104360002A72594342524FF4717243185A8040F2F4 :104370000A529A804FF4C862DA80034A12785A725D :1043800001221A72704700BF51DD0008017EFFF75D :10439000E5BF4A880B88934208D28B889A4205D29F :1043A000C888984294BF00200120704700207047C1 :1043B0007FB5D0F8A04006466CB1B1FA81F514F88B :1043C00011207436FF2A4FEA551507D12946304689 :1043D000FFF7C4FF0024204604B070BD694602F018 :1043E000DAFA0028F2D19DF808309B0705D4294657 :1043F0003046FFF7B3FF0124EDE769463046FFF78B :10440000C8FF04460028F2D02A463046FFF738FE9F :10441000E1E7F8B5054600F174070021384605F1DB :104420003406FFF73FFE304603F012F9400008F073 :10443000F1FAC5F8A000284602F0D1F9044628B3E5 :10444000D5F8A010E1B12846FFF710FB044631462D :10445000284602F037FAA8B131463046FFF7EAFCA9 :1044600000212846FFF7A4FF95F851102846FFF7D2 :104470009FFF3046FFF77FFDB4FA84F04009F8BD96 :104480000C46E4E73046FFF7A9FCE9E73046FFF7C2 :10449000A5FC21463846FFF761FF01212846FFF7BA :1044A00087FF3046FFF767FD0220E8E738B504468E :1044B0000D46FFF77DFF30B1204684F85150BDE82E :1044C0003840FFF762BD38BD2DE9FF411E46138815 :1044D0008DF80860ADF8003053880446ADF802301E :1044E00093883430ADF80430D3880D46ADF80630EB :1044F0009DF928304FEA41088DF80E30C36E03EB6A :1045000041035E7003F0A6F8074688B3694604F1DC :104510007400FFF73EFF58B3394605220DF109003C :1045200008F06EFBD4F8A03004F19E0713F81530A4 :10453000FF2B10D12046FFF7BBFBFF2803D13846E5 :10454000FFF7F9F914E0D4F8A03003F81500D4F817 :10455000A03043445E70D4F8A0306946204613F87A :10456000152002F04FFA0028E9D13846FFF7BEF9CE :1045700004B0BDE8F081704700207047704710B567 :104580000446242108F088F8204610BD38B50B4DAC :1045900004462B783BB100234FF08042536302F571 :1045A0009632136438BD0648FCF776FE08220549AA :1045B0000548FDF701F82C70F4E700BF400B002020 :1045C0006C0D0020A00300203C0D002000221421CF :1045D000C0E901120A21C0E90411C0E90621052140 :1045E00001620B218184012180F82610254980F881 :1045F0006A20097880F8682080F8691080F8AE2079 :1046000080F8AC2080F8AD1080F8F22080F8F0201F :1046100080F8F1101C49A0F8F42030B5A0F8F6207D :104620004FF0C875A0F8F8204FF4FA74A0F8FA20FB :10463000C26080F8FC20C0F8002180F8042180F8D6 :104640000521A0F80621A0F80821A0F80A210160A0 :104650000821C0F8145180F80C11A0F81841C0F8D6 :104660001021C0F8245180F80C11A0F82841C0F89E :10467000102180F81C11C0F8202180F81C11C0F80E :10468000202130BD50DD000814D500084FF6FF731F :104690002DE9F34143854FF0401300250446A02740 :1046A000984A994EC0E90B23984B05710360336813 :1046B000C580C0F88E3073680581C0F89230B36849 :1046C000A0F88850C0F89630F368A0F88A5080F8B7 :1046D0008C50C0F89A309E30FFF7F2F88C4B04F102 :1046E000A400C4F82C31C4F8A050A4F8305107F04D :1046F0001DFE29462822C4F83251C4F83651C4F8A8 :104700003A51C4F83E51A4F8425104F5A27008F0A1 :104710005DFA29461922C4F86C5104F5B87008F006 :1047200055FA3A462946A4F8895184F88B5104F584 :10473000C67008F04BFA3A46294604F50B7008F0AB :1047400045FA3369A4F8CC52C4F8CE32B38A04F5E2 :104750003570A4F8D232FFF739FF6E4B0826C4F843 :10476000D4326D4B4FF06408C4F83C34142384F801 :1047700040346A4B84F80654C4F8005484F8075453 :10478000A4F80454A4F8085484F80C64C4F8105431 :1047900084F80C64C4F8105484F81464C4F81854F1 :1047A00084F81464C4F8185484F81C64C4F82054C1 :1047B00084F81C64C4F8205484F82464C4F8285491 :1047C00084F82464C4F8285484F82C64C4F8305461 :1047D00084F82C64C4F8305484F83464C4F8385431 :1047E00084F83464C4F83854A4F84284C4F84434D7 :1047F0004B4B0127C4F8483440F21453A4F84C340E :10480000022384F84E3440F63C734FF4007245495D :10481000A4F85434C4F85084434B009704F58B60DB :1048200002F02EF904F59460FFF7D0FE3F4B84F8B8 :10483000CC55C4F8A0343E4B84F8DC651B78C4F832 :10484000E05584F8DC35C4F8E05584F8E465C4F834 :10485000E85584F8E43546F24633A4F80636354B7D :10486000C4F8E855C4F80836334B84F8EC6584F88E :10487000CD55C4F8F055A4F8CE5584F8EC6584F80D :10488000D075C4F8F055A4F8D25584F8F465A4F8AE :10489000D455C4F8F855C4F8D85584F8F465C4F86C :1048A000F85584F8FC65C4F8005684F8FC65C4F833 :1048B0000056A4F80456C4F80C36204BA4F8108611 :1048C000C4F814364EF66023C4F818361C4BC4F8EE :1048D0002476C4F81C3643F61E43A4F820360A2377 :1048E00084F82236174B04F22C60C4F82836FEF701 :1048F000E7FF2046C4F83056A4F8345602B0BDE8AD :10490000F08100BF800050000CD40008E00D0020B2 :104910001DC30008B4D90008CF07E8030A08F40152 :10492000E803030E00080140000C014074D90008A0 :1049300058DD00085802CF0740062003407E0500DE :10494000F401E803E0930400064A8160026001225A :1049500002710022C0E90422C0E9062282810262BB :10496000704700BF54D50008014B1878704700BF4E :10497000140B002070B5FCF783FB1B4B00F59675FC :104980005B6A9BB29C1CA4B2632C01D9613B9CB2B4 :10499000154EFCF775FBA84206D2736AA342F8D104 :1049A0004FF0804300225A62FCF76AFB0E4B00F581 :1049B00096755B6A9BB29C1CA4B2632C01D9613BC7 :1049C0009CB2094EFCF75CFBA84204D34FF0804335 :1049D000D86A013005E0736AA342F3D14FF08043F7 :1049E000586A80B270BD00BF002C014010B5037939 :1049F000044633B1FCF744FB4EF66022237902FBF8 :104A0000030323600023637110BD026810B543796E :104A100004463AB133B9FCF733FB2368984224BF0C :104A200001236371607910BD2DE9F041044686B021 :104A3000A43000F017FC04F5357002F083FC04F597 :104A4000946002F019FA02221B4904F58B6002F00F :104A500049F82046FFF7DDFC6D46074604F13408AF :104A6000012241462846FFF7EEFA03AE294604F537 :104A7000367006F02EF8414630460022FFF7E3FA82 :104A800096E8070085E80700294604F2A44006F0EE :104A900020F894F8533004F5C660C3F3400384F85B :104AA0002C3694F84F3084F83436FFF79FFF3846A1 :104AB00006B0BDE8F08100BF000C01402DE9F047D1 :104AC0005D4F5E4C3846FFF7AFFF06465C48FCF78B :104AD00003FD5C48FCF700FD0C215B48FEF732FE4D :104AE00008215948FEF730FE00215848FEF72AFEFB :104AF00004215648FEF726FE08215448544DFEF77F :104B000023FE0C215148FEF71FFE0C215148FEF7F1 :104B100019FEDFF844A120462A46504B504904F0C4 :104B20005EFD2246214628464E4B04F058FDDFF834 :104B3000388121462B462A46504604F050FD2B462C :104B40002A462946474804F04AFD21464246434B3F :104B5000434804F044FD2246214640463F4B04F0C2 :104B60003EFD234622462146404804F038FD2346B8 :104B700022463F493F4804F032FDDFF8FC902346CF :104B8000224621463A4804F02AFD23462246214681 :104B90003A4804F024FD234622462146484604F0C4 :104BA0001EFD2E4A23461146354804F018FD2346C3 :104BB00022462146334804F012FD23462246274967 :104BC000314804F00CFD234622462146234804F0D8 :104BD00006FD224621462D4B2D4804F000FD2346BC :104BE00022462146294804F0FAFC2A4B012EC3E94B :104BF0000B456362C5E9093A274C07D0022E13D052 :104C000097F85330DB0648BF256001E0C4F8008008 :104C1000FFF7B0FE4FF47A70FCF738FA2068BDE871 :104C2000F04703681B6818471C4907F1A40001F00E :104C30009DFCC4F80090EBE7C00300206C0300204B :104C40003C0D00206C0D00208C0E0020D40E0020A6 :104C5000E40C00201C0F00200C0C0020380C00205D :104C6000C40A00206C0A0020180B00206C020020EF :104C7000BC02002034030020F80900201C0A002098 :104C8000FC0200208C0B0020440B0020940A002022 :104C9000480A0020C00B00200C000020D5D40008DA :104CA00070B5FCF7EDF9364C236898421AD9FCF739 :104CB000E7F96430082120603248FCF7C3FF01287F :104CC0000CBF64210021304806F05CF84FF480717D :104CD0002E48FCF7B7FF01280CBF642100212C48A7 :104CE00006F050F82B4D286804F07DFC0446A0B176 :104CF0002B68834211D02848FEF700FE2748002188 :104D000002F08EFA4FF0804300225A632368204657 :104D10002C601B68BDE870401847286803685B6812 :104D200098472B680446834214D01D4B002100286D :104D300008BF1C46194802F073FA1A48002102F015 :104D4000D7F94FF0804300225A63236820461B683E :104D50002C609847FCF794F9134C236898420ED3C3 :104D60001249134A4B6A10681B1A18BF01231148D5 :104D700003704B6A1360FCF783F92930206070BD23 :104D8000300D0020000C0140B00700200008014059 :104D90007C0900200C000020EC0900209406002073 :104DA000F8090020600800202C0D0020002C014094 :104DB000E00C0020140B002038B50568114B0446A8 :104DC0009D420AD1037F042B1BD10F4802F09EF8AD :104DD0006322002106F02AFA28642368B3F1804F89 :104DE0000FD1227F042A08D15A6B0AB99B6B43B1B9 :104DF0000120BDE83840FFF7C9BB082A01D10220D5 :104E0000F7E738BD002C014060080020F0B50268CB :104E10005D4B87B09A4275D15C485D4CFCF744FC11 :104E20005C48FCF73FFB2378022B71D100255A4BDD :104E30000195029503955A88DE885889B6B2D989BA :104E400092B280B23244019F89B202440A443A4489 :104E500001921A89029992B20A4402929A8903999C :104E600092B20A4403925A8ADE8A588B92B2D98B44 :104E7000B6B280B23244019F89B202440A443A4435 :104E800001921A8B029992B20A4402929B8B039A66 :104E90009BB213440393019B404804330193019B4D :104EA000DB080193029B01330293029B5B08029390 :104EB000039B01330393039B5B080393039905F062 :104EC0000DFF374A1378013BDBB2137013B9062389 :104ED00001251370334890F8E933ABB1019900F51F :104EE000357002F09FFA4FF4F562294606F09EF9FC :104EF0004FF08043586302992B4889B201F081FF3B :104F00000023237007B0F0BD4FF080435D63F2E7EC :104F10002378012BF4D100231F4A049305931388AF :104F200004999BB20B440493938805999BB20B445C :104F30000593138A04999BB20B440493938A059AB0 :104F40009BB213440593049B01330493049B5B08B9 :104F50000493059B01330593059B5B0805934FF074 :104F600080435B6B23B10499104889B205F00AFFB6 :104F70004FF080439B6B002BC2D005990C4889B23F :104F800005F000FFBCE700BF002401403C0D0020FD :104F9000400B00206C0D0020A0030020D40700204F :104FA00008000020C003002060080020A0070020A7 :104FB0006C0900207047000008B5034801F01DFE91 :104FC0000122024B5A6108BD18080020000401406C :104FD0002DE9F04F00247C4D7C4E87B02846FFF72A :104FE00055FB29463046FFF7AFFC794BC6E909442B :104FF0003360B48586F82E403486764E2946304696 :10500000FFF7A2FC744BC6E909443360082386F815 :105010002C30346386F82C304FF0FA733364052358 :10502000C6E90E443463B48686F844306B4E294694 :105030003046FFF789FC6A4B4FF0030B33604FF4A7 :105040007A7386F82440F4843385664E29463046C8 :10505000FFF77AFC644BB484336086F82640634ED5 :1050600029463046FFF770FCDFF88491614B2946F2 :105070003360B46486F84CB04846FFF765FC5E4B7D :105080005E4EC9F80030FF232946304689F82430A7 :10509000FFF75AFC5A4B5B4F33604FF44033B36415 :1050A0004FF41673294686F82440A6F84640A6F821 :1050B0004C303846FFF748FC534BDFF850A13B60BB :1050C000534B3246294687F82440FC853C637B637A :1050D00050483B4604F010FD29465046FFF734FC8B :1050E0004D4A4E4ECAF800204FF4803229463046D1 :1050F000DFF82C81CAE90924FFF726FC494A294632 :1051000032604046FFF720FC474A08F12C06C8F8F9 :105110000020464A88F8244007CA86E80700444E23 :1051200029463046A8F82640A8F82840FFF70CFC8E :10513000404A534632603A463F4FA6F830B02946BF :10514000C6E90944B48586F82E403C48009605F02F :1051500091F929463846FFF7F7FB394ADFF8E4B002 :105160003A6001223A87384A2946BA64C7E90B44B3 :10517000C7E90F447C623C857C637C645846FFF73A :10518000E3FB324F32493846CBF800102946FFF78F :10519000DBFB3049294B39602F49BC84B96240F2AE :1051A000CF7187F82640B9854246CDE9026329468A :1051B000CDE9009A174BCDF810B0284804F05EFCFA :1051C00007B0BDE8F08F00BFC00300206C030020D3 :1051D000A8DB0008E40C0020C0DB00080C0C002059 :1051E00090DB00086C0A0020B0DC0008C40A002034 :1051F000180B002038DC000850DC00086C0200208E :10520000C8DC000834030020D8DB00081C0A00209A :105210000400DC05BC02002080DC0008F809002046 :10522000FC020020F0DB000808DC000824D40008A1 :105230008C0B002068DC0008C00B0020440B002011 :1052400028DD0008480A00200000B80B940A00205E :1052500098DC0008E0DC00082C015802380C002023 :1052600006F07CBC022310B51A46044678210F488C :10527000FDF766F90E490F4A0F4B002808BF0A4692 :105280000E49204606F0E0F94023A4F82A322023F4 :105290002046A4F82C3207F0BCF9204606F0BFF9EE :1052A0002046BDE81040002107F0BBB9E00D00200A :1052B00059AA0008C1A9000889A90008A8E10008A6 :1052C00010B5072204468E3007F09AFC002384F8BC :1052D000953010BD0149FFF7F3BF00BF64D500084A :1052E0000149FFF7EDBF00BF06D600080149FFF7EF :1052F000E7BF00BF68D500080149FFF7E1BF00BF65 :105300006DD500080149FFF7DBBF00BF73D500086A :105310000149FFF7D5BF00BF78D500080149FFF765 :10532000CFBF00BF7DD500080A468E30014907F087 :105330002DBC00BF83D5000810B509220446963065 :1053400007F05EFC002384F89F3010BD0A46252339 :105350000149963007F01ABC87D5000813B50A4BEF :1053600001F0030103EB4113019310230446009362 :1053700018220223002105F0F4FF204602B0BDE808 :10538000104006F066B800BF36D700082DE9F04F90 :105390008DB09846BDF86430154605939DF8683089 :1053A00040F2E73206939DF86C300446084600212F :1053B00007939DF860A005F039FF40F2E73281467F :1053C0000021284605F032FF6422074600219DF89F :1053D000580005F02BFF9DF85C30BFB2002B14BFC6 :1053E00043224622954BB845C6B21A701FFA89F976 :1053F00080F2FA80A7EB0803142B40F3F5805623C4 :105400004A4600933846002308F1140105F0E0FEF7 :10541000C5B2752D28BF75251E220A21304605F01C :10542000E7FE0646204606F00AF82046844906F0C4 :10543000CFFB4A46834909A807F0A8FB824B4FF0EF :105440000F0B0193012300211A462046CDF800B02E :1054500005F087FF09A9204606F0CAFB5946814698 :105460000C22204609ABFFF7FBFE05230093012326 :10547000DFF8D8B109F110011A462046C9B2CDF8BB :1054800004B005F06EFF09F118010C226B4B2046A9 :10549000C9B204F18E09FFF7E3FE4946204606F043 :1054A000A7FBC0F17B00C1B24B460C222046FFF7A0 :1054B000D7FE40220C21204604F19603FFF7D0FED0 :1054C000BAF1000F09D1624B3722019309235146EB :1054D00000932046012305F044FF7EB1C6F12D0361 :1054E000C6F387061BB2C6F17A06CDE900360293F1 :1054F0007B232D221946204606F036FE059B002B05 :1055000074D01A464F4909A807F040FB09A9204664 :1055100006F06EFBC0F16C0106464022204609AB46 :10552000C9B2FFF79DFE0F23C6F1640100933B2231 :1055300002232046C9B206F02FF8052601233422A3 :105540006C212046CDF804B0009605F00AFF3B4BD5 :10555000402274212046FFF783FE3A46394909A8C4 :1055600007F014FB20463B4906F032FB09A9204610 :1055700006F03EFBC0F1810101EBD1712A222046E9 :1055800009ABC1F34701FFF76BFE762333223146A7 :10559000204606F0A7FB06232F225B21204606F0BB :1055A000A8FB032D0ED90323302231462046009359 :1055B0002B4605F0FBFE6B1E2F2231462046DBB248 :1055C00006F090FB079B43B3234B1C220193092356 :1055D000002100930223204605F0C3FE204605F07B :1055E00038FF0DB0BDE8F08F002515E708F109037D :1055F0009BB26C2BA1D84246184909A807F0C6FAFD :1056000009A9204606F0F4FAC0F16C0140222046B8 :1056100009ABC9B2FFF724FE8FE7069B002BDDD054 :105620000F4A013B03F0030302EB431301931023E2 :105630001822009307990223CDE700BF1200002033 :1056400060DD0008B7D5000856D60008C8D70008A6 :1056500065D60008E0D7000844D6000883D50008C6 :1056600036D700082DE9F34104461F460E4615467D :1056700005F0E5FE2046584906F0AAFA574B002FE0 :1056800072D053F826802046414606F0B1FAB4F8AD :105690002A62B4F82C22A6EB5000103A4346C1B25D :1056A000D2B22046FFF7DCFD3A464D49684607F086 :1056B0006DFA6946204606F09BFAB4F82C22B4F83D :1056C0002A121F32A1EB50016B46D2B22046C9B25A :1056D000FFF7C6FD2046434906F07AFA2A464049BC :1056E000684607F053FA6946204606F081FAB4F896 :1056F0002C22B4F82A120F32A1EB500105466B465A :105700002046D2B2C9B2FFF7ABFD3E26204605F0D7 :10571000A0FE94F92E32C5F34705002BB4F82A32C7 :1057200052DD2B447F2B02DDFF2384F82E3294F9C7 :105730002F22B4F82C32002A4FEA560648DD1E44C8 :105740003F2E02DDFF2284F82F22B4F82A1294F9AA :105750002E220A44A4F82A2294F92F221344A4F8F2 :105760002C3202B0BDE8F08153F82670204639464D :1057700006F03EFAB4F82A62B4F82C22A6EB5000E8 :105780000A3A3B46D2B2C1B22046FFF769FD204635 :10579000144906F01DFA2A461149684607F0F6F941 :1057A0006946204606F024FAB4F82C22B4F82A12EE :1057B0001732A1EB500105466B462046D2B2C9B262 :1057C000FFF74EFD2E26A1E7AB42B0DC0123ACE78C :1057D000B342BADC0122B6E760DD0008D0D700088A :1057E000B7D50008E0D700082DE9F04F1D460E465A :1057F0008BB09146044625232A46724906A807F035 :10580000C5F93246704908A807F0C0F9432320467D :105810006E49ADF8143006F0DBF906A9204606F013 :10582000E7F9461DF6B2C6F1760300930023642221 :105830001946284605F0CCFC14220A215FFA80F8AC :10584000284605F0D5FC40F6FF72914507464846CC :1058500028BF1046B9F5006F00F2AD801423009305 :1058600000234FF40062194605F0B2FC4FF0700AB5 :10587000142340F6FF7240F60101C5B2CDF800A036 :105880004FF4616005F0A4FC8146204605F0D7FD89 :105890004F49204606F0ACF9C0F1800101EBD1710F :1058A0000F224B4B2046C1F3470104F18E0BFFF74B :1058B000D7FC5946204606F09BF9C0F17B00C1B2E7 :1058C0005B460C222046C7F12307FFF7C9FC3FB215 :1058D00008F10503CDE90137232705213A46204683 :1058E000009706F041FCC6F180013A46204606AB1F :1058F000C9B2FFF7B5FC374B282201930A230021D8 :1059000020460093012305F02CFD334B2A220193FE :105910000623782120460093012305F022FD5346FB :105920002A220821204606F0DDF953462F220821BD :10593000204606F0D7F909F1080104232F2220465A :10594000C9B206F0D6F92B462C220821204606F0D3 :10595000C9F9012D0CD92B462B220821204606F02F :10596000C1F96B1E2D2208212046DBB206F0BAF9E0 :1059700008A9204606F03CF9184B0546019305237B :105980002046009334220123702105F0EAFCC5F182 :105990007001204608AB4022C9B2FFF761FC4022EB :1059A0007821204605ABFFF75BFC204605F051FD52 :1059B0000BB0BDE8F08F702340F601010093142373 :1059C00052E700BF8BD50008B7D5000860DD00089E :1059D00091D500086ED6000878D60008C8D7000810 :1059E0000023A0F82832C0F8C83070470B7880F840 :1059F000E5304B7880F8E630002380F8E7307047D8 :105A0000022970B504460D4616460FD8FBF738FB41 :105A1000074B00F57A70C4F8C800324653F82510D9 :105A200004F1CC00BDE8704007F0B0B870BD00BF15 :105A3000BCD70008F8B50546174608464FF4FA7279 :105A40000E4995F8284205F0F1FB40F2E732064690 :105A50000021384605F0EAFB05EB4403A3F8E860B3 :105A6000A3F88801631CDBB24F2B82BF012385F8AA :105A70002932002385F82832F8BD00BF0CFEFFFF55 :105A80002DE9F04F0446B3B008466322002105F02B :105A9000CDFB94F829520390002D40F0A98094F892 :105AA0002872002247F6FF769F4B04F1E601D0B240 :105AB000874200F29F80002EBCBF764236B29E42E3 :105AC000B8BF1E46002347F6FF7A994604F5C37215 :105AD000D9B28F4200F2988035B194F8285201353E :105AE000EDB2502D28BF00254FF0000B28230DF1FB :105AF00028085FFA8BF2974200F29080B6F57A7F21 :105B0000C0F2D48000238DF8183025239DF80C2096 :105B1000864908A807F03AF8D4F8C850002D40F09C :105B2000CB8000230126C4F8C830B9F57A7F80F015 :105B3000CA804A467E4905A807F028F84FF00108B8 :105B40007C49204606F044F8204605F078FC5E23A8 :105B500014221A21204606F0C5F8774B1222019331 :105B600005236F2120460093012305F0FAFB0F2245 :105B700076212046714BFFF773FB0125013FBD42A3 :105B8000C0F2A4809DF818302BB10F2200212046CE :105B900006ABFFF765FB28220021204608ABFFF784 :105BA0005FFB002E00F0BA8094F8E5306BB104F191 :105BB000E5052946204606F01BF8C0F17E00C1B27B :105BC0002B463C222046FFF74BFB0125AF4200F35A :105BD0009180B8F1000F05D03C22002105AB204692 :105BE000FFF73EFB204605F034FC33B0BDE8F08FF4 :105BF000502756E731F9020F01328642A8BF064608 :105C00008342B8BF034652E732F8021F01338A4588 :105C100028BF8A46894538BF894659E7002E40D0BB :105C200005F1740234F91220002A0BDD5A4392FB6D :105C3000F6F2C2F1140252B2002AD8BF012288F84B :105C400000200AE0524212B25A4392FBF6F214329A :105C500052B2282AF3DD88F80030D14524D905F165 :105C6000C40234F81200A9EB0A02A0EB0A00C0EB50 :105C7000001090FBF2F000210F2200B205F0D6FADE :105C80002823C0F13F0040B20135EDB21EAA502DCD :105C90000BF8020008BF00250BF1010B08F1010809 :105CA00027E74FF01402CAE73F20EDE732462449C8 :105CB00006A806F06BFF28E7FBF7E2F985427FF6BE :105CC00030AF002631E74FF0000839E705F1C80290 :105CD0006A4412F8A00C05F11B03009005F11A01AB :105CE000204612F8A12CDBB2C9B2013506F047F804 :105CF000EDB244E705F1C8026A4412F8500C05F110 :105D00001B03009005F11A01204612F8512CDBB25A :105D1000C9B2013506F033F8EDB257E73E223146FD :105D200004F1CC035BE700BF0180FFFF96D50008BC :105D3000B7D5000860DD0008B6D70008A2DA000871 :105D400083D500082DE9F047044686B00F46254963 :105D5000904605F03DFF204605F071FB22492046A4 :105D600005F046FF0646C0F1800505EBD575C5F385 :105D7000470529460D2220461B4BFFF771FA334693 :105D800029460F22204605F0ADFF1C250026DFF82E :105D90005C90DFF85CA037F8162059F8041B03A8C4 :105DA00006F0F4FE03AB2A4614212046FFF758FA0A :105DB000F3B298450BD10723A5F108020093002107 :105DC00001232046CDF804A0D2B205F0CAFA01366C :105DD0000D35032EEDB2DED1204605F03AFB06B0BC :105DE000BDE8F08760DD00089CD50008BCD700083E :105DF0002DD600082DE9F04F8FB098469DF86430FD :105E0000DFF8B8A1002B14BF4323462304460F46F6 :105E10000AA86B498AF800309DF870B09DF86C9024 :105E200006F0B4FE2D220A219DF8680005F0E0F985 :105E300064490546204605F0CBFE204605F0FFFAF2 :105E40006149204605F0D4FE39460646204605F055 :105E5000CFFE81190531C9B2C1F1800101EBD171C9 :105E600041F3470121EAE171C9B20D222046564BA8 :105E70000591FFF7F5F90599053631443B460D22AA :105E80002046C9B2FFF7ECF976230F220521204600 :105E900005F028FF0AA9204605F0AAFE0AAB212238 :105EA00005212046FFF7DCF94246484907A806F0DD :105EB0006DFE474B2A2201930F23052120460093B4 :105EC000012305F04EFA07A9204605F091FE39227C :105ED00006461021204607ABFFF7C2F93D4B06F1FD :105EE0001101019305232D2220460093C9B20123FD :105EF00005F037FA06F11901534639222046C9B296 :105F0000FFF7AEF9BBF1000F15D0334B32220193EE :105F10000723462120460093012305F022FABDF80D :105F200060202A4907A806F031FE39225021204678 :105F300007ABFFF795F955B9B9F1000F1CD0274908 :105F4000204605F055FE254BC0F17B011BE0C5F155 :105F50003F03C5F387021BB2C2F17A02CDE90032DA :105F600002937B233F221946204606F0FDF81B2DA5 :105F7000E2D9B9F1000F0BD11949204605F038FEDE :105F8000174BC0F17B0121222046C9B2FFF768F907 :105F9000642200219DF8740005F048F9C3B2012B7A :105FA00006D902220E21009220463E2205F0FEF97B :105FB000204605F04EFA0FB0BDE8F08F1400002027 :105FC000A5D5000860DD0008ADD50008B7D50008EC :105FD00056D60008C8D700082DD6000806D60008F7 :105FE00064D500082DE9F04F89B01E469DF84C306D :105FF0008946002B14BF43214621874B9DF85070E2 :1060000019700546854904A8BDF848409DF854A07C :106010009DF858B006F0BAFD0A2F09D92D23A7F133 :106020000A0000935A220A23002105F0D1F8C7B2D2 :10603000A642C0F0B880301B48BF07301E220021A6 :10604000C01005F0F3F800F142047549284605F048 :10605000BFFD284605F0F3F97249284605F0C8FD52 :1060600049468046284605F0C3FD00EB0806053684 :10607000F6B2C6F1800606EBD67646F3470626EA68 :10608000E676F6B231460D222846664B08F1050841 :10609000FFF7E6F806EB08014B460D222846C9B289 :1060A000FFF7DEF876230F220521284605F01AFEB9 :1060B0002122052104AB284605F050FD5A4B064627 :1060C00001930523411D152228460093C9B20123DF :1060D00005F047F906F10D01212228464E4BC9B2C1 :1060E000A4B2FFF7BDF8BBF1000F0BD04F49284613 :1060F00005F07EFDC0F17B01212228464B4BC9B241 :10610000FFF7AEF84A4B2D2201930A2300212846BF :106110000093012305F025F9464B2F220193062316 :10612000682128460093012305F01BF960232F22E4 :106130000821284605F0D6FD602334220821284690 :1061400005F0D0FD042334224221284605F0D1FD7C :1061500004232B224221284605F0CBFD0A2C16D918 :10616000E4B2A4F10906F6B23346312208212846EA :1061700005F0B8FD0A3C334630220821284605F0D8 :10618000B1FD322208212846E3B205F0ABFDF7B994 :10619000BAF1000F2ED02849284605F029FD264BDC :1061A000C0F17B012DE0A41B48BF0734C4F3CF042A :1061B0001E2C02D8C4F1420447E71E3CC4F3CC00B5 :1061C0001C22002105F032F8C0F124043DE7BB0891 :1061D000C7F13F02C3F17A03CDE900237B2302928A :1061E00019463F22284605F0BFFF1B2FD0D9BAF130 :1061F000000F0BD11149284605F0FAFC0F4BC0F1F6 :106200007B0121222846C9B2FFF72AF8284605F06B :1062100020F909B0BDE8F08F10000020B2D50008C9 :1062200060DD0008ADD50008C8D70008BBD5000860 :106230006ED6000878D6000806D6000864D5000897 :106240002DE9F74F04468A463F491E4615469DF8FC :1062500034709DF830B005F0BBFC204605F0EFF837 :106260005146204605F0C4FC8146C0F1800808EB89 :10627000D878C8F34708414653460D222046FEF71A :10628000EFFF4B4641460F22204605F02BFD06EB63 :10629000460306EB8306002F06F114065FFA86F923 :1062A0000CBF4FF000084FF00F081426DFF89CA039 :1062B00002354E4505D1204603B0BDE8F04F05F04C :1062C000C8B82B78002B3AD015F8023C5B4509D1B1 :1062D0001F4B32460193072341460093204601237A :1062E00005F03FF806F108022B4618212046D2B2ED :1062F000FEF7B6FF15F8013C9B070AD4154B721E3A :10630000019309236421009320460123D2B205F0B2 :1063100028F8A7B915F8013C0C2113F0010F4FF034 :10632000080308BF0C4A009308BF01924FF0010315 :106330003246204618BFCDF804A005F012F80D36FD :10634000F6B20C35B5E700BF60DD000834D60008B2 :106350002DD6000865D600083CD600082DE9F04788 :1063600006468A46374990461F469DF8209005F01C :106370002FFC304605F063F85146304605F038FCF6 :106380000546C0F1800404EBD474C4F347042146ED :1063900053460D223046FEF763FF2B460F2221465F :1063A000304605F09FFC4146304605F021FC394659 :1063B0000546304605F01CFC0446CFB33B78BBB322 :1063C00043462D220A213046FEF74AFFB9F1000F5D :1063D00014D12544662D0CDC3B462D22C4F17101FD :1063E000C9B23046FEF73CFF3046BDE8F04705F045 :1063F00030B83B46C4F180013C22F1E7C4F180058E :1064000005EBD575C5F347053B463C22294630468A :10641000FEF726FFA5F10A010B4BC9B23C2230461C :10642000FEF71EFF04F180014910084B0231E3E73B :10643000C5F1800505EBD57543462D22C5F347010F :10644000CFE700BF60DD0008BED50008C0D500085A :106450002DE9F74F044604F0F2FF94F8A0308BBB0F :1064600017253E4B3E4E14220A21204601930095EB :10647000022304F076FF032314221C212046CDE9D9 :10648000005604F06EFF0323142230212046CDE98C :10649000005604F066FF334B142244212046CDE918 :1064A0000053032304F05DFF032314225E212046E2 :1064B000CDE9005604F055FF204603B0BDE8F04F8B :1064C00004F0C7BF2046284905F082FB04F1A00074 :1064D000F9F73EFE00234FF00D0A98464FF00A09E7 :1064E000C6B2B342E8D29A1CD2B25D1C9F32EDB262 :1064F00022442F460135EDB2AE4226D8A03304EB3C :10650000030B5946204605F073FB03065FBFC0F13D :106510008000C0F347015B46524642BF5B4652468D :1065200000212046FEF79CFEBAF1340FC4D0AE42E3 :1065300088BF2D1907F102070AF10D0A88BF85F8F7 :10654000A090FBB25FFA8AFACBE712F8011F0A2982 :10655000CFD1621982F8A080D0E700BF7ED60008B4 :10656000F1D60008ACD6000860DD00080B781BB13E :106570002822A03006F044BB80F8A030704700000D :106580002DE9F04104460E4686B0264915461F46C1 :1065900005F01EFB204604F052FF4EB1224B0022B4 :1065A00001931023114600932046022304F0D9FEE4 :1065B0002A460F251D4902A806F0E8FA1E220021EE :1065C000204602ABFEF74CFE0D9EDFF86080023ED7 :1065D000414636F8022F02A806F0D8FA2A460F35AF :1065E0003C21204602ABEDB2FEF73AFE4B2DEFD137 :1065F0009DF83030002F14BF69222022002B14BFD9 :10660000672320230A4902A806F0C0FA3A2205218E :10661000204602ABFEF724FE204604F01AFF06B027 :10662000BDE8F08160DD000836D7000829D60008F3 :10663000C2D50008F0B5044689B02E492E4F05F0AA :10664000C7FA204604F0FBFE3946204605F0D0FA92 :106650000646C0F1800505EBD575C5F347053B46F9 :10666000294620460D22FEF7FBFD33460F22294620 :10667000204605F037FB6846204906F011FB6946C5 :10668000204605F0B5FAC0F1800101EBD1716B46EF :1066900020461E22C1F34701FEF7E2FD184A684674 :1066A000184906F073FA6946204605F0A1FAC0F1D0 :1066B000800101EBD1716B462D222046C1F34701C9 :1066C000FEF7CEFD6846104906F0EAFA6946204614 :1066D00005F08EFAC0F1800101EBD1716B463D22CD :1066E0002046C1F34701FEF7BBFD204604F0B1FE92 :1066F00009B0F0BD60DD0008CAD50008D0D500089B :10670000E3D50008E8D50008F8D500081020704748 :1067100008B502462023FFF7F9FFB3FBF0F3508ED4 :10672000584380B208BD30B5438D04468B420D46B8 :1067300085B018D0838D8B4202D8002005B030BDC3 :1067400020234A01C18D64204900CDE9013004F1C4 :106750000A0300932068102392B289B2FBF7B2FDBE :106760000028EAD165850120E8E730B5838D04462D :106770008B420D4685B01BD943854A012023C18D2C :1067800064204900CDE9013004F10A030093206838 :10679000102392B289B2FBF705FD30B9142065854C :1067A000FAF774FC012005B030BD1420FAF76EFC36 :1067B0000020F8E7002388888B80752370B54C1E75 :1067C00001F11F0514F8016F06EB4303A5429BB2CC :1067D000F8D1C41A6042604102B18B8070BD2DE9CE :1067E000F84F0223C18D044649001A46006889B259 :1067F000FBF7A6FE0546002015B12071BDE8F88F15 :1068000001232E46AA46A8464FF0FF39237104F112 :106810000A0B238EAFB2BB4217D939462046FFF789 :1068200082FF88B1002259462046FFF7C3FF60B1BE :10683000D4F80A304B453CBFB8469946534501D978 :106840003E469A460135E4E72071207917B9E78082 :106850002781D3E7238EE680BB4207D90136B6B243 :10686000B34296BF002326812381C7E7A4F808809E :10687000C4E72DE9FF4100F10A0604462022FF216A :10688000304606F0A3F9002564274FF02008238E38 :10689000AB420CDDE18D6A0149001023CDE901878F :1068A000206892B289B20096FBF77CFC28B12046A2 :1068B00004B0BDE8F041FFF792BF0A20FAF7E6FB0B :1068C0000135E4E770B50D46C1880446FFF72BFF9C :1068D000064610B90026304670BD0022204604F15D :1068E0000A01FFF767FF0028F4D00B4629462A3437 :1068F00053F8042BA34241F8042BF9D1EBE738B548 :10690000037904460BB9002038BD0B68012201331E :106910000B60FFF74FFF04F10A0301F1200251F869 :10692000040B914243F8040BF9D120462189FFF76B :106930001CFF0028E7D02389228EE38001339BB21D :106940009A4223819CBF00232381DDE708884B887E :1069500030B503EB4003888801F10D0400EB4300E0 :10696000CB8803EB4003087A00EB430091F90E302B :1069700003EB400301F1080010F8015F844205EBCE :106980004303F9D1C87B7533DCB2041B604260411C :1069900002B1CB7330BD2DE9F84305464FF0200816 :1069A000FFF7B4FEB8FBF0F817466B8E0E4608FBF7 :1069B00003F2974204461FDCB7FBF8F9A98D28467D :1069C000C91A494489B2FFF7AEFEB8B108FB19777E :1069D0007C43E1B20A31002228462944FFF7B6FF82 :1069E00070B101F1100351F8042B994246F8042BC1 :1069F000F9D10020BDE8F8830320FBE70120F9E787 :106A00000220F7E72DE9F04705464FF02009FFF790 :106A10007DFEB9FBF0F990466B8E0F4609FB03F241 :106A20009045044627DCB8FBF9FAAE8D2846F61AE5 :106A30005644B6B23146FFF776FEF0B109FB1A882C :106A400008FB04F4E4B20A3429190B4607F11002DA :106A500057F8040B974243F8040BF9D1012228465A :106A6000FFF774FF31462846FFF77FFE80F00100F4 :106A7000C0B2BDE8F0870320FBE70120F9E7000082 :106A800070B500250826C0E90C13BDF8103006705B :106A900083874560104B067043F2642683600123B0 :106AA000DFF838C0C6870E4E4560C0E9095545611C :106AB000C0E910C685618581858385738577C57733 :106AC000456180F820508583C562856105874287CE :106AD000C3738577037470BD0180FE7F0414DC05E9 :106AE0002C01C40900230287B0F84620436282814A :106AF00090F84020C16202704360704738B5044688 :106B0000FAF7BEFAA36A984201D2002038BDFAF71C :106B1000B7FA94F84130218F0344A362E06AFBF78F :106B200091F8C0B994F83E104900C9B294F82030E9 :106B3000204693B104F0DFF894F83F30984221DA10 :106B4000002384F82030636A0BB1E57F55B3002041 :106B50006062E077DAE70021E8E704F0CCF894F827 :106B60003E3098420EDD012384F82030FAF788FA8F :106B7000636A1BB1C01AA389834208D2FAF780FA6C :106B80006062C2E794F82030002BDCD0EEE7B4F866 :106B900042308342B9D2E37F002BB6D101230220D9 :106BA000E377B3E7FAF76CFA636A6562C31AA08900 :106BB000984294BF00200120A8E7B0F908308B422A :106BC00006DCB0F90A308B4202DB8183012070477A :106BD0000020704738B50446438102819DF810506B :106BE000FFF7EBFF9DF81430E5739D4238BF1D465B :106BF0009DF818302574A37338BD70B5418F0446D5 :106C0000006BFBF71FF80646FAF73AFA012E054625 :106C100063690FD023B16369A289C31A934208D96B :106C2000A18F606B6561FBF70DF8431E5842584118 :106C3000A07770BD002BFCD0A18F606BA67FFBF707 :106C400001F8B0FA80F0F6B24009B0421FD1626993 :106C5000A189AA1A8A42E37B19D2A269B4F8441026 :106C6000AA1A8A42A56138BF237CA27F9BB28AB14F :106C7000A28BD31A1BB2A383A28BB4F90A3012B22F :106C80009A420ADDA27B0AB1B4F90830A38300233B :106C90006361CEE7A28B1344ECE7A28BB4F9081032 :106CA00012B28A42F3DAA27B002A08BF0B46EDE754 :106CB00090F82D01023801288CBF00200120704778 :106CC000B0F832017047B0F8640180B2704790F8B4 :106CD0006601704708B503681B6A984780B208BD13 :106CE000704790F82D3113B5032B04460FD1642360 :106CF00000930023194690F8662190F82E0104F0C5 :106D000067FAC0B2642828BF642002B010BD00F545 :106D10009E7003F0FCFF64230093002394F8672126 :106D20001946ECE708B500F5A67003F0F0FF80B255 :106D300008BD08B500F5AA7003F0E9FF80B208BDF0 :106D400010B5044600F5A27003F0E1FFB4F870310D :106D50009842ACBF0020012010BD0000054B10B5CB :106D60001A8804460846002104F060FAA4F83201AB :106D700010BD00BF5ADD000810B504464FF4C671BF :106D800005F08AFC204610BD10B5044601224FF4E0 :106D900000410448FAF75CFF94F8843184F82C3100 :106DA00010BD00BF0008014070B5044621B9BDE820 :106DB000704003681B69184790F8675103238D42A0 :106DC00028BF0D4680F82D31FFF7DEFF84F82E51E5 :106DD00070BD08B54FF0804340F2CF720021986B30 :106DE00004F024FA80B208BD10B5044600F5A27084 :106DF00003F08DFF94F82D31002B08BF002080B2E6 :106E000010BD38B590F8153104460D465BB100F55C :106E1000A27003F070FF411B494304F5AA70BDE85E :106E2000384003F05BBF38BD642307B500930023EF :106E3000B0F86A211946B0F8340104F0C9F980B2FB :106E4000642828BF6420C0B203B05DF804FB0000D2 :106E500038B505460C4619B1BDE83840FFF794BF78 :106E60000A4604484FF40041FAF7F2FE85F82C4137 :106E700038BD00BF0008014030B50025044690F839 :106E8000813185B090F88211A0F8345180F82D51ED :106E9000A0F82E51029390F88031CDE90013B0F89C :106EA0007E31B0F87C2104F0D8F929462046FFF75E :106EB000CFFF0E4BC4F840511B78C4F8485184F8FA :106EC0004C31C4F8505184F85431C4F8585104344A :106ED00020462B460D224FF47A7103F00CFE294612 :106EE000204605B0BDE8304003F013BE52DD000877 :106EF00000214FF0804310B580F82D1199630446AE :106F0000FFF7A6FF012384F8303110BD73B50446A6 :106F100000F5A27003F0FBFE83B21D46A4F86431B5 :106F2000714B06461B886333AB4294F82D3105DB69 :106F3000B4F8322102F5C872AA4213DA022B11D139 :106F4000012384F82F31694BB4F834211B689A630C :106F500094F82F31E3B1B4F83231023BAB4211DC8B :106F6000002552E0013B042BFAD801A252F823F08D :106F7000476F0008476F0008ED6F00084F7000086A :106F8000D97000080021201D84F82F1103F0C1FDE5 :106F900094F82D31012B0AD1B4F832311333AB42BE :106FA000BFBF022384F82D31D4F88831E36094F810 :106FB0002C3103F0FF0563B194F82C31013BDBB2B7 :106FC00084F82C3194F82C3103F0070384F82C3129 :106FD000C6E7B4F9321132B2201D03F0B7FD2946DD :106FE00094F8672104F022F905460EE094F82C315C :106FF00053B3002594F82C31013BDBB284F82C31DB :107000003A4BB4F834211B689A632046FFF7E1FE3F :10701000B4F86831834265D894F81531002B08BF65 :10702000002504F59E762946304603F057FE294692 :10703000304603F060FE411B494304F5A67003F09F :107040004DFEA8B202B070BD94F82E51D8E720468C :10705000FFF7BFFEB4F86821904203D22046FFF745 :1070600047FF7DE794F815319BB1B4F86431B4F86B :1070700070119BB28B4219D294F830314BB9012375 :1070800084F83031F9F7FCFFD4F878310344C4F8C0 :107090003831D4F83831002B3FF462AFF9F7F0FF04 :1070A000D4F838319842FFF45BAFD7E7B4F8640105 :1070B000B4F86C31009280B2B4F8322104F088F850 :1070C000B4F86A21B4F8681180B204F0AFF8074B45 :1070D00080B21B689863DCE7294604F1280003F0BE :1070E00069FD81E700259CE75ADD0008D40E0020E9 :1070F00038B50023C0F8383190F82D3104460D46DC :10710000052B0ED8DFE803F0032929384F29FFF7B4 :1071100060FE60B92DB12046FFF736FE012384F8EA :107120002D310023C4F84031C4F8503138BD94F8F3 :10713000153145B383B32046FFF726FE04F5A27050 :1071400003F0E5FDB4F8323182B2934203D9104620 :10715000C8309842E2DB0223E1E70029E1D10423B1 :1071600084F82D31F9F78CFFD4F8743184F830515C :107170000344C4F83831D4E7FFF72BFE80B1002D6B :10718000E9D194F81531002BCBD0B4F86431B4F8C0 :1071900070219BB29A42E2D92046FFF7A9FEC0E7D0 :1071A000002DBED1F8E7FFF714FE0028B2D094F806 :1071B0001531002DBED1002BEED0B4F86431B4F8F7 :1071C00070219BB29A42ACD9F9F75AFFD4F87831C2 :1071D0000344C4F83831012384F83031A1E790F832 :1071E0003201431E584258417047B0F82C01704795 :1071F000B0F86A01704790F83201B0FA80F04009A7 :1072000070470023A0F83011C0F84C31C0F85C3151 :1072100019B9032380F8323170470223FAE7704727 :1072200010B5044679B990F83231A0F8301113B195 :10723000032384F832310023C4F84C31A4F82E31F2 :10724000C4F85C3110BD0021043003F062FC01235E :10725000EFE7000090F8323170B5012B05460E467D :1072600003D10021043003F054FC0A4B05F5A8704B :107270001C88B44228BF3446A5F82C4103F047FDD2 :10728000143480B28442ACBF0024012485F8334119 :1072900070BD00BF5ADD000810B5044600F5A470AB :1072A00003F035FD94F83231022B14BF83B2B4F8E9 :1072B0003031B4F86801984228BF184610BD08B5AF :1072C00000F5AC7003F023FD80B208BD08B500F5F1 :1072D000B07003F01CFD80B208BD08B500F5A870C1 :1072E00003F015FD80B208BD37B5044600F5A47063 :1072F00003F00DFD94F83231B4F86851022B80B2DE :1073000004D1B4F83001B4F86A5103E094F8323192 :10731000042BF8D02A46002103F088FF6423009351 :1073200000232A46194680B203F052FFC0B203B0D0 :1073300030BD10B504464FF4C27105F0ADF92046DA :1073400010BD000030B50025044690F8783185B0B6 :1073500080F83251A0F8305180F83351029390F800 :1073600077310434019390F87A310093B0F8743196 :10737000B0F8722190F8761103F06FFF94F86D3138 :1073800084F8343194F86C31C4F8385184F83C31C5 :1073900094F86831C4F8405184F84431C4F8485135 :1073A00084F84C31C4F8505184F85431C4F8585121 :1073B00084F85C314FF08043C4F860519A6AD96A0E :1073C0000B4B013102FB01114FF47A721B6820460E :1073D000B3FBF2F3B1FBF3F10B22012389B203F00B :1073E0008AFB2946204605B0BDE8304003F091BB3A :1073F000EC01002010B5044600F5A87003F087FCEE :1074000094F83231002B08BF002080B210BD00007C :10741000034B1B888B4228BF0B46A0F82C317047CA :107420005ADD000870B5044600F59C7003F063FC5B :1074300083B2A4F83431B4F83411054689B204F5A6 :10744000A87003F058FCB4F83411064689B2411A0A :10745000494304F5B07003F041FC2E4B1B886333A5 :10746000AB4205DBB4F82C3103F5C873AB4206DA46 :1074700094F83231DAB2012B08BF84F8332194F842 :107480003231013B032B40D8DFE803F016360239D6 :10749000B4F86E310025B34201DD84F8325129463B :1074A00004F5A47003F027FC411B494304F5AC70BC :1074B00003F014FCA8B270BDB4F82E31B4F82C61FE :1074C000002B18BF1E4694F833314BB1B31EAB42AC :1074D0004FF000011BDD84F83311201D03F019FB70 :1074E0002AB231B2201D03F031FB0021B4F868212B :1074F00003F09CFE0546D2E7B4F83051CFE72946A9 :1075000004F1280003F056FBF4E70025C7E70D4619 :10751000C5E700BF5ADD00080023C0F83C31C0F8C1 :107520004C31C0F85431C0F85C31C0F8643180F897 :107530003231704790F83231012BDAB20CD1B0F809 :107540002C318B4208D9002380F83321A0F82E116A :10755000C0F84C31C0F85C317047000000000000FA :10756000F8B590F81531044613B9334B1878F8BDC7 :1075700000F5A077384603F0CAFB304E304D336833 :10758000C01A0028B8BF4042132801DC2868EEE783 :10759000384603F0BCFBB4F880213060904239DA01 :1075A000F9F7D6FAF8F740FF02460B461CA1D1E9DD :1075B0000001F9F7BBF80022224BF8F7D5FDF9F7E7 :1075C000BDF901462048F9F7CBFB1F49F9F7C8FB85 :1075D00005F066F81D49F9F7C3FBF8F725FF12A37C :1075E000D3E90023F8F7C2FDF9F7A8F901464FF0F7 :1075F0007E50F9F7B5FBF8F717FF0DA3D3E9002389 :10760000F8F7B2FDF9F79AF905F0BCF8F9F7D0FCF4 :107610002860ACE7084B1878FAE700BFAFF30080AA :107620000000000000FEAF4083DBB5DCE1796B3F7A :10763000666666666612714051DD0008380D0020EE :10764000340D00200000F03F00401C4600E076456D :107650005E2070475D29DDBF024801EB81014018C3 :10766000002070471600002070B500230E46094D1B :107670000522294630461C4605F0B0FA38B15D2C8B :1076800004F1010305F10505F2D14FF0FF34204666 :1076900070BD00BF1600002010B5142494B022461F :1076A00000210CA805F092FA22460DEB04000021FF :1076B00005F08CFA0021102201A805F087FA0224B7 :1076C00001224FF48033CDE90A23CDE911434FF471 :1076D000E0130AA80E921393FAF7E6FF0F234FF474 :1076E0008062CDE905340023214605A8CDE90732A3 :1076F0000993FBF79BF94FF4004301A8019403930E :10770000FBF750FA14B010BD2DE980480126002483 :107710004FF002099BB0CD4DF9F794FCFFF7BCFF89 :107720001022002112A805F051FAAB69002243F0A3 :107730002003AB61AB694FF4406103F02003029377 :10774000029BAB69C24843F00403AB61AB694FF4E1 :10775000807803F004030393039BAB694FF4007A32 :1077600043F00803AB61AB69082703F008030493F7 :10777000049BFAF76DFA00224FF40441B548FAF77A :1077800067FAB54BB24812A9CDE912631496FAF71D :107790007FF9AF4812A9CDE912941496FAF778F957 :1077A0004FF44063AA4812A9CDE91236CDE9144935 :1077B000FAF76EF9A74812A9CDE912841494FAF7E2 :1077C00067F9A44812A9CDE912A41496FAF760F952 :1077D0004FF404439F4812A9CDE91236CDE914496C :1077E000FAF756F99A4812A9CDE912741494FAF7E7 :1077F0004FF9224621460620F9F7D4FF0620FAF772 :1078000001F86B69214633436B616B692246334053 :107810000B200193019BF9F7C5FF0B20F9F7F2FF4D :107820004FF482738D488E4A8E4DC0E900230A239F :10783000C0E906A74FF4602BC362C0E90244C0E967 :107840000444C0E908448462FBF7E8FAC5F80880FC :107850004FF00408844B28462B602E732C75C5F816 :107860001CB06C60C5F81080CDE912440B941494E0 :10787000F9F79AFD4FF4E0234FF0060A28460BA9CA :107880000B93F9F753FF284612A9CDE91296CDF8CC :1078900050A0F9F747FC0323284612A9CDE9123975 :1078A000F9F740FC05220323284612A9CDE912234B :1078B000F9F738FC12A928466C4DCDE912A8F9F762 :1078C00031FC6B4B28462B602E732E61AC602C75FF :1078D000C5F81CB06C60CDE912441494F9F764FD4E :1078E000284612A9CDE91286CDF850A0F9F71AFC66 :1078F00060486149614BC0E90244C0E900134FF49C :107900008043C0E90644C0E904340462FAF7A2FBEC :107910001022214607A805F059F91C2221460BA880 :10792000CDE9054405F052F92022214612A8544D14 :1079300005F04CF9534B4FF40059C5E9003463236B :107940002846C5E90334C5E90544AC60FBF7CAFC29 :1079500007A92846CDE90794CDE90944FBF7FBFDCB :107960002846FBF7EBFC2846FBF714FD284605A943 :10797000CDE90544FBF74EFF612360263A462846D1 :107980000BA9CDE90C34CDE90E44CDE910440B949C :10799000FBF758FD0C2228460BA9CDE90B64FBF739 :1079A00077FD12A92846CDE91649CDE91244CDE963 :1079B00014441994FBF75CFF284603F059FB10228E :1079C00021460BA805F002F91C22214612A8CDE998 :1079D000074405F0FBF84FF0804040F2CF232A4DDA :1079E0004FF48059C5E9000340F2CF732846C5E93A :1079F0000334AC60AC61FBF775FC0BA92846CDF8ED :107A00002C90FBF7A8FD2846FBF7C4FC2846FBF7A3 :107A100095FC284607A9CDE90744FBF7FBFE224663 :107A2000284612A9CDE9126414941694FBF730FD90 :107A30004246284612A9FBF72BFD3A46284612A9D2 :107A40001294FBF7FFFC40F2BC731FE000100240F1 :107A5000000C01400008014000003110340E0020ED :107A6000003800403C0D0020002401406C0D002037 :107A700000280140E00D002000540040801A06005C :107A80008C0E0020002C0140D40E00200C2212A9E4 :107A900028461393FBF7D6FC284603F0E9FA102298 :107AA00021460BA805F092F81C22214612A8CDE928 :107AB000074405F08BF84723164D174F2846C5E9B4 :107AC00000734FF6FF73AC60C5E90334AC61FBF79C :107AD00009FC0BA92846CDF82C90FBF73CFD284665 :107AE000FBF758FC07A92846CDE90744FBF792FEAF :107AF0000C2212A92846CDE9126414941694FBF7BF :107B0000C7FC284603F0B4FAFCF7D8FFFDF7C8F825 :107B1000FCE700BF1C0F00200008004070477047C2 :107B2000704770477047704770477047704770479D :107B3000704770477047704770477047704770478D :107B400070471FB501230022044680681146CDE925 :107B50000133009300F58B600323FFF73BF8042308 :107B600084F82C300023636104B010BD1FB50123DD :107B70000022044680681146CDE90133009300F5E8 :107B80008B600423FFF726F8052384F830300023A8 :107B9000636104B010BD30B5002504460123052201 :107BA00080F82650806885B0CDE9003229462A4603 :107BB000B4F92830029500F58B60FFF70BF865618A :107BC00005B030BD1FB50446826892F8523002F508 :107BD0008B6084F84030B2F84C30A4F8423092F810 :107BE0004E3084F8443092F85330C3F3400184F8A7 :107BF000461003F0010184F84710C3F3800184F8B4 :107C00004810C3F3C00184F84910D909C3F3001325 :107C100084F84A1084F84B3092F84F3084F845309D :107C2000002384F84C3092F87C3000229B075CBF24 :107C300094F8A23084F84D30012394F84D10CDE92A :107C4000013300931323FEF7C5FF0023636104B0E3 :107C500010BD2DE9F04F846885B0D4F8D43204F516 :107C6000357800211B690546404698470023404669 :107C700084F83A3184F8323194F853B0FFF770FC4D :107C8000678F02B239462046FCF7B8FAD4F8D432EE :107C900001469B6904F1A406404698473046FDF72B :107CA00019FB2046FBF758FF0BF0010B014630464D :107CB000FDF742FB04F58B69B4F888A0B4F88A603C :107CC000BBF1000F09D10FFA8AF003F0B8FA1FFADE :107CD00080FA30B203F0B3FA86B294F953100FFA77 :107CE0008AF2002933B21FDA05200026B7FBF0F133 :107CF000CDE9010601EB81018FB2009009B248463F :107D0000FEF768FF002385F82E306B61AB62D4F874 :107D1000D43240469B682F86984780F0010085F852 :107D20002C0005B0BDE8F08F012100200091CDE9C5 :107D3000011039B2E3E72DE9F04F846887B094F879 :107D4000533004F5357803F00103054640460593AA :107D5000FFF706FC678F02B239462046FCF74EFA61 :107D6000059A0646B4F888B0B4F88A3004F1A4093C :107D700004F58B6A5AB90FFA8BF0059303F05FFA9A :107D8000059B1FFA80FB18B203F059FA83B294F9ED :107D900053100FFA8BF200291BB238DA05204FF08E :107DA000000CB7FBF0F1CDE9010C01EB81018FB2C2 :107DB000009009B25046FEF70DFF31460026D4F878 :107DC000D43240469B699847484684F83A6184F823 :107DD0003261FDF785FA2046FBF7BEFE01464846B4 :107DE000FDF7AAFA0121404695F84430AE8685F8A1 :107DF0002C30D4F8D4322E631B692E63EE632E61CF :107E0000A5F840706E6107B0BDE8F04F184701213A :107E100000200091CDE9011039B2CBE72DE9F04FF8 :107E20008568044689B005F58B60B5F87474FEF773 :107E300065FEE369804605F5357613B395F8531072 :107E40003046C1F3C00103F01EFA28B1D4F81C90EB :107E5000484609B0BDE8F08FA068012100F59460A4 :107E600003F011FA0028F1D1B8F1000F03D1E38C2F :107E7000BFB2BB4205D0A06800F5C660FCF7B6FDF6 :107E8000E4E7F9F7FDF86369A1469842E0D3F9F712 :107E9000F7F8238D034463613046FFF761FBD5F8A3 :107EA000D43207B2DB6930469847D5F8D4328046E1 :107EB0001B6A30469847414600233A4606902846BA :107EC000FCF78DF98046A068B5F84CB000F59460D9 :107ED000FEF78AFF064630B1014602233A4628469D :107EE000FCF77DF90646216905F1A40AD1B1079195 :107EF000F9F7C6F807991D4B091A994212D84FF4A1 :107F00007A73B1FBF3F15046C9B2FDF70DFA94F85C :107F100024303BB9A06800F22C60FBF704FD01237C :107F200084F82430A06800F5C660FCF76EFD30B11F :107F30003346424602215046FDF794FB88E7CDE9DF :107F40000400039695F87C304246C3F34003029345 :107F500095F85330594603F001030193069B5046B0 :107F600000933B46FDF712FA72E700BF9F860100BF :107F70007FB58668044606F134052846FCF73EF8CE :107F800084F824002846FCF73EF800250123E0840D :107F9000CDE9013300932A460223294684F828506C :107FA00006F58B60FEF716FE84F82950656104B073 :107FB00070BD2DE9F04F846885B0D4F8D43204F553 :107FC00035765B690546304698478146304694F8D9 :107FD00053A0FFF7C5FA07B2494600233A462046A8 :107FE000FCF7FDF804F1340983464846FCF706F82F :107FF0000AF0010A014604F58B68BAF1000F34D08B :1080000089B259443A46204689B2FCF7F7F8D4F8C9 :10801000D43201469B69304698474846FBF7F3FF48 :10802000D4F8D43207464FF6FF7130461B6B9847A1 :10803000F9F726F84FF47A73002403FB07000123B5 :1080400022462146CDE90134286100934046FEF7DF :10805000C1FDA86800F22C60FBF748FCAC846C61A1 :1080600085F8264005B0BDE8F08F052300EBC00180 :108070000331B1FBF3F1C3E72DE9F047846806460D :10808000B4F8745486B004F58B602DB2FEF736FD5B :1080900010B9B38CAB4204D0B669304606B0BDE827 :1080A000F08796F8267004F53575002F5ED1D4F868 :1080B000D4322846DB699847D4F8D43207465B6946 :1080C00028469847874208D3D4F8D43201211B6947 :1080D00028469847012386F82630F8F7D1FF7369C0 :1080E0009842DAD3F8F7CCFF00F5FA7070612846B1 :1080F000FFF736FAD4F8D4320746DB6928469847AA :10810000D4F8D43280461B6A284698473FB23A4694 :108110004146814600232046FCF761F8D4F8D4326A :1081200080465B69284698473A4601460023204628 :10813000FCF755F804F1A40A05465046FDF7EEF8A1 :108140000023CDE90433039394F87C304246C3F313 :108150004003029394F85330294603F00103CDE91C :10816000009350463B46FDF711F996E7012FB4D135 :10817000D4F8D4322846DB699847D4F8D432804604 :108180005B69284698478045A7D8D4F8D432394649 :108190001B692846984702239DE72DE9F043846830 :1081A00085B005462046FBF7E4FB012305F12409D1 :1081B00001460093074603234A462046FBF7D8FCB6 :1081C0000026C3B23146FF204FF00C0C04F58B683B :1081D000F2B2934214D8002401224046CDE9012492 :1081E0000092013B224609B2FEF7F4FCF8F748FF83 :1081F0000323A86485F84C306C6105B0BDE8F083BA :108200000CFB06F419F8044001363C1B002CB8BFE7 :108210006442E4B2A04284BF20461146D8E7000081 :108220002DE9F74F866890F84C30B6F8747406F56F :108230008B683DB2FFB2BB4218BF002304461CBF8F :10824000836443614046FEF759FC814606F21440C0 :1082500002F05DFDB6F85434984203DBA06903B028 :10826000BDE8F08F96F8E93373B1A36CABB90C237A :1082700003FB0743304693F82410FCF717F906F583 :108280003570FFF749F9E9E7FCF76EFB0028ECD001 :10829000B9F1020F0AD1206AE1E7F8F7F1FEA36C09 :1082A000C01AB0F57A7FE2D20020D8E7F8F7E8FEEE :1082B0006369984201D22046D1E7F8F7E1FE00F564 :1082C0009C40203060610C206BB204F132011A0630 :1082D00001D53A4606E0DAB2013B00FB03F54D5DFD :1082E000002DF4D00C270025012384F84C2007FB37 :1082F000024292F8249004F1240A00935246032388 :108300004946304684F8265084F8325084F83E506E :10831000FBF72EFC10F0FF0B01D1E0699FE707FB94 :1083200005F31AF803304B4503D1404629B2FEF756 :1083300044FC0135EBB29B45F1D801235246CDE90F :1083400000930349032306F1A400FDF779FFB2E788 :10835000ECD90008F0B5856885B004462846FBF7DF :1083600008FB064605F13400FFF772F900270122E9 :10837000431ECDE9012700921BB231B205F58B6097 :10838000FEF728FCFF23676184F8243005B0F0BDB8 :108390002DE9F041866804468CB006F58B60B6F88E :1083A0007454FEF7ABFB012806F1A408EDB234D1FA :1083B00029463046FBF7BAFC074638B9404619490A :1083C000FEF7D4F838460CB0BDE8F08100236361B5 :1083D00094F82430AB421EBF002384F8245063611C :1083E000F8F74EFE6369984215D300270323294608 :1083F00003AA30460097FBF7BBFB0B49C3B203AAA5 :108400004046CDE90057FDF71BFFF8F739FE00F5B0 :108410006A40603060612046D5E70228D8D1206AE2 :10842000D1E700BFF7D900080ADA000810B5044602 :10843000302104F031F9204610BD10B50446242146 :1084400004F02AF9204610BD10B50446242104F09A :1084500023F9204610BD10B50446482104F01CF94C :10846000204610BD10B504464C2104F015F92046F5 :1084700010BD10B50446342104F00EF9204610BD9D :1084800010B504462C2104F007F9204610BD10B5A4 :108490000446382104F000F9204610BD10B504460A :1084A000382104F0F9F8204610BD10B504465021DB :1084B00004F0F2F8204610BD10B50446402104F047 :1084C000EBF8204610BD10B50446A82104F0E4F8EE :1084D000204610BD10B50446282104F0DDF82046E2 :1084E00010BD10B50446502104F0D6F8204610BD4A :1084F00010B50446282104F0CFF8204610BD10B571 :1085000004462C2104F0C8F8204610BD10B50446DE :10851000482104F0C1F8204610BD10B504463421AE :1085200004F0BAF8204610BD2DE9F04387680446F0 :1085300007F58B6840468DB0B7F87454FEF7DEFA45 :1085400094F84D30EDB2AB42064694F84C900FD003 :10855000A9F1070384F84D50032B07D8DFE803F097 :10856000022A34371DB3AB1C84F84030002363610A :10857000B9F1000F40F05281002E5AD0132D00F2B5 :108580004881DFE815F02C00500088008F0096002D :108590009D00A400AB00BE00D500E100F200460142 :1085A00025012A012F0136013B013F01410184F8D9 :1085B0004050DBE7B4F8A4309D42B6BF0023A4F8D6 :1085C0004250A4F84230D1E784F84450CEE71DB1C0 :1085D000AB1C84F84530C9E784F84550C6E794F8E9 :1085E000453094F84620069394F8443094F84010AF :1085F0000593B4F8423007F13400049394F84B30FB :10860000039394F84A30029394F84930019394F814 :108610004830009394F84730FBF758FC666A3046C0 :108620000DB0BDE8F08394F8473083F0010384F87F :10863000473094F84C3094F8A0209A4200F2008120 :1086400094F8A1209A422ABF1D464FF000084FF02F :1086500001080EB100236361F8F712FD6369264635 :108660009842DCD3F8F70CFD002200F51C501030C6 :108670006B1E60618DF82520092B00F25981DFE81F :1086800013F0E200F700010107010E0119012501B5 :108690002B013A01540194F8463083F0010384F829 :1086A0004630C6E794F8483083F0010384F8483038 :1086B000BFE794F8493083F0010384F84930B8E704 :1086C00094F84A3083F0010384F84A30B1E794F813 :1086D0004B3083F0010384F84B30AAE707230022D4 :1086E00084F84C300123CDE9013200931C2394F827 :1086F0004010022984BF0239C9B24046FEF76AFA27 :1087000097E70823002284F84C30114607F17400E3 :10871000FBF7DEFC05230021CDE901310123B4F88C :10872000A4200093013AB4F9421003B212B2E4E774 :108730000923012284F84C30002394F84410CDE939 :1087400001230092FF23D8E70A23002284F84C304B :10875000012394F84510CDE90132022988BF02397E :10876000009388BFC9B23A23C7E794F8453094F81C :108770004620069394F8443094F840100593B4F8DA :10878000423007F13400049394F84B30039394F88B :108790004A30029394F84930019394F8483000939A :1087A00094F84730FBF792FB3846FBF7EEFBA068E6 :1087B00094F8463000F5C66000F8043C97F84F3056 :1087C0000371FCF713F90023A66984F84D3026E7FE :1087D0000823A66A84F84D3021E70023E66A84F86E :1087E0004D301CE7002384F84D300123266B337194 :1087F00015E70B23A66B84F84D3010E73846FBF7DE :1088000007FBE0E7666B0AE70023E66B84F84D3070 :1088100005E707F13400FBF7E6FBD4E7012E7FF410 :1088200008AF0022132349464046CDE9016684F88B :108830004D9084F84C200096FEF7CCF94D46F8E6B2 :108840004FF0000805E746238DF8243094F84730B0 :1088500013B143238DF82430143554F825203649BC :10886000CDF8008009AB07F1A400FDF777FDD6E64F :1088700094F8463023B1314909A804F011FAEBE726 :108880002F49F9E794F84830002BF9D02D49F3E748 :1088900094F849300BB12C49EEE72C49ECE794F8F9 :1088A0004A302B49002B14BF0522012209A804F0ED :1088B0006DF9D1E794F84B10204A214B09A8002903 :1088C00014BF1146194604F061F9C5E794F8402039 :1088D000002AD5D01F49E9E7B4F84220002ACFD0BA :1088E00094F847300BB11C49E0E710B202F0A7FC46 :1088F0001A490246DAE7B4F84230002BC0D094F8A7 :10890000442002EB82023B2A01D81549CEE73C23E2 :10891000B2FBF3F103FB11239BB28AB2002BD9D037 :10892000104909A804F032F996E794F84520CFE7FA :108930008DF8242090E700BFBBDA000806D60008B7 :1089400064D5000817DA00081CDA000821DA0008EC :1089500026DA00082FDA000837DA00083DDA0008C6 :1089600043DA00084BDA0008F7B58768044607F5D4 :108970008B60B7F87454FEF7C1F801280646EDB2D3 :1089800010D10023636194F82C30AB421EBF00234A :1089900084F82C506361F8F773FB6369984206D240 :1089A000204602E00228EED1206A03B0F0BDF8F7BD :1089B00067FB00F51C501030012E606110D1012DB5 :1089C00005D0022D06D04DB9606A0671EDE7A06AA8 :1089D0000571EAE707F17400FBF7D8FCA069E4E74A :1089E00000230C3554F825200349009307F1A40017 :1089F000FDF7B4FCD4E700BF55DA0008F7B5876887 :108A0000044607F58B60B7F87454FEF777F8012831 :108A10000646EDB210D10023636194F83030AB42CA :108A20001EBF002384F830506361F8F729FB6369A7 :108A3000984206D2204602E00228EED1206A03B016 :108A4000F0BDF8F71DFB00F51C501030012E6061E1 :108A500014D1032D10D8DFE805F00207090B606A76 :108A600060B100230371EAE7A06AF9E7E06AF7E77B :108A700007F17400FBF78AFCA069E0E7002304EB30 :108A8000850500936A6B034907F1A400FDF766FCB6 :108A9000D0E700BF5FDA00082DE9F041856888B0B3 :108AA00095F85330012203F00103002B05F1340146 :108AB000044605A814BF4FF032084FF07A0840F280 :108AC000574605F58B6718BF4FF41676FBF7C9FAC2 :108AD00005F53670002505A901F0FBFF012342468C :108AE000A8463846CDE90135009329463346FEF7BE :108AF00071F8104B04F124071E88760827F8028FBE :108B0000284607220021B4F84C30009602F060FBA2 :108B10000135082D3882F1D14FF0000384F824305C :108B20004FF44033C4F81480A364A4F8466008B03E :108B3000BDE8F0815ADD00082DE9F0418668044661 :108B400006F58B68404688B0B6F87454FDF7D6FF3A :108B500001280746EDB22CD10023636194F8293037 :108B6000AB4209D094F8283084F82950012B2ED03C :108B7000022B2FD000236361F8F782FA63699842D1 :108B800021D3F8F77DFA94F8281000F51C50103026 :108B90006061002948D1012F2BD1EDB1012D37D0D3 :108BA000E28C94F8241006F13400FBF734FAA4693F :108BB00009E00228D2D1E28C94F8241006F13400A6 :108BC000FBF729FA246A204608B0BDE8F08184F852 :108BD0002450CFE7E584CDE7052384F828702A46A2 :108BE000CDE900334B23029594F824104046FDF75D :108BF000F1FF00238DF8153094F828300BB1013BBC :108C0000DDB205B3012D48D000238DF814302FE0DC :108C10000223142284F82830CDE9002202914FF477 :108C2000A073B4F92610E1E7012FE2D1022300225C :108C30004046CDE9017700970139FDF7CBFF0023CE :108C400084F82830BFE794F824200AB396F853300C :108C50001549DB075FBF052302EBC2020332B2FBFB :108C6000F3F24ABF4323462392B205A803F08EFFD6 :108C700094F8283004EB8505003B18BF01230093CE :108C8000EA6A0A4905AB06F1A400FDF767FB9AE71B :108C9000074905A804F004F8EAE7E28C054905A8AD :108CA00003F074FFE4E700BF67DA00087DD5000831 :108CB00064D500086FDA00082DE9F047856804469E :108CC00005F58B60B5F87464FDF718FF94F827304C :108CD000814605F1A40705F5357A05F5946836B2A5 :108CE000002B52D1F8F7CCF9A36A984234BF002088 :108CF000012084F82700B9F1010F5DD194F82630E6 :108D0000384683F0010384F82630002B51D0FCF75D :108D1000E7FA0023636194F82630002B08BF002691 :108D2000A38CB6B2B3420BD02379002B4ED0314680 :108D30005046D5F8D4321B6B98470023A684636154 :108D4000F8F79EF96369984226D3F8F799F9284B0A :108D500000F5FA70B3F8009023796061002B3BD0E6 :108D6000244B5046B3F80090D5F8D432DB699847CD :108D700006465046D5F8D4321B6A98473246034619 :108D800049463846FCF730FD06E023793BB195F8BB :108D9000E933002BAFD100242046BDE8F0874046E0 :108DA000FEF717F8B5F808368342A4D895F8B5351C :108DB000EFE7FCF78FFAACE7B9F1020FABD1A0688F :108DC00000F22C60FAF792FD246AE5E7D5F8A034AA :108DD000314640461B6BAFE7D5F8A0344046DB690F :108DE0009847D5F8A03406461B6A4046C5E700BF41 :108DF00054DD00085CDD00082DE9F04F85688BB07C :108E0000B5F87474044605F58B63049305F58B601F :108E10003BB20593FDF772FE2379064605F1A409DE :108E200005F5357B05F5946ABFB2002B55D095F852 :108E3000E933002B4CD016B9238EBB4201D000235E :108E40006361F8F71DF9636A98421FD3F8F718F9C0 :108E5000237964306062002B4AD0D5F8D43258466A :108E6000DB699847D5F8D43280465B695846984705 :108E7000A8EB00085846D5F8D4320FFA88F8DB6A18 :108E80009847414682B24846FCF7D4FDF8F7F8F817 :108E9000636998421DD32379002B3DD105F2A44884 :108EA00094F82D30002B7CD0F8F7EAF8012E00F171 :108EB0006400606133D10022022394F82C1084F8FE :108EC0002D20CDE9016600960498FDF783FE00E0B1 :108ED000002420460BB0BDE8F08FA36A002BAAD077 :108EE000F8F7CEF8A36A9842A5D995F8B535A0E76A :108EF000D5F8A0345046DB699847D5F8A0348046B1 :108F00005B6950469847D5F8A034A8EB0008DB6AA7 :108F100050460FFA88F8B3E705F53678C0E7022E19 :108F200017D194F82E10237981F0010184F82E10C6 :108F30006BB35846D5F8D4321B69984794F82E3055 :108F400013B14846FCF74CFDA06800F22C60FAF71C :108F5000CDFC238EBB420ED094F82C103A46013142 :108F6000C9B24046278601F0DAFD3A46484694F8F1 :108F70002C10FCF745FD237973B15846D5F8D4324F :108F80001B6A984701464846FCF77AFDA1E7D5F8E9 :108F9000A03450461B69D0E7D5F8A03450461B6A70 :108FA000EFE7F8F76DF8238E00F57A70BB421EBF2D :108FB000059B278684F82C30012E606115D19DF821 :108FC00014104FF0FF3284F82C100131C9B2404622 :108FD00084F82D6001F0A3FD0A2300220096CDE95C :108FE000013201B244F620636EE7022E12D1D8E9B5 :108FF0000423D8F80C1007A801F066FD2279284652 :1090000007A9FAF7D4FFA06800F22C60FAF76EFC0B :10901000246A5EE7012507AEE9B24FF0FF32404611 :1090200001F07DFD0135042D26F8020BF4D14846F0 :1090300094F82C2007A9FCF785FE4AE730B50123F8 :1090400000250446806885B02A462946CDE90135C9 :10905000009300F58B60FDF7BDFDA06800F22C6069 :10906000FAF769FC656105B030BD38B5856804461E :1090700005F58B60FDF742FD10B1A469204638BDAF :10908000F7F7FEFF63699842F8D3F7F7F9FF00F5A9 :109090006A406030606105F1A400FDF7D9F9EDE7A1 :1090A00038B58568044605F58B60FDF727FD012876 :1090B00002D1A469204638BD022801D1246AF9E70B :1090C000F7F7DEFF63699842F4D3F7F7D9FF00F5AD :1090D0006A406030606105F1A400FDF7ABFAE9E792 :1090E0002DE9F0418568044605F594680121404664 :1090F00086B002F0C8F894F8263005F5357783423B :1091000023D0D5F8D43200211B6B84F826003846D2 :1091100098470021B5F80A26084602F087F84FF074 :1091200080439863002394F82620A068A3846AB340 :1091300002930123B4F92A20CDE90033B4F92C308D :10914000114600F58B60FDF745FDA368B3F8746424 :10915000A38CB6B2B3420DD0002194F82630A68479 :109160006161DBB13046B5F80A2602F05FF84FF0D6 :1091700080439863A06800F58B60FDF7BFFC022870 :1091800013D1276A384606B0BDE8F08101230521D6 :109190000292CDE90031B4F92830D1E7D5F8D432C4 :1091A000314638461B6B9847E4E7F7F769FF636978 :1091B00027469842E6D3F7F763FF00F2EB106061B1 :1091C00005F2144001F0A3FD94F82630ADF8140028 :1091D0003BB3D5F8A0344046DB699847ADF81000A2 :1091E00005F2AC5001F093FD164BADF812005B6A2E :1091F000ADF81630FBF7B8FB20B1BDF8163064337C :10920000ADF8163004AA95F8E933019295F8B52522 :1092100094F82610009205F1A4003246FDF7B0F94B :10922000B0E7B5F8083405F57870ADF8103001F006 :109230006EFDADF8120005F57C7001F068FDADF82B :109240001600DFE7002C01402DE9F04F8568044649 :1092500005F58B6A504689B0B5F87474FDF74EFC7D :10926000636A064605F5946863B10121404602F041 :109270000AF838B10023666A86F84930304609B0EA :10928000BDE8F08F05F21449484601F040FDB5F8FD :10929000543498420FDBBFB2BEB1A06800F5C6607F :1092A000FBF7B3FB00287FD1012E40F09580E669E3 :1092B000002EE3D184E095F8E933002BEBD1FBF7E6 :1092C00053FB0028E7D0A669D8E7238EBB42E4D140 :1092D000F7F7D6FE636926469842CFD3F7F7D0FE5C :1092E00094F82C3000F57A7005F1A40705F5357A6D :1092F0006061B3B1D5F8D43250469B68984780B1CD :109300003846FBF7F3FFA06800F22C60FAF70BFB7E :10931000F7F7B6FE002300F56A406030A06284F8DB :109320002C30A36A4BB1F7F7ABFEA36A984204D383 :1093300000233846A362FBF7CDFF484601F0E7FC67 :10934000B5F85434984294F82E3069DB6BB901219A :1093500005F1740084F82E10FAF7A4FE2846FAF7F7 :10936000FBFB01463846FBF7E7FFD5F8A034404643 :10937000DB699847554B014693F800B02846002317 :109380005A46B5F83CA0FAF72AFF8146A06800F5D6 :10939000C660FBF73AFB044638B300234A46032174 :1093A0003846FCF75FF969E7B4F930105046FDF72D :1093B00004FCA06800F5C660FBF718FB002363619E :1093C000238EBB4284D03946278605F13400FAF754 :1093D000CDFD002363617BE7022EF1D1A06800F28E :1093E0002C60FAF783FA266A62E7D5F8A034404683 :1093F0001B6A98470123CDE90343059495F87C3017 :109400004A46C3F34003029395F85330514603F0A4 :109410000103CDE900035B463846FBF7B7FF2DE7B4 :109420006BB1002105F1740084F82E10FAF73AFEB2 :109430002846FAF791FB01463846FBF77DFF504678 :10944000FEF78EF8D5F8D4320FFA80F8DB69504673 :1094500098470023014642462846FAF7C0FE814657 :10946000A068B5F83AB000F59460FDF7BDFC014680 :1094700028B1022342462846FAF7B1FE0146A06809 :10948000079100F5C660FBF7C0FA0799044618B1CA :109490000B464A46002183E7D5F8D43207911B6A70 :1094A00050469847CDE9044407994A46039195F8F8 :1094B0007C305946C3F34003029395F8533003F0D0 :1094C0000103CDE900034346A6E700BF51DD0008D4 :1094D00010B504460846B4F86A21B4F86E1101F0DC :1094E000A5FEA4F8340110BD30B50446856889B0E6 :1094F000027905F1340105A8FAF7B3FD2379A068D4 :1095000005A92BB300F5367001F0E3FA2179743523 :10951000284681F00101FAF7C5FD00220123A06869 :109520001146CDE90133009300F58B600323FDF76D :1095300051FB284604F12601FAF7EAFE0023042233 :1095400084F82430E3852363A286636109B030BDCB :1095500000F2A44001F0BDFAA068E18E00F594602D :10956000FFF7B6FFD2E7F0B583680279044685B00D :1095700003F58B670AB30020B3F83E540026052399 :109580000321CDE90136B5FBF1F10123A06200937F :1095900038462BB2324609B2FDF71CFB4FF480333C :1095A0006362A36883F83A6183F83261A068A430EB :1095B00005B0BDE8F040FBF793BE03F59466D3F821 :1095C000A03430465B6B984740F2DC51054630468C :1095D000FFF77EFFF7F754FD00F5FA60CEE7C0E92C :1095E000061203627047836910B504463BB10369F4 :1095F0002BB1F7F745FD2369984228BFA46920469F :1096000010BD838910B504463BB1F7F739FD4FF41F :109610007A72A38902FB0300206110BDF8B585684A :109620000446B5F8743405F53576C38495F85230A0 :10963000C3EB03139B008381FFF7E3FF3046FDF785 :109640008FFF01B22846FAF79CF9D5F8D4320746C5 :109650001B69304601219847304600263946FDF700 :1096600069FF05F1A40084F82460FBF751FEA068AF :10967000666100F22C60BDE8F840FAF754B930B5E5 :10968000012300250446806885B02A462946CDE995 :109690000135009300F58B60FDF79CFA14232046FA :1096A000A381FFF7AEFF656105B030BDF8B58468F2 :1096B000D4F8D43204F535755B69284698470646D8 :1096C0002846678FFDF74CFF394602B22046FAF76D :1096D00095FD8642014604D02846BDE8F840FDF7D6 :1096E00097BEF8BD70B504460D468668F7F7C8FC0E :1096F000E36B03B135B141F2883296F84E3002FB8C :109700000303E363E36B83428CBF0020012070BD41 :109710002DE9F74F894690460C9B00F12C0A87688B :1097200004465046DDF834B0BDF83850019301F0DE :10973000EEFAC14507F1A4060ED8A8EB0908B8F166 :10974000040F09DC019BC82B06D8BBF1190F03D805 :109750002946504601F0CFFA281A0028B8BF4042E7 :10976000952811DDF7F78CFC4EF6602297F8523001 :1097700002FB030000232061304684F8343003B03C :10978000BDE8F04FFBF7ACBD236943B9F7F778FCB0 :109790004EF6602297F8523002FB030020612569E3 :1097A000F7F76EFC0F4B291A994215D84FF47A73CC :1097B000B1FBF3F13046C9B2FBF7B6FD94F8343093 :1097C0003BB9A06800F22C60FAF7ADF8012384F8E9 :1097D000343003B0BDE8F08F304603B0BDE8F04F41 :1097E000FBF790BD9F8601002DE9F04F8568044688 :1097F00005F58B6738468FB0B5F874B4FDF77EF980 :10980000636A06460FFA8BF983B1A068012100F55F :10981000946001F038FD48B195F85330606AC3F3A5 :10982000800380F849300FB0BDE8F08F1EB9B4F85E :1098300040304B451AD0A06800F5C660FBF7E5F84C :1098400040B9012E41D12846FAF79FFBE069002874 :10985000E9D10BE0B4F940103846FDF7AEF9A06845 :1098600000F5C660FBF7C2F80023636105F53578A3 :109870004046FDF775FEB4F8403007B24B451DD0A9 :1098800000261FFA8BF93A4649462846A4F840902C :109890002661A6866661FAF7B1FCD5F8D432014696 :1098A0009B694046984705F134004946FAF75EFB4C :1098B000A068266300F5C660FBF798F8F7F7E0FBB1 :1098C000636998420BD22046ADE7022ECED105F156 :1098D0003400FAF793FB0028C8D0206AB7E7F7F7FF :1098E000CFFBB4F8423003446361D5F8D43240462C :1098F000DB699847D5F8D43207905B6940469847B2 :10990000D5F8D43208901B6A404698473A460799E2 :1099100000230A902846FAF762FCD5F8D432824632 :109920009B6A40469847D5F8D4320B90DB6A404694 :109930009847D5F8D4320C905B6A40469847099016 :10994000A06800F59460FDF74FFA064630B1014675 :1099500002233A462846FAF742FC0646B5F84C3050 :10996000002B49D095F853104046C1F3C0010D9328 :1099700001F089FC80460D9BDDE90702121A0532D1 :109980000A2A94F8351005F1A40937D80B9AB2F5D4 :10999000FA7F33D8099A8AB389BB012384F835301A :1099A000F7F76EFB00F5FA60A0634846FBF7A4FCEE :1099B000A06800F22C60F9F799FFA06800F5C66076 :1099C000FBF723F800287FF47EAFCDE90408039667 :1099D00095F87C305246C3F34003029395F8533018 :1099E000484603F0010301930A9B1FFA8BF1009391 :1099F0003B46FBF7CBFC66E79846BDE759B1A26B47 :109A00004AB943B341462046FFF76CFE18B1A06A3D :109A100000287FF408AF2046FFF748FE94F8353061 :109A20005BB1A36B4BB1F7F72BFBA36B984204D34D :109A300000234846A363FBF753FCA06800F5C6600B :109A4000FAF7E3FF0028C0D03346524601214846CA :109A5000FBF708FE37E795F85230002BDBD0DDE945 :109A60000712099B204602930C9B01930B9B0093CA :109A70001FFA8BF3FFF74CFECDE7000070B51D46D3 :109A80000123044603710020184B16462360184B2F :109A90005022C4E911304FF48073C4E90400C4E9D2 :109AA0000600A0812062A16084F84000A4F8420072 :109AB000A4F84C300F49A01803F0FAF840F6072339 :109AC000A4F8A0300D2384F8A2307823A4F8A430A1 :109AD000049B2046E362059BC4E909652363069B5A :109AE0006363079BA363089BE36370BD20DC0008EE :109AF0000000010130D40008F0B51E4601230371B7 :109B00000023C0E90433C0E9063383810362094BB3 :109B1000044603600423174680F82C30064B00F1FE :109B2000300581600FCB85E80F002046C4E9097637 :109B3000F0BD00BFF8DC000880D400082DE9F04F2C :109B400000F1240C054600F13409002004460746C4 :109B50008046064687B001913CF8021F9142BCF84E :109B600010E008D3994206D80EFB016601FB0144C0 :109B7000884477440130CC45EED102287CDDF6F7ED :109B800041FC824640468B46F6F73CFC8046384610 :109B90008946F6F737FCCDE902013046F6F732FC8C :109BA00052465B46F6F798FCDDE9022306460F466F :109BB00040464946F6F790FC02460B463046394689 :109BC000F6F7D2FACDE904012046F6F71BFC52461F :109BD0005B46F6F781FC424606460F464B4640463A :109BE0004946F6F779FC02460B4630463946F6F709 :109BF000BBFA02460B46DDE90401F6F797FD024683 :109C00000B4606460F4640464946F6F765FC0246B7 :109C10000B46DDE90201F6F7A7FA52465B46F6F776 :109C200085FD4FF0000A80468946A86800225FFA49 :109C30008AF17430FAF74CFAF6F7D4FB32463B4619 :109C4000F6F74AFC4B464246F6F790FA02F054FD0E :109C5000F6F754FE019B23F81A000AF1010ABAF143 :109C6000040FE2D1064B019A1B88D2889A4201D98F :109C7000019AD380012000E0002007B0BDE8F08FFA :109C80005ADD000870B5002200F124044FF47A7503 :109C9000082034F8023FD6B23BB15B1A002BB8BFA4 :109CA0005B42AB42BCBF30469DB20132082AF0D1C4 :109CB00070BD000073B50C4682680546B2F8883066 :109CC000B2F88A20002100922046082201F080FA92 :109CD00005EB440283B2042C1846D28C26D803EB41 :109CE00093018A4222DDB5F84630214AA3EB930363 :109CF00012889BB29108B3EB920F38BF0B46013428 :109D0000A5F84630E4B205F13606E3B2072B2CD8AD :109D1000B5F846302046009307220021B5F84C30B4 :109D200001F056FA26F814000134EEE700EBD306F2 :109D3000B2424FEAD30104DDB5F8463003EBD3035A :109D400009E0042C0ED8A0EB93039A420ADAB5F886 :109D5000463003EB9303064A9BB21288934228BF16 :109D60001346CCE7401A8242E6DB02B070BD00BF6A :109D70005ADD00082DE9FF418668044606F17405A6 :109D8000002202212846FAF7A3F99622034602A9E7 :109D90002046FFF7D3FE00283CD0002203212846AE :109DA000FAF796F901462046FFF76CFF002280463D :109DB00003212846FAF78CF900220746022128469B :109DC000FAF786F904EB4804E38E01460093E28C2F :109DD0003846BDF80C3001F0FBF9104A83B2108808 :109DE000984228BF1846ADF80E003046F9F7C1FD7D :109DF000074606F53570FDF7B3FB44B22246284608 :109E000002A9FAF793FA032339463046009402AACE :109E1000FAF75AFB04B0BDE8F08100BF5ADD000834 :109E20002DE9F04F044685688DB005F58B6BB5F8CC :109E300074845846FCF762FEB4F94A301FFA88FA77 :109E40009A451EBF0023A4F84A806361012894F854 :109E5000493005F535760FFA88F740F0E580002B9C :109E600045D0D5F8D43200211B693046984794F884 :109E70004830002B00F0D180002384F84830D5F81A :109E8000D4323046DB69984795F853308046DB077B :109E900000F1BD80384601F0DAF983B294F824105D :109EA00004EB4102D384A2F83680B5F88A20143A34 :109EB000934280F2AE802046FFF7FCFE94F82430F7 :109EC0009622013384F8243020464FF4167309A9F2 :109ED000FFF734FE40B13046FDF742FB09A942B21C :109EE00005F17400FAF722FA002384F8493094F857 :109EF0002430072B00F29E800127D5F8D42204EBF2 :109F00004303D98E3046926984F849709047D5F85A :109F1000D43239461B693046984700236361F7F70E :109F2000AFF8636998427BD3F7F7AAF800F5FA70A7 :109F300060613046FDF714FBD5F8D43280465B698A :109F400030469847D5F8D4320790DB6930469847B9 :109F5000D5F8D43207461B6A30469847002306904E :109F60000FFA88F239462846FAF739F93A4B804613 :109F7000B3F80090B9455DD994F84930F3B1079B27 :109F8000DB1B1033202B19D8D5F8D4323046DB6ACE :109F90009847C82812D8069B012B0FD994F848304F :109FA00063B9A06800F22C60F9F7A0FC58460FFADC :109FB00088F1FCF702FE012384F84830B4F84C1015 :109FC000B94247D864234A4600933846002301F03B :109FD000FFF8C6B22846F9F7BFFD94F8242005968D :109FE00094F848300132049394F8493001460393C1 :109FF000069BD2B2029395F8533005F1A40003F00A :10A000000103CDE900A34346FBF7F4FE08E0534605 :10A0100044E7082384F8243066E784F84930636114 :10A0200020460DB0BDE8F08F002B7FF478AF0228FA :10A030007FF475AF2046FFF79DFE227905F13401CC :10A0400009A8FAF700F809A905F5367000F041FDF6 :10A05000246AE5E70026BDE75ADD00081549D088E7 :10A06000098830B5884288BFD180032B14D802EB11 :10A070004300032B11D1D3888B4288BFD180911D1F :10A080000B8831F8020D181AC728DEBFC83B23EA37 :10A09000E3730B808A42F3D130BD054630F8024BA2 :10A0A0006D8801332D1BC72DDCBFC8340480DBB2A3 :10A0B000DFE700BF5ADD0008F0B5054685B00C4665 :10A0C00017463431027901A81E46F9F7BCFF2D79F5 :10A0D00001A925B1381D00F0FCFC05B0F0BD301D14 :10A0E00000F0F7FC294604F17400F9F7DBFFF4E710 :10A0F0002DE9F04F85680446B5F8748405F58B6B3F :10A100000FFA88F38DB058460993FCF7F7FCB4F9C1 :10A1100034301FFA88FA9A45814605F5357605F5FB :10A12000946717D094F82F30A4F8348083B1237942 :10A1300043B351463046D5F8D4329B699847002343 :10A1400084F82E30F6F79CFF00F59C500830206311 :10A15000002363613046FDF703FA0790BDF91C3018 :10A1600008932379A3B195F8E983B8F1000F19D1C9 :10A170003B46324629462046FFF79EFF40460DB03B :10A18000BDE8F08FD5F8A034514638469B69D5E735 :10A19000236B3BB1F6F774FF236B984202D995F815 :10A1A000B585E2E7B9F1010F40F0F38094F82F3064 :10A1B000002B00F0B380D5F8D432002130461B6963 :10A1C0009847D5F8A03400211B693846984794F881 :10A1D0002E304BB3002384F82E302379002B00F06F :10A1E00098803046D5F8D432DB69984794F824300B :10A1F0009DF91C8004EB4302D084E28C4146ADF80B :10A200002820228D2046ADF82A20628DADF82C2022 :10A21000A28DADF82E200AAAFFF720FF42460AA918 :10A2200005F17400FAF782F801230022CDE9013329 :10A2300000935846032394F8241084F82F2094F8B0 :10A2400024A0FCF7C7FC002363615FFA8AF309933B :10A2500094F82F30002B00F0C58094F824B0F6F766 :10A260000FFF6369A046984288D3F6F709FF237968 :10A2700000F5FA706061002B00F0B780D5F8D43299 :10A2800030465B699847D5F8D4328146DB69304661 :10A290009847D5F8D43282461B6A30469847D5F89D :10A2A000D4320790DB6A30469847C82294F82F30A2 :10A2B00005F17406002B40F0B18000220999304668 :10A2C000F9F706FF089A01462846F9F797FF8146F5 :10A2D000A3682846A4330893F9F73EFC594607467D :10A2E00000223046F9F7F4FE94F82E30024604932B :10A2F00094F82F3039460393079B0898029395F8FA :10A30000533003F00103CDE900935346FBF76AFE97 :10A3100034E7D5F8A0343846DB6966E79DF82410A9 :10A320001A4684F8241084F82F9005F174000793DE :10A33000F9F7CEFE089A01462846F9F75FFF079B1A :10A340000A2202930523CDE90032494B01B2B3F949 :10A350000030804664225846FCF73CFC237963B108 :10A36000D5F8D432414630469B6998474946304635 :10A37000D5F8D4321B69984765E7D5F8A034414633 :10A3800038469B699847D5F8A034494638461B693A :10A39000F1E7B9F1020F7FF458AF2846F9F7E9FA6F :10A3A0008146334BA28D1B889DF91C809A4204F193 :10A3B000260A88BFA3854246514605F17400F9F785 :10A3C000B5FF0323524649462846CDF80080FAF7E8 :10A3D0007BF83B46324629462046FFF76DFED4F80F :10A3E0002080CBE6DDF824B039E7D5F8A034384634 :10A3F0005B699847D5F8A0348146DB6938469847B1 :10A40000D5F8A03482461B6A38469847D5F8A03460 :10A410000790DB6A38469847282247E7A9EB0A03EA :10A420001033202B3FF654AF90423FF651AF079BBD :10A43000012B7FF64DAF94F82E70002F7FF448AFBC :10A44000236B002B3FF444AFF6F71AFE236B9842C0 :10A4500008D9A06800F22C60F9F748FA01232763B5 :10A4600084F82E3094F82F30002B7FF431AF24E79E :10A470005ADD0008F0B51F46012303710023C0E92F :10A480000433C0E90633838103620A4B0446036048 :10A4900005239446084E00F13405816080F8303081 :10A4A0000FCE0FC5336820462B60059BC4E909C752 :10A4B000E362F0BD10DD000890D400082DE9F843F8 :10A4C0004FF00008012604468568314605F594677B :10A4D000C0F83C800687C0F8408005F17400F9F7A9 :10A4E000E1FD05F1A409E98F384685F83A8185F840 :10A4F0003281FEF7EDFF4846FAF7ECFEA06800F562 :10A500003570FDF72DF8A98F02B22846F9F776FECF :10A51000D5F8A03401469B69384698473846FCF781 :10A5200083FC01464846FAF711FFD5F8A0343146BE :10A530001B69384698474846FAF7D2FE94F84930E6 :10A540002BB1A068314600F53570FCF769FE002399 :10A55000012263636361E263626484F8483095F8C2 :10A560004F3004F1240084F82830BDE8F843FAF7AE :10A570003DBA2DE9F04F8568044689B005F5357080 :10A58000FCF7EEFFE36B064605F5946A05F58B686C :10A59000ABB3F6F775FDE36B984230D395F85330C3 :10A5A000B5F83C90DB07B5F888B0B5F88A7009D4E7 :10A5B0000FFA8BF000F043FE1FFA80FB38B200F078 :10A5C0003EFE87B295F953100FFA8BF200293BB289 :10A5D00033DA05200027B9FBF0F1CDE9010701EBE3 :10A5E00081011FFA81F9009009B24046FCF7F2FAA6 :10A5F000012384F838300023C4F83490E3634046E4 :10A60000B5F87474FCF77AFAE26A03468146BFB281 :10A61000DAB9002B37D004F1240B5846FAF7F5F9D4 :10A62000A0B3B4F934104046FCF7C7FA5846FAF71D :10A63000DDF900239946636128E0012100200091A3 :10A64000CDE901100FFA89F1CFE7079001215046BB :10A6500000F019FE079B83460028DAD12846F9F757 :10A6600094FC594605F17400F9F71CFD94F8493043 :10A670003BB1276B2FB184F849B0384609B0BDE82B :10A68000F08FE76AF9E7636B9F42C4D195F85330C6 :10A690005B0702D5B9F1020F36D0B9F1000F51D1E5 :10A6A000636B05F1A4089F4236B200F08280D5F8B2 :10A6B000A03450465B696763984794F83830814608 :10A6C000B5F8D4B5002B62D0394632462846F9F7A2 :10A6D00095FDD5F8A034014681469B6950469847C0 :10A6E0005F460023324649462846F9F778FD3A4648 :10A6F000014605F13400F9F73BFC0023636104F1E6 :10A700002400FAF773F957E0A06894F8493000F58F :10A71000357073B10021FCF783FDA06800F22C6056 :10A72000F9F701F994F8493083F0010384F84930CE :10A73000B6E70121FCF774FDA06800F22C60F9F780 :10A74000D5F8EFE7002294F838306261D3B14FF0CA :10A750000A0C0520B5F90A36B5F8D4B5B5F9D41503 :10A76000CDE9000C02924046FCF734FA0022C4F80E :10A7700034B084F83820F6F783FCB4F84A30034448 :10A78000E3638DE7F6F77CFC2746E06375E739461F :10A790005046FEF79DFE5046FCF746FB01464046FC :10A7A000FAF7D4FDF6F76CFCB4F84A300344E363DF :10A7B00097E7B9F1000FA2D1636CBBB1F6F760FC6B :10A7C000636C984212D395F8B5357BB1404694F846 :10A7D0004810FAF7C3FD94F84830013303F003033F :10A7E00084F84830F6F74CFC64306064F6F748FCB7 :10A7F000636927469842FFF440AFF6F741FCD5F86D :10A80000A03400F5FA705B69606150469847D5F84E :10A81000A0348346DB6950469847D5F8A03481467A :10A82000DB6A50469847D5F8A0240790126A504634 :10A83000904794F839208246FAB90FFA8BFB0FFA49 :10A8400089F2ABEB020B0BF1310BBBF1620F14D8A9 :10A85000079B072B11D880B1012384F83930F6F714 :10A860000FFC00F59C5008302064A06800F22C60BA :10A87000F9F73CF84046FAF73FFD236C4BB1F6F789 :10A88000FFFB236C984204D34046FAF729FD0023CE :10A8900023644946002332462846B5F83CB0F9F710 :10A8A0009EFC8146A06800F53570FCF7A3FD0146CB :10A8B00028B1012332462846F9F791FC014604F1FC :10A8C00024000791FAF7A1F8079930B10B464A46E0 :10A8D00003214046FAF7C6FECFE694F848300590CB :10A8E0000133DBB2CDE9031395F87C304A46C3F35C :10A8F0004003029395F85330594603F00103CDE924 :10A9000000A340463346FAF741FDB6E67FB58568B9 :10A91000044605F1A4063046FBF762F830461849B4 :10A92000FBF764F8002201231146CDE901330093BF :10A9300005F58B600223FCF74DF9A0684FF4966192 :10A9400000F53570FCF786FC0E4B00211A884FF499 :10A950009660A56800F06AFCA5F8D205A06840F2F0 :10A96000DC5100F59460FEF7B3FD0323238600233A :10A97000C4E90933A38584F82E30636104B070BD47 :10A9800076DA00085ADD00084A29104608B50FD0CB :10A9900005D8282908D0292907D0012008BD4B292E :10A9A000FBD14FF4806105E00120F6F76FFBF4E77F :10A9B0004FF400610148F7F74BF9EEE7000C014056 :10A9C00070B51546A1F1140204461E460C2A3BD868 :10A9D000DFE802F02C3A3A071E2E3A3A3A3A3A3A6F :10A9E00015001A48F8F726FB01280446F9D164231C :10A9F0002A4631461548F8F769FA204670BD2A1EE6 :10AA000018BF01224FF400611148F7F721F90DE05A :10AA100003684FF480611A780E48F7F719F9226835 :10AA200000232C21204665699278A8470124E4E799 :10AA3000026800232C21D2784569A84723684FF487 :10AA400080615A780348E0E70024D6E7340E0020FE :10AA5000000C01400008014030B5143914461D4671 :10AA600085B00C292AD8DFE801F01F2929071C1C12 :10AA700029292929292926001148F7F711FE20281C :10AA8000FAD1104B78211A784FF0FF33003A18BFF3 :10AA90000122CDE901430A48012300959201F7F70D :10AAA00081FB012005B030BD026800232C214469E0 :10AAB0009278A047F5E7034B1A70F2E70020F1E720 :10AAC000E00D0020640F002010B5C0E90012836083 :10AAD00010BD4B680A68312BC26002EB82028968A4 :10AAE0008261C8BF0A220361CCBF93FBF2F3052346 :10AAF0004161C361704730B501600A24002505211A :10AB0000C0E9034445618461C161028480F8223058 :10AB100030BD002309B28180C18083607047022963 :10AB200008D003290BD001290ED1002AA8BFC2608A :10AB3000C0687047002AA8BF026100697047002AF8 :10AB4000A8BF42614069704700207047F0B590F897 :10AB50002260B0F90440B0F906508B1ADEB102F160 :10AB600064068E4217DAD0E9066159436CB903FBDB :10AB70000613C280012283608580B0F92000411E47 :10AB80008A40134443FA00F0F0BDAB1A06FB0311F0 :10AB900083680B44EDE7D0E903615943002CE6D00C :10ABA000AF1A06FB071143691444A4EB450403FBE9 :10ABB0000411EDE790F8D43070B503F0FF020446BD :10ABC0000D460EB2002B60D090F8DD306BB1B0F8BE :10ABD000D0309BB2B34208DA002380F8DD30B0F801 :10ABE000E010883089B200F09AF8B4F8D030B4F8A8 :10ABF000D2209BB292B21344B34220DA002384F8ED :10AC0000D430D4F8D830002B3AD0F6F739FA0646CB :10AC1000D4F8D810411A204600F081F8C4F8D86062 :10AC2000B4F8E23001339BB2A4F8E230002384F898 :10AC3000DD30012384F8DC30ABB2A4F8DE3094F8C8 :10AC4000DC303BB1B4F8DE309BB2AB423CBFABB2C0 :10AC5000A4F8DE3094F8DD303BB1B4F8E0309BB2BC :10AC6000AB4284BFADB2A4F8E050B4F8CC0094F885 :10AC7000D43080B273B3B4F8CE30184480B270BD13 :10AC8000F6F7FEF9C4F8D800D0E790F8DC3063B1ED :10AC9000B0F8D0309BB2B34207DD80F8DC20B0F8CA :10ACA000DE10443089B200F03AF8B4F8D030B4F88D :10ACB000D2209BB292B29B1AB342C0DD0123002284 :10ACC00084F8D43084F8DC2084F8DD30ABB2A4F80A :10ACD000E030B4E7B4F8CE30C01ACFE730B504782E :10ACE0004368027803EB5403B3FBF2F3456829444D :10ACF000C91A416030BD38B50578FFF7EFFF4368EA :10AD0000EDB2007803EB5503B3FBF0F038BD0278E9 :10AD10004368007803EB5203B3FBF0F0704790F800 :10AD2000402090F841309A4209D290F84030DAB28F :10AD30000133DBB280F8403040F82210704790F8C1 :10AD40004230DBB240F8231090F842300133DBB2DE :10AD500080F8423090F84120934224BF002380F8CD :10AD6000423070479342017038BF1346002143813F :10AD700041608281417270470346007A08B1002227 :10AD80001A72704710B504460846B4F90A20B4F99F :10AD90000C1002EB6202A1EB610192B289B200F0E9 :10ADA00045FA81B22046FFF7A6FF637A80B233B13D :10ADB000B4F90C30834201DD0123238110BDB4F9C5 :10ADC0000A308342FADA40F20113F6E70E4B82B002 :10ADD0009A6942F001029A619A6902F001020092B6 :10ADE000009ADA6942F08052DA61DB69074A03F0BF :10ADF00080530193019B536823F0E06343F0007399 :10AE0000536002B0704700BF0010024000000140D4 :10AE1000102230B5054689B00DEB0200002101F08B :10AE2000D5FE2B682B4A934235D12B4B7C219A6956 :10AE30002A4842F400729A619A69294C02F400721D :10AE40000092009A9A6942F004029A619B6903F0A9 :10AE500004030193019B0323CDE9041304A9F6F72E :10AE600017FE4FF400724FF0800C0023C4E903C2B8 :10AE70004FF400621B48C4E90523C4E900032046DF :10AE8000A360E361F6F7E0FC08B1FCF747FE2C6233 :10AE9000656209B030BD144A9342FAD10E4B0F4897 :10AEA0009A6904A942F480629A619A6902F4806204 :10AEB0000292029A9A6942F004029A619B697C228A :10AEC00003F004030393039B0323CDE90423F6F764 :10AED000DFFDDEE7002401400010024000080140D1 :10AEE0009C0D0020080002400028014010B50446D7 :10AEF00086B01022002102A801F068FE2268114BE2 :10AF00009A421CD1104CC022A369104843F0080398 :10AF1000A361A36902A903F008030093009B122315 :10AF2000CDE9022303230593F6F7B2FDE36943F469 :10AF30000013E361E36903F400130193019B06B07E :10AF400010BD00BF0054004000100240000C014042 :10AF500010B5044686B01022002102A801F036FE8A :10AF60002268124B9A421ED103F5EC33DA6910487D :10AF700042F48042DA61DA6902A902F48042009266 :10AF8000009A9A6942F008029A619B694FF4204244 :10AF900003F008030193019B0223CDE9022303235D :10AFA0000593F6F775FD06B010BD00BF00380040F0 :10AFB000000C0140102210B5044688B00DEB0200D1 :10AFC000002101F003FE2368254A934225D1254B39 :10AFD00025489A6904A942F400629A619A6902F4C8 :10AFE00000620092009A9A6942F004029A619B6999 :10AFF00003F004030193019B4FF480530493012356 :10B000000693F6F745FD00221B201146F6F7CAFB12 :10B010001B20F6F7F7FB08B010BDB3F1804F11D13C :10B0200003F50433DA691C2042F00102DA610022E0 :10B03000DB69114603F001030293029BF6F7B2FBB2 :10B040001C20E6E7094A9342E5D1064BDA6942F053 :10B050000402DA61DB6903F004030393039BDAE77C :10B06000002C014000100240000801400008004090 :10B07000102210B5044688B00DEB0200002101F04B :10B08000A5FD23681F4A934215D11F4B9A6942F0D0 :10B0900004029A619B6903F004030193019B4FF43E :10B0A00000630493022319480593079304A9F6F754 :10B0B000EFFC08B010BDB3F1804F0CD103F50433A1 :10B0C0009A6942F004029A619B6903F004030293B7 :10B0D000029B0323E5E70E4A9342EAD10A4B0D484F :10B0E0009A6904A942F008029A619B694FF40072C0 :10B0F00003F008030393039B0223CDE90423079382 :10B10000D5E700BF002C01400010024000080140BC :10B1100000080040000C01407047FEE7FEE7FEE734 :10B12000FEE7704770477047F5F79EBF0148F6F796 :10B130001BBC00BF9C0D00200148F7F7F9BF00BF02 :10B140008C0E00200148F7F7F3BF00BFD40E00209B :10B150000A4A08B51168034609B9094911606946E8 :10B16000106803448B4206D901F06EFD0C23036086 :10B170004FF0FF3008BD1360FCE700BF680F0020F0 :10B18000001500200F4B1A6842F001021A6059683E :10B190000D4A0A405A601A6822F0847222F4803202 :10B1A0001A601A6822F480221A605A6822F4FE0299 :10B1B0005A604FF41F029A604FF00062034B9A608E :10B1C000704700BF001002400000FFF800ED00E0F3 :10B1D000914210B50446184609D0029B521A641ACF :10B1E000191A531001FB043393FBF2F3184410BDFA :10B1F000642807B528BF6420462928BF46210A2AAB :10B2000038BF0A2281424FEA520309D30093002338 :10B210000A461946FFF7DCFFC0B203B05DF804FB35 :10B220000131009201336422C9B2F3E703468B4235 :10B23000084603DB9342A8BF134618467047052310 :10B2400000EBC000A23090FBF3F000B2704709237E :10B250009B3890FBF3F000B270472DE9F0410446B3 :10B260009DF81850BDF81C60BDF8207000F5867080 :10B27000FFF778FD3B463246294604F58E70BDE85F :10B28000F041FFF76FBD19B900F58E70FFF774BD7F :10B2900090F8250170470000FFF774FF0B480C4938 :10B2A0000C4A002302E0D458C4500433C4188C4222 :10B2B000F9D3094A094C002301E013600432A24289 :10B2C000FBD301F0C7FCFCF71FFA70470000002019 :10B2D0004002002064E20008400200200015002027 :10B2E000FEE72DE9F74FCE18531CDBB2F6B290F80B :10B2F00086900093334605460C46904600F027FDA5 :10B3000050B1B9FA89FA80274FF0000B4FEA5A1A68 :10B31000A64204D185F8869003B0BDE8F08F0C9B5F :10B320001B781F4215D085F88690CDF800B0012318 :10B3300042462146284600F06DFC7F0808BF0C9B62 :10B3400004F1010404BF01338027E4B208BF0C9369 :10B35000DEE795F88530002BEFD185F886A00093C5 :10B36000E5E72DE9F3479DF82850DE00F6B21544D5 :10B370009846EDB273180095DBB281460F4614462D :10B38000DDF82CA000F0E3FC68B902B0BDE8F0875E :10B390002246CDF800A0334639464846FFF7A1FFC4 :10B3A0000134C244E4B2A542F2D1EEE72DE9F743FD :10B3B0009DF828501F461544EDB2CB180095DBB21E :10B3C00080460E46144600F0C2FC18B14FF000094A :10B3D000A54202D103B0BDE8F08322463B46314688 :10B3E0004046CDF80090013400F014FCE4B2EFE7E1 :10B3F0002DE9F74304460026036890F83C9090F846 :10B400003D7093F811802368A06B1B7CF5B203FBA1 :10B4100006F1C90089B208447A190135009000216B :10B420002046D2B2EDB201F0DCF8A94504D90136CC :10B43000BB19DBB29845E6D803B0BDE8F0830368DA :10B4400000211A7C90F83C30806B5A43D20001F006 :10B45000BDBB10B50446FFF7CBFF2046BDE810404A :10B4600001F0E7B810B50446436B80F83D101B6847 :10B470009847636B2046BDE810405B68184710B5DD :10B4800090F8873004460BB1FFF7D9FF2046BDE89E :10B4900010400021FFF7E6BF38B50446FFF7A8FFCC :10B4A00094F83C3094F83D501D442368EDB25B7C29 :10B4B000AB4204D8204601F0BCF8002038BD94F817 :10B4C000873013B12046FFF7BAFF20462946FFF721 :10B4D000C9FF0120F2E72DE9F0479DF824900746C7 :10B4E00019F0010F0C4616461D469DF8208012D01B :10B4F000531C6918A8EB0202DBB2D2B2C9B200F049 :10B50000F8FB631CA8EB0402A9193846DBB2D2B2DF :10B51000C9B200F0EEFB19F0020F13D0731CA8EBB8 :10B520000602291B3846DBB2D2B2C9B200F0E1FBF9 :10B53000631CA8EB0402A91B3846DBB2D2B2C9B225 :10B5400000F0D7FB19F0080F0FD0731C29194246E1 :10B550003846DBB2C9B200F0CCFB631CA9194246E5 :10B560003846DBB2C9B200F0C4FB19F0040F11D0A9 :10B57000291B731C42463846DBB2C9B200F0B9FB46 :10B580000134A91B42463846E3B2C9B2BDE8F047D0 :10B5900000F0AFBBBDE8F0872DE9F74F91461C46A0 :10B5A00009F10105013325440B448846121B091B90 :10B5B000EDB20095DBB2D2B2C9B282469DF830B08E :10B5C00000F0C5FB88B14346224600215046CDE934 :10B5D000009BFFF780FF0026C4EBC417C4F10105F0 :10B5E0007F006DB27FB2B44202D803B0BDE8F08FE5 :10B5F000002D05DBBB1C013C5FB22B44E4B25DB205 :10B600000136F6B205EB4605434622463146504622 :10B61000CDE9009B01356DB2FFF75DFFE3E710B5A3 :10B620000446FFF72CFF2046FFF736FF01460028AF :10B63000F9D12046BDE81040FFF714BF082303707E :10B64000004870476C0F002030B585B00D46009360 :10B6500009491346094A044601F010F80DF10F009C :10B66000FFF7ECFF064B01469DF80F2020460095A2 :10B6700000F035FE05B030BD11C500081DC400083E :10B6800047BE00084218435C507800EB032080B2AC :10B690007047012B05D0022B05D033B91044C0B23E :10B6A00070470844FBE7801AF9E7401AF7E7012BD7 :10B6B00005D0022B05D033B90844C0B27047801AB8 :10B6C000FBE7401AF9E71044F7E70020704738B568 :10B6D0000B780D4603704B78044643708B7883706B :10B6E000CB78C3700B7903714B7943718B7983717C :10B6F000CB79C3710B7A03724B7A43728B7A837264 :10B70000CB7AC3720B7B03734B7B43738B7B83734B :10B71000CB7BC3730B7C112103742846FFF7B2FF68 :10B72000132160822846FFF7ADFF1521A08228462D :10B73000FFF7A8FFE08238BD70B5847A036862180D :10B740001D78D2B2072A45FA04F507D8EBB2827207 :10B750004FF0FF30884023EA000070BD5E1C066099 :10B760005B78C4F10804E4B2A3402B43083ADBB28F :10B77000D2B2ECE738B5002300F15805044680F852 :10B780006230816590F86C102846FFF7D5FF94F879 :10B790006D1084F860002846FFF7CEFF94F88630DD :10B7A00084F8610084F86430B3FA83F35B0984F8A9 :10B7B000653038BD10B5FFF7BFFF01234C1EE4B262 :10B7C000A340C01A40B210BD2DE9F04F04460E460A :10B7D00087B090F85E5090F85F70059294F860B072 :10B7E0004FFA87F9ABEB0503DBB2B3429A460393FA :10B7F00094F85D304A4669B2049394F85C0094F87A :10B80000663028BFB246FFF752FF80460498FFF724 :10B8100040FF05990246A9B194F8641084F8861097 :10B82000009341465346204600F0F4F9039B35440B :10B830009E42EDB20DD3A5EB0B050137EEB2FFB280 :10B840000025CBE794F863100029EFD194F8651038 :10B85000E4E784F85E5084F85F9007B0BDE8F08FAD :10B860002DE9F74F044600F15807FFF783FF94F8DE :10B870006E10384694F96190FFF79CFF94F86F10B2 :10B8800083463846FFF796FF94F870100646384610 :10B89000FFF790FF94F960A08046BAF1000F4DDDEC :10B8A0005FFA89F5AA19524252B2594694F86630A5 :10B8B00094F85C00FFF7FBFE84F85C00064694F801 :10B8C0005D00FFF7E6FE024684F85D00032B5BD8BF :10B8D000DFE803F00238425006EB0A032918DBB216 :10B8E000C9B200912046314600F031FA30B300234E :10B8F000A4F85E3094F86A103846FFF71DFF94F8FC :10B900006B1006463846FFF717FF05460022314602 :10B910002046FFF759FF294620460122FFF754FF32 :10B9200001213846FFF708FF0028EFD194F95F3076 :10B930004B45DFDB94F8643084F88630404603B032 :10B94000BDE8F08FC5F10105731C354400EB0A0119 :10B95000DBB2C9B2EEB2C4E7CAF1010AC5F1010512 :10B96000731CB2440544411CDBB2C9B2EAB25FFAAF :10B970008AF6B6E7CAF1010A35448244411CEBB2AB :10B98000C9B25FFA8AF2ACE701463346A9E7036D14 :10B99000FF2970B503F117030D4612D8602909D9A4 :10B9A000B0F87C201344587818B11A78AA4206D10E :10B9B000981C70BD4029F6D9B0F87A20F2E703440C :10B9C000F1E7B0F87E209C18264600213046FFF7AC :10B9D00059FE022104443046FFF754FE854206F129 :10B9E0000406F2D8208840BA80B20028E1D085420F :10B9F00001D1E01CDDE7A3781C44F3E738B5044629 :10BA0000FFF7C5FF0146B8B104F158052046FFF71E :10BA1000B1FE94F86E102846FFF7CCFE94F86F1034 :10BA200084F884002846FFF7C5FE284694F8701075 :10BA3000BDE83840FFF7BEBE38BD2DE9F84300240D :10BA40000F4680F860400546264600F06FFC4FF632 :10BA5000FF784FF6FE79013F17F8011F28466B6803 :10BA600098474045014608D04845F5D02846FFF79D :10BA7000C5FFC4B22644F6B2EEE795F9602032B1B4 :10BA800095F88430134433441B1B03F0FF06304603 :10BA9000BDE8F883F8B51F4690F8663004460E46B8 :10BAA0001546032B07D8DFE803F002151A1E436D75 :10BAB00098472844C5B23946204684F85C6084F82B :10BAC0005D50FFF764FF014618B12046FFF7C8FE3E :10BAD000C0B2F8BD436D9847301AC6B2EBE7436D6C :10BAE0009847281AE6E7436D98473044F5E72DE973 :10BAF000F0471E4607460C4615464FF0000A00F078 :10BB000015FC4FF6FF784FF6FE79013E7B6838460C :10BB100016F8011F9847404503461BD04845F5D00D :10BB20002A4621463846FFF7B5FF97F86630032BC3 :10BB300005D8DFE803F002080B0D0444E4B25044DA :10BB40005FFA80FAE2E70544EDB2F8E7241AF5E778 :10BB50002D1AF9E75046BDE8F087000010B4024CFA :10BB6000446010BCFFF7C3BF1DC30008036D10B5D0 :10BB7000CBB190F9754090F9761090F8813080F84B :10BB8000824080F8831073B1012B0DD190F977308A :10BB9000A342B8BF234680F8823090F978309942AA :10BBA00001DD80F8833010BD90F9742090F9723077 :10BBB00013449C42B8BF80F882309142C8BF80F8DD :10BBC0008320F0E7014B4365704700BFCBB6000808 :10BBD000026D10B58A42044608D001656830FFF74F :10BBE00076FD2046BDE81040FFF7C0BF10BD000045 :10BBF000014B4360FFF721BF1DC3000870B490F8EC :10BC000040609DF80C50046B921BA4460395D2B281 :10BC100070BC6047F0B490F880409DF81050002C44 :10BC20003AD0002B38D0012B04D0022D2BD101317A :10BC3000C91AC9B215F0010530D190F847409442B5 :10BC40002AD890F84840944226D90B44DCB28C4262 :10BC500090F8457090F846601CD28E4219D9741E37 :10BC6000E4B2A74218D2B94238BF3946A64294BFBF :10BC7000C1EB0603C1EB0403446B0495A468DBB27B :10BC8000A446F0BC6047032D02BF0132D21AD2B2E3 :10BC9000D0E739468E42E4D8F0BC704790F8454072 :10BCA0008C42F9D890F846408C42F5D91344DCB266 :10BCB000944290F8477090F8486010D296420DD99F :10BCC000741EE4B2A742E7D2BA4238BF3A46A6424F :10BCD00094BFC2EB0603C2EB0403CDE73A4696429B :10BCE000F0D8D9E713B500240094FFF793FF02B012 :10BCF00010BD13B501240094FFF78CFF02B010BDF6 :10BD000073B590F84760964210D890F84860964214 :10BD10000CD990F845508D4208D890F846308B42A7 :10BD200004D9002300930123FFF774FF02B070BD14 :10BD30008A4206D2834208D89A4294BF002001204A :10BD400070478342F8D8002070470120704770B5D3 :10BD500004460D461E4690F848109DF8103090F8A5 :10BD60004700FFF7E5FF48B133462A4694F84610EE :10BD700094F84500BDE87040FFF7DABF70BD2DE9CB :10BD8000F74F9DF8309099428CBFA1EB0308A3EBCD :10BD900001084A450C4615461E465FFA88F812D936 :10BDA000A2EB0907FFB2B84517D33B46B44247465A :10BDB000984605D92B464D469946234634461E469D :10BDC0004FF0000B0FE0A9EB0207FFB2B845ECD231 :10BDD0004E46144699460D4603E04C461D4616460F :10BDE00089464FF0010B4D4534BF4FF001094FF02C :10BDF000FF39FE2E28BFFE2647F3470AF6B2B442AB :10BE000002D903B0BDE8F08FBBF1000F18D12A466C :10BE10002146AAEB080A0190FFF772FF5FFA8AF346 :10BE20004FFA8AFABAF1000FBCBF4D44DB1904F196 :10BE300001040198BCBFEDB24FFA83FAE4B2DEE729 :10BE400022462946E5E7F0B5012490F8865002F035 :10BE50000706B440012D9DF81470E4B216D82546AB :10BE600016D0D0F800C002F0F8029CF810E00EFBEB :10BE70000211826B11446FB90A78013B2A43624078 :10BE800013F0FF0301F8012BF6D1F0BD0025E8E720 :10BE90000024E6E70A7801362A436240013B16F0A7 :10BEA00007060A70DBB20CD190F83E20114490F8DE :10BEB0008620012A0AD80BD001242546002BE9D17F :10BEC000E3E76D006400EDB2E4B2F7E70124F5E7C3 :10BED0001546F3E7B0F90810B0F90A3010B58B42F7 :10BEE00016DD83898288C4881344C2899BB22244A8 :10BEF00094B212B2002A8381C28105DD0288134404 :10BF000083814388E31AC38101310181012010BD7F :10BF10000020FCE7037E0131C9B28B428CBF08468A :10BF200000207047037E0139C9B28B429CBF03F1E8 :10BF3000FF33D9B20846704718232DE9F04703FBB9 :10BF400000F5DFF88C9009F11C067419217D484634 :10BF500009EB8103B3F90280236939F9217098470D :10BF600039F820A009EB8002BBB2B2F80290AAEB2C :10BF70000301B2F902C009B21FFA88F2A9EB020E5E :10BF800000290FFA8EFE1DDA0132A2EB09024FF0F2 :10BF9000FF39A3EB0A031BB212B22075A4F802E02A :10BFA000A4F80AC0A4F80880A78126F80590E281C9 :10BFB00093FBFEF291FBFEF10EFB1233A180E380B6 :10BFC000BDE8F0870B464FF001090022E5E700BF0E :10BFD0006C130020182370B50546094E03FB01645D :10BFE00094F83010E36A3046984706EB8003B3F9C3 :10BFF00002300146AB4202D184F83000F2E770BD56 :10C000006C13002000222DE9F041524B524C0546A2 :10C010006364524B0121E362B4F9023094461E4638 :10C0200094F818E084F83020CFB2BE4563D8BCF154 :10C03000000F01D084F830209B1B1BB26383002BC0 :10C0400070D094F830300121304684F84830FFF742 :10C05000C1FF00213046FFF7BDFF012394F83020D7 :10C06000637694F8483034F9222034F923309A4228 :10C0700052D0002363760020B4F91A60FFF75CFF0A :10C080000120FFF759FF637E2BB13548FFF722FFF0 :10C090003448FFF71FFF324F07F11808B4F93C206E :10C0A000002A1BDB95F844309A4217DAB4F928309D :10C0B000B4F94000834237DA00280FDB95F84310CB :10C0C0008B420BDA23EAE3738142D8BF08B2D9B2BC :10C0D000431A2846DBB2D2B2FFF704FE3846FFF718 :10C0E000F9FE80B34046FFF7F5FE78B3013E36B265 :10C0F000002ED3DC16E004EB8100B0F90200013120 :10C100008342B8BF0346B042A6BF174630464FF041 :10C11000010C3A46064687E7638B013B1BB26383FB :10C12000002BA8D1BDE8F081002BD7DB95F8431098 :10C130008842D3DA0028B8BF00239942D8BF0BB297 :10C14000C1B25B1AC5E7FFF7F7FEC7E70120FFF7AB :10C15000F3FEC7E715BF00086C13002025BF0008D9 :10C1600088130020A0130020F0B4094CBDF9107012 :10C17000A3800323BDF91460BDF9185021806280AB :10C18000E780268165812376F0BCFFF73BBF00BFC7 :10C190006C13002070B590F83C100268CB0080F85A :10C1A0003F30137C90F83D501F2B28BF1F23DB002E :10C1B00080F83E30EB00DBB280F84030547C4E1902 :10C1C000A642C4BF641BE1B280F8413003EBC10357 :10C1D00080F84230F02380F84330918A994298BF2A :10C1E0000B4680F84330D38A80F8443070BD30B4B9 :10C1F00090F844409DF80850A21A90F84340D2B2FB :10C20000611AC9B23DB9013AC91AD2B2C9B202958E :10C2100030BCFFF7F3BC012D01BF01F1FF31D21A91 :10C22000C9B2D2B2F3E713B590F84C30044600938C :10C2300090F84A3090F84B2090F84910FFF787FDAE :10C2400018B984F8800002B010BD012394F845208D :10C2500084F8803094F849309A4238BF84F84530E9 :10C2600094F8462094F84A309A4288BF84F84630C1 :10C2700094F8472094F84B309A4238BF84F84730FE :10C2800094F8482094F84C309A4288BF84F848309B :10C29000D9E7002390F8432080F8473080F84530F4 :10C2A00080F8462090F8443090F84220934224BF12 :10C2B0009A1A80F8472090F841209B1A80F848305D :10C2C000FFF7B1BFFFF766BF002280F84920FF22C9 :10C2D000436BA0F84A2080F84C205B68184770B583 :10C2E0000025036340F201130446049E80F83C20BD :10C2F00080F83D5080F8635080F88550A0F8863073 :10C30000816333680565466398472046FFF7DCFF85 :10C310002046FFF757FC84F8665070BD19B10A2912 :10C3200001D088B270474FF6FF707047002380F845 :10C330002730704710B404690A46A4460023202120 :10C3400010BC604710B404691346A4460A4610BCEA :10C350001721604707B58DF807100DF1070201217D :10C36000FFF7F0FF03B05DF804FB10B4C4680A46A1 :10C37000A4460023152110BC604710B4C4680A46C7 :10C38000A4460023162110BC604710B4C4681346AD :10C39000A4460A4610BC17216047002310B4C468A5 :10C3A0001A46A446182110BC6047002310B4C46884 :10C3B0001A46A446192110BC604773B505460C46C1 :10C3C000217819290DD8172919D80ED014290AD97E :10C3D000627800232846EE688DF80720B0470234C3 :10C3E000EEE7FE2912D002B070BD63780121284625 :10C3F0000DF107028DF80730FFF7C7FFEFE70023C5 :10C4000028461A46EE680134B047D9E762782921F8 :10C4100028468DF8072000F014F9E0E72DE9F041F7 :10C420001F46A1F1140304460D461646052B1BD8E2 :10C43000DFE803F01003030D10100021FFF77AFF6F :10C4400031462046FFF786FF0120BDE8F08101213B :10C45000FFF770FFD4F810E03B46324629462046ED :10C46000F446BDE8F04160470020EEE70E29F8B53C :10C47000044615461E463BD00F2903D00B292FD06A :10C480000020F8BDFFF789FF737994F822704021EE :10C4900007EBC30707F0FF072046FFF766FF3909E0 :10C4A00041F010012046FFF760FF07F00F01204622 :10C4B000FFF763FFB179204641F0B001FFF75DFF60 :10C4C00031792046C900326801F0F801013DFFF7DB :10C4D0005CFF15F0FF05F3D12046FFF766FF03E090 :10C4E00022B90949FFF769FF0120CAE70749F9E7BF :10C4F000FFF753FF81212046FFF737FF29462046EB :10C50000FFF73BFFE8E700BFFFE1000804E2000897 :10C5100070B504460D461646FFF7A8FF98B90A2DD8 :10C520001AD00D2D06D0092D0ED120460E4900F04F :10C5300023F808E04EB920460C49FFF73EFF236878 :10C540009B7C84F82230012070BD20460849FFF70B :10C5500034FF2368DB7CF4E7204600F012F8204625 :10C560000449FFF72AFFEEE70CE20008B4E10008F7 :10C57000BFE10008CAE1000801608B7C80F822302E :10C58000704738B5002328211A4645690446A84754 :10C59000002314211A462046E568A84720460122B8 :10C5A0004B2100F04EF8236820461A79292100F02B :10C5B00048F8204600224B2100F043F8236820462B :10C5C0001A79292100F03DF8204601224B2100F084 :10C5D00038F8236820465A792921BDE8384000F010 :10C5E00030B813B58DF80430049B8DF805108DF824 :10C5F0000620009301226B460F218468A04702B0F9 :10C6000010BD002310B484681A46A446092110BC4A :10C610006047002310B484681A46A4460A2110BC5F :10C62000604710B484680A46A44600230B2110BC5E :10C630006047002310B484681A46A446102110BC39 :10C64000604710B444690023A44610BC6047002032 :10C65000704700000023036080F82330C3848361A7 :10C66000FF23054A80F82430C0E90222C0E90422F1 :10C6700080F82930704700BF4FC60008F8B516464D :10C680001D46069FFFF7E6FFC0E90216C0E9045702 :10C69000BDE8F840FFF7B5BF00F000B800F0C2B940 :10C6A00038B5044600F092F8214605462046F4F7D6 :10C6B00069FC70B900212046F4F75AFC48B9002102 :10C6C0002046F4F72DFC30B100F0BEFA2223064DCF :10C6D0000360284638BD00F0B7FA21230360034801 :10C6E000BDE8384000F004B8000080FF29E20008EF :10C6F000004870470000C07FF8B5C1F30A57A7F2A1 :10C70000FF32132A0B4605460C4618DC002A09DACC :10C71000013201F0004303D143F07F5343F440134F :10C72000002229E0164810410140294311D04FF45E :10C73000002141FA02F2134423EA0003F0E7332A0E :10C740000ADDB2F5806F04D10246F3F70FFD05460E :10C750000C4628462146F8BD4FF0FF30A7F213479C :10C76000F8402842F5D0C2F1330101228A40521923 :10C7700028BF013322EA000219461046E7E700BF4E :10C78000FFFF0F00C0F3C7537F3B162B014610B5C8 :10C7900014DC002B07DA013300F0004101D141F035 :10C7A0007E51084610BD084A1A411042F9D04FF494 :10C7B00080011941014421EA0201F2E7802BF0D106 :10C7C000F4F712F90146ECE7FFFF7F0030F000427A :10C7D0002DE9F84F0146034606D100214FF04C40A9 :10C7E000F4F7BEFABDE8F88F002803DAF4F7FAF898 :10C7F0000021F5E7B0F1FF4F02DBF4F7F5F8F1E7C0 :10C80000B0F5000F35DA4FF09841F4F7F5F96FF015 :10C8100018020346C3F31604DE15714B7F3E234412 :10C8200003F4000080F07E5016444FF07E51204308 :10C8300006EBD356F4F7D6F86A4B04F10F02134017 :10C840000546002B3AD10021F4F76AFB98B1002E7F :10C8500000F0C4803046F4F77BF963490546F4F7ED :10C86000CBF9624904462846F4F7C6F9014620464A :10C87000C3E70022CEE75E492846F4F7BDF901463A :10C880004FF07C50F4F7AEF8294604462846F4F7FA :10C89000B3F901462046F4F7AFF904460EB9214634 :10C8A0006FE03046F4F754F94F490746F4F7A4F91E :10C8B000064638464D49F4F79FF972E04FF0804143 :10C8C000F4F792F801462846F4F74AFA81463046D2 :10C8D000F4F73EF9494680464846F4F78DF901469B :10C8E0008346F4F789F907464249F4F785F9424946 :10C8F000F4F77AF83946F4F77FF94049F4F774F819 :10C900003946F4F779F93E49F4F76EF85946F4F7E9 :10C9100073F93C4983463846F4F76EF93A49F4F71F :10C9200063F83946F4F768F93849F4F75DF83946A1 :10C93000F4F762F901465846F4F756F8DFF8D0A04C :10C94000C4F55713A24403F5227343EA0A03002BEC :10C95000074630DD4FF07C512846F4F74DF9294663 :10C96000F4F74AF9014604463846F4F73DF84946DB :10C97000F4F742F9074646B901462046F4F732F883 :10C9800001462846F4F72EF82CE717494046F4F7FD :10C9900033F9164906464046F4F72EF93946F4F7BE :10C9A00023F801462046F4F71DF82946F4F71AF853 :10C9B00001463046E6E701462846F4F713F84946B3 :10C9C000F4F71AF90446002E3FF469AF06494046D1 :10C9D000F4F712F90549064640466CE7002001E7E6 :10C9E00020FB4A00F0FF7F008071313FD1F71737FD :10C9F000ABAAAA3E9788173E25333A3E2549923E78 :10CA0000ABAA2A3F4FD01C3E298E633ECDCCCC3EF4 :10CA1000305CCFFF024B0146186800F02BB800BF16 :10CA20003C020020024B0146186800F04FB900BFDD :10CA30003C02002070B50E4E0C463168054611B917 :10CA400000F0F2F830602146284600F0EDF8431C73 :10CA50000AD0C41C24F00304A04207D0211A28469F :10CA600000F0E2F8013001D14FF0FF34204670BDF4 :10CA7000BC1300202DE9F843CD1C25F00305083533 :10CA80000C2D38BF0C25002D074601DBA94205D926 :10CA90000C2300263B603046BDE8F883DFF8D080E9 :10CAA00000F068F8D8F800301C465CBB29463846D0 :10CAB000FFF7C0FF431C044655D1D8F80040264676 :10CAC000002E45D1002C48D023683146384604EB6F :10CAD000030900F0A9F881453FD1216838466D1A55 :10CAE0002946FFF7A7FF013037D023682B44236086 :10CAF000D8F80030002B38D05A68A2422BD100223F :10CB00005A600FE02268521B1FD40B2A17D96119F3 :10CB1000A342256018BF5960636808BFC8F80010B9 :10CB200062514B60384604F10B0600F029F826F0FC :10CB30000706231DF21AAED09B1BA350ABE7A342FE :10CB40006268DDD1C8F80020ECE723466468ACE7F2 :10CB500034467668B4E71346CCE70C2338463B608E :10CB600000F00EF897E72560DCE75B60FFDE00BFB2 :10CB7000B8130020014800F091B800BFFC14002059 :10CB8000014800F08CB800BFFC1400200EB46FF018 :10CB9000004100B59CB01DAB029006900791049136 :10CBA0000848094953F8042B0591006802A901932C :10CBB00000F02EF90022029B1A701CB05DF804EB05 :10CBC00003B070473C0200200802FFFF0346024406 :10CBD000934200D1704703F8011BF9E710B56AB121 :10CBE0000139841810F8012B11F8013F9A4203D142 :10CBF000A04201D0002AF5D1D01A10BD1046FCE7A2 :10CC0000034610B5013932B111F8014F013A03F86A :10CC1000014B002CF7D100211A44934200D110BDE2 :10CC200003F8011BF9E7000038B50023054D044661 :10CC300008462B60FEF78CFA431C02D12B6803B127 :10CC4000236038BDF8140020014B1868704700BFFE :10CC50003C02002070B500260C4D0D4C641BA41046 :10CC6000A64209D100F0C6FB00260A4D0A4C641BFF :10CC7000A410A64205D170BD55F8043B9847013673 :10CC8000EEE755F8043B98470136F2E758E2000812 :10CC900058E2000858E2000860E200087047704758 :10CCA000034611F8012B03F8012B002AF9D1704734 :10CCB0000A44914200F1FF3300D1704710B511F8DA :10CCC000014B914203F8014FF9D110BD38B505462B :10CCD000002940D051F8043C0C1F002BB8BFE418C9 :10CCE000FFF748FF1C4A136833B963601460284695 :10CCF000BDE83840FFF744BFA34208D92068211897 :10CD00008B4201BF19685B6809182160EDE71A467C :10CD10005B680BB1A342FAD911685018A0420BD13D :10CD200020680144501883421160E0D118685B68A4 :10CD3000084410605360DAE702D90C232B60D6E771 :10CD4000206821188B4201BF19685B6809182160AF :10CD500063605460CBE738BDB81300202DE9F0477D :10CD60001F468E688246BE420C4690460B682CD801 :10CD70008A8912F4906F26D06569096905EB45052B :10CD8000A3EB010905EBD5757B1C4B446D109D424F :10CD900038BF1D46530527D52946FFF76BFE0646CB :10CDA00060B34A462169FFF783FFA38923F49063A8 :10CDB00043F08003A38126614E4426603E466561B0 :10CDC000A5EB0905A560BE4200D93E463246414664 :10CDD000206800F0AFFA0020A3689B1BA3602368C3 :10CDE00033442360BDE8F0872A4600F0CBFA0646BC :10CDF0000028E0D150462169FFF768FF0C23CAF8EC :10CE00000030A3894FF0FF3043F04003A381E9E7EE :10CE10002DE9F04F98468B8907461B060D461446B0 :10CE20009DB00ED50B6963B94021FFF723FE286042 :10CE3000286120B90C233B604FF0FF30D0E0402345 :10CE40006B610023099320238DF8293030234FF0A4 :10CE50000109CDF80C80DFF8A0818DF82A30234637 :10CE60009A4613F8012B0AB1252AF9D1BAEB040B23 :10CE70000BD05B46224629463846FFF76FFF01304C :10CE800000F0A980099A5A4409929AF80030002BC0 :10CE900000F0A18000234FF0FF32CDE905230AF115 :10CEA000010A049307938DF853301A9354460522D0 :10CEB00014F8011B504800F057FA049AD8B9D0066C :10CEC00044BF20238DF85330110744BF2B238DF826 :10CED00053309AF800302A2B15D0544600204FF0DA :10CEE0000A0C079A214611F8013B303B092B4DD91A :10CEF000B0B1079214E0A0EB080309FA03F313435F :10CF0000A2460493D2E7039B191D1B680391002BD3 :10CF1000BBBF5B4242F0020207930793B8BF049283 :10CF200023782E2B0CD163782A2B34D1039B023427 :10CF30001A1D1B680392002BB8BF4FF0FF330593F7 :10CF4000DFF8B8A003225046217800F00DFA38B17E :10CF50004022049BA0EB0A00824013430134049357 :10CF600014F8011B062226488DF8281000F0FCF961 :10CF7000002838D0234B1BBB039B073323F0070348 :10CF800008330393099B3344099368E70C46012057 :10CF90000CFB0232A6E700234FF00A0C19460134BD :10CFA0000593204610F8012B303A092A03D9002BAB :10CFB000C6D00591C4E7044601230CFB0121F0E72C :10CFC00003AB00932A4638460F4B04A9AFF3008009 :10CFD000421C0646D6D1AB895B063FF52DAF0998BA :10CFE0001DB0BDE8F08F03AB00932A463846064BD0 :10CFF00004A900F07DF8EBE724E200082AE200082B :10D000002EE20008000000005DCD00082DE9F04789 :10D01000164699468A680B6907469342B8BF13467D :10D02000336091F843200C46DDF820800AB10133CB :10D0300033602368990642BF336802333360256842 :10D0400015F0060506D104F1190AE36832689B1A47 :10D05000AB422BDC94F84320131E226818BF012337 :10D06000920630D44946384604F14302C0470130A5 :10D0700023D02368226903F00603042B14BF002584 :10D0800033684FF0000608BFE56804F11A0408BFD2 :10D09000ED1A54F8123C08BF25EAE5759342C4BF67 :10D0A0009B1AED18B5421AD1002008E00123524620 :10D0B00049463846C047013003D14FF0FF30BDE844 :10D0C000F0870135C1E73020E11881F843005A1C90 :10D0D00094F845102244023382F84310C2E701233A :10D0E000224649463846C0470130E6D00136D9E7E6 :10D0F0002DE9FF470F7E9146782F80460C469A46D1 :10D100000C9D01F1430207D8622F0AD8002F00F0CE :10D11000D580582F00F0C18004F1420584F8427098 :10D120003AE0A7F16303152BF6D801A151F823F0DB :10D1300089D100089DD1000819D1000819D1000833 :10D1400019D1000819D100089DD1000819D1000893 :10D1500019D1000819D1000819D10008A3D200087C :10D16000C9D100085DD2000819D1000819D1000802 :10D17000C5D2000819D10008C9D1000819D100088A :10D1800019D1000865D200082B681A1D1B682A6097 :10D1900004F1420584F842300123A0E020682B68A6 :10D1A000070603F10401296001D51E6803E0460665 :10D1B000FBD5B3F90060002E03DA2D23764284F804 :10D1C00043300A23594812E02B682068191D296052 :10D1D000050601D51E6802E04106FBD51E886F2FAB :10D1E0000CBF08230A235148002184F843106568C6 :10D1F000002DA8BF2168A560A4BF21F00401216013 :10D200000EB9002D4BD01546B6FBF3F103FB1167A9 :10D21000C75D05F8017D3746BB420E46F4D9082BA1 :10D220000BD12368DE0708D5236961689942DEBF08 :10D23000302305F8013C05F1FF35521B22614B46B6 :10D2400021464046CDF800A003AAFFF7DFFE0130DB :10D250004AD14FF0FF3004B0BDE8F087236843F0B7 :10D26000200323607827324884F8457023682968B2 :10D270001F0651F8046B02D45F0648BFB6B2DF0741 :10D2800048BF43F02003296048BF23601EB92368CC :10D2900023F0200323601023A6E72448E4E7154683 :10D2A000BDE72B682668181D6169286035061B6874 :10D2B00001D5196002E07006FBD5198000231546E0 :10D2C0002361BCE72B6800211A1D2A601D68626873 :10D2D000284600F049F808B1401B6060636823618C :10D2E000002384F84330AAE72A464946404623698A :10D2F000D0470130ADD023689B0713D4E068039B6F :10D300009842B8BF1846A6E7012332464946404630 :10D31000D04701309DD00135E36803995B1AAB42D9 :10D32000F2DCEBE7002504F11906F5E735E2000829 :10D3300046E20008884210B501EB020402D984429B :10D34000234607D8431EA14208D011F8012B03F849 :10D35000012FF8E7014602448A4200D110BD13F8BC :10D36000014D02F8014DF7E7034610B5C9B202447A :10D370009342184601D1002003E0047801338C4227 :10D38000F6D110BD2DE9F041804614460E4621B974 :10D390001146BDE8F041FFF76DBB2AB9FFF796FCD7 :10D3A00025462846BDE8F08100F01BF88442074678 :10D3B00002D8B4EB500F12D821464046FFF75AFB73 :10D3C00005460028EDD0BC422246314628BF3A46E9 :10D3D000FFF76EFC31464046FFF778FCE1E7354643 :10D3E000DFE751F8043C181F002BBCBF0B58C018D6 :10D3F00070470000F8B500BFF8BC08BC9E467047F7 :0CD40000F8B500BFF8BC08BC9E467047A1 :10D40C00C80004014A019001C8002C019001F401EC :10D41C004000200001010000E7D40008F3D400080C :10D42C00FCD40008B5DA0008C1DA0008C7DA000835 :10D43C00CEDA0008D8DA0008E4DA0008EFDA0008DF :10D44C00FADA000803DB000810DB00081DDB00081B :10D45C002ADB00082FDB000836DB000844DB000861 :10D46C0052DB00085CDB000865DB000872DB00089F :10D47C0080DB0008A4DA0008AEDA000899DA0008AC :10D48C009FDA000879DA000883DA00088CDA0008E1 :10D49C0099DA00089FDA0008020304050607080958 :10D4AC000A0B0C0D0E0F10100102020304050607E7 :10D4BC0008090A0B0C0D0E0F101001025431322DFD :10D4CC00005431322D64656600454550524F4D0A6B :10D4DC00726561640A6572726F720074656D706555 :10D4EC00726174757265006475726174696F6E0037 :10D4FC006261636B20746F206D656E7500000000B7 :10D50C00000000000000000000000000000000000F :10D51C0000000000000000000000000000000000FF :10D52C0000000000000000000000000000000000EF :10D53C0000000000000000000000000000000000DF :10D54C000000000000000000774500087945000845 :10D55C007D4500087F4500084F464600436F6C64CC :10D56C000052656164790049646C6500537462799A :10D57C0000426F6F7374002532640046616E3A2569 :10D58C00336425630054756E650025326425630091 :10D59C0054756E65205049440052656623202564FD :10D5AC00005469703A005365743A20253364004F77 :10D5BC004B005B005D002825632D2563290041622B :10D5CC006F75740049524F4E202620486F742041CD :10D5DC0069722047756E00342E303800436F6E74BC :10D5EC00726F6C6C657220762E2573004E6F7620F0 :10D5FC00203720323032330049524F4E00535442C0 :10D60C00590047554E004B70203D20253564004B8A :10D61C0069203D20253564004B64203D2025356470 :10D62C00006070787C7870607E81A59999A5817E68 :10D63C007E8181818181817E040044402E801B008B :10D64C00F1E01B002E804440040010286828683844 :10D65C003878387CFEFEFE7C385A999999999981D4 :10D66C00995A3C7E7FFFFFFFFBF3623CFC020101F9 :10D67C0002FCFFFEFFFEFFFEFFFEFC00FC00FC00B8 :10D68C00FC00FC00FFFCFFFCFFFCFFFCFC00FC00B2 :10D69C00FC00FC00FC00FC00FFFEFFFEFFFEFFFE9A :10D6AC0001FF8007FFE01FFFF03FFFF87FC3FC7F07 :10D6BC0001FC7E00FEFE00FEFC007EFC007EFC00F9 :10D6CC007EFC007EFC007EFC007EFC00FEFE00FE6C :10D6DC00FE00FC7F01FC7F87F83FFFF81FFFF00F77 :10D6EC00FFC003FF00FFF800FFFE00FFFF00FFFF7D :10D6FC0080FC3F80FC1FC0FC1FC0FC1FC0FC1F80B7 :10D70C00FC3F80FFFF00FFFE00FFF800FFFC00FC69 :10D71C00FE00FC7F00FC3F00FC3F80FC1F80FC1FD8 :10D72C00C0FC1FC0FC0FE0FC0FE0070007000380EB :10D73C00038001800180018003C003C00F701C3B7B :10D74C00381F380F70003800000000C000E0007077 :10D75C000070006000C001C02B807FC0F180E0C071 :10D76C0000E000700078003800180000000000068F :10D77C00000E201E7838FD70D7E003C00180010038 :10D78C0001800380038001C000E000002000F8004D :10D79C00FC00DE000603038F01FF03FE038006007E :10D7AC000E001C003C003E000E00E03CFF3CE00084 :10D7BC0012D600081BD6000824D60008384444446E :10D7CC003800000064D5000804D6000809D600080B :10D7DC000ED600080A000403050504010611170201 :10D7EC0000170017000000000001713024F1EABAA4 :10D7FC002E0FE4A688E66626472647262766FDB741 :10D80C001393239323933373435473079257003129 :10D81C0010EBF69AA68C8E6206F7FF8F0E1E043262 :10D82C0021EFEE9AAE0E4AC828064D9B0ECFCE9233 :10D83C0052925292920E4B4A884A88D2D21E7C4007 :10D84C003326F0EA9AEE0E88A868E6482447244767 :10D85C0024A78767296BAFC9A7A96B6B4D272467D2 :10D86C00A68A0EE6AE003432F1EA5AA7A923842523 :10D87C00644544654465248504A5E4A6E4C4D44900 :10D88C00094A090A1D1C4C1C1CC8CA03C803C8033E :10D89C00C803081F441E44003526EF6E1A5E1C5C3C :10D8AC004C4A4C4A0C6F2C6324712043453238127D :10D8BC0049BC7169E5C4E00415CD01D91500362ABF :10D8CC00F1EADA0E0FA8C668064746454645C4D7A6 :10D8DC00584D1CCC5891504E50DE7A3B213B31397F :10D8EC003338434575407805371BEFEE1A7E40DA26 :10D8FC00724270787678769676787678967678ED39 :10D90C00F08600382CF1EABA0E0FA8D8D0914C8EC4 :10D91C004C8E4C8E4CCECC4DADA3989C88189B9BBA :10D92C00999C98F5F6926272A4AAE880F00A0039E4 :10D93C002BF06ABA0C0FA68868E6660627462546C1 :10D94C003D3DA498AB2832399818B2999E16911C7B :10D95C00911C999BA19A3A18340300000000000016 :10D96C000000000000000000E16C0008796D000868 :10D97C00416D0008B16C0008F1700008C16C000822 :10D98C005D6D0008C76C0008E36C0008D56C0008DE :10D99C00336D0008256D0008A96D0008CF6C0008D8 :10D9AC0000000000000000001F7200083373000824 :10D9BC00F7710008DF71000821720008EB71000894 :10D9CC0055720008DB720008E972000899720008B1 :10D9DC00CD720008BF72000803720008F1710008D4 :10D9EC0053656C6563742074697000454550524FE3 :10D9FC004D0A77726974650A6572726F72004163C1 :10DA0C0074697661746520746970004B45455000EB :10DA1C00524545440054494C5400253164206465FA :10DA2C00672E00253264206D696E00253364204317 :10DA3C00002533642046002532642073656300257D :10DA4C0032646D20253264730043616C69627261CB :10DA5C00746500486F742047756E002B2532642066 :10DA6C0025630025336420732E0044700063616CC1 :10DA7C006962726174650074756E652067756E00FD :10DA8C0074756E652067756E2050494400636C6533 :10DA9C0061720065786974006175746F6D61746989 :10DAAC0063006D616E75616C00626F6F73742073CF :10DABC006574757000756E6974730062757A7A6539 :10DACC0072006B6565702069726F6E007377697494 :10DADC00636820747970650074656D702E207374A2 :10DAEC006570006175746F20737461727400617578 :10DAFC00746F206F6666007374616E646279207453 :10DB0C00656D70007374616E6462792074696D6503 :10DB1C000073637265656E20736176657200736164 :10DB2C0076650063616E63656C0063616C6962723B :10DB3C0061746520746970006163746976617465E1 :10DB4C0020746970730074756E652069726F6E0055 :10DB5C0067756E206D656E750072657365742063F4 :10DB6C006F6E6669670074756E652069726F6E20E2 :10DB7C005049440061626F757400000000000000A1 :10DB8C00000000001D9600081D7E00083D7B00086B :10DB9C00FF8400080000000000000000537C000817 :10DBAC0049920008417B00081B850008000000001A :10DBBC0000000000377D0008E99700083F7B000853 :10DBCC000D8500080000000000000000E99400082A :10DBDC00F1A000082F7B00089D84000800000000C5 :10DBEC00000000003D9000086B900008237B0008AB :10DBFC00498400080000000000000000717F00084C :10DC0C00398B00082D7B00088F8400080000000071 :10DC1C0000000000C57B000829850008357B000842 :10DC2C00C784000800000000000000009B81000871 :10DC3C0021820008397B0008E38400080000000002 :10DC4C00000000005583000891830008377B000812 :10DC5C00D584000800000000000000000DA9000899 :10DC6C00F98D0008297B000873840008000000006F :10DC7C000000000067950008B98C00082B7B000899 :10DC8C008184000800000000000000007F9600085E :10DC9C00A1900008217B00083B84000800000000D4 :10DCAC0000000000B37F0008798000083B7B00086F :10DCBC00F18400080000000000000000998A0008B0 :10DCCC00219E0008317B0008AB8400080000000096 :10DCDC0000000000977B0008E19000081F7B000803 :10DCEC002D8400080000000000000000437B0008A9 :10DCFC0069890008337B0008B98400080000000023 :10DD0C00000000006D7B0008FD890008257B0008E1 :10DD1C00578400080000000000000000BDA40008AB :10DD2C0073A50008277B000865840008000000002C :10DD3C0000000000010203040607080900000000AF :10DD4C00010203041019C800F40150000A00740EFB :10DD5C00C201B400600003020304030504070F00B2 :10DD6C00FD09FD0BFE016E02DE0428200500C20732 :10DD7C002107C9C3C721092207A4DE47E414230DD8 :10DD8C0036CE4F940C4BD4322C510224136DBA570F :10DD9C00982D15254AB22D8912A5B285110025138F :10DDAC004FC2CF30249912256D492D694AB4444C89 :10DDBC000026104EC2CF94255125AC6451A2454B80 :10DDCC00002706A1DFC7102809ECBA5FD4D6C70616 :10DDDC00290AECBA47D8D6A736002A0B35CE57A558 :10DDEC00322D4D11002B0A2DC657180D5218012C2F :10DDFC0008ABB68F2929012D068CCEC7102E061222 :10DE0C00C3C7102F0E66BA6F310DD3300DD3304D02 :10DE1C000130104EC2CF9084DA9428D1268AC99052 :10DE2C0000310A4FC25F38F76D1802320B4EC2CF69 :10DE3C00908469B1E330330E4EC2CF908469694E41 :10DE4C00C5644800340E4EC267A82551254B863157 :10DE5C000D07350E4EC2C7214D07394DC56448001C :10DE6C00360E4EC2CF90A4E9A0848EC9900037091B :10DE7C004EC2C7B5D8DA06380F4EC2CF9084C664EE :10DE8C00484263322400390D4EC2CF90848EC9A013 :10DE9C005686043A083AC3C7100F013B0AD3B68F13 :10DEAC001D53A4A4043C08CDC267D6B5033D082677 :10DEBC00CEC71D1D063E09CDC247DAAD23003F0C6F :10DECC004EC2CF908469B11DCC00400F4EC2CF9092 :10DEDC0084D290444A6449E341410D4EC297A8450F :10DEEC002DE13088C600420D4EC2C7A084C6610920 :10DEFC008DC302430C4EC2CF90846A8FC9900044EC :10DF0C000B4EC2C7A0847E1C1600450C4EC2C72106 :10DF1C00AD0E4A5A1D06460B4EC2C721AD0E4ADA4B :10DF2C000A470D4EC2CF90846A6D34264302480BCB :10DF3C004EC247E8380CA26300490B4FC2C7218B75 :10DF4C00FB360C014A0B4EC26F57D1980C09004B93 :10DF5C00104EC247A825512513932CAA2561004CBD :10DF6C00094EC247DAAFC3004D0D4FC247BA2D154B :10DF7C00299222D5354E0D4EC247B829919468A3EB :10DF8C0063004F0B4EC2CF90847E4C8604500C4ED7 :10DF9C00C2C7A084C661495B01510E56BECF9084A6 :10DFAC00BE4452920C7100520C4EC2C7A084C66182 :10DFBC00091D03530F4EC2CF90846A3CC4A9980C20 :10DFCC00090054094FC2C7218BFB0D550A4EC2479D :10DFDC00E88FC99000560F4FC2476A4DB228AB84E8 :10DFEC00491A6700570D4FC247EA299222A5B2ADD4 :10DFFC0001580E4EC247684CA24CD4A224140359AB :10E00C000C4FC2476A4DB24A1AB7015A0A4EC2C7E0 :10E01C0035EC351D065B0963BFC710F54F035C0E6D :10E02C00E6BA471AA7711AA7711AA7015D09E3BED0 :10E03C00C7D43F0D015E089DDA5796D4025F060FD8 :10E04C00BAC72160069BE24756610B36C2CF30DA65 :10E05C00A6249102620C4EC2475A1D94D0715800EE :10E06C00630A36C2CF90846A7910640B4EC26FCBB0 :10E07C00303A268300650C36C2CF9084C3A0C68389 :10E08C0000660ACCC297924553D609670D4EB6CF9F :10E09C00303A26835A191200680B4EC2475A1D9407 :10E0AC00D0630069094BC34F0E485D066A0AE3B69C :10E0BC00570E487D5A006B0E4EC247DA9644954C6B :10E0CC0089B2240C6C084BC387D42F036D0D37C257 :10E0DC00C7258AA4488AA4482A6E0A36C247A49443 :10E0EC0036D1186F0B36C2CF90848EC99000700C4D :10E0FC004EB6C7A0848EC3925601710B4EB6CF306C :10E10C003A2683DA00720A36C247A494C6B40A735C :10E11C000B36C2CF300F713A2C00740ACCC24F565A :10E12C009AB24601750A36C247E836258914760B31 :10E13C0036C2472826519B2801770E37C24714490F :10E14C009114499154B100780C36C247984499A85F :10E15C00454918790C4EB647E83119D4CA90007A63 :10E16C000836C2C7B1E3307B0BFCB69792F5146648 :10E17C003D0A7C07E9BBC787007D0CFCB68798F588 :10E18C001865BD48007E0716D28F64017F0500C25A :10E19C000700000004FFFF0000000000C5C20008DB :10E1AC0093C20008EFC100081815D3162015A1154D :10E1BC00C819FF1815D3160015A015C019FF18158E :10E1CC00AE15D516F015A8163F15D31640154015EB :10E1DC0020160015A115C815DA1612158116321560 :10E1EC0082168015D916F115DB1640152E15A415BF :10E1FC00A619FF1815AF19FF1815AE19FF0000006E :10E20C000001140A6464323200093D0000042896AF :10E21C001008020280004000232D302B2000686C77 :10E22C004C0065666745464700303132333435362D :10E23C003738394142434445460030313233343566 :0CE24C0036373839616263646566000093 :08E2580035010008D14F000858 :04E2600011010008A0 :10E264000100000010000000010000006C03002009 :10E27400430043004300484F47554E42000000000E :10E2840042310000004232000000423300000042EC :10E294003400000042325A0000424331000042433D :10E2A400312E3542433200004243330000424331B1 :10E2B4005A004243325A004243345A0042434631E0 :10E2C4000042434632004243463300424346340050 :10E2D400424346315A424346325A424346335A42F3 :10E2E400434D320042434D3300424C000000425A39 :10E2F40000000043310000004332000000433300BB :10E30400000043340000004430380000443132003F :10E3140000443136000044323400004433320000FB :10E3240044353200004434000000444C313200448F :10E334004C333200444C3532004431325A004432BA :10E34400345A0044345A00004900000000494C008B :10E354000000494C5300004A303200004A4C30322D :10E36400004A533032004B000000004B46000000CE :10E374004B4C0000004B520000004B465A00004B2F :10E38400525A00004B5500000057423200005744D7 :10E394003038005744313200574431360057443541 :10E3A400320057490000004E312D30364E312D30A9 :10E3B400384E312D31304E312D31334E312D3136F1 :10E3C4004E312D32304E312D32334E312D4C3131D0 :10E3D40030303100313030320031303033003130C0 :10E3E40030340031303035003130303600313030A7 :10E3F400370031303038003130303900313031308D :10E4040000313230310031323032003132303300B9 :10E41400313230340031323035003132303600316F :10E424003230370031323038003132303900313453 :10E434003031003134303200313430330031343053 :10E444003400313430350031343036000024F400E7 :10E4540000000000C01300202814002090140020A5 :10E4640000000000000000000000000000000000A8 :10E474000000000000000000000000000000000098 :10E484000000000000000000000000000000000088 :10E49400000000000000000000000000F001002067 :040000050800B299A4 :00000001FF ================================================ FILE: BINARY/F1-T12+858D_ssd1306.hex ================================================ :020000040800F2 :100000000050002099B2000819B100081BB1000887 :100010001DB100081FB1000821B100080000000058 :1000200000000000000000000000000023B10008F4 :1000300025B100080000000027B1000829B1000820 :10004000E1B20008E1B20008E1B20008E1B2000844 :10005000E1B20008E1B20008B94F0008E1B20008BF :10006000E1B20008E1B20008E1B200082DB10008D9 :10007000E1B20008E1B20008E1B20008E1B2000814 :10008000E1B20008E1B20008E1B20008E1B2000804 :10009000E1B20008E1B20008E1B20008E1B20008F4 :1000A000E1B20008E1B20008E1B2000839B100088D :1000B00045B10008E1B20008E1B20008E1B2000871 :1000C000E1B20008E1B20008E1B20008E1B20008C4 :1000D000E1B20008E1B20008E1B20008E1B20008B4 :1000E000E1B20008E1B20008E1B20008000000003F :1000F0000000000000000000000000000000000000 :0C01000000000000000000005FF808F1A3 :1001100010B5054C237833B9044B13B10448AFF341 :1001200000800123237010BD400200200000000069 :10013000F0D3000808B5034B1BB103490348AFF3E4 :10014000008008BD0000000044020020F0D3000839 :10015000034613F8012B002AFBD1181A0138704707 :1001600081F0004102E000BF83F0004330B54FEA68 :1001700041044FEA430594EA050F08BF90EA020FD5 :100180001FBF54EA000C55EA020C7FEA645C7FEA68 :10019000655C00F0E2804FEA5454D4EB5555B8BF8B :1001A0006D420CDD2C4480EA020281EA030382EAFC :1001B000000083EA010180EA020281EA0303362D8E :1001C00088BF30BD11F0004F4FEA01314FF4801C61 :1001D0004CEA113102D0404261EB410113F0004F73 :1001E0004FEA03334CEA133302D0524263EB43032A :1001F00094EA050F00F0A780A4F10104D5F1200EC8 :100200000DDB02FA0EFC22FA05F2801841F1000122 :1002100003FA0EF2801843FA05F359410EE0A5F1F6 :1002200020050EF1200E012A03FA0EFC28BF4CF027 :10023000020C43FA05F3C01851EBE37101F00045DD :1002400007D54FF0000EDCF1000C7EEB00006EEBEA :100250000101B1F5801F1BD3B1F5001F0CD3490874 :100260005FEA30004FEA3C0C04F101044FEA4452CB :1002700012F5800F80F09A80BCF1004F08BF5FEA52 :10028000500C50F1000041EB045141EA050130BD32 :100290005FEA4C0C404141EB0101013C28BFB1F544 :1002A000801FE9D291F0000F04BF01460020B1FA8F :1002B00081F308BF2033A3F10B03B3F120020CDA62 :1002C0000C3208DD02F1140CC2F10C0201FA0CF040 :1002D00021FA02F10CE002F11402D8BFC2F1200CA5 :1002E00001FA02F120FA0CFCDCBF41EA0C0190405B :1002F000E41AA2BF01EB0451294330BD6FEA0404A4 :100300001F3C1CDA0C340EDC04F11404C4F120028E :1003100020FA04F001FA02F340EA030021FA04F3A0 :1003200045EA030130BDC4F10C04C4F1200220FAF7 :1003300002F001FA04F340EA0300294630BD21FA35 :1003400004F0294630BD94F0000F83F4801306BFFB :1003500081F480110134013D4EE77FEA645C18BFEF :100360007FEA655C29D094EA050F08BF90EA020F86 :1003700005D054EA000C04BF1946104630BD91EA7E :10038000030F1EBF0021002030BD5FEA545C05D181 :100390004000494128BF41F0004130BD14F58004C0 :1003A0003CBF01F5801130BD01F0004545F0FE4134 :1003B00041F470014FF0000030BD7FEA645C1ABF69 :1003C000194610467FEA655C1CBF0B46024650EAA0 :1003D000013406BF52EA033591EA030F41F40021CC :1003E00030BD00BF90F0000F04BF0021704730B552 :1003F0004FF4806404F132044FF000054FF0000127 :1004000050E700BF90F0000F04BF0021704730B5E7 :100410004FF4806404F1320410F0004548BF4042BC :100420004FF000013EE700BF42004FEAE2014FEA11 :1004300031014FEA02701FBF12F07F4393F07F4FEC :1004400081F06051704732F07F4208BF704793F0EF :100450007F4F04BF41F40021704730B54FF4607402 :1004600001F0004521F000411CE700BF50EA010205 :1004700008BF704730B54FF000050AE050EA0102AE :1004800008BF704730B511F0004502D5404261EB1E :1004900041014FF4806404F132045FEA915C3FF45F :1004A000D8AE4FF003025FEADC0C18BF03325FEAFC :1004B000DC0C18BF033202EBDC02C2F1200300FAAD :1004C00003FC20FA02F001FA03FE40EA0E0021FAD2 :1004D00002F11444BDE600BF70B54FF0FF0C4CF4C0 :1004E000E06C1CEA11541DBF1CEA135594EA0C0F72 :1004F00095EA0C0F00F0DEF82C4481EA030621EAAD :100500004C5123EA4C5350EA013518BF52EA0335E7 :1005100041F4801143F4801338D0A0FB02CE4FF099 :100520000005E1FB02E506F00042E0FB03E54FF0C9 :100530000006E1FB03569CF0000F18BF4EF0010EC1 :10054000A4F1FF04B6F5007F64F5407404D25FEABD :100550004E0E6D4146EB060642EAC62141EA555170 :100560004FEAC52040EA5E504FEACE2EB4F1FD0CB2 :1005700088BFBCF5E06F1ED8BEF1004F08BF5FEA30 :10058000500E50F1000041EB045170BD06F00046E2 :1005900046EA010140EA020081EA0301B4EB5C048F :1005A000C2BFD4EB0C0541EA045170BD41F4801187 :1005B0004FF0000E013C00F3AB8014F1360FDEBFAC :1005C000002001F0004170BDC4F10004203C35DA88 :1005D0000C341BDC04F11404C4F1200500FA05F30B :1005E00020FA04F001FA05F240EA020001F00042AC :1005F00021F0004110EBD37021FA04F642EB060122 :100600005EEA430E08BF20EAD37070BDC4F10C044B :10061000C4F1200500FA04F320FA05F001FA04F20F :1006200040EA020001F0004110EBD37041F10001FB :100630005EEA430E08BF20EAD37070BDC4F1200506 :1006400000FA05F24EEA020E20FA04F301FA05F26E :1006500043EA020321FA04F001F0004121FA04F216 :1006600020EA020000EBD3705EEA430E08BF20EAE6 :10067000D37070BD94F0000F0FD101F00046400020 :1006800041EB010111F4801F08BF013CF7D041EAA2 :10069000060195F0000F18BF704703F000465200A6 :1006A00043EB030313F4801F08BF013DF7D043EA77 :1006B0000603704794EA0C0F0CEA135518BF95EA2D :1006C0000C0F0CD050EA410618BF52EA4306D1D1B4 :1006D00081EA030101F000414FF0000070BD50EAD3 :1006E000410606BF1046194652EA430619D094EA5D :1006F0000C0F02D150EA013613D195EA0C0F05D147 :1007000052EA03361CBF104619460AD181EA03019A :1007100001F0004141F0FE4141F470014FF0000052 :1007200070BD41F0FE4141F4780170BD70B54FF0ED :10073000FF0C4CF4E06C1CEA11541DBF1CEA13556D :1007400094EA0C0F95EA0C0F00F0A7F8A4EB05044F :1007500081EA030E52EA03354FEA013100F0888046 :100760004FEA03334FF0805545EA131343EA12630F :100770004FEA022245EA111545EA10654FEA0026C4 :100780000EF000419D4208BF964244F1FD0404F57D :10079000407402D25B084FEA3202B61A65EB0305D9 :1007A0005B084FEA32024FF480104FF4002CB6EB96 :1007B000020E75EB030E22BFB61A754640EA0C0016 :1007C0005B084FEA3202B6EB020E75EB030E22BF56 :1007D000B61A754640EA5C005B084FEA3202B6EB97 :1007E000020E75EB030E22BFB61A754640EA9C0056 :1007F0005B084FEA3202B6EB020E75EB030E22BF26 :10080000B61A754640EADC0055EA060E18D04FEAE3 :10081000051545EA16754FEA06164FEAC30343EA83 :1008200052734FEAC2025FEA1C1CC0D111F4801F50 :100830000BD141EA00014FF000004FF0004CB6E749 :1008400011F4801F04BF01430020B4F1FD0C88BFE8 :10085000BCF5E06F3FF6AFAEB5EB030C04BFB6EBF3 :10086000020C5FEA500C50F1000041EB045170BDE6 :100870000EF0004E4EEA113114EB5C04C2BFD4EB13 :100880000C0541EA045170BD41F480114FF0000E97 :10089000013C90E645EA060E8DE60CEA135594EA13 :1008A0000C0F08BF95EA0C0F3FF43BAF94EA0C0F16 :1008B0000AD150EA01347FF434AF95EA0C0F7FF48B :1008C00025AF104619462CE795EA0C0F06D152EADF :1008D00003353FF4FDAE1046194622E750EA4106C3 :1008E00018BF52EA43067FF4C5AE50EA41047FF4D4 :1008F0000DAF52EA43057FF4EBAE12E74A0011D286 :1009000012F5001211D20DD56FF47873B3EB625269 :100910000ED44FEAC12343F0004343EA505323FA75 :1009200002F070474FF00000704750EA013002D1EA :100930004FF0FF3070474FF0000070474FEA410220 :10094000B2F1E04324BFB3F5001CDCF1FE5C0DD92D :1009500001F0004C4FEAC0024CEA5070B2F1004F77 :1009600040EB830008BF20F00100704711F0804F7A :1009700021D113F13872BCBF01F00040704741F43F :1009800080114FEA5252C2F11802C2F1200C10FA43 :100990000CF320FA02F018BF40F001004FEAC12327 :1009A0004FEAD32303FA0CFC40EA0C0023FA02F3CB :1009B0004FEA4303CCE77FEA625307D150EA0133A1 :1009C0001EBF4FF0FE4040F44000704701F0004071 :1009D00040F0FE4040F40000704700BF80F000404F :1009E00002E000BF81F0004142001FBF5FEA410307 :1009F00092EA030F7FEA226C7FEA236C6AD04FEA07 :100A00001262D2EB1363C1BFD2184140484041404B :100A1000B8BF5B42192B88BF704710F0004F40F4FD :100A2000000020F07F4018BF404211F0004F41F419 :100A3000000121F07F4118BF494292EA030F3FD0E5 :100A4000A2F1010241FA03FC10EB0C00C3F12003F8 :100A500001FA03F100F0004302D5494260EB400087 :100A6000B0F5000F13D3B0F1807F06D340084FEAF2 :100A7000310102F10102FE2A51D2B1F1004F40EBE7 :100A8000C25008BF20F0010040EA0300704749004F :100A900040EB0000013A28BFB0F5000FEDD2B0FAEC :100AA00080FCACF1080CB2EB0C0200FA0CF0AABF0F :100AB00000EBC25052421843BCBFD04018437047AD :100AC00092F0000F81F4000106BF80F400000132B3 :100AD000013BB5E74FEA41037FEA226C18BF7FEA8A :100AE000236C21D092EA030F04D092F0000F08BFCC :100AF0000846704790EA010F1CBF0020704712F0B3 :100B00007F4F04D1400028BF40F00040704712F1F1 :100B100000723CBF00F50000704700F0004343F056 :100B2000FE4040F4000070477FEA226216BF08468C :100B30007FEA23630146420206BF5FEA412390EA4F :100B4000010F40F4800070474FF0000304E000BF45 :100B500010F0004348BF40425FEA000C08BF7047F6 :100B600043F0964301464FF000001CE050EA0102BA :100B700008BF70474FF000030AE000BF50EA0102CF :100B800008BF704711F0004302D5404261EB4101BC :100B90005FEA010C02BF84460146002043F0B643E1 :100BA00008BFA3F18053A3F50003BCFA8CF2083A06 :100BB000A3EBC25310DB01FA02FC634400FA02FC0F :100BC000C2F12002BCF1004F20FA02F243EB020016 :100BD00008BF20F00100704702F1200201FA02FC78 :100BE000C2F1200250EA4C0021FA02F243EB02006B :100BF00008BF20EADC7070474FF0FF0C1CEAD052AF :100C00001EBF1CEAD15392EA0C0F93EA0C0F6FD06F :100C10001A4480EA010C400218BF5FEA41211ED04D :100C20004FF0006343EA501043EA5111A0FB013139 :100C30000CF00040B1F5000F3EBF490041EAD3710E :100C40005B0040EA010062F17F02FD2A1DD8B3F18A :100C5000004F40EBC25008BF20F00100704790F0F9 :100C6000000F0CF0004C08BF49024CEA502040EA4B :100C700051207F3AC2BFD2F1FF0340EAC250704711 :100C800040F400004FF00003013A5DDC12F1190F4F :100C9000DCBF00F000407047C2F10002410021FAC1 :100CA00002F1C2F1200200FA02FC5FEA310040F1D9 :100CB000000053EA4C0308BF20EADC70704792F052 :100CC000000F00F0004C02BF400010F4000F013A8A :100CD000F9D040EA0C0093F0000F01F0004C02BF85 :100CE000490011F4000F013BF9D041EA0C018FE7F4 :100CF0000CEAD15392EA0C0F18BF93EA0C0F0AD0FA :100D000030F0004C18BF31F0004CD8D180EA01001F :100D100000F00040704790F0000F17BF90F0004FB8 :100D2000084691F0000F91F0004F14D092EA0C0F9A :100D300001D142020FD193EA0C0F03D14B0218BF2D :100D4000084608D180EA010000F0004040F0FE4073 :100D500040F40000704740F0FE4040F4400070470F :100D60004FF0FF0C1CEAD0521EBF1CEAD15392EA8E :100D70000C0F93EA0C0F69D0A2EB030280EA010C7E :100D800049024FEA402037D04FF0805343EA111117 :100D900043EA10130CF000408B4238BF5B0042F175 :100DA0007D024FF4000C8B4224BF5B1A40EA0C001A :100DB000B3EB510F24BFA3EB510340EA5C00B3EB4C :100DC000910F24BFA3EB910340EA9C00B3EBD10F3A :100DD00024BFA3EBD10340EADC001B0118BF5FEA8C :100DE0001C1CE0D1FD2A3FF650AF8B4240EBC250B5 :100DF00008BF20F0010070470CF0004C4CEA502076 :100E00007F32C2BFD2F1FF0340EAC250704740F4C4 :100E100000004FF00003013A37E792F0000F00F0B6 :100E2000004C02BF400010F4000F013AF9D040EA34 :100E30000C0093F0000F01F0004C02BF490011F4C8 :100E4000000F013BF9D041EA0C0195E70CEAD153C0 :100E500092EA0C0F08D142027FF47DAF93EA0C0FA7 :100E60007FF470AF084676E793EA0C0F04D14B028B :100E70003FF44CAF08466EE730F0004C18BF31F03D :100E8000004CCAD130F000427FF45CAF31F0004337 :100E90007FF43CAF5FE700BF4FF0FF3C06E000BFD0 :100EA0004FF0010C02E000BF4FF0010C4DF804CDF3 :100EB0004FEA40024FEA41037FEA226C18BF7FEA03 :100EC000236C11D001B052EA530C18BF90EA010F05 :100ED00058BFB2EB030088BFC81738BF6FEAE17094 :100EE00018BF40F0010070477FEA226C02D15FEA30 :100EF000402C05D17FEA236CE4D15FEA412CE1D09C :100F00005DF8040B704700BF844608466146FFE762 :100F10000FB5FFF7C9FF002848BF10F1000F0FBD44 :100F20004DF808EDFFF7F4FF0CBF012000205DF83D :100F300008FB00BF4DF808EDFFF7EAFF34BF0120C2 :100F400000205DF808FB00BF4DF808EDFFF7E0FF5B :100F500094BF012000205DF808FB00BF4DF808EDAC :100F6000FFF7D2FF94BF012000205DF808FB00BF0F :100F70004DF808EDFFF7C8FF34BF012000205DF8F1 :100F800008FB00BF4FEA40024FEA41037FEA226CB0 :100F900002D15FEA402C08D17FEA236C02D15FEADC :100FA000412C02D14FF0000070474FF00100704714 :100FB0004FEA4002B2F1FE4F0FD34FF09E03B3EB66 :100FC00012620DD94FEA002343F0004310F0004FA6 :100FD00023FA02F018BF404270474FF000007047FC :100FE00012F1610F01D1420205D110F0004008BF9B :100FF0006FF0004070474FF00000704738B50E4B5F :1010000005461A784FF47A73B3FBF2F30B4A106873 :10101000B0FBF3F000F004FC044658B90F2D09D8DA :10102000024629464FF0FF3000F0BCFB2046044B3F :101030001D6038BD0120FCE700000020EC0100200D :1010400004000020074A08B51368032043F010038A :10105000136000F095FB0020FFF7D0FF09F0B6FE0B :10106000002008BD00200240034A044B11681B7891 :101070000B441360704700BF5C020020000000209A :10108000014B1868704700BF5C02002038B5044669 :10109000FFF7F6FF0546631C1EBF044B1B78E418E0 :1010A000FFF7EEFF431BA342FAD338BD0000002038 :1010B000436A10B59A6A12F0500F1BD19A6A42F433 :1010C00000729A621A68926802F46022B2F5602F88 :1010D0000CD11A7B52B99A6A22F480729A629A6A87 :1010E000D2045EBF9A6A42F001029A62184603F087 :1010F0008DFE10BD1B6ABDE810401B6B1847704782 :1011000008B5406AFFF7FBFF08BD406A08B5836A6F :1011100043F040038362C36A43F00403C36203F0F5 :1011200049FF08BD002373B5019390F824300446AD :10113000012B6CD0012380F824304D680268062D05 :10114000086805EB850322D81F26556B053B9E409A :1011500025EA060500FA03F32B43536309288B683D :1011600000EB40054FF0070129D9D6681E3DA94084 :1011700026EA0101AB400B43D360A0F11003012B21 :1011800025D90020002384F8243002B070BD0C2D36 :101190004FF01F0509D8166B233B9D4026EA050535 :1011A00000FA03F32B431363D8E7D66A413B9D4013 :1011B00026EA050500FA03F32B43D362CEE7106954 :1011C000A94020EA0101AB400B431361D9E7114B61 :1011D0009A4216D193681B02D3D49368102843F423 :1011E00000039360CDD10C4B0C4A1B68B3FBF2F3A8 :1011F0000A2253430193019B002BC2D0019B013B68 :10120000F8E7A36A012043F02003A362BAE70220B3 :10121000BBE700BF00240140EC01002040420F006A :10122000002337B50193036804469A68D20702D5B4 :10123000002003B030BD9A6842F001029A60144B5E :10124000144A1B68B3FBF2F30193019BE3B9FFF768 :1012500017FF054623689B68DB07E9D4FFF710FFFB :10126000401B0228F6D923689B6813F00103F1D1D3 :10127000A26A012042F01002A262E26A84F82430DD :1012800042F00102E262D4E7019B013BDCE700BFD0 :10129000EC01002040420F0010B590F824300446C5 :1012A000012B54D0012380F82430FFF7B9FF002828 :1012B00049D1A36A274A23F4407323F0010343F47E :1012C0008073A3622368934204D123494A6812F4CD :1012D000702F2ED1A26A22F48012A2625A6852059F :1012E00041BFA26A22F4405242F48052A262A26A32 :1012F00012F480521CBFE26A22F00602E26200226F :1013000084F824206FF002021A609A6802F46022C6 :10131000B2F5602F13D10F4A934205D1A2F5806236 :10132000526812F4702F0AD19A6842F4A0029A60AF :1013300010BDA26A42F48012A2624A68CFE79A689E :1013400042F48012F3E7002384F82430F0E702200F :10135000EEE700BF002801400024014038B50368D3 :1013600004469A68D10701D4002038BD9A6822F05B :1013700001029A60FFF784FE054623689B68DB073D :10138000F2D5FFF77DFE401B0228F6D923689B6843 :10139000DA07F2D5A36A012043F01003A362E36ADF :1013A00043F00103E362E0E7F8B5044600286DD09E :1013B000836A23B9C36280F8243009F029FD2046EE :1013C000FFF7CCFFA36A13F0100361D100285FD1AF :1013D000A26A616822F4885222F0020242F00202FC :1013E000E569A668A262227B2943B6F5807F41EABF :1013F000420136D0771E7D427D412D02277D012F8F :1014000006D182BBA269013A45EA423242F4006544 :101410002268B6F5807F576827F4694745EA0705D3 :10142000556097681D4D05EA070545EA0105956079 :1014300001D0012E02D12369013B1B05D56A25F499 :1014400070052B43D3629268154B1340994213D118 :101450000023E362A36A23F0030343F00103A362C2 :10146000F8BD3546CAE7A26A42F02002A262E26AEB :1014700042F00102E262CBE7A36A23F0120343F0D9 :101480001003A362E36A43F00103E3620120E7E78C :10149000A36A43F01003A362F8E700BFFDF7E1FF82 :1014A000FE0E1FFF10B590F824300446012B11D01A :1014B000012380F82430FFF751FF38B9A36A23F4E1 :1014C000885323F0010343F00103A362002384F84F :1014D000243010BD0220FCE7002373B5019390F87F :1014E00024300446012B62D0012380F82430FFF71A :1014F00035FF2046FFF794FE054600282FD1A36A4A :10150000022023F4885323F0020343F00203A36272 :10151000284B1E6801F0C0FBB6FBF0F67600019682 :10152000019B03BB2268936843F008039360FFF7B5 :10153000A7FD064623689A68110718D49A6842F0F6 :1015400004029A60FFF79CFD064623689B685B07D0 :1015500023D4A36A23F0030343F00103A36200230F :1015600084F8243016E0019B013B0193D8E7FFF794 :1015700087FD801B0A28DDD923689B681807D9D509 :10158000A36A012523F0120343F01003A362002392 :1015900084F82430284602B070BDFFF771FD801B2F :1015A0000A28D2D923689B685A07CED5E8E70225D6 :1015B000F0E700BFEC0100202DE9B04104468DB0FA :1015C0000F4690460021302268460BF0FDFA94F851 :1015D0002430012B5BD001252E4B84F8245000933E :1015E0009B6803F46023B3F5602F07D0A36A43F030 :1015F0002003A362002384F8243044E02046FFF750 :101600000FFE05460028F5D16846FFF709FE05469E :101610000028EFD1A26A204B2168134043F4807365 :10162000A3624B683A465B054FF0000348BFA06ACF :1016300084F8243042BF20F4405040F48050A0622F :10164000E362206A154B4C318362154BC362154B24 :1016500003636FF0020341F84C3C51F8443C43F4FF :10166000807341F8443C434600F020F923689A68AF :1016700002F46022B2F5602F9A680CBF42F4A00217 :1016800042F480129A6028460DB0BDE8B081022570 :10169000F9E700BF00280140FEFCEFFFB110000891 :1016A000011100080B11000870B504468CB03022FF :1016B000002168460BF088FA94F82430012B30D0D2 :1016C0000126204684F82460FFF748FE054620BB2B :1016D000154B68460093FFF741FE48B184F824504B :1016E0003546A36A43F01003A36228460CB070BDD0 :1016F0002368206A9A6822F480729A605A6822F4F9 :1017000070225A6000F011F90546A36A23F4885349 :1017100023F0010343F00103A362002384F8243083 :10172000E3E70225E1E700BF0028014010B590F88B :1017300024300246012B1FD00123046880F8243096 :10174000A368DB0712D40D4B986810F001000DD18F :10175000A3F580639C4209D16368096823F4702370 :101760000B436360002382F8243010BD936A01208C :1017700043F020039362F5E70220F6E700280140DA :1017800007490302CA6803F4E06322F4E06212042A :10179000120C134343F0BF6343F40033CB60704734 :1017A00000ED00E0154B30B5DC68C4F30224C4F151 :1017B0000703251D042B28BF0423062D4FF0FF35FA :1017C00094BF0024033C05FA03F321EA0303A54078 :1017D00022EA0502A340002843EA0203ACBF00F15D :1017E0006040074A4FEA0313DBB2ABBF00F561402C :1017F00000F00F0080F80033135430BD00ED00E01E :1018000014ED00E0002807DB01234109034A00F042 :101810001F00834042F82130704700BF00E100E024 :101820000138B0F1807F0BD24FF0E023F021054A60 :10183000586182F823100020072298611A617047CE :101840000120704700ED00E0034610B540B31421BD :101850000068144A0244B2FBF1F292001A64124A80 :10186000DA63022283F82120D3E901242243DC68D1 :10187000016822431C6921F47F5122435C6921F0F5 :10188000300122439C692243DC6922430A430260FF :1018900000200122986383F8200083F8212010BDE6 :1018A0000120FCE7F8FFFDBF00000240F0B505464F :1018B00090F82000012836D0012085F8200095F806 :1018C000210000240128C6B24FF0020028D185F87B :1018D0002100AC632C68206820F001002060D5E96D :1018E0000F7006FA00F0786063606B68102BEB6A8B :1018F0000BBFA260A160E160E2604BB1236843F0DE :101900000E0300202360236843F001032360F0BD31 :10191000236823F004032360236843F00A03F0E7FD :1019200085F82040F3E70220F1E790F821200346F4 :10193000022A06D0042282630120002283F820209C :1019400070470268C06B116821F00E0111601168C8 :1019500021F00101116001211A6C01FA02F24260CA :10196000002083F82110E8E770B40425C66B026CF0 :101970003468036895402542196832D04D0730D548 :101980001A6896065EBF1A6822F004021A603E4A80 :10199000934219D01432934218D01432934217D084 :1019A0001432934217D01432934217D01432934218 :1019B0000CBF4FF480034FF08063344A5360C36A16 :1019C000002B5ED070BC18470423F6E74023F4E7F1 :1019D0004FF48063F1E74FF48043EEE74FF4802348 :1019E000EBE702259540254235D08D0733D51A689F :1019F000940606D41A6822F00A021A60012280F8BE :101A00002120214A934219D01432934218D0143223 :101A1000934217D01432934217D01432934217D006 :101A2000143293420CBF4FF400134FF00073174A67 :101A30005360002380F82030836AC1E70223F6E771 :101A40002023F4E74FF40073F1E74FF40053EEE77F :101A50004FF40033EBE708259540254211D00907E4 :101A60000FD5196821F00E011960012303FA02F263 :101A70007260836380F82130002380F82030036B8C :101A80009EE770BC704700BF0800024000000240A3 :101A90002DE9F74F00221646644F654BDFF894C1DD :101AA000DFF894E10D6835FA06F402D103B0BDE821 :101AB000F08F4FF0010808FA06F805EA080438EA42 :101AC00005057AD14D68032D07D8013D022D00F29E :101AD0008780DFE805F0959AA000122D00F098802D :101AE0006DD8112D00F08E80FF2C98BF82464FF0EC :101AF0000F0988BF00F1040A4FEA8605DAF8008072 :101B000088BF203D09FA05FB28EA0B0802FA05F513 :101B100048EA0505CAF80050D1F804A01AF0805F21 :101B20004BD0BD6926F0030845F00105BD61BD69D4 :101B300008F1804805F00105019508F5803806F0A8 :101B4000030B019D4FEA8B0BD8F8085009FA0BF9EB :101B500025EA0909394DA84261D005F58065A842FA :101B60005FD005F58065A8425DD005F58065A84287 :101B70000CBF0325042505FA0BF545EA0905C8F84D :101B800008509D681AF4801F14BF2543A5439D602B :101B9000DD681AF4001F14BF2543A543DD605D68AE :101BA0001AF4003F14BF2543A5435D601D681AF475 :101BB000803F14BF2543A5431D60013672E7DFF85F :101BC00080904D450CD017D8A9F580194D4507D008 :101BD00009F570294D4503D0A9F580194D4583D1EC :101BE0008A68D2B1012A08BFC0F810804FF00802FD :101BF00018BFC0F8148077E76545F1D07545EEE76A :101C0000CA6871E7CA6804326EE7CA6808326BE7CF :101C1000CA680C3268E7002266E7042264E7002500 :101C2000A9E70125A7E70225A5E700BF00100240AC :101C30000004014000003110000032100008014093 :101C4000000022108368194214BF01200020704751 :101C50000AB1016170470904FBE7016800224B6982 :101C600013F4806310D06FF480634B612023026310 :101C700080F83D3080F83E20036C80F83C2043F033 :101C80000403036401207047184670472DE9F846A5 :101C900006460F4691461D464FEA114A3368BAF18F :101CA000010F0CBF5C699C6927EA0404A4B2B4FA72 :101CB00084F46409A14501D0002025E06A1CEED01F :101CC000FFF7DEF9089BC01AA84201D8002DE5D124 :101CD0003368BAF1010F0CBF5B699B6927EA030304 :101CE0009BB2B3FA83F35B099945D7D10023202235 :101CF0000120336386F83D2086F83E30326C86F84A :101D00003C3042F020023264BDE8F8862DE9F04113 :101D100004460F46164698462568686927EA00007B :101D200080B2B8B16B695A0516D52B68202243F4EE :101D300000732B606FF480636B610023236384F86E :101D40003D2084F83E30226C42F0040201202264DF :101D500084F83C30BDE8F081731CDED0FFF790F9C9 :101D6000A0EB0800B04201D8002ED5D123685A69F3 :101D700027EA020292B2002ACED000232022236357 :101D800084F83D2084F83E30226C42F02002DDE7EA :101D900070B504460D46164623685B691B0601D5DF :101DA000002070BD2046FFF758FFC8B96A1CF3D069 :101DB000FFF766F9801BA84201D8002DECD12368FB :101DC0005B6913F08003E7D12022236384F83D2070 :101DD00084F83E30226C84F83C3042F020022264C9 :101DE0000120DEE72DE9F0431546026899461368A5 :101DF00085B043F480731360DDE90C780E463B46F2 :101E000000224FF00111CDF800800446FFF73EFF9D :101E1000236838B11B68DB0502D54FF400732364D7 :101E200003200AE006F0FE061E613A4643462046BD :101E30001749FFF76BFF18B1012005B0BDE8F0832B :101E4000236803905A69394603929B69424603937B :101E50002046039BFFF79CFF40B1236C042B01BF7E :101E60002268136843F400731360E5E7B9F1010FCA :101E7000236802D1EDB21D61DFE72A0A1A613946F3 :101E800042462046FFF784FF0028E6D12368F1E7A9 :101E9000020001002DE9FF479A46DDE90C7803684E :101EA00015461A680E4642F480621A601A684FF0AE :101EB000011142F480721A603B460022CDF8008086 :101EC0000446FFF7E3FE236848B11B68DB0502D533 :101ED0004FF400732364032004B0BDE8F0875FFA79 :101EE00086F906F0FE061E613A4643462046294919 :101EF000FFF70CFF08B10120EEE7236803905A6951 :101F0000394603929B69424603932046039BFFF7A1 :101F10003FFF40B1236C042B01BF2268136843F4D8 :101F200000731360E7E7BAF1010F23681AD1EDB22D :101F30004246394620461D61FFF72AFF0246002827 :101F4000E8D1216820460B6843F480730B603B4660 :101F50004FF00111CDF80080FFF798FE226860B1C4 :101F60001368B3E72A0A1A61394642462046FFF74A :101F70000FFF0028CED12368D9E749F00103136190 :101F8000204643463A460349FFF7C0FE003818BFD3 :101F90000120A1E70200010070B504460D46164677 :101FA00023685B695B0701D5002070BD2046FFF701 :101FB00054FEC8B96A1CF3D0FFF762F8801BA84230 :101FC00001D8002DECD123685B6913F00403E7D13D :101FD0002022236384F83D2084F83E30226C84F86C :101FE0003C3042F0200222640120DEE770B5044656 :101FF0000D46164621684B6913F0400301D00020BE :1020000010E04A69D2060ED56FF010024A61202214 :10201000236384F83D2084F83E30226C0120226442 :1020200084F83C3070BDFFF72BF8801BA84201D824 :10203000002DDFD123685B6913F04003DAD1202241 :10204000236384F83D2084F83E30226C42F0200265 :10205000E4E7000070B5044608B9012070BD90F8AF :102060003D3003F0FF021BB980F83C2008F03EFF32 :10207000242384F83D3023681A6822F001021A6094 :102080001A6842F400421A601A6822F400421A6088 :1020900000F068FD3F4B65689D4294BF3E4B3F4B4F :1020A00098428CBF00230123002BD6D1394E3C4BE4 :1020B000B542B0FBF3F388BF4FF4967622685168BF :1020C00021F03F0141EA030182BF73434FF47A7666 :1020D000B3FBF6F35160116A013321F03F010B436A :1020E0001362D169431E2B4821F44F41854221F0F0 :1020F000FF0132D86D00B3FBF5F340F6FC700133FD :10210000034242D0C3F30B031943D1611168D4E9F0 :10211000073021F0C00103430B4313609168D4E9F9 :10212000030321F40341034321F0FF010B439360B8 :10213000D168D4E9053021F0FF0103430B43D3609C :102140001368002043F0010313602023206484F807 :102150003D30206384F83E0080E7A06850B905EB6D :102160004505B3FBF5F30133C3F30B037BB143F434 :102170000043C9E719206843B3FBF0F30133C3F30D :102180000B0323B143F44043BEE70423BCE7012320 :10219000BAE700BFA08601007F841E00FF083D0053 :1021A00040420F002DE9F743044699460F469046FA :1021B0000C9EFEF765FF94F83D300546202B03D0BA :1021C000022003B0BDE8F0830090192301222046CD :1021D0003A49FFF75BFD0028F2D194F83C30012B1F :1021E000EED00123206884F83C3003684246D907CA :1021F00058BF036839465CBF43F0010303600368BE :1022000023F400630360212384F83D30402384F8E5 :102210003E30002323640A9B20466362BDF82C30C5 :10222000CDE900656385638D2385254BE3624B46CD :10223000FFF7D8FD00282AD00120C2E7FFF7A8FD4C :1022400040B1236C042B01BF2268136843F4007370 :102250001360F1E7636A27681A4612F8011B3961B7 :102260006262628D218D013A92B262857A69481E5E :1022700080B2520720850AD548B15A7802333A61B4 :102280006362638D0239013B9BB221856385238D97 :102290002A4631462046002BD0D1FFF77DFE00288C :1022A000CFD12268136843F400731360202384F8AD :1022B0003C0084F83D3084F83E0082E702001000C4 :1022C0000000FFFF2DE9F04399460023044689B042 :1022D00003930D469046129FFEF7D2FE94F83D30D0 :1022E0000646202B04D00225284609B0BDE8F0831D :1022F00000901923012220468D49FFF7C7FC0028D2 :10230000F1D194F83C30012BEDD00123206884F802 :102310003C3003682946DB0758BF036842465CBF70 :1023200043F001030360036823F400630360222386 :1023300084F83D30402384F83E3000232364109B12 :1023400020466362BDF84430CDE900766385638D35 :102350002385784BE3624B46FFF79CFD054608B1A9 :102360000125C1E7228D2368C2B904905A690492FD :102370009A690492049A1A6842F400721A60DFF8AB :10238000B881DFF8B891238D002B37D1202284F853 :102390003C3084F83D2084F83E30A5E7012A11D175 :1023A0001A6822F480621A6072B6236805905A692E :1023B00005929A690592059A1A6842F400721A60A9 :1023C00062B6DCE7022A1A680ED142F400621A6093 :1023D00072B6236806905A6906929A690692069A1E :1023E0001A6822F48062EAE742F480621A60079079 :1023F0005A6907929B690793079BC0E7032B78D81C :10240000012B15D1324639462046FFF7EFFD002853 :10241000A6D123681A69636A1A70636A013363621A :10242000238D013B2385638D013B9BB26385AAE726 :10243000022B4FF000023B4641462046009618D141 :10244000FFF724FC00288BD172B623681A6842F487 :1024500000721A601A69636A1A70636A01336362F0 :10246000238D013B2385638D013B9BB2638562B65F :10247000CFE7FFF70BFC00287FF472AF22681368E8 :1024800023F48063136072B646F2A81123681A69B8 :10249000636A1A70626A531C6362238D013B238551 :1024A000638D013B9BB26385D9F80030B3FBF1F338 :1024B00023214B430393039B013B0393039B6BB982 :1024C0002022236384F83D2084F83E30226C42F0C1 :1024D0002002226462B684F83C3041E723685969DF :1024E0004807E8D5196841F4007119601B695370F9 :1024F000B3E7324639462046FFF778FD00287FF4DF :102500002FAF23681A69636A1A70626A531C636288 :10251000238D013B2385638D013B9BB2638523683B :10252000596949077FF52FAF1B69537075E700BFE5 :10253000020010000000FFFF04000100EC01002079 :102540002DE9F04F044685B01F4688469246FEF7B7 :1025500097FD94F83D300546202B03D0022005B0AE :10256000BDE8F08F00901923012220464A49FFF769 :102570008DFB0028F2D194F83C30012BEED00123E2 :1025800084F83C30236800261A68DFF80CB1D207C3 :1025900058BF1A6808F0FE085CBF42F001021A60DA :1025A0001A6822F400621A60242384F83D303B4B01 :1025B0002664E36222684FF001111368204643F459 :1025C000807313603B4600220095FFF75FFB236892 :1025D00038B11B68DB0502D54FF400732364032078 :1025E000BDE7C3F81080FEF74BFD4FF0A00905468C :1025F00023685A695B69C2F34002C3F3802394F8ED :102600003D10A02901D013431DD04FF020092368AD :1026100084F83D905A6912F0020F1A6842F4007271 :102620001A6025D0002203925A69204603929B69C2 :1026300001220393039B184919230095FFF726FBFA :1026400088B101208BE7FEF71BFD401BB84200D884 :102650000FB984F83D9023685A695B69C2F3400260 :10266000C3F38023CBE784F83D9084F83C0076E701 :102670006FF4806259465A61204619230122009561 :10268000FFF704FB0028DCD10136564592D384F8CD :102690003D9084F83C00D4E7020010000000FFFFEA :1026A00090F83D00704700002DE9F341054638B32E :1026B0000368DB0710D42B689F075ED42B681907CB :1026C00000F195802B685A0700F1C180E869002865 :1026D00040F02C81002029E0904C636803F00C034B :1026E000042B07D0636803F00C03082B0AD163683E :1026F000DE0307D523689C03DDD56B68002BDAD198 :10270000012013E06B68B3F5803F12D1236843F4D6 :1027100080332360FEF7B4FC064623689803CAD4CE :10272000FEF7AEFC801B6428F7D9032002B0BDE899 :10273000F0819BB9236823F480332360236823F45A :1027400080232360FEF79CFC064623689903B2D5DC :10275000FEF796FC801B6428F7D9E6E7B3F5A02FB7 :10276000236803D143F480232360CFE723F480332D :102770002360236823F48023CBE7684C636813F05D :102780000C0F07D0636803F00C03082B10D16368AB :10279000DA030DD423689B0702D52B69012BAFD137 :1027A00023686A6923F0F80343EAC203236085E7DC :1027B0002A695B4B6AB101221A60FEF761FC06468A :1027C00023689F07ECD4FEF75BFC801B0228F7D937 :1027D000ABE71A60FEF754FC0646236898077FF5BE :1027E0006DAFFEF74DFC801B0228F6D99DE7AA6964 :1027F0004A4E4B4BE2B10122C3F88024FEF740FC65 :102800000446736A9B070DD54FF4FA52454B1B687B :10281000B3FBF2F3019300BF019B5A1E0192002B00 :10282000F9D14FE7FEF72CFC001B0228E9D97CE721 :10283000C3F88024FEF724FC0446736A9F077FF5E3 :1028400041AFFEF71DFC001B0228F6D96DE7334CA3 :10285000E369D80024D40127E36943F08053E3619E :10286000E36903F080530093009B2F4E3368D90532 :1028700018D5EB68012B26D1236A43F001032362AC :10288000FEF7FEFB41F288380646236A9B073FD5D8 :10289000002F3FF41BAFE36923F08053E36115E79A :1028A0000027E2E7336843F480733360FEF7E8FB08 :1028B00080463368DA05DCD4FEF7E2FBA0EB0800C3 :1028C0006428F6D931E7ABB9236A41F2883823F09E :1028D00001032362236A23F004032362FEF7D0FB83 :1028E0000646236A9807D3D5FEF7CAFB801B4045EE :1028F000F7D91AE7052B236A03D143F004032362B7 :10290000BAE723F001032362236A23F00403B6E746 :10291000FEF7B6FB801B4045B7D906E70010024022 :1029200000004242EC010020007000402A4C636825 :1029300003F00C03082B3ED00022284B02281A6615 :102940002CD1FEF79DFB06462368990120D42B6A03 :10295000B3F5803F05D16268A96822F400320A43CA :102960006260696A62680B4322F4741213430122A5 :1029700063601A4B1A66FEF783FB054623689A01CB :102980003FF5A8AEFEF77CFB401B0228F6D9CCE64B :10299000FEF776FB801B0228D6D9C6E6FEF770FB51 :1029A000054623689B017FF595AEFEF769FB401B4A :1029B0000228F6D9B9E601283FF4B8AE63682A6A5E :1029C00003F4803191427FF49BAE6A6A03F4701382 :1029D00093423FF47FAE93E6001002400000424273 :1029E0000D4A536803F00C01082912D10B48C3F3B8 :1029F0008341DB03405C09D55368094AC3F3404374 :102A00005043084AD35CB0FBF3F07047064B584381 :102A100070470348704700BF00100240A0D4000870 :102A200000127A00B0D4000800093D002DE9F04101 :102A30000D46044610B90120BDE8F081444A1368F0 :102A400003F007038B4228D321688E0730D4CA07CE :102A500043D43F4A136803F00703AB4265D82268AA :102A60003C4D12F0040F6CD1130706D56B68226938 :102A700023F4605343EAC2036B60FFF7B1FF6B6856 :102A8000354AC3F30313D35CD840344B1860344B3E :102A90001868FEF7B3FA0020CEE7136823F00703A7 :102AA0000B431360136803F007038B42C3D1CBE7DA :102AB000284B11F0040F1EBF5A6842F4E0625A60BE :102AC000080742BF5A6842F460525A605A68A068C8 :102AD00022F0F00202435A60B9E762681D4E012AF3 :102AE00033681AD113F4003FA5D0736841F28838D7 :102AF00023F0030313437360FEF7C2FA07467368BB :102B0000626803F00C03B3EB820FA2D0FEF7B8FAB1 :102B1000C01B4045F3D903208EE7022A02D113F0EF :102B2000007FE1E713F0020FDEE7136823F00703ED :102B30002B431360136803F00703AB427FF47BAFB2 :102B40008DE76B68E16823F4E0630B436B608BE710 :102B5000002002400010024034DD0008EC0100209B :102B600004000020044B054A5B68C3F30223D35CD6 :102B7000034A1068D84070470010024044DD000846 :102B8000EC010020044B054A5B68C3F3C223D35C0D :102B9000034A1068D84070470010024044DD000826 :102BA000EC01002003682DE9F341D907054621D542 :102BB000364CE369DA0033D40126E36943F08053ED :102BC000E361E36903F080530193019B304F3B685D :102BD000DB0527D5236A6A6813F4407336D1236A6C :102BE0006A6823F44073134323621EB1E36923F040 :102BF0008053E3612868830706D52449AB684A6897 :102C000022F440421A434A6010F010001BD01F4AC1 :102C1000E9685368002023F480030B43536012E0FB :102C20000026D3E73B6843F480733B60FEF728FA45 :102C300080463B68D805CDD4FEF722FAA0EB080009 :102C40006428F6D9032002B0BDE8F08102F4407296 :102C50009A42C4D001200F4A236AC2F840040020DF :102C600023F44071C2F840042162D907B7D5FEF7BA :102C700007FA41F288380746236A9A07AFD4FEF76D :102C8000FFF9C01B4045F7D9DCE700BF0010024048 :102C90000070004000004242022808B544D01028CD :102CA00003D0012822D0002034E0254B5A68186850 :102CB00010F080702ED0C2F383412248D20348BF67 :102CC0005A68405C41BF2049C2F34042895C1F4AB8 :102CD0005B684CBFB2FBF1F21D4A5B0202FB00F0E5 :102CE00018D403234000B0FBF3F013E040F20231AC :102CF000134A136A1940B1F5817F1ED003F4407363 :102D0000B3F5007F07D149F64043506A10F0020046 :102D100018BF184608BDB3F5407FC4D110684FF204 :102D2000244310F40030F3E7FFF72CFF044B5B68FB :102D3000C3F3813301335B00D5E74FF40040E9E78B :102D400000100240B2D40008C2D4000800127A0079 :102D500000093D002DE9F3411C4616460F46054685 :102D6000FEF78EF93444241AFEF78AF98046234B85 :102D70001B68C3F3CB3363432A680193936837EA34 :102D8000030301D000202EE0731CF7D0FEF778F982 :102D9000A0EB0800A04229D32B685A6822F0E00279 :102DA0005A606A68B2F5827F0AD1AA68B2F5004F0C :102DB00002D0B2F5806F03D11A6822F040021A6087 :102DC000AA6AB2F5005F07D11A6822F400521A60AD :102DD0001A6842F400521A60012385F8513000232A :102DE000032085F8503002B0BDE8F081019B002B34 :102DF000019B08BF0024013BBEE700BFEC0100209F :102E000010B513460A4680210446FFF7A3FF20B100 :102E10000320636D43F02003636510BD10B50446C5 :102E2000002851D0436A002B4AD14268B2F5827F14 :102E300000D0C3610023A36294F8513003F0FF0275 :102E400023B9204684F8502008F082F80223226833 :102E500084F851301368A06823F04003136063685E :102E600000F4044003F482730343E068A16900F4B2 :102E700000600343206900F002000343606900F032 :102E80000100034301F400700343E069090C00F002 :102E900038000343206A01F0040100F0800003437E :102EA000A06A00F40050034313605160D36900200E :102EB00023F40063D3610123606584F8513010BDB1 :102EC0000023C0E90433B5E70120F8E72DE9F34713 :102ED0001F4690F850300446012B0D46904600F0F6 :102EE000A680012380F85030FEF7CAF894F85130DC :102EF0008246012B5FFA83F940F09680002D67D05F :102F0000B8F1000F64D0032384F8513000236365C7 :102F1000C4E91033A4F83680A363A387E387A368CA :102F20002668B3F5004F2563A4F8348007D13368D1 :102F300023F040033360336843F4804333603368E5 :102F400062685B065EBF336843F040033360E3684A :102F5000B3F5006F43D112B1B8F1010F07D135F8C5 :102F6000023BF3602563E38E013B9BB2E386E38E75 :102F70009BB2B3B9524639462046FFF741FF0028BD :102F80004FD1A36833B901932368DA6801929B6833 :102F90000193019B636DDBB90122994684F85120AE :102FA00016E022689368980705D5236B33F8021B57 :102FB000D1602363D7E7FEF763F8A0EB0A00B842BD :102FC000D5D3791CD3D001234FF0030984F85130B5 :102FD000002384F85030484602B0BDE8F08712B1B3 :102FE000B8F1010F08D12B783373236B01332363BE :102FF000E38E013B9BB2E386E38E9BB2002BB9D0FC :1030000023689A68920703D5226B12781A73ECE74B :10301000FEF736F8A0EB0A00B842EDD37B1CEBD0EC :10302000D1E720236365ACE74FF00209D0E74FF00A :103030000209D0E790F8510070470000036A026A65 :1030400070B522F001020262446882690D6822F0C4 :1030500073022A438D6823F002032B430A4DA842D2 :103060000BD1CD6823F008032B4324F44074D1E93D :103070000556354323F004032C43446082614A68BB :103080004263036270BD00BF002C0140036A026A04 :1030900070B522F4807202624468C2690D6822F041 :1030A00073022A438D6823F4007343EA05230B4D12 :1030B000A8420DD1CD6823F4006343EA052324F42C :1030C0004054D1E90556354323F4806344EA05149E :1030D0004460C2614A68C263036270BD002C014053 :1030E000036A026A30B522F4805202624468C269FF :1030F0000D6822F4E64242EA05228D6823F400536B :1031000043EA0533064DA84202BF4D6924F48044CA :1031100044EA85144460C2614A680264036230BDB7 :10312000002C0140704770477047704770477047E8 :10313000036810B51A69044691070ED5DA6892073C :103140000BD56FF002021A61012202779B699B077F :1031500077D0FFF7EAFF0023237723681A69500727 :1031600010D5DA6851070DD56FF004021A610222FA :1031700022779B69204613F4407F68D0FFF7D5FF84 :103180000023237723681A6912070FD5DA6810071E :103190000CD56FF008021A6104222277DB69204601 :1031A00099075AD0FFF7C1FF0023237723681A69D4 :1031B000D20610D5DA68D0060DD56FF010021A616C :1031C00008222277DB69204613F4407F4BD0FFF7BB :1031D000ACFF0023237723681A69D10708D5DA6882 :1031E000D20705D56FF0010220461A61FFF79CFF58 :1031F00023681A69100608D5DA68110605D56FF03C :10320000800220461A6100F05AFB23681A695206B0 :1032100008D5DA68500605D56FF0400220461A61DD :10322000FFF785FF23681A69910622D5DA689206AE :103230001FD56FF020022046BDE810401A6100F053 :103240003DBB01F0B9FD2046FFF770FF83E701F0B9 :10325000B3FD2046FFF76AFF92E701F0ADFD20467F :10326000FFF764FFA0E701F0A7FD2046FFF75EFF30 :10327000AFE710BD1A4A036890420AD0B0F1804F00 :1032800007D0A2F59432904203D002F580629042BA :1032900015D14A6823F070031343114A90420AD0B3 :1032A000B0F1804F07D0A2F59432904203D002F5DE :1032B0008062904203D1CA6823F4407313434A6981 :1032C00023F08003134303608B68C3620B6883623F :1032D000034B984204BF0B690363012343617047AA :1032E000002C014010B5044630B390F83D3003F097 :1032F000FF021BB980F83C2007F05CFE0223206827 :1033000084F83D30211DFFF7B5FF0123002084F82C :10331000463084F83E3084F83F3084F8403084F8FA :10332000413084F8423084F8433084F8443084F8E3 :10333000453084F83D3010BD0120FCE710B504464F :1033400030B390F83D3003F0FF021BB980F83C2009 :10335000FFF7E8FE0223206884F83D30211DFFF7C7 :1033600089FF0123002084F8463084F83E3084F839 :103370003F3084F8403084F8413084F8423084F89B :10338000433084F8443084F8453084F83D3010BD33 :103390000120FCE710B5044630B390F83D3003F04F :1033A000FF021BB980F83C20FFF7BDFE0223206816 :1033B00084F83D30211DFFF75DFF0123002084F8D4 :1033C000463084F83E3084F83F3084F8403084F84A :1033D000413084F8423084F8433084F8443084F833 :1033E000453084F83D3010BD0120FCE7036A026AD5 :1033F00070B522F010020262446882690D6822F4FE :10340000E64242EA05228D6823F0200343EA0513D1 :103410000B4DA8420DD1CD6823F0800343EA05137C :1034200024F44064D1E90556354323F0400344EACF :103430008504446082614A688263036270BD00BF94 :10344000002C014038B590F83C300546012B1DD0CA :10345000082A17D007D862B1042A0FD00120002310 :1034600085F83C3038BD0C2AF8D10068FFF738FEEB :1034700002E00068FFF7E2FD0020F0E70068FFF7D8 :10348000B5FFF9E70068FFF701FEF5E70220E9E77D :1034900070B590F83C300546012B50D00123082A26 :1034A00080F83C303BD007D8C2B1042A27D0184658 :1034B000002385F83C3070BD0C2AF8D10068FFF776 :1034C0000FFEC3690A6943F40063C361C36923F44F :1034D0008063C361C36943EA02232EE00068FFF7FB :1034E000ADFD83690A6943F008038361836923F0B2 :1034F000040383618369134383610020D8E7006874 :10350000FFF774FF83690A6943F400638361836989 :1035100023F480638361836943EA0223ECE7006854 :10352000FFF7B4FDC3690A6943F00803C361C369C7 :1035300023F00403C361C3691343C361DDE70220C1 :10354000B9E710B584680A4324F47F4442EA0322B1 :103550002243826010BD38B590F83C300446012B00 :103560004FF0020000F08E80012284F83D002068B8 :1035700084F83C20836823F47F4323F0770383603F :103580000B68602B4FD032D8402B64D016D8202B3C :103590000DD00AD833F0100109D0012384F83D3052 :1035A000002384F83C30104638BD302BF5D18268BA :1035B00022F07002134343F0070328E0502BECD1B4 :1035C0004A68CD68016A036A21F00A0123F0010309 :1035D000036283690A4323F0F00343EA051383611E :1035E0000262836823F0700343F057030FE0B3F5E2 :1035F000805F0DD0B3F5005F0CD0702BCDD1CB68C0 :10360000D1E90121FFF79DFF836843F077038360D1 :103610000022C2E7CB68D1E90121FFF792FF83685E :1036200043F48043F3E7036A026A4D6822F0100214 :10363000C9680262826923F0A00322F4704243EA5F :10364000051342EA013282610362836823F070034A :1036500043F06703DBE74A68CD68016A036A21F03B :103660000A0123F00103036283690A4323F0F00394 :1036700043EA051383610262836823F0700343F019 :103680004703C4E702468EE710B50124036A01F040 :103690001F018C4023EA04030362036A8A401A4331 :1036A000026210BD08B529B990F83E30012B21D037 :1036B000012008BD042907D190F83F30012BF7D134 :1036C000022380F83F3018E0082907D190F84030F5 :1036D000012BEDD1022380F840300EE090F841300C :1036E000012BE5D10429EBD00829F3D0022380F87F :1036F000413002E0022380F83E3000680122FFF7EB :10370000C3FF0E4B98420AD1436C43F40043436419 :10371000836803F00703062B0BD10020C9E7B0F143 :10372000804FF5D0064B9842F2D003F58063984263 :10373000EED0036843F001030360EEE7002C014084 :1037400000040040FFF7AEBF08B5034629B990F862 :103750003E20012A30D0012008BD04290BD190F869 :103760003F20012AF7D10222186883F83F20C2685F :1037700042F0040227E008290BD190F84020012AEA :10378000E9D10222186883F84020C26842F008029A :1037900019E090F84120012AD0B2DCD10429E2D00E :1037A0000829EED002220C2983F84120D4D11868D0 :1037B000C26842F0100206E0022280F83E20006853 :1037C000C26842F00202C26018680122FFF75CFF83 :1037D0000E4B98420AD1436C43F400434364836820 :1037E00003F00703062B0BD10020B5E7B0F1804FA3 :1037F000F5D0074B9842F2D003F580639842EED0A3 :10380000036843F001030360EEE700BF002C0140B2 :103810000004004030B590F83C300246012B4FF0D8 :10382000020022D0136882F83D005C680D6824F025 :1038300070042C4398685C600C4CA3420AD0B3F12E :10384000804F07D0A4F59434A34203D004F58064DC :10385000A34204D1496820F080000143996001230C :10386000002082F83D3082F83C0030BD002C014041 :1038700090F83C300246012B1ED0CB68886823F4B8 :1038800040730343486823F480630343086823F4C8 :1038900000630343086923F480530343486923F416 :1038A000005303430020C96923F480430B4311688C :1038B0004B6482F83C0070470220704770477047A5 :1038C000012300220370014B1A6470470008004076 :1038D00010B5054C4B1E4908E36210462164FDF704 :1038E000D5FB0023236410BD00080040037823B1FA :1038F000A0224FF48E71FFF7EBBF7047037810B52D :1039000004467BB1A0224FF48E71FFF7E1FF6420E3 :10391000FDF7BCFB2046BDE81040A0224FF48E719D :10392000FFF7D6BF10BD037823B1A02240F61831AF :10393000FFF7CEBF7047037810B50446C3B1A0228D :103940004FF48E71FFF7C4FF3220FDF79FFB3C223E :1039500040F618312046FFF7BBFF3220FDF796FBFB :103960002046BDE81040A02240F28C51FFF7B0BFC6 :1039700010BD90F88C3013B990F8510070470020BA :10398000704790F88C3073B504460D46D3B1B0F84B :10399000966032462946B4F84C0007F047FC0A22EC :1039A00094F88C30A4F84C0002FB0344B4F8743053 :1039B000324600932946002380B207F009FC80B20A :1039C00002B070BDB0F88E60E3E71FB54FF6FF732D :1039D000144643850A46694602F0DDFF58B904F1F2 :1039E000080302AA0D3412F8010F13F8011F8842D0 :1039F00004D1A342F7D1012004B010BD0020FBE7A1 :103A00002DE9F04304460026012785B000F1340873 :103A1000404603F01DFEF5B2854224DAD4F8A0300A :103A20004FEA450903EB450213F81530FF2B01D18E :103A30000136EDE7537803F00303032BF8D12A4650 :103A40006946204602F0A7FF0028F1D1D4F8A03043 :103A50008DF808704B442A46694620465F7002F094 :103A6000D1FF0028E4D005B0BDE8F0832DE9F04394 :103A7000002406460D464FF0FF08A14685B000F130 :103A80003407384603F0E4FD631CE4B284420BDBE8 :103A90004FF000084446304602F03AFE40450BDC49 :103AA000E0B205B0BDE8F08305EB440205F81480F0 :103AB0001C4682F80190E4E75FFA88F94A466946B5 :103AC000304602F068FF20B10128E9D008F1010872 :103AD000E1E738460DF1090103F0C6FD031EF5DBF1 :103AE0009DF80820002AF1D015F8130005EB4301DA :103AF000FF2802BF05F8139001344A70E6E7000082 :103B000070B534300C461146164603F0A3FD054649 :103B1000C0B116B103784E2B08D1052229462046A4 :103B200009F06CF800236371204670BD08492046F7 :103B300009F0B4F805222946201D09F05FF800239A :103B40006372F1E72046034909F0A8F8ECE700BFEB :103B5000C4D40008C9D4000890F88C3023B990F878 :103B600051200249FFF7CCBF0022FAE76002002093 :103B70002DE9F84F1446D0F8A02080460E461F4687 :103B80009DF828906AB911460C20023403E000FB2E :103B900002F30132E154D3B29F42F8D80020BDE8CD :103BA000F88F4B1E0132002B01DC002513E0590079 :103BB000B9F1000F03D012F81300C0071FD5DAB215 :103BC0002270D8F8A03040460B445B78A11C63708B :103BD000FFF796FF01254FF00C0B08F1340A504611 :103BE00003F036FD86420CDB0C23002203FB054468 :103BF0002B46BB4204F10C0423D32846CFE7013BFC :103C0000D1E7DEB17200B9F1000F05D0D8F8A030CD :103C100013445B78DB0711D50BFB05F3E654E11881 :103C2000D8F8A030013513445B7832464B704046DB :103C30000231EDB2FFF764FFBD42DED20136F6B2CB :103C4000CDE7013304F80A2CDBB2D2E7C288C38C7B :103C50009A422BD10289038D9A4227D14289438D02 :103C60009A4223D1028B038F9A421FD1827E90F811 :103C70003A309A421AD1427F90F83D309A4215D19B :103C8000827F90F83E309A4210D1C27F90F83F3048 :103C90009A420BD1C27E90F83B309A4206D1037F04 :103CA00090F83C209B1A58425841704700207047BA :103CB0002DE9F0410546002600F13408284602F0BF :103CC00027FDF4B2844211DB0026404603F0C0FC1D :103CD000F4B2844214DBFF240FE0D5F8A0200137B2 :103CE00012F81330A34202D10136E7E7002740461D :103CF00003F0AEFCFBB28342EFDB2046BDE8F0816F :103D0000D5F8A030610003EB440213F81430FF2B08 :103D10000AD0537813F0010306D1FF201070D5F8B4 :103D2000A0200A445370E8E70136CEE7F0B5D0F89A :103D3000A03004460D4685B013B9002005B0F0BD93 :103D400013F811604F00FF2E2DD1FFF7B1FFFF28B0 :103D50000646F2D0294604F1340003F07BFC01460C :103D60000028EAD005220DF1090008F047FF0123E1 :103D70003246694620468DF8083002F043FE00289E :103D8000DBD16A4631462046FFF71FFE0028D4D01B :103D9000D4F8A03003F81560D4F8A0309DF80820BE :103DA0003B445A70CAE73246694602F0F4FD0028E7 :103DB000C3D19DF80830324683F00103694620469E :103DC0008DF8083002F01EFE0028B6D1D4F8A030DD :103DD0009DF808203B4401205A70AFE7EB234FF4D5 :103DE000A02C064AC380064B0649C0E90223064BB5 :103DF000C0E90413054BC0E906C370472C01B004A9 :103E0000FC083200DF02C8004000C30000010003CC :103E100010B5044602F02DFD04F13400FFF7DEFF7B :103E20000146204602F06BFD2046BDE81040FFF73A :103E3000E7BD0000F8B5CB7F0746DA070C46CE8811 :103E40000D8907D430B207F002FA86B228B207F023 :103E5000FEF985B2194B30461A88194B198807F0BC :103E6000E5F9184B06461A88174B2846198807F0BB :103E7000DDF9E37F0546DB0717D5B6B285B2A37F30 :103E800025811E2B88BF1E23384688BFA377E68076 :103E9000657F03F0DDFB8542C4BF01236377E37ECA :103EA0003C2B84BF3C23E376F8BD30B207F0C7F962 :103EB00086B228B207F0C3F985B2E0E758DD000802 :103EC0005ADD000850DD000852DD00082DE9F047FA :103ED0001D4691469DF83820C37FC276BDF830203C :103EE00003F0010302839DF83420AB4204469DF8A1 :103EF00020A09DF824809DF828709DF82C60817783 :103F000082760AD0B0F906002DB307F0A0F9E08060 :103F1000B4F9080007F09BF92081B9F1000F22D114 :103F2000E577BAF1000F03D0E37F43F00403E377B2 :103F3000B8F1000F03D0E37F43F00803E3771FB12C :103F4000E37F63F07F03E3771EB1E37F43F0100369 :103F5000E377BDE8F08707F072F9E080B4F9080074 :103F600007F06DF9D8E745F00205D9E7C180704741 :103F700001814281704700F120031A4650F8041B6A :103F8000984242F8041BF9D1704738B500F1340566 :103F900004462846FFF75AFE40B92946204602F05B :103FA000AEFC2846BDE83840FFF7E5BF38BD38B560 :103FB0000D888C880B897AB1A0F84050A0F8424057 :103FC000A0F8443000F13404214602F098FC204669 :103FD000BDE83840FFF7CFBFA0F84650A0F84840F2 :103FE000A0F84A30EEE700F1200300F1400253F858 :103FF000041B934240F8041BF9D17047007F00096D :1040000000EB80007047007F00F00F00013000EBF4 :104010008000800070474B2928BF4B21052A38BFFC :104020000522B2F5A07F28BF4FF4A072531E1422C0 :10403000B3FBF2F305220431C9B2B1FBF2F143EA5A :1040400001130377704710B5044632B10B8ACA8951 :10405000898906F039FD204610BDCB8A8A8A498AB3 :10406000F7E710B504463AB1C8230A2240F23F21CF :1040700006F02AFD204610BD32231E22C821F7E794 :104080000A235A4310B50C88831884524A885A80F0 :104090008A889A80CA88DA800A7A1A7291F90E2080 :1040A0005A7210BD39B1064B1B888382054B1B88A1 :1040B0000176C3827047044B1B888382034BF6E76B :1040C00052DD000850DD00085ADD000858DD000808 :1040D00003290DD82AB1022A06D000EB4100408BFB :1040E0007047037E002BF8D000EB4100408C7047F6 :1040F000002070472DE9F04F04460D461646007E1D :1041000085B07BB907460A227A43A118A25A91F9D1 :104110000980AA42A6EB08081CD93BB1022B07D0A4 :10412000638B06E09A1E57425741ECE70028F7D010 :10413000638C4344009300213346284607F048F837 :1041400000B240F2E732314607F070F880B205B0B5 :10415000BDE8F08FCA88B1F802A0AA422AD355451B :1041600022D3B1F804A0554521D3AA4235D99246AD :104170004FF0030909F1FF311A46C9B22046FFF793 :10418000A7FF494600EB080320460393FFF7A0FF73 :1041900007EB870709F1FF3B5F4440445246039B0E :1041A00034F817100090C8E74FF00109E2E74FF02C :1041B0000209DFE723B1022B04D00021A38B03E027 :1041C0000028FAD00121A38C434421B1218D414420 :1041D00000915146B1E7218CF9E70020B1E710B515 :1041E00004467430FFF786FF94F85330DB0703D49E :1041F00000B207F024F880B210BD00002DE9F347AB :1042000017460A2290F88C30054602FB030292F909 :104210007D4088463C1B002B64D0B0F89660A4B269 :104220002644B6B2002B60D0B5F89C301C4495F8FB :104230005330B5F88890DB07B5F88AA0A4B213D440 :1042400030B206F0FCFF86B220B206F0F8FF84B26E :104250000FFA89F006F0F3FF1FFA80F90FFA8AF0DF :1042600006F0EDFF1FFA80FA52464946404606F036 :10427000DDFF264B95F88C20B3F800A00A2303FB42 :104280000252B2F87430B2F87A201FFA80F931463F :1042900000924846224606F09BFF14264FF0000885 :1042A00084B2B4EB5A0F4FEAAA03CCBFE41AE41865 :1042B000A4B200233A4621462846FFF790FF8145E5 :1042C00022D017D90AEB0400C0F34F00A04201D15D :1042D000601C80B2A046013E16F0FF0608D102B075 :1042E000BDE8F087B0F88E6099E7B5F894309DE7A7 :1042F0000446DEE708EB0400C0F34F00A04201D102 :10430000631E98B2A246E6E72046E8E756DD0008BD :104310000A22037E5343C218C35A0B8053884B8032 :1043200093888B80D388CB80704700000A2330B5F8 :10433000047E0D885C43055303194888588088889B :104340009880C9885A7203221A72034A12889142CD :1043500028BF1146D98030BD56DD00080A234FF42E :104360002A72594342524FF4717243185A8040F2F4 :104370000A529A804FF4C862DA80034A12785A725D :1043800001221A72704700BF4DDD0008017EFFF761 :10439000E5BF4A880B88934208D28B889A4205D29F :1043A000C888984294BF00200120704700207047C1 :1043B0007FB5D0F8A04006466CB1B1FA81F514F88B :1043C00011207436FF2A4FEA551507D12946304689 :1043D000FFF7C4FF0024204604B070BD694602F018 :1043E000DAFA0028F2D19DF808309B0705D4294657 :1043F0003046FFF7B3FF0124EDE769463046FFF78B :10440000C8FF04460028F2D02A463046FFF738FE9F :10441000E1E7F8B5054600F174070021384605F1DB :104420003406FFF73FFE304603F012F9400008F073 :10443000EFFAC5F8A000284602F0D1F9044628B3E7 :10444000D5F8A010E1B12846FFF710FB044631462D :10445000284602F037FAA8B131463046FFF7EAFCA9 :1044600000212846FFF7A4FF95F851102846FFF7D2 :104470009FFF3046FFF77FFDB4FA84F04009F8BD96 :104480000C46E4E73046FFF7A9FCE9E73046FFF7C2 :10449000A5FC21463846FFF761FF01212846FFF7BA :1044A00087FF3046FFF767FD0220E8E738B504468E :1044B0000D46FFF77DFF30B1204684F85150BDE82E :1044C0003840FFF762BD38BD2DE9FF411E46138815 :1044D0008DF80860ADF8003053880446ADF802301E :1044E00093883430ADF80430D3880D46ADF80630EB :1044F0009DF928304FEA41088DF80E30C36E03EB6A :1045000041035E7003F0A6F8074688B3694604F1DC :104510007400FFF73EFF58B3394605220DF109003C :1045200008F06CFBD4F8A03004F19E0713F81530A6 :10453000FF2B10D12046FFF7BBFBFF2803D13846E5 :10454000FFF7F9F914E0D4F8A03003F81500D4F817 :10455000A03043445E70D4F8A0306946204613F87A :10456000152002F04FFA0028E9D13846FFF7BEF9CE :1045700004B0BDE8F081704700207047704710B567 :104580000446242108F086F8204610BD38B50B4DAE :1045900004462B783BB100234FF08042536302F571 :1045A0009632136438BD0648FCF776FE08220549AA :1045B0000548FDF701F82C70F4E700BF400B002020 :1045C0006C0D0020A00300203C0D002000221421CF :1045D000C0E901120A21C0E90411C0E90621052140 :1045E00001620B218184012180F82610254980F881 :1045F0006A20097880F8682080F8691080F8AE2079 :1046000080F8AC2080F8AD1080F8F22080F8F0201F :1046100080F8F1101C49A0F8F42030B5A0F8F6207D :104620004FF0C875A0F8F8204FF4FA74A0F8FA20FB :10463000C26080F8FC20C0F8002180F8042180F8D6 :104640000521A0F80621A0F80821A0F80A210160A0 :104650000821C0F8145180F80C11A0F81841C0F8D6 :104660001021C0F8245180F80C11A0F82841C0F89E :10467000102180F81C11C0F8202180F81C11C0F80E :10468000202130BD4CDD000810D500084FF6FF7327 :104690002DE9F34143854FF0401300250446A02740 :1046A000984A994EC0E90B23984B05710360336813 :1046B000C580C0F88E3073680581C0F89230B36849 :1046C000A0F88850C0F89630F368A0F88A5080F8B7 :1046D0008C50C0F89A309E30FFF7F2F88C4B04F102 :1046E000A400C4F82C31C4F8A050A4F8305107F04D :1046F0001DFE29462822C4F83251C4F83651C4F8A8 :104700003A51C4F83E51A4F8425104F5A27008F0A1 :104710005BFA29461922C4F86C5104F5B87008F008 :1047200053FA3A462946A4F8895184F88B5104F586 :10473000C67008F049FA3A46294604F50B7008F0AD :1047400043FA3369A4F8CC52C4F8CE32B38A04F5E4 :104750003570A4F8D232FFF739FF6E4B0826C4F843 :10476000D4326D4B4FF06408C4F83C34142384F801 :1047700040346A4B84F80654C4F8005484F8075453 :10478000A4F80454A4F8085484F80C64C4F8105431 :1047900084F80C64C4F8105484F81464C4F81854F1 :1047A00084F81464C4F8185484F81C64C4F82054C1 :1047B00084F81C64C4F8205484F82464C4F8285491 :1047C00084F82464C4F8285484F82C64C4F8305461 :1047D00084F82C64C4F8305484F83464C4F8385431 :1047E00084F83464C4F83854A4F84284C4F84434D7 :1047F0004B4B0127C4F8483440F21453A4F84C340E :10480000022384F84E3440F63C734FF4007245495D :10481000A4F85434C4F85084434B009704F58B60DB :1048200002F02EF904F59460FFF7D0FE3F4B84F8B8 :10483000CC55C4F8A0343E4B84F8DC651B78C4F832 :10484000E05584F8DC35C4F8E05584F8E465C4F834 :10485000E85584F8E43546F24633A4F80636354B7D :10486000C4F8E855C4F80836334B84F8EC6584F88E :10487000CD55C4F8F055A4F8CE5584F8EC6584F80D :10488000D075C4F8F055A4F8D25584F8F465A4F8AE :10489000D455C4F8F855C4F8D85584F8F465C4F86C :1048A000F85584F8FC65C4F8005684F8FC65C4F833 :1048B0000056A4F80456C4F80C36204BA4F8108611 :1048C000C4F814364EF66023C4F818361C4BC4F8EE :1048D0002476C4F81C3643F61E43A4F820360A2377 :1048E00084F82236174B04F22C60C4F82836FEF701 :1048F000E7FF2046C4F83056A4F8345602B0BDE8AD :10490000F08100BF8000500008D40008E00D0020B6 :104910001DC30008B0D90008CF07E8030A08F40156 :10492000E803030E00080140000C014070D90008A4 :1049300054DD00085802CF0740062003407E0500E2 :10494000F401E803E0930400064A8160026001225A :1049500002710022C0E90422C0E9062282810262BB :10496000704700BF50D50008014B1878704700BF52 :10497000140B002070B5FCF783FB1B4B00F59675FC :104980005B6A9BB29C1CA4B2632C01D9613B9CB2B4 :10499000154EFCF775FBA84206D2736AA342F8D104 :1049A0004FF0804300225A62FCF76AFB0E4B00F581 :1049B00096755B6A9BB29C1CA4B2632C01D9613BC7 :1049C0009CB2094EFCF75CFBA84204D34FF0804335 :1049D000D86A013005E0736AA342F3D14FF08043F7 :1049E000586A80B270BD00BF002C014010B5037939 :1049F000044633B1FCF744FB4EF66022237902FBF8 :104A0000030323600023637110BD026810B543796E :104A100004463AB133B9FCF733FB2368984224BF0C :104A200001236371607910BD2DE9F041044686B021 :104A3000A43000F017FC04F5357002F083FC04F597 :104A4000946002F019FA02221B4904F58B6002F00F :104A500049F82046FFF7DDFC6D46074604F13408AF :104A6000012241462846FFF7EEFA03AE294604F537 :104A7000367006F02EF8414630460022FFF7E3FA82 :104A800096E8070085E80700294604F2A44006F0EE :104A900020F894F8533004F5C660C3F3400384F85B :104AA0002C3694F84F3084F83436FFF79FFF3846A1 :104AB00006B0BDE8F08100BF000C01402DE9F047D1 :104AC0005D4F5E4C3846FFF7AFFF06465C48FCF78B :104AD00003FD5C48FCF700FD0C215B48FEF732FE4D :104AE00008215948FEF730FE00215848FEF72AFEFB :104AF00004215648FEF726FE08215448544DFEF77F :104B000023FE0C215148FEF71FFE0C215148FEF7F1 :104B100019FEDFF844A120462A46504B504904F0C4 :104B20005EFD2246214628464E4B04F058FDDFF834 :104B3000388121462B462A46504604F050FD2B462C :104B40002A462946474804F04AFD21464246434B3F :104B5000434804F044FD2246214640463F4B04F0C2 :104B60003EFD234622462146404804F038FD2346B8 :104B700022463F493F4804F032FDDFF8FC902346CF :104B8000224621463A4804F02AFD23462246214681 :104B90003A4804F024FD234622462146484604F0C4 :104BA0001EFD2E4A23461146354804F018FD2346C3 :104BB00022462146334804F012FD23462246274967 :104BC000314804F00CFD234622462146234804F0D8 :104BD00006FD224621462D4B2D4804F000FD2346BC :104BE00022462146294804F0FAFC2A4B012EC3E94B :104BF0000B456362C5E9093A274C07D0022E13D052 :104C000097F85330DB0648BF256001E0C4F8008008 :104C1000FFF7B0FE4FF47A70FCF738FA2068BDE871 :104C2000F04703681B6818471C4907F1A40001F00E :104C30009DFCC4F80090EBE7C00300206C0300204B :104C40003C0D00206C0D00208C0E0020D40E0020A6 :104C5000E40C00201C0F00200C0C0020380C00205D :104C6000C40A00206C0A0020180B00206C020020EF :104C7000BC02002034030020F80900201C0A002098 :104C8000FC0200208C0B0020440B0020940A002022 :104C9000480A0020C00B00200C000020D1D40008DE :104CA00070B5FCF7EDF9364C236898421AD9FCF739 :104CB000E7F96430082120603248FCF7C3FF01287F :104CC0000CBF64210021304806F05CF84FF480717D :104CD0002E48FCF7B7FF01280CBF642100212C48A7 :104CE00006F050F82B4D286804F07DFC0446A0B176 :104CF0002B68834211D02848FEF700FE2748002188 :104D000002F08EFA4FF0804300225A632368204657 :104D10002C601B68BDE870401847286803685B6812 :104D200098472B680446834214D01D4B002100286D :104D300008BF1C46194802F073FA1A48002102F015 :104D4000D7F94FF0804300225A63236820461B683E :104D50002C609847FCF794F9134C236898420ED3C3 :104D60001249134A4B6A10681B1A18BF01231148D5 :104D700003704B6A1360FCF783F92930206070BD23 :104D8000300D0020000C0140B00700200008014059 :104D90007C0900200C000020EC0900209406002073 :104DA000F8090020600800202C0D0020002C014094 :104DB000E00C0020140B002038B50568114B0446A8 :104DC0009D420AD1037F042B1BD10F4802F09EF8AD :104DD0006322002106F02AFA28642368B3F1804F89 :104DE0000FD1227F042A08D15A6B0AB99B6B43B1B9 :104DF0000120BDE83840FFF7C9BB082A01D10220D5 :104E0000F7E738BD002C014060080020F0B50268CB :104E10005D4B87B09A4275D15C485D4CFCF744FC11 :104E20005C48FCF73FFB2378022B71D100255A4BDD :104E30000195029503955A88DE885889B6B2D989BA :104E400092B280B23244019F89B202440A443A4489 :104E500001921A89029992B20A4402929A8903999C :104E600092B20A4403925A8ADE8A588B92B2D98B44 :104E7000B6B280B23244019F89B202440A443A4435 :104E800001921A8B029992B20A4402929B8B039A66 :104E90009BB213440393019B404804330193019B4D :104EA000DB080193029B01330293029B5B08029390 :104EB000039B01330393039B5B080393039905F062 :104EC0000DFF374A1378013BDBB2137013B9062389 :104ED00001251370334890F8E933ABB1019900F51F :104EE000357002F09FFA4FF4F562294606F09EF9FC :104EF0004FF08043586302992B4889B201F081FF3B :104F00000023237007B0F0BD4FF080435D63F2E7EC :104F10002378012BF4D100231F4A049305931388AF :104F200004999BB20B440493938805999BB20B445C :104F30000593138A04999BB20B440493938A059AB0 :104F40009BB213440593049B01330493049B5B08B9 :104F50000493059B01330593059B5B0805934FF074 :104F600080435B6B23B10499104889B205F00AFFB6 :104F70004FF080439B6B002BC2D005990C4889B23F :104F800005F000FFBCE700BF002401403C0D0020FD :104F9000400B00206C0D0020A0030020D40700204F :104FA00008000020C003002060080020A0070020A7 :104FB0006C0900207047000008B5034801F01DFE91 :104FC0000122024B5A6108BD18080020000401406C :104FD0002DE9F04F00247C4D7C4E87B02846FFF72A :104FE00055FB29463046FFF7AFFC794BC6E909442B :104FF0003360B48586F82E403486764E2946304696 :10500000FFF7A2FC744BC6E909443360082386F815 :105010002C30346386F82C304FF0FA733364052358 :10502000C6E90E443463B48686F844306B4E294694 :105030003046FFF789FC6A4B4FF0030B33604FF4A7 :105040007A7386F82440F4843385664E29463046C8 :10505000FFF77AFC644BB484336086F82640634ED5 :1050600029463046FFF770FCDFF88491614B2946F2 :105070003360B46486F84CB04846FFF765FC5E4B7D :105080005E4EC9F80030FF232946304689F82430A7 :10509000FFF75AFC5A4B5B4F33604FF44033B36415 :1050A0004FF41673294686F82440A6F84640A6F821 :1050B0004C303846FFF748FC534BDFF850A13B60BB :1050C000534B3246294687F82440FC853C637B637A :1050D00050483B4604F010FD29465046FFF734FC8B :1050E0004D4A4E4ECAF800204FF4803229463046D1 :1050F000DFF82C81CAE90924FFF726FC494A294632 :1051000032604046FFF720FC474A08F12C06C8F8F9 :105110000020464A88F8244007CA86E80700444E23 :1051200029463046A8F82640A8F82840FFF70CFC8E :10513000404A534632603A463F4FA6F830B02946BF :10514000C6E90944B48586F82E403C48009605F02F :1051500091F929463846FFF7F7FB394ADFF8E4B002 :105160003A6001223A87384A2946BA64C7E90B44B3 :10517000C7E90F447C623C857C637C645846FFF73A :10518000E3FB324F32493846CBF800102946FFF78F :10519000DBFB3049294B39602F49BC84B96240F2AE :1051A000CF7187F82640B9854246CDE9026329468A :1051B000CDE9009A174BCDF810B0284804F05EFCFA :1051C00007B0BDE8F08F00BFC00300206C030020D3 :1051D000A4DB0008E40C0020BCDB00080C0C002061 :1051E0008CDB00086C0A0020ACDC0008C40A00203C :1051F000180B002034DC00084CDC00086C02002096 :10520000C4DC000834030020D4DB00081C0A0020A2 :105210000400DC05BC0200207CDC0008F80900204A :10522000FC020020ECDB000804DC000820D40008AD :105230008C0B002064DC0008C00B0020440B002015 :1052400024DD0008480A00200000B80B940A002062 :1052500094DC0008DCDC00082C015802380C00202B :1052600006F07CBC022310B51A46044678210F488C :10527000FDF766F90E490F4A0F4B002808BF0A4692 :105280000E49204606F0E0F94023A4F82A322023F4 :105290002046A4F82C3207F0BAF9204606F0BFF9F0 :1052A0002046BDE81040002107F0B9B9E00D00200C :1052B00059AA0008C1A9000889A90008A4E10008AA :1052C00010B5072204468E3007F098FC002384F8BE :1052D000953010BD0149FFF7F3BF00BF60D500084E :1052E0000149FFF7EDBF00BF02D600080149FFF7F3 :1052F000E7BF00BF64D500080149FFF7E1BF00BF69 :1053000069D500080149FFF7DBBF00BF6FD5000872 :105310000149FFF7D5BF00BF74D500080149FFF769 :10532000CFBF00BF79D500080A468E30014907F08B :105330002BBC00BF7FD5000810B50922044696306B :1053400007F05CFC002384F89F3010BD0A4625233B :105350000149963007F018BC83D5000813B50A4BF5 :1053600001F0030103EB4113019310230446009362 :1053700018220223002105F0F4FF204602B0BDE808 :10538000104006F066B800BF32D700082DE9F04F94 :105390008DB09846BDF86430154605939DF8683089 :1053A00040F2E73206939DF86C300446084600212F :1053B00007939DF860A005F039FF40F2E73281467F :1053C0000021284605F032FF6422074600219DF89F :1053D000580005F02BFF9DF85C30BFB2002B14BFC6 :1053E00043224622954BB845C6B21A701FFA89F976 :1053F00080F2FA80A7EB0803142B40F3F5805623C4 :105400004A4600933846002308F1140105F0E0FEF7 :10541000C5B2752D28BF75251E220A21304605F01C :10542000E7FE0646204606F00AF82046844906F0C4 :10543000CFFB4A46834909A807F0A6FB824B4FF0F1 :105440000F0B0193012300211A462046CDF800B02E :1054500005F087FF09A9204606F0CAFB5946814698 :105460000C22204609ABFFF7FBFE05230093012326 :10547000DFF8D8B109F110011A462046C9B2CDF8BB :1054800004B005F06EFF09F118010C226B4B2046A9 :10549000C9B204F18E09FFF7E3FE4946204606F043 :1054A000A7FBC0F17B00C1B24B460C222046FFF7A0 :1054B000D7FE40220C21204604F19603FFF7D0FED0 :1054C000BAF1000F09D1624B3722019309235146EB :1054D00000932046012305F044FF7EB1C6F12D0361 :1054E000C6F387061BB2C6F17A06CDE900360293F1 :1054F0007B232D221946204606F036FE059B002B05 :1055000074D01A464F4909A807F03EFB09A9204666 :1055100006F06EFBC0F16C0106464022204609AB46 :10552000C9B2FFF79DFE0F23C6F1640100933B2231 :1055300002232046C9B206F02FF8052601233422A3 :105540006C212046CDF804B0009605F00AFF3B4BD5 :10555000402274212046FFF783FE3A46394909A8C4 :1055600007F012FB20463B4906F032FB09A9204612 :1055700006F03EFBC0F1810101EBD1712A222046E9 :1055800009ABC1F34701FFF76BFE762333223146A7 :10559000204606F0A7FB06232F225B21204606F0BB :1055A000A8FB032D0ED90323302231462046009359 :1055B0002B4605F0FBFE6B1E2F2231462046DBB248 :1055C00006F090FB079B43B3234B1C220193092356 :1055D000002100930223204605F0C3FE204605F07B :1055E00038FF0DB0BDE8F08F002515E708F109037D :1055F0009BB26C2BA1D84246184909A807F0C4FAFF :1056000009A9204606F0F4FAC0F16C0140222046B8 :1056100009ABC9B2FFF724FE8FE7069B002BDDD054 :105620000F4A013B03F0030302EB431301931023E2 :105630001822009307990223CDE700BF1200002033 :105640005CDD0008B3D5000852D60008C4D70008B6 :1056500061D60008DCD7000840D600087FD50008D6 :1056600032D700082DE9F34104461F460E46154681 :1056700005F0E5FE2046584906F0AAFA574B002FE0 :1056800072D053F826802046414606F0B1FAB4F8AD :105690002A62B4F82C22A6EB5000103A4346C1B25D :1056A000D2B22046FFF7DCFD3A464D49684607F086 :1056B0006BFA6946204606F09BFAB4F82C22B4F83F :1056C0002A121F32A1EB50016B46D2B22046C9B25A :1056D000FFF7C6FD2046434906F07AFA2A464049BC :1056E000684607F051FA6946204606F081FAB4F898 :1056F0002C22B4F82A120F32A1EB500105466B465A :105700002046D2B2C9B2FFF7ABFD3E26204605F0D7 :10571000A0FE94F92E32C5F34705002BB4F82A32C7 :1057200052DD2B447F2B02DDFF2384F82E3294F9C7 :105730002F22B4F82C32002A4FEA560648DD1E44C8 :105740003F2E02DDFF2284F82F22B4F82A1294F9AA :105750002E220A44A4F82A2294F92F221344A4F8F2 :105760002C3202B0BDE8F08153F82670204639464D :1057700006F03EFAB4F82A62B4F82C22A6EB5000E8 :105780000A3A3B46D2B2C1B22046FFF769FD204635 :10579000144906F01DFA2A461149684607F0F4F943 :1057A0006946204606F024FAB4F82C22B4F82A12EE :1057B0001732A1EB500105466B462046D2B2C9B262 :1057C000FFF74EFD2E26A1E7AB42B0DC0123ACE78C :1057D000B342BADC0122B6E75CDD0008CCD7000892 :1057E000B3D50008DCD700082DE9F04F1D460E4662 :1057F0008BB09146044625232A46724906A807F035 :10580000C3F93246704908A807F0BEF94323204681 :105810006E49ADF8143006F0DBF906A9204606F013 :10582000E7F9461DF6B2C6F1760300930023642221 :105830001946284605F0CCFC14220A215FFA80F8AC :10584000284605F0D5FC40F6FF72914507464846CC :1058500028BF1046B9F5006F00F2AD801423009305 :1058600000234FF40062194605F0B2FC4FF0700AB5 :10587000142340F6FF7240F60101C5B2CDF800A036 :105880004FF4616005F0A4FC8146204605F0D7FD89 :105890004F49204606F0ACF9C0F1800101EBD1710F :1058A0000F224B4B2046C1F3470104F18E0BFFF74B :1058B000D7FC5946204606F09BF9C0F17B00C1B2E7 :1058C0005B460C222046C7F12307FFF7C9FC3FB215 :1058D00008F10503CDE90137232705213A46204683 :1058E000009706F041FCC6F180013A46204606AB1F :1058F000C9B2FFF7B5FC374B282201930A230021D8 :1059000020460093012305F02CFD334B2A220193FE :105910000623782120460093012305F022FD5346FB :105920002A220821204606F0DDF953462F220821BD :10593000204606F0D7F909F1080104232F2220465A :10594000C9B206F0D6F92B462C220821204606F0D3 :10595000C9F9012D0CD92B462B220821204606F02F :10596000C1F96B1E2D2208212046DBB206F0BAF9E0 :1059700008A9204606F03CF9184B0546019305237B :105980002046009334220123702105F0EAFCC5F182 :105990007001204608AB4022C9B2FFF761FC4022EB :1059A0007821204605ABFFF75BFC204605F051FD52 :1059B0000BB0BDE8F08F702340F601010093142373 :1059C00052E700BF87D50008B3D500085CDD0008AA :1059D0008DD500086AD6000874D60008C4D7000820 :1059E0000023A0F82832C0F8C83070470B7880F840 :1059F000E5304B7880F8E630002380F8E7307047D8 :105A0000022970B504460D4616460FD8FBF738FB41 :105A1000074B00F57A70C4F8C800324653F82510D9 :105A200004F1CC00BDE8704007F0AEB870BD00BF17 :105A3000B8D70008F8B50546174608464FF4FA727D :105A40000E4995F8284205F0F1FB40F2E732064690 :105A50000021384605F0EAFB05EB4403A3F8E860B3 :105A6000A3F88801631CDBB24F2B82BF012385F8AA :105A70002932002385F82832F8BD00BF0CFEFFFF55 :105A80002DE9F04F0446B3B008466322002105F02B :105A9000CDFB94F829520390002D40F0A98094F892 :105AA0002872002247F6FF769F4B04F1E601D0B240 :105AB000874200F29F80002EBCBF764236B29E42E3 :105AC000B8BF1E46002347F6FF7A994604F5C37215 :105AD000D9B28F4200F2988035B194F8285201353E :105AE000EDB2502D28BF00254FF0000B28230DF1FB :105AF00028085FFA8BF2974200F29080B6F57A7F21 :105B0000C0F2D48000238DF8183025239DF80C2096 :105B1000864908A807F038F8D4F8C850002D40F09E :105B2000CB8000230126C4F8C830B9F57A7F80F015 :105B3000CA804A467E4905A807F026F84FF00108BA :105B40007C49204606F044F8204605F078FC5E23A8 :105B500014221A21204606F0C5F8774B1222019331 :105B600005236F2120460093012305F0FAFB0F2245 :105B700076212046714BFFF773FB0125013FBD42A3 :105B8000C0F2A4809DF818302BB10F2200212046CE :105B900006ABFFF765FB28220021204608ABFFF784 :105BA0005FFB002E00F0BA8094F8E5306BB104F191 :105BB000E5052946204606F01BF8C0F17E00C1B27B :105BC0002B463C222046FFF74BFB0125AF4200F35A :105BD0009180B8F1000F05D03C22002105AB204692 :105BE000FFF73EFB204605F034FC33B0BDE8F08FF4 :105BF000502756E731F9020F01328642A8BF064608 :105C00008342B8BF034652E732F8021F01338A4588 :105C100028BF8A46894538BF894659E7002E40D0BB :105C200005F1740234F91220002A0BDD5A4392FB6D :105C3000F6F2C2F1140252B2002AD8BF012288F84B :105C400000200AE0524212B25A4392FBF6F214329A :105C500052B2282AF3DD88F80030D14524D905F165 :105C6000C40234F81200A9EB0A02A0EB0A00C0EB50 :105C7000001090FBF2F000210F2200B205F0D6FADE :105C80002823C0F13F0040B20135EDB21EAA502DCD :105C90000BF8020008BF00250BF1010B08F1010809 :105CA00027E74FF01402CAE73F20EDE732462449C8 :105CB00006A806F069FF28E7FBF7E2F985427FF6C0 :105CC00030AF002631E74FF0000839E705F1C80290 :105CD0006A4412F8A00C05F11B03009005F11A01AB :105CE000204612F8A12CDBB2C9B2013506F047F804 :105CF000EDB244E705F1C8026A4412F8500C05F110 :105D00001B03009005F11A01204612F8512CDBB25A :105D1000C9B2013506F033F8EDB257E73E223146FD :105D200004F1CC035BE700BF0180FFFF92D50008C0 :105D3000B3D500085CDD0008B2D700089EDA000881 :105D40007FD500082DE9F047044686B00F46254967 :105D5000904605F03DFF204605F071FB22492046A4 :105D600005F046FF0646C0F1800505EBD575C5F385 :105D7000470529460D2220461B4BFFF771FA334693 :105D800029460F22204605F0ADFF1C250026DFF82E :105D90005C90DFF85CA037F8162059F8041B03A8C4 :105DA00006F0F2FE03AB2A4614212046FFF758FA0C :105DB000F3B298450BD10723A5F108020093002107 :105DC00001232046CDF804A0D2B205F0CAFA01366C :105DD0000D35032EEDB2DED1204605F03AFB06B0BC :105DE000BDE8F0875CDD000898D50008B8D700084A :105DF00029D600082DE9F04F8FB098469DF8643001 :105E0000DFF8B8A1002B14BF4323462304460F46F6 :105E10000AA86B498AF800309DF870B09DF86C9024 :105E200006F0B2FE2D220A219DF8680005F0E0F987 :105E300064490546204605F0CBFE204605F0FFFAF2 :105E40006149204605F0D4FE39460646204605F055 :105E5000CFFE81190531C9B2C1F1800101EBD171C9 :105E600041F3470121EAE171C9B20D222046564BA8 :105E70000591FFF7F5F90599053631443B460D22AA :105E80002046C9B2FFF7ECF976230F220521204600 :105E900005F028FF0AA9204605F0AAFE0AAB212238 :105EA00005212046FFF7DCF94246484907A806F0DD :105EB0006BFE474B2A2201930F23052120460093B6 :105EC000012305F04EFA07A9204605F091FE39227C :105ED00006461021204607ABFFF7C2F93D4B06F1FD :105EE0001101019305232D2220460093C9B20123FD :105EF00005F037FA06F11901534639222046C9B296 :105F0000FFF7AEF9BBF1000F15D0334B32220193EE :105F10000723462120460093012305F022FABDF80D :105F200060202A4907A806F02FFE3922502120467A :105F300007ABFFF795F955B9B9F1000F1CD0274908 :105F4000204605F055FE254BC0F17B011BE0C5F155 :105F50003F03C5F387021BB2C2F17A02CDE90032DA :105F600002937B233F221946204606F0FDF81B2DA5 :105F7000E2D9B9F1000F0BD11949204605F038FEDE :105F8000174BC0F17B0121222046C9B2FFF768F907 :105F9000642200219DF8740005F048F9C3B2012B7A :105FA00006D902220E21009220463E2205F0FEF97B :105FB000204605F04EFA0FB0BDE8F08F1400002027 :105FC000A1D500085CDD0008A9D50008B3D50008FC :105FD00052D60008C4D7000829D6000802D6000807 :105FE00060D500082DE9F04F89B01E469DF84C3071 :105FF0008946002B14BF43214621874B9DF85070E2 :1060000019700546854904A8BDF848409DF854A07C :106010009DF858B006F0B8FD0A2F09D92D23A7F135 :106020000A0000935A220A23002105F0D1F8C7B2D2 :10603000A642C0F0B880301B48BF07301E220021A6 :10604000C01005F0F3F800F142047549284605F048 :10605000BFFD284605F0F3F97249284605F0C8FD52 :1060600049468046284605F0C3FD00EB0806053684 :10607000F6B2C6F1800606EBD67646F3470626EA68 :10608000E676F6B231460D222846664B08F1050841 :10609000FFF7E6F806EB08014B460D222846C9B289 :1060A000FFF7DEF876230F220521284605F01AFEB9 :1060B0002122052104AB284605F050FD5A4B064627 :1060C00001930523411D152228460093C9B20123DF :1060D00005F047F906F10D01212228464E4BC9B2C1 :1060E000A4B2FFF7BDF8BBF1000F0BD04F49284613 :1060F00005F07EFDC0F17B01212228464B4BC9B241 :10610000FFF7AEF84A4B2D2201930A2300212846BF :106110000093012305F025F9464B2F220193062316 :10612000682128460093012305F01BF960232F22E4 :106130000821284605F0D6FD602334220821284690 :1061400005F0D0FD042334224221284605F0D1FD7C :1061500004232B224221284605F0CBFD0A2C16D918 :10616000E4B2A4F10906F6B23346312208212846EA :1061700005F0B8FD0A3C334630220821284605F0D8 :10618000B1FD322208212846E3B205F0ABFDF7B994 :10619000BAF1000F2ED02849284605F029FD264BDC :1061A000C0F17B012DE0A41B48BF0734C4F3CF042A :1061B0001E2C02D8C4F1420447E71E3CC4F3CC00B5 :1061C0001C22002105F032F8C0F124043DE7BB0891 :1061D000C7F13F02C3F17A03CDE900237B2302928A :1061E00019463F22284605F0BFFF1B2FD0D9BAF130 :1061F000000F0BD11149284605F0FAFC0F4BC0F1F6 :106200007B0121222846C9B2FFF72AF8284605F06B :1062100020F909B0BDE8F08F10000020AED50008CD :106220005CDD0008A9D50008C4D70008B7D5000870 :106230006AD6000874D6000802D6000860D50008A7 :106240002DE9F74F04468A463F491E4615469DF8FC :1062500034709DF830B005F0BBFC204605F0EFF837 :106260005146204605F0C4FC8146C0F1800808EB89 :10627000D878C8F34708414653460D222046FEF71A :10628000EFFF4B4641460F22204605F02BFD06EB63 :10629000460306EB8306002F06F114065FFA86F923 :1062A0000CBF4FF000084FF00F081426DFF89CA039 :1062B00002354E4505D1204603B0BDE8F04F05F04C :1062C000C8B82B78002B3AD015F8023C5B4509D1B1 :1062D0001F4B32460193072341460093204601237A :1062E00005F03FF806F108022B4618212046D2B2ED :1062F000FEF7B6FF15F8013C9B070AD4154B721E3A :10630000019309236421009320460123D2B205F0B2 :1063100028F8A7B915F8013C0C2113F0010F4FF034 :10632000080308BF0C4A009308BF01924FF0010315 :106330003246204618BFCDF804A005F012F80D36FD :10634000F6B20C35B5E700BF5CDD000830D60008BA :1063500029D6000861D6000838D600082DE9F04794 :1063600006468A46374990461F469DF8209005F01C :106370002FFC304605F063F85146304605F038FCF6 :106380000546C0F1800404EBD474C4F347042146ED :1063900053460D223046FEF763FF2B460F2221465F :1063A000304605F09FFC4146304605F021FC394659 :1063B0000546304605F01CFC0446CFB33B78BBB322 :1063C00043462D220A213046FEF74AFFB9F1000F5D :1063D00014D12544662D0CDC3B462D22C4F17101FD :1063E000C9B23046FEF73CFF3046BDE8F04705F045 :1063F00030B83B46C4F180013C22F1E7C4F180058E :1064000005EBD575C5F347053B463C22294630468A :10641000FEF726FFA5F10A010B4BC9B23C2230461C :10642000FEF71EFF04F180014910084B0231E3E73B :10643000C5F1800505EBD57543462D22C5F347010F :10644000CFE700BF5CDD0008BAD50008BCD5000866 :106450002DE9F74F044604F0F2FF94F8A0308BBB0F :1064600017253E4B3E4E14220A21204601930095EB :10647000022304F076FF032314221C212046CDE9D9 :10648000005604F06EFF0323142230212046CDE98C :10649000005604F066FF334B142244212046CDE918 :1064A0000053032304F05DFF032314225E212046E2 :1064B000CDE9005604F055FF204603B0BDE8F04F8B :1064C00004F0C7BF2046284905F082FB04F1A00074 :1064D000F9F73EFE00234FF00D0A98464FF00A09E7 :1064E000C6B2B342E8D29A1CD2B25D1C9F32EDB262 :1064F00022442F460135EDB2AE4226D8A03304EB3C :10650000030B5946204605F073FB03065FBFC0F13D :106510008000C0F347015B46524642BF5B4652468D :1065200000212046FEF79CFEBAF1340FC4D0AE42E3 :1065300088BF2D1907F102070AF10D0A88BF85F8F7 :10654000A090FBB25FFA8AFACBE712F8011F0A2982 :10655000CFD1621982F8A080D0E700BF7AD60008B8 :10656000EDD60008A8D600085CDD00080B781BB14A :106570002822A03006F042BB80F8A030704700000F :106580002DE9F04104460E4686B0264915461F46C1 :1065900005F01EFB204604F052FF4EB1224B0022B4 :1065A00001931023114600932046022304F0D9FEE4 :1065B0002A460F251D4902A806F0E6FA1E220021F0 :1065C000204602ABFEF74CFE0D9EDFF86080023ED7 :1065D000414636F8022F02A806F0D6FA2A460F35B1 :1065E0003C21204602ABEDB2FEF73AFE4B2DEFD137 :1065F0009DF83030002F14BF69222022002B14BFD9 :10660000672320230A4902A806F0BEFA3A22052190 :10661000204602ABFEF724FE204604F01AFF06B027 :10662000BDE8F0815CDD000832D7000825D60008FF :10663000BED50008F0B5044689B02E492E4F05F0AE :10664000C7FA204604F0FBFE3946204605F0D0FA92 :106650000646C0F1800505EBD575C5F347053B46F9 :10666000294620460D22FEF7FBFD33460F22294620 :10667000204605F037FB6846204906F00FFB6946C7 :10668000204605F0B5FAC0F1800101EBD1716B46EF :1066900020461E22C1F34701FEF7E2FD184A684674 :1066A000184906F071FA6946204605F0A1FAC0F1D2 :1066B000800101EBD1716B462D222046C1F34701C9 :1066C000FEF7CEFD6846104906F0E8FA6946204616 :1066D00005F08EFAC0F1800101EBD1716B463D22CD :1066E0002046C1F34701FEF7BBFD204604F0B1FE92 :1066F00009B0F0BD5CDD0008C6D50008CCD50008A7 :10670000DFD50008E4D50008F4D500081020704754 :1067100008B502462023FFF7F9FFB3FBF0F3508ED4 :10672000584380B208BD30B5438D04468B420D46B8 :1067300085B018D0838D8B4202D8002005B030BDC3 :1067400020234A01C18D64204900CDE9013004F1C4 :106750000A0300932068102392B289B2FBF7B2FDBE :106760000028EAD165850120E8E730B5838D04462D :106770008B420D4685B01BD943854A012023C18D2C :1067800064204900CDE9013004F10A030093206838 :10679000102392B289B2FBF705FD30B9142065854C :1067A000FAF774FC012005B030BD1420FAF76EFC36 :1067B0000020F8E7002388888B80752370B54C1E75 :1067C00001F11F0514F8016F06EB4303A5429BB2CC :1067D000F8D1C41A6042604102B18B8070BD2DE9CE :1067E000F84F0223C18D044649001A46006889B259 :1067F000FBF7A6FE0546002015B12071BDE8F88F15 :1068000001232E46AA46A8464FF0FF39237104F112 :106810000A0B238EAFB2BB4217D939462046FFF789 :1068200082FF88B1002259462046FFF7C3FF60B1BE :10683000D4F80A304B453CBFB8469946534501D978 :106840003E469A460135E4E72071207917B9E78082 :106850002781D3E7238EE680BB4207D90136B6B243 :10686000B34296BF002326812381C7E7A4F808809E :10687000C4E72DE9FF4100F10A0604462022FF216A :10688000304606F0A1F9002564274FF02008238E3A :10689000AB420CDDE18D6A0149001023CDE901878F :1068A000206892B289B20096FBF77CFC28B12046A2 :1068B00004B0BDE8F041FFF792BF0A20FAF7E6FB0B :1068C0000135E4E770B50D46C1880446FFF72BFF9C :1068D000064610B90026304670BD0022204604F15D :1068E0000A01FFF767FF0028F4D00B4629462A3437 :1068F00053F8042BA34241F8042BF9D1EBE738B548 :10690000037904460BB9002038BD0B68012201331E :106910000B60FFF74FFF04F10A0301F1200251F869 :10692000040B914243F8040BF9D120462189FFF76B :106930001CFF0028E7D02389228EE38001339BB21D :106940009A4223819CBF00232381DDE708884B887E :1069500030B503EB4003888801F10D0400EB4300E0 :10696000CB8803EB4003087A00EB430091F90E302B :1069700003EB400301F1080010F8015F844205EBCE :106980004303F9D1C87B7533DCB2041B604260411C :1069900002B1CB7330BD2DE9F84305464FF0200816 :1069A000FFF7B4FEB8FBF0F817466B8E0E4608FBF7 :1069B00003F2974204461FDCB7FBF8F9A98D28467D :1069C000C91A494489B2FFF7AEFEB8B108FB19777E :1069D0007C43E1B20A31002228462944FFF7B6FF82 :1069E00070B101F1100351F8042B994246F8042BC1 :1069F000F9D10020BDE8F8830320FBE70120F9E787 :106A00000220F7E72DE9F04705464FF02009FFF790 :106A10007DFEB9FBF0F990466B8E0F4609FB03F241 :106A20009045044627DCB8FBF9FAAE8D2846F61AE5 :106A30005644B6B23146FFF776FEF0B109FB1A882C :106A400008FB04F4E4B20A3429190B4607F11002DA :106A500057F8040B974243F8040BF9D1012228465A :106A6000FFF774FF31462846FFF77FFE80F00100F4 :106A7000C0B2BDE8F0870320FBE70120F9E7000082 :106A800070B500250826C0E90C13BDF8103006705B :106A900083874560104B067043F2642683600123B0 :106AA000DFF838C0C6870E4E4560C0E9095545611C :106AB000C0E910C685618581858385738577C57733 :106AC000456180F820508583C562856105874287CE :106AD000C3738577037470BD0180FE7F0414DC05E9 :106AE0002C01C40900230287B0F84620436282814A :106AF00090F84020C16202704360704738B5044688 :106B0000FAF7BEFAA36A984201D2002038BDFAF71C :106B1000B7FA94F84130218F0344A362E06AFBF78F :106B200091F8C0B994F83E104900C9B294F82030E9 :106B3000204693B104F0DFF894F83F30984221DA10 :106B4000002384F82030636A0BB1E57F55B3002041 :106B50006062E077DAE70021E8E704F0CCF894F827 :106B60003E3098420EDD012384F82030FAF788FA8F :106B7000636A1BB1C01AA389834208D2FAF780FA6C :106B80006062C2E794F82030002BDCD0EEE7B4F866 :106B900042308342B9D2E37F002BB6D101230220D9 :106BA000E377B3E7FAF76CFA636A6562C31AA08900 :106BB000984294BF00200120A8E7B0F908308B422A :106BC00006DCB0F90A308B4202DB8183012070477A :106BD0000020704738B50446438102819DF810506B :106BE000FFF7EBFF9DF81430E5739D4238BF1D465B :106BF0009DF818302574A37338BD70B5418F0446D5 :106C0000006BFBF71FF80646FAF73AFA012E054625 :106C100063690FD023B16369A289C31A934208D96B :106C2000A18F606B6561FBF70DF8431E5842584118 :106C3000A07770BD002BFCD0A18F606BA67FFBF707 :106C400001F8B0FA80F0F6B24009B0421FD1626993 :106C5000A189AA1A8A42E37B19D2A269B4F8441026 :106C6000AA1A8A42A56138BF237CA27F9BB28AB14F :106C7000A28BD31A1BB2A383A28BB4F90A3012B22F :106C80009A420ADDA27B0AB1B4F90830A38300233B :106C90006361CEE7A28B1344ECE7A28BB4F9081032 :106CA00012B28A42F3DAA27B002A08BF0B46EDE754 :106CB00090F82D01023801288CBF00200120704778 :106CC000B0F832017047B0F8640180B2704790F8B4 :106CD0006601704708B503681B6A984780B208BD13 :106CE000704790F82D3113B5032B04460FD1642360 :106CF00000930023194690F8662190F82E0104F0C5 :106D000067FAC0B2642828BF642002B010BD00F545 :106D10009E7003F0FCFF64230093002394F8672126 :106D20001946ECE708B500F5A67003F0F0FF80B255 :106D300008BD08B500F5AA7003F0E9FF80B208BDF0 :106D400010B5044600F5A27003F0E1FFB4F870310D :106D50009842ACBF0020012010BD0000054B10B5CB :106D60001A8804460846002104F060FAA4F83201AB :106D700010BD00BF56DD000810B504464FF4C671C3 :106D800005F088FC204610BD10B5044601224FF4E2 :106D900000410448FAF75CFF94F8843184F82C3100 :106DA00010BD00BF0008014070B5044621B9BDE820 :106DB000704003681B69184790F8675103238D42A0 :106DC00028BF0D4680F82D31FFF7DEFF84F82E51E5 :106DD00070BD08B54FF0804340F2CF720021986B30 :106DE00004F024FA80B208BD10B5044600F5A27084 :106DF00003F08DFF94F82D31002B08BF002080B2E6 :106E000010BD38B590F8153104460D465BB100F55C :106E1000A27003F070FF411B494304F5AA70BDE85E :106E2000384003F05BBF38BD642307B500930023EF :106E3000B0F86A211946B0F8340104F0C9F980B2FB :106E4000642828BF6420C0B203B05DF804FB0000D2 :106E500038B505460C4619B1BDE83840FFF794BF78 :106E60000A4604484FF40041FAF7F2FE85F82C4137 :106E700038BD00BF0008014030B50025044690F839 :106E8000813185B090F88211A0F8345180F82D51ED :106E9000A0F82E51029390F88031CDE90013B0F89C :106EA0007E31B0F87C2104F0D8F929462046FFF75E :106EB000CFFF0E4BC4F840511B78C4F8485184F8FA :106EC0004C31C4F8505184F85431C4F8585104344A :106ED00020462B460D224FF47A7103F00CFE294612 :106EE000204605B0BDE8304003F013BE4EDD00087B :106EF00000214FF0804310B580F82D1199630446AE :106F0000FFF7A6FF012384F8303110BD73B50446A6 :106F100000F5A27003F0FBFE83B21D46A4F86431B5 :106F2000714B06461B886333AB4294F82D3105DB69 :106F3000B4F8322102F5C872AA4213DA022B11D139 :106F4000012384F82F31694BB4F834211B689A630C :106F500094F82F31E3B1B4F83231023BAB4211DC8B :106F6000002552E0013B042BFAD801A252F823F08D :106F7000476F0008476F0008ED6F00084F7000086A :106F8000D97000080021201D84F82F1103F0C1FDE5 :106F900094F82D31012B0AD1B4F832311333AB42BE :106FA000BFBF022384F82D31D4F88831E36094F810 :106FB0002C3103F0FF0563B194F82C31013BDBB2B7 :106FC00084F82C3194F82C3103F0070384F82C3129 :106FD000C6E7B4F9321132B2201D03F0B7FD2946DD :106FE00094F8672104F022F905460EE094F82C315C :106FF00053B3002594F82C31013BDBB284F82C31DB :107000003A4BB4F834211B689A632046FFF7E1FE3F :10701000B4F86831834265D894F81531002B08BF65 :10702000002504F59E762946304603F057FE294692 :10703000304603F060FE411B494304F5A67003F09F :107040004DFEA8B202B070BD94F82E51D8E720468C :10705000FFF7BFFEB4F86821904203D22046FFF745 :1070600047FF7DE794F815319BB1B4F86431B4F86B :1070700070119BB28B4219D294F830314BB9012375 :1070800084F83031F9F7FCFFD4F878310344C4F8C0 :107090003831D4F83831002B3FF462AFF9F7F0FF04 :1070A000D4F838319842FFF45BAFD7E7B4F8640105 :1070B000B4F86C31009280B2B4F8322104F088F850 :1070C000B4F86A21B4F8681180B204F0AFF8074B45 :1070D00080B21B689863DCE7294604F1280003F0BE :1070E00069FD81E700259CE756DD0008D40E0020ED :1070F00038B50023C0F8383190F82D3104460D46DC :10710000052B0ED8DFE803F0032929384F29FFF7B4 :1071100060FE60B92DB12046FFF736FE012384F8EA :107120002D310023C4F84031C4F8503138BD94F8F3 :10713000153145B383B32046FFF726FE04F5A27050 :1071400003F0E5FDB4F8323182B2934203D9104620 :10715000C8309842E2DB0223E1E70029E1D10423B1 :1071600084F82D31F9F78CFFD4F8743184F830515C :107170000344C4F83831D4E7FFF72BFE80B1002D6B :10718000E9D194F81531002BCBD0B4F86431B4F8C0 :1071900070219BB29A42E2D92046FFF7A9FEC0E7D0 :1071A000002DBED1F8E7FFF714FE0028B2D094F806 :1071B0001531002DBED1002BEED0B4F86431B4F8F7 :1071C00070219BB29A42ACD9F9F75AFFD4F87831C2 :1071D0000344C4F83831012384F83031A1E790F832 :1071E0003201431E584258417047B0F82C01704795 :1071F000B0F86A01704790F83201B0FA80F04009A7 :1072000070470023A0F83011C0F84C31C0F85C3151 :1072100019B9032380F8323170470223FAE7704727 :1072200010B5044679B990F83231A0F8301113B195 :10723000032384F832310023C4F84C31A4F82E31F2 :10724000C4F85C3110BD0021043003F062FC01235E :10725000EFE7000090F8323170B5012B05460E467D :1072600003D10021043003F054FC0A4B05F5A8704B :107270001C88B44228BF3446A5F82C4103F047FDD2 :10728000143480B28442ACBF0024012485F8334119 :1072900070BD00BF56DD000810B5044600F5A470AF :1072A00003F035FD94F83231022B14BF83B2B4F8E9 :1072B0003031B4F86801984228BF184610BD08B5AF :1072C00000F5AC7003F023FD80B208BD08B500F5F1 :1072D000B07003F01CFD80B208BD08B500F5A870C1 :1072E00003F015FD80B208BD37B5044600F5A47063 :1072F00003F00DFD94F83231B4F86851022B80B2DE :1073000004D1B4F83001B4F86A5103E094F8323192 :10731000042BF8D02A46002103F088FF6423009351 :1073200000232A46194680B203F052FFC0B203B0D0 :1073300030BD10B504464FF4C27105F0ABF92046DC :1073400010BD000030B50025044690F8783185B0B6 :1073500080F83251A0F8305180F83351029390F800 :1073600077310434019390F87A310093B0F8743196 :10737000B0F8722190F8761103F06FFF94F86D3138 :1073800084F8343194F86C31C4F8385184F83C31C5 :1073900094F86831C4F8405184F84431C4F8485135 :1073A00084F84C31C4F8505184F85431C4F8585121 :1073B00084F85C314FF08043C4F860519A6AD96A0E :1073C0000B4B013102FB01114FF47A721B6820460E :1073D000B3FBF2F3B1FBF3F10B22012389B203F00B :1073E0008AFB2946204605B0BDE8304003F091BB3A :1073F000EC01002010B5044600F5A87003F087FCEE :1074000094F83231002B08BF002080B210BD00007C :10741000034B1B888B4228BF0B46A0F82C317047CA :1074200056DD000870B5044600F59C7003F063FC5F :1074300083B2A4F83431B4F83411054689B204F5A6 :10744000A87003F058FCB4F83411064689B2411A0A :10745000494304F5B07003F041FC2E4B1B886333A5 :10746000AB4205DBB4F82C3103F5C873AB4206DA46 :1074700094F83231DAB2012B08BF84F8332194F842 :107480003231013B032B40D8DFE803F016360239D6 :10749000B4F86E310025B34201DD84F8325129463B :1074A00004F5A47003F027FC411B494304F5AC70BC :1074B00003F014FCA8B270BDB4F82E31B4F82C61FE :1074C000002B18BF1E4694F833314BB1B31EAB42AC :1074D0004FF000011BDD84F83311201D03F019FB70 :1074E0002AB231B2201D03F031FB0021B4F868212B :1074F00003F09CFE0546D2E7B4F83051CFE72946A9 :1075000004F1280003F056FBF4E70025C7E70D4619 :10751000C5E700BF56DD00080023C0F83C31C0F8C5 :107520004C31C0F85431C0F85C31C0F8643180F897 :107530003231704790F83231012BDAB20CD1B0F809 :107540002C318B4208D9002380F83321A0F82E116A :10755000C0F84C31C0F85C317047000000000000FA :10756000F8B590F81531044613B9334B1878F8BDC7 :1075700000F5A077384603F0CAFB304E304D336833 :10758000C01A0028B8BF4042132801DC2868EEE783 :10759000384603F0BCFBB4F880213060904239DA01 :1075A000F9F7D6FAF8F740FF02460B461CA1D1E9DD :1075B0000001F9F7BBF80022224BF8F7D5FDF9F7E7 :1075C000BDF901462048F9F7CBFB1F49F9F7C8FB85 :1075D00005F064F81D49F9F7C3FBF8F725FF12A37E :1075E000D3E90023F8F7C2FDF9F7A8F901464FF0F7 :1075F0007E50F9F7B5FBF8F717FF0DA3D3E9002389 :10760000F8F7B2FDF9F79AF905F0BAF8F9F7D0FCF6 :107610002860ACE7084B1878FAE700BFAFF30080AA :107620000000000000FEAF4083DBB5DCE1796B3F7A :1076300066666666661271404DDD0008380D0020F2 :10764000340D00200000F03F00401C4600E076456D :107650005E2070475D29DDBF024801EB81014018C3 :10766000002070471600002070B500230E46094D1B :107670000522294630461C4605F0AEFA38B15D2C8D :1076800004F1010305F10505F2D14FF0FF34204666 :1076900070BD00BF1600002010B5142494B022461F :1076A00000210CA805F090FA22460DEB0400002101 :1076B00005F08AFA0021102201A805F085FA0224BB :1076C00001224FF48033CDE90A23CDE911434FF471 :1076D000E0130AA80E921393FAF7E6FF0F234FF474 :1076E0008062CDE905340023214605A8CDE90732A3 :1076F0000993FBF79BF94FF4004301A8019403930E :10770000FBF750FA14B010BD2DE980480126002483 :107710004FF002099BB0CD4DF9F794FCFFF7BCFF89 :107720001022002112A805F04FFAAB69002243F0A5 :107730002003AB61AB694FF4406103F02003029377 :10774000029BAB69C24843F00403AB61AB694FF4E1 :10775000807803F004030393039BAB694FF4007A32 :1077600043F00803AB61AB69082703F008030493F7 :10777000049BFAF76DFA00224FF40441B548FAF77A :1077800067FAB54BB24812A9CDE912631496FAF71D :107790007FF9AF4812A9CDE912941496FAF778F957 :1077A0004FF44063AA4812A9CDE91236CDE9144935 :1077B000FAF76EF9A74812A9CDE912841494FAF7E2 :1077C00067F9A44812A9CDE912A41496FAF760F952 :1077D0004FF404439F4812A9CDE91236CDE914496C :1077E000FAF756F99A4812A9CDE912741494FAF7E7 :1077F0004FF9224621460620F9F7D4FF0620FAF772 :1078000001F86B69214633436B616B692246334053 :107810000B200193019BF9F7C5FF0B20F9F7F2FF4D :107820004FF482738D488E4A8E4DC0E900230A239F :10783000C0E906A74FF4602BC362C0E90244C0E967 :107840000444C0E908448462FBF7E8FAC5F80880FC :107850004FF00408844B28462B602E732C75C5F816 :107860001CB06C60C5F81080CDE912440B941494E0 :10787000F9F79AFD4FF4E0234FF0060A28460BA9CA :107880000B93F9F753FF284612A9CDE91296CDF8CC :1078900050A0F9F747FC0323284612A9CDE9123975 :1078A000F9F740FC05220323284612A9CDE912234B :1078B000F9F738FC12A928466C4DCDE912A8F9F762 :1078C00031FC6B4B28462B602E732E61AC602C75FF :1078D000C5F81CB06C60CDE912441494F9F764FD4E :1078E000284612A9CDE91286CDF850A0F9F71AFC66 :1078F00060486149614BC0E90244C0E900134FF49C :107900008043C0E90644C0E904340462FAF7A2FBEC :107910001022214607A805F057F91C2221460BA882 :10792000CDE9054405F050F92022214612A8544D16 :1079300005F04AF9534B4FF40059C5E9003463236D :107940002846C5E90334C5E90544AC60FBF7CAFC29 :1079500007A92846CDE90794CDE90944FBF7FBFDCB :107960002846FBF7EBFC2846FBF714FD284605A943 :10797000CDE90544FBF74EFF612360263A462846D1 :107980000BA9CDE90C34CDE90E44CDE910440B949C :10799000FBF758FD0C2228460BA9CDE90B64FBF739 :1079A00077FD12A92846CDE91649CDE91244CDE963 :1079B00014441994FBF75CFF284603F059FB10228E :1079C00021460BA805F000F91C22214612A8CDE99A :1079D000074405F0F9F84FF0804040F2CF232A4DDC :1079E0004FF48059C5E9000340F2CF732846C5E93A :1079F0000334AC60AC61FBF775FC0BA92846CDF8ED :107A00002C90FBF7A8FD2846FBF7C4FC2846FBF7A3 :107A100095FC284607A9CDE90744FBF7FBFE224663 :107A2000284612A9CDE9126414941694FBF730FD90 :107A30004246284612A9FBF72BFD3A46284612A9D2 :107A40001294FBF7FFFC40F2BC731FE000100240F1 :107A5000000C01400008014000003110340E0020ED :107A6000003800403C0D0020002401406C0D002037 :107A700000280140E00D002000540040801A06005C :107A80008C0E0020002C0140D40E00200C2212A9E4 :107A900028461393FBF7D6FC284603F0E9FA102298 :107AA00021460BA805F090F81C22214612A8CDE92A :107AB000074405F089F84723164D174F2846C5E9B6 :107AC00000734FF6FF73AC60C5E90334AC61FBF79C :107AD00009FC0BA92846CDF82C90FBF73CFD284665 :107AE000FBF758FC07A92846CDE90744FBF792FEAF :107AF0000C2212A92846CDE9126414941694FBF7BF :107B0000C7FC284603F0B4FAFCF7D8FFFDF7C8F825 :107B1000FCE700BF1C0F00200008004070477047C2 :107B2000704770477047704770477047704770479D :107B3000704770477047704770477047704770478D :107B400070471FB501230022044680681146CDE925 :107B50000133009300F58B600323FFF73BF8042308 :107B600084F82C300023636104B010BD1FB50123DD :107B70000022044680681146CDE90133009300F5E8 :107B80008B600423FFF726F8052384F830300023A8 :107B9000636104B010BD30B5002504460123052201 :107BA00080F82650806885B0CDE9003229462A4603 :107BB000B4F92830029500F58B60FFF70BF865618A :107BC00005B030BD1FB50446826892F8523002F508 :107BD0008B6084F84030B2F84C30A4F8423092F810 :107BE0004E3084F8443092F85330C3F3400184F8A7 :107BF000461003F0010184F84710C3F3800184F8B4 :107C00004810C3F3C00184F84910D909C3F3001325 :107C100084F84A1084F84B3092F84F3084F845309D :107C2000002384F84C3092F87C3000229B075CBF24 :107C300094F8A23084F84D30012394F84D10CDE92A :107C4000013300931323FEF7C5FF0023636104B0E3 :107C500010BD2DE9F04F846885B0D4F8D43204F516 :107C6000357800211B690546404698470023404669 :107C700084F83A3184F8323194F853B0FFF770FC4D :107C8000678F02B239462046FCF7B8FAD4F8D432EE :107C900001469B6904F1A406404698473046FDF72B :107CA00019FB2046FBF758FF0BF0010B014630464D :107CB000FDF742FB04F58B69B4F888A0B4F88A603C :107CC000BBF1000F09D10FFA8AF003F0B8FA1FFADE :107CD00080FA30B203F0B3FA86B294F953100FFA77 :107CE0008AF2002933B21FDA05200026B7FBF0F133 :107CF000CDE9010601EB81018FB2009009B248463F :107D0000FEF768FF002385F82E306B61AB62D4F874 :107D1000D43240469B682F86984780F0010085F852 :107D20002C0005B0BDE8F08F012100200091CDE9C5 :107D3000011039B2E3E72DE9F04F846887B094F879 :107D4000533004F5357803F00103054640460593AA :107D5000FFF706FC678F02B239462046FCF74EFA61 :107D6000059A0646B4F888B0B4F88A3004F1A4093C :107D700004F58B6A5AB90FFA8BF0059303F05FFA9A :107D8000059B1FFA80FB18B203F059FA83B294F9ED :107D900053100FFA8BF200291BB238DA05204FF08E :107DA000000CB7FBF0F1CDE9010C01EB81018FB2C2 :107DB000009009B25046FEF70DFF31460026D4F878 :107DC000D43240469B699847484684F83A6184F823 :107DD0003261FDF785FA2046FBF7BEFE01464846B4 :107DE000FDF7AAFA0121404695F84430AE8685F8A1 :107DF0002C30D4F8D4322E631B692E63EE632E61CF :107E0000A5F840706E6107B0BDE8F04F184701213A :107E100000200091CDE9011039B2CBE72DE9F04FF8 :107E20008568044689B005F58B60B5F87474FEF773 :107E300065FEE369804605F5357613B395F8531072 :107E40003046C1F3C00103F01EFA28B1D4F81C90EB :107E5000484609B0BDE8F08FA068012100F59460A4 :107E600003F011FA0028F1D1B8F1000F03D1E38C2F :107E7000BFB2BB4205D0A06800F5C660FCF7B6FDF6 :107E8000E4E7F9F7FDF86369A1469842E0D3F9F712 :107E9000F7F8238D034463613046FFF761FBD5F8A3 :107EA000D43207B2DB6930469847D5F8D4328046E1 :107EB0001B6A30469847414600233A4606902846BA :107EC000FCF78DF98046A068B5F84CB000F59460D9 :107ED000FEF78AFF064630B1014602233A4628469D :107EE000FCF77DF90646216905F1A40AD1B1079195 :107EF000F9F7C6F807991D4B091A994212D84FF4A1 :107F00007A73B1FBF3F15046C9B2FDF70DFA94F85C :107F100024303BB9A06800F22C60FBF704FD01237C :107F200084F82430A06800F5C660FCF76EFD30B11F :107F30003346424602215046FDF794FB88E7CDE9DF :107F40000400039695F87C304246C3F34003029345 :107F500095F85330594603F001030193069B5046B0 :107F600000933B46FDF712FA72E700BF9F860100BF :107F70007FB58668044606F134052846FCF73EF8CE :107F800084F824002846FCF73EF800250123E0840D :107F9000CDE9013300932A460223294684F828506C :107FA00006F58B60FEF716FE84F82950656104B073 :107FB00070BD2DE9F04F846885B0D4F8D43204F553 :107FC00035765B690546304698478146304694F8D9 :107FD00053A0FFF7C5FA07B2494600233A462046A8 :107FE000FCF7FDF804F1340983464846FCF706F82F :107FF0000AF0010A014604F58B68BAF1000F34D08B :1080000089B259443A46204689B2FCF7F7F8D4F8C9 :10801000D43201469B69304698474846FBF7F3FF48 :10802000D4F8D43207464FF6FF7130461B6B9847A1 :10803000F9F726F84FF47A73002403FB07000123B5 :1080400022462146CDE90134286100934046FEF7DF :10805000C1FDA86800F22C60FBF748FCAC846C61A1 :1080600085F8264005B0BDE8F08F052300EBC00180 :108070000331B1FBF3F1C3E72DE9F047846806460D :10808000B4F8745486B004F58B602DB2FEF736FD5B :1080900010B9B38CAB4204D0B669304606B0BDE827 :1080A000F08796F8267004F53575002F5ED1D4F868 :1080B000D4322846DB699847D4F8D43207465B6946 :1080C00028469847874208D3D4F8D43201211B6947 :1080D00028469847012386F82630F8F7D1FF7369C0 :1080E0009842DAD3F8F7CCFF00F5FA7070612846B1 :1080F000FFF736FAD4F8D4320746DB6928469847AA :10810000D4F8D43280461B6A284698473FB23A4694 :108110004146814600232046FCF761F8D4F8D4326A :1081200080465B69284698473A4601460023204628 :10813000FCF755F804F1A40A05465046FDF7EEF8A1 :108140000023CDE90433039394F87C304246C3F313 :108150004003029394F85330294603F00103CDE91C :10816000009350463B46FDF711F996E7012FB4D135 :10817000D4F8D4322846DB699847D4F8D432804604 :108180005B69284698478045A7D8D4F8D432394649 :108190001B692846984702239DE72DE9F043846830 :1081A00085B005462046FBF7E4FB012305F12409D1 :1081B00001460093074603234A462046FBF7D8FCB6 :1081C0000026C3B23146FF204FF00C0C04F58B683B :1081D000F2B2934214D8002401224046CDE9012492 :1081E0000092013B224609B2FEF7F4FCF8F748FF83 :1081F0000323A86485F84C306C6105B0BDE8F083BA :108200000CFB06F419F8044001363C1B002CB8BFE7 :108210006442E4B2A04284BF20461146D8E7000081 :108220002DE9F74F866890F84C30B6F8747406F56F :108230008B683DB2FFB2BB4218BF002304461CBF8F :10824000836443614046FEF759FC814606F21440C0 :1082500002F05DFDB6F85434984203DBA06903B028 :10826000BDE8F08F96F8E93373B1A36CABB90C237A :1082700003FB0743304693F82410FCF717F906F583 :108280003570FFF749F9E9E7FCF76EFB0028ECD001 :10829000B9F1020F0AD1206AE1E7F8F7F1FEA36C09 :1082A000C01AB0F57A7FE2D20020D8E7F8F7E8FEEE :1082B0006369984201D22046D1E7F8F7E1FE00F564 :1082C0009C40203060610C206BB204F132011A0630 :1082D00001D53A4606E0DAB2013B00FB03F54D5DFD :1082E000002DF4D00C270025012384F84C2007FB37 :1082F000024292F8249004F1240A00935246032388 :108300004946304684F8265084F8325084F83E506E :10831000FBF72EFC10F0FF0B01D1E0699FE707FB94 :1083200005F31AF803304B4503D1404629B2FEF756 :1083300044FC0135EBB29B45F1D801235246CDE90F :1083400000930349032306F1A400FDF779FFB2E788 :10835000E8D90008F0B5856885B004462846FBF7E3 :1083600008FB064605F13400FFF772F900270122E9 :10837000431ECDE9012700921BB231B205F58B6097 :10838000FEF728FCFF23676184F8243005B0F0BDB8 :108390002DE9F041866804468CB006F58B60B6F88E :1083A0007454FEF7ABFB012806F1A408EDB234D1FA :1083B00029463046FBF7BAFC074638B9404619490A :1083C000FEF7D4F838460CB0BDE8F08100236361B5 :1083D00094F82430AB421EBF002384F8245063611C :1083E000F8F74EFE6369984215D300270323294608 :1083F00003AA30460097FBF7BBFB0B49C3B203AAA5 :108400004046CDE90057FDF71BFFF8F739FE00F5B0 :108410006A40603060612046D5E70228D8D1206AE2 :10842000D1E700BFF3D9000806DA000810B504460A :10843000302104F02FF9204610BD10B50446242148 :1084400004F028F9204610BD10B50446242104F09C :1084500021F9204610BD10B50446482104F01AF950 :10846000204610BD10B504464C2104F013F92046F7 :1084700010BD10B50446342104F00CF9204610BD9F :1084800010B504462C2104F005F9204610BD10B5A6 :108490000446382104F0FEF8204610BD10B504460D :1084A000382104F0F7F8204610BD10B504465021DD :1084B00004F0F0F8204610BD10B50446402104F049 :1084C000E9F8204610BD10B50446A82104F0E2F8F2 :1084D000204610BD10B50446282104F0DBF82046E4 :1084E00010BD10B50446502104F0D4F8204610BD4C :1084F00010B50446282104F0CDF8204610BD10B573 :1085000004462C2104F0C6F8204610BD10B50446E0 :10851000482104F0BFF8204610BD10B504463421B0 :1085200004F0B8F8204610BD2DE9F04387680446F2 :1085300007F58B6840468DB0B7F87454FEF7DEFA45 :1085400094F84D30EDB2AB42064694F84C900FD003 :10855000A9F1070384F84D50032B07D8DFE803F097 :10856000022A34371DB3AB1C84F84030002363610A :10857000B9F1000F40F05281002E5AD0132D00F2B5 :108580004881DFE815F02C00500088008F0096002D :108590009D00A400AB00BE00D500E100F200460142 :1085A00025012A012F0136013B013F01410184F8D9 :1085B0004050DBE7B4F8A4309D42B6BF0023A4F8D6 :1085C0004250A4F84230D1E784F84450CEE71DB1C0 :1085D000AB1C84F84530C9E784F84550C6E794F8E9 :1085E000453094F84620069394F8443094F84010AF :1085F0000593B4F8423007F13400049394F84B30FB :10860000039394F84A30029394F84930019394F814 :108610004830009394F84730FBF758FC666A3046C0 :108620000DB0BDE8F08394F8473083F0010384F87F :10863000473094F84C3094F8A0209A4200F2008120 :1086400094F8A1209A422ABF1D464FF000084FF02F :1086500001080EB100236361F8F712FD6369264635 :108660009842DCD3F8F70CFD002200F51C501030C6 :108670006B1E60618DF82520092B00F25981DFE81F :1086800013F0E200F700010107010E0119012501B5 :108690002B013A01540194F8463083F0010384F829 :1086A0004630C6E794F8483083F0010384F8483038 :1086B000BFE794F8493083F0010384F84930B8E704 :1086C00094F84A3083F0010384F84A30B1E794F813 :1086D0004B3083F0010384F84B30AAE707230022D4 :1086E00084F84C300123CDE9013200931C2394F827 :1086F0004010022984BF0239C9B24046FEF76AFA27 :1087000097E70823002284F84C30114607F17400E3 :10871000FBF7DEFC05230021CDE901310123B4F88C :10872000A4200093013AB4F9421003B212B2E4E774 :108730000923012284F84C30002394F84410CDE939 :1087400001230092FF23D8E70A23002284F84C304B :10875000012394F84510CDE90132022988BF02397E :10876000009388BFC9B23A23C7E794F8453094F81C :108770004620069394F8443094F840100593B4F8DA :10878000423007F13400049394F84B30039394F88B :108790004A30029394F84930019394F8483000939A :1087A00094F84730FBF792FB3846FBF7EEFBA068E6 :1087B00094F8463000F5C66000F8043C97F84F3056 :1087C0000371FCF713F90023A66984F84D3026E7FE :1087D0000823A66A84F84D3021E70023E66A84F86E :1087E0004D301CE7002384F84D300123266B337194 :1087F00015E70B23A66B84F84D3010E73846FBF7DE :1088000007FBE0E7666B0AE70023E66B84F84D3070 :1088100005E707F13400FBF7E6FBD4E7012E7FF410 :1088200008AF0022132349464046CDE9016684F88B :108830004D9084F84C200096FEF7CCF94D46F8E6B2 :108840004FF0000805E746238DF8243094F84730B0 :1088500013B143238DF82430143554F825203649BC :10886000CDF8008009AB07F1A400FDF777FDD6E64F :1088700094F8463023B1314909A804F00FFAEBE728 :108880002F49F9E794F84830002BF9D02D49F3E748 :1088900094F849300BB12C49EEE72C49ECE794F8F9 :1088A0004A302B49002B14BF0522012209A804F0ED :1088B0006BF9D1E794F84B10204A214B09A8002905 :1088C00014BF1146194604F05FF9C5E794F840203B :1088D000002AD5D01F49E9E7B4F84220002ACFD0BA :1088E00094F847300BB11C49E0E710B202F0A7FC46 :1088F0001A490246DAE7B4F84230002BC0D094F8A7 :10890000442002EB82023B2A01D81549CEE73C23E2 :10891000B2FBF3F103FB11239BB28AB2002BD9D037 :10892000104909A804F030F996E794F84520CFE7FC :108930008DF8242090E700BFB7DA000802D60008BF :1089400060D5000813DA000818DA00081DDA0008FC :1089500022DA00082BDA000833DA000839DA0008D6 :108960003FDA000847DA0008F7B58768044607F5DC :108970008B60B7F87454FEF7C1F801280646EDB2D3 :1089800010D10023636194F82C30AB421EBF00234A :1089900084F82C506361F8F773FB6369984206D240 :1089A000204602E00228EED1206A03B0F0BDF8F7BD :1089B00067FB00F51C501030012E606110D1012DB5 :1089C00005D0022D06D04DB9606A0671EDE7A06AA8 :1089D0000571EAE707F17400FBF7D8FCA069E4E74A :1089E00000230C3554F825200349009307F1A40017 :1089F000FDF7B4FCD4E700BF51DA0008F7B587688B :108A0000044607F58B60B7F87454FEF777F8012831 :108A10000646EDB210D10023636194F83030AB42CA :108A20001EBF002384F830506361F8F729FB6369A7 :108A3000984206D2204602E00228EED1206A03B016 :108A4000F0BDF8F71DFB00F51C501030012E6061E1 :108A500014D1032D10D8DFE805F00207090B606A76 :108A600060B100230371EAE7A06AF9E7E06AF7E77B :108A700007F17400FBF78AFCA069E0E7002304EB30 :108A8000850500936A6B034907F1A400FDF766FCB6 :108A9000D0E700BF5BDA00082DE9F041856888B0B7 :108AA00095F85330012203F00103002B05F1340146 :108AB000044605A814BF4FF032084FF07A0840F280 :108AC000574605F58B6718BF4FF41676FBF7C9FAC2 :108AD00005F53670002505A901F0FBFF012342468C :108AE000A8463846CDE90135009329463346FEF7BE :108AF00071F8104B04F124071E88760827F8028FBE :108B0000284607220021B4F84C30009602F060FBA2 :108B10000135082D3882F1D14FF0000384F824305C :108B20004FF44033C4F81480A364A4F8466008B03E :108B3000BDE8F08156DD00082DE9F0418668044665 :108B400006F58B68404688B0B6F87454FDF7D6FF3A :108B500001280746EDB22CD10023636194F8293037 :108B6000AB4209D094F8283084F82950012B2ED03C :108B7000022B2FD000236361F8F782FA63699842D1 :108B800021D3F8F77DFA94F8281000F51C50103026 :108B90006061002948D1012F2BD1EDB1012D37D0D3 :108BA000E28C94F8241006F13400FBF734FAA4693F :108BB00009E00228D2D1E28C94F8241006F13400A6 :108BC000FBF729FA246A204608B0BDE8F08184F852 :108BD0002450CFE7E584CDE7052384F828702A46A2 :108BE000CDE900334B23029594F824104046FDF75D :108BF000F1FF00238DF8153094F828300BB1013BBC :108C0000DDB205B3012D48D000238DF814302FE0DC :108C10000223142284F82830CDE9002202914FF477 :108C2000A073B4F92610E1E7012FE2D1022300225C :108C30004046CDE9017700970139FDF7CBFF0023CE :108C400084F82830BFE794F824200AB396F853300C :108C50001549DB075FBF052302EBC2020332B2FBFB :108C6000F3F24ABF4323462392B205A803F08CFFD8 :108C700094F8283004EB8505003B18BF01230093CE :108C8000EA6A0A4905AB06F1A400FDF767FB9AE71B :108C9000074905A804F002F8EAE7E28C054905A8AF :108CA00003F072FFE4E700BF63DA000879D500083B :108CB00060D500086BDA00082DE9F04785680446A6 :108CC00005F58B60B5F87464FDF718FF94F827304C :108CD000814605F1A40705F5357A05F5946836B2A5 :108CE000002B52D1F8F7CCF9A36A984234BF002088 :108CF000012084F82700B9F1010F5DD194F82630E6 :108D0000384683F0010384F82630002B51D0FCF75D :108D1000E7FA0023636194F82630002B08BF002691 :108D2000A38CB6B2B3420BD02379002B4ED0314680 :108D30005046D5F8D4321B6B98470023A684636154 :108D4000F8F79EF96369984226D3F8F799F9284B0A :108D500000F5FA70B3F8009023796061002B3BD0E6 :108D6000244B5046B3F80090D5F8D432DB699847CD :108D700006465046D5F8D4321B6A98473246034619 :108D800049463846FCF730FD06E023793BB195F8BB :108D9000E933002BAFD100242046BDE8F0874046E0 :108DA000FEF717F8B5F808368342A4D895F8B5351C :108DB000EFE7FCF78FFAACE7B9F1020FABD1A0688F :108DC00000F22C60FAF792FD246AE5E7D5F8A034AA :108DD000314640461B6BAFE7D5F8A0344046DB690F :108DE0009847D5F8A03406461B6A4046C5E700BF41 :108DF00050DD000858DD00082DE9F04F85688BB084 :108E0000B5F87474044605F58B63049305F58B601F :108E10003BB20593FDF772FE2379064605F1A409DE :108E200005F5357B05F5946ABFB2002B55D095F852 :108E3000E933002B4CD016B9238EBB4201D000235E :108E40006361F8F71DF9636A98421FD3F8F718F9C0 :108E5000237964306062002B4AD0D5F8D43258466A :108E6000DB699847D5F8D43280465B695846984705 :108E7000A8EB00085846D5F8D4320FFA88F8DB6A18 :108E80009847414682B24846FCF7D4FDF8F7F8F817 :108E9000636998421DD32379002B3DD105F2A44884 :108EA00094F82D30002B7CD0F8F7EAF8012E00F171 :108EB0006400606133D10022022394F82C1084F8FE :108EC0002D20CDE9016600960498FDF783FE00E0B1 :108ED000002420460BB0BDE8F08FA36A002BAAD077 :108EE000F8F7CEF8A36A9842A5D995F8B535A0E76A :108EF000D5F8A0345046DB699847D5F8A0348046B1 :108F00005B6950469847D5F8A034A8EB0008DB6AA7 :108F100050460FFA88F8B3E705F53678C0E7022E19 :108F200017D194F82E10237981F0010184F82E10C6 :108F30006BB35846D5F8D4321B69984794F82E3055 :108F400013B14846FCF74CFDA06800F22C60FAF71C :108F5000CDFC238EBB420ED094F82C103A46013142 :108F6000C9B24046278601F0DAFD3A46484694F8F1 :108F70002C10FCF745FD237973B15846D5F8D4324F :108F80001B6A984701464846FCF77AFDA1E7D5F8E9 :108F9000A03450461B69D0E7D5F8A03450461B6A70 :108FA000EFE7F8F76DF8238E00F57A70BB421EBF2D :108FB000059B278684F82C30012E606115D19DF821 :108FC00014104FF0FF3284F82C100131C9B2404622 :108FD00084F82D6001F0A3FD0A2300220096CDE95C :108FE000013201B244F620636EE7022E12D1D8E9B5 :108FF0000423D8F80C1007A801F066FD2279284652 :1090000007A9FAF7D4FFA06800F22C60FAF76EFC0B :10901000246A5EE7012507AEE9B24FF0FF32404611 :1090200001F07DFD0135042D26F8020BF4D14846F0 :1090300094F82C2007A9FCF785FE4AE730B50123F8 :1090400000250446806885B02A462946CDE90135C9 :10905000009300F58B60FDF7BDFDA06800F22C6069 :10906000FAF769FC656105B030BD38B5856804461E :1090700005F58B60FDF742FD10B1A469204638BDAF :10908000F7F7FEFF63699842F8D3F7F7F9FF00F5A9 :109090006A406030606105F1A400FDF7D9F9EDE7A1 :1090A00038B58568044605F58B60FDF727FD012876 :1090B00002D1A469204638BD022801D1246AF9E70B :1090C000F7F7DEFF63699842F4D3F7F7D9FF00F5AD :1090D0006A406030606105F1A400FDF7ABFAE9E792 :1090E0002DE9F0418568044605F594680121404664 :1090F00086B002F0C8F894F8263005F5357783423B :1091000023D0D5F8D43200211B6B84F826003846D2 :1091100098470021B5F80A26084602F087F84FF074 :1091200080439863002394F82620A068A3846AB340 :1091300002930123B4F92A20CDE90033B4F92C308D :10914000114600F58B60FDF745FDA368B3F8746424 :10915000A38CB6B2B3420DD0002194F82630A68479 :109160006161DBB13046B5F80A2602F05FF84FF0D6 :1091700080439863A06800F58B60FDF7BFFC022870 :1091800013D1276A384606B0BDE8F08101230521D6 :109190000292CDE90031B4F92830D1E7D5F8D432C4 :1091A000314638461B6B9847E4E7F7F769FF636978 :1091B00027469842E6D3F7F763FF00F2EB106061B1 :1091C00005F2144001F0A3FD94F82630ADF8140028 :1091D0003BB3D5F8A0344046DB699847ADF81000A2 :1091E00005F2AC5001F093FD164BADF812005B6A2E :1091F000ADF81630FBF7B8FB20B1BDF8163064337C :10920000ADF8163004AA95F8E933019295F8B52522 :1092100094F82610009205F1A4003246FDF7B0F94B :10922000B0E7B5F8083405F57870ADF8103001F006 :109230006EFDADF8120005F57C7001F068FDADF82B :109240001600DFE7002C01402DE9F04F8568044649 :1092500005F58B6A504689B0B5F87474FDF74EFC7D :10926000636A064605F5946863B10121404602F041 :109270000AF838B10023666A86F84930304609B0EA :10928000BDE8F08F05F21449484601F040FDB5F8FD :10929000543498420FDBBFB2BEB1A06800F5C6607F :1092A000FBF7B3FB00287FD1012E40F09580E669E3 :1092B000002EE3D184E095F8E933002BEBD1FBF7E6 :1092C00053FB0028E7D0A669D8E7238EBB42E4D140 :1092D000F7F7D6FE636926469842CFD3F7F7D0FE5C :1092E00094F82C3000F57A7005F1A40705F5357A6D :1092F0006061B3B1D5F8D43250469B68984780B1CD :109300003846FBF7F3FFA06800F22C60FAF70BFB7E :10931000F7F7B6FE002300F56A406030A06284F8DB :109320002C30A36A4BB1F7F7ABFEA36A984204D383 :1093300000233846A362FBF7CDFF484601F0E7FC67 :10934000B5F85434984294F82E3069DB6BB901219A :1093500005F1740084F82E10FAF7A4FE2846FAF7F7 :10936000FBFB01463846FBF7E7FFD5F8A034404643 :10937000DB699847554B014693F800B02846002317 :109380005A46B5F83CA0FAF72AFF8146A06800F5D6 :10939000C660FBF73AFB044638B300234A46032174 :1093A0003846FCF75FF969E7B4F930105046FDF72D :1093B00004FCA06800F5C660FBF718FB002363619E :1093C000238EBB4284D03946278605F13400FAF754 :1093D000CDFD002363617BE7022EF1D1A06800F28E :1093E0002C60FAF783FA266A62E7D5F8A034404683 :1093F0001B6A98470123CDE90343059495F87C3017 :109400004A46C3F34003029395F85330514603F0A4 :109410000103CDE900035B463846FBF7B7FF2DE7B4 :109420006BB1002105F1740084F82E10FAF73AFEB2 :109430002846FAF791FB01463846FBF77DFF504678 :10944000FEF78EF8D5F8D4320FFA80F8DB69504673 :1094500098470023014642462846FAF7C0FE814657 :10946000A068B5F83AB000F59460FDF7BDFC014680 :1094700028B1022342462846FAF7B1FE0146A06809 :10948000079100F5C660FBF7C0FA0799044618B1CA :109490000B464A46002183E7D5F8D43207911B6A70 :1094A00050469847CDE9044407994A46039195F8F8 :1094B0007C305946C3F34003029395F8533003F0D0 :1094C0000103CDE900034346A6E700BF4DDD0008D8 :1094D00010B504460846B4F86A21B4F86E1101F0DC :1094E000A5FEA4F8340110BD30B50446856889B0E6 :1094F000027905F1340105A8FAF7B3FD2379A068D4 :1095000005A92BB300F5367001F0E3FA2179743523 :10951000284681F00101FAF7C5FD00220123A06869 :109520001146CDE90133009300F58B600323FDF76D :1095300051FB284604F12601FAF7EAFE0023042233 :1095400084F82430E3852363A286636109B030BDCB :1095500000F2A44001F0BDFAA068E18E00F594602D :10956000FFF7B6FFD2E7F0B583680279044685B00D :1095700003F58B670AB30020B3F83E540026052399 :109580000321CDE90136B5FBF1F10123A06200937F :1095900038462BB2324609B2FDF71CFB4FF480333C :1095A0006362A36883F83A6183F83261A068A430EB :1095B00005B0BDE8F040FBF793BE03F59466D3F821 :1095C000A03430465B6B984740F2DC51054630468C :1095D000FFF77EFFF7F754FD00F5FA60CEE7C0E92C :1095E000061203627047836910B504463BB10369F4 :1095F0002BB1F7F745FD2369984228BFA46920469F :1096000010BD838910B504463BB1F7F739FD4FF41F :109610007A72A38902FB0300206110BDF8B585684A :109620000446B5F8743405F53576C38495F85230A0 :10963000C3EB03139B008381FFF7E3FF3046FDF785 :109640008FFF01B22846FAF79CF9D5F8D4320746C5 :109650001B69304601219847304600263946FDF700 :1096600069FF05F1A40084F82460FBF751FEA068AF :10967000666100F22C60BDE8F840FAF754B930B5E5 :10968000012300250446806885B02A462946CDE995 :109690000135009300F58B60FDF79CFA14232046FA :1096A000A381FFF7AEFF656105B030BDF8B58468F2 :1096B000D4F8D43204F535755B69284698470646D8 :1096C0002846678FFDF74CFF394602B22046FAF76D :1096D00095FD8642014604D02846BDE8F840FDF7D6 :1096E00097BEF8BD70B504460D468668F7F7C8FC0E :1096F000E36B03B135B141F2883296F84E3002FB8C :109700000303E363E36B83428CBF0020012070BD41 :109710002DE9F74F894690460C9B00F12C0A87688B :1097200004465046DDF834B0BDF83850019301F0DE :10973000EEFAC14507F1A4060ED8A8EB0908B8F166 :10974000040F09DC019BC82B06D8BBF1190F03D805 :109750002946504601F0CFFA281A0028B8BF4042E7 :10976000952811DDF7F78CFC4EF6602297F8523001 :1097700002FB030000232061304684F8343003B03C :10978000BDE8F04FFBF7ACBD236943B9F7F778FCB0 :109790004EF6602297F8523002FB030020612569E3 :1097A000F7F76EFC0F4B291A994215D84FF47A73CC :1097B000B1FBF3F13046C9B2FBF7B6FD94F8343093 :1097C0003BB9A06800F22C60FAF7ADF8012384F8E9 :1097D000343003B0BDE8F08F304603B0BDE8F04F41 :1097E000FBF790BD9F8601002DE9F04F8568044688 :1097F00005F58B6738468FB0B5F874B4FDF77EF980 :10980000636A06460FFA8BF983B1A068012100F55F :10981000946001F038FD48B195F85330606AC3F3A5 :10982000800380F849300FB0BDE8F08F1EB9B4F85E :1098300040304B451AD0A06800F5C660FBF7E5F84C :1098400040B9012E41D12846FAF79FFBE069002874 :10985000E9D10BE0B4F940103846FDF7AEF9A06845 :1098600000F5C660FBF7C2F80023636105F53578A3 :109870004046FDF775FEB4F8403007B24B451DD0A9 :1098800000261FFA8BF93A4649462846A4F840902C :109890002661A6866661FAF7B1FCD5F8D432014696 :1098A0009B694046984705F134004946FAF75EFB4C :1098B000A068266300F5C660FBF798F8F7F7E0FBB1 :1098C000636998420BD22046ADE7022ECED105F156 :1098D0003400FAF793FB0028C8D0206AB7E7F7F7FF :1098E000CFFBB4F8423003446361D5F8D43240462C :1098F000DB699847D5F8D43207905B6940469847B2 :10990000D5F8D43208901B6A404698473A460799E2 :1099100000230A902846FAF762FCD5F8D432824632 :109920009B6A40469847D5F8D4320B90DB6A404694 :109930009847D5F8D4320C905B6A40469847099016 :10994000A06800F59460FDF74FFA064630B1014675 :1099500002233A462846FAF742FC0646B5F84C3050 :10996000002B49D095F853104046C1F3C0010D9328 :1099700001F089FC80460D9BDDE90702121A0532D1 :109980000A2A94F8351005F1A40937D80B9AB2F5D4 :10999000FA7F33D8099A8AB389BB012384F835301A :1099A000F7F76EFB00F5FA60A0634846FBF7A4FCEE :1099B000A06800F22C60F9F799FFA06800F5C66076 :1099C000FBF723F800287FF47EAFCDE90408039667 :1099D00095F87C305246C3F34003029395F8533018 :1099E000484603F0010301930A9B1FFA8BF1009391 :1099F0003B46FBF7CBFC66E79846BDE759B1A26B47 :109A00004AB943B341462046FFF76CFE18B1A06A3D :109A100000287FF408AF2046FFF748FE94F8353061 :109A20005BB1A36B4BB1F7F72BFBA36B984204D34D :109A300000234846A363FBF753FCA06800F5C6600B :109A4000FAF7E3FF0028C0D03346524601214846CA :109A5000FBF708FE37E795F85230002BDBD0DDE945 :109A60000712099B204602930C9B01930B9B0093CA :109A70001FFA8BF3FFF74CFECDE7000070B51D46D3 :109A80000123044603710020184B16462360184B2F :109A90005022C4E911304FF48073C4E90400C4E9D2 :109AA0000600A0812062A16084F84000A4F8420072 :109AB000A4F84C300F49A01803F0F8F840F607233B :109AC000A4F8A0300D2384F8A2307823A4F8A430A1 :109AD000049B2046E362059BC4E909652363069B5A :109AE0006363079BA363089BE36370BD1CDC0008F2 :109AF000000001012CD40008F0B51E4601230371BB :109B00000023C0E90433C0E9063383810362094BB3 :109B1000044603600423174680F82C30064B00F1FE :109B2000300581600FCB85E80F002046C4E9097637 :109B3000F0BD00BFF4DC00087CD400082DE9F04F34 :109B400000F1240C054600F13409002004460746C4 :109B50008046064687B001913CF8021F9142BCF84E :109B600010E008D3994206D80EFB016601FB0144C0 :109B7000884477440130CC45EED102287CDDF6F7ED :109B800041FC824640468B46F6F73CFC8046384610 :109B90008946F6F737FCCDE902013046F6F732FC8C :109BA00052465B46F6F798FCDDE9022306460F466F :109BB00040464946F6F790FC02460B463046394689 :109BC000F6F7D2FACDE904012046F6F71BFC52461F :109BD0005B46F6F781FC424606460F464B4640463A :109BE0004946F6F779FC02460B4630463946F6F709 :109BF000BBFA02460B46DDE90401F6F797FD024683 :109C00000B4606460F4640464946F6F765FC0246B7 :109C10000B46DDE90201F6F7A7FA52465B46F6F776 :109C200085FD4FF0000A80468946A86800225FFA49 :109C30008AF17430FAF74CFAF6F7D4FB32463B4619 :109C4000F6F74AFC4B464246F6F790FA02F052FD10 :109C5000F6F754FE019B23F81A000AF1010ABAF143 :109C6000040FE2D1064B019A1B88D2889A4201D98F :109C7000019AD380012000E0002007B0BDE8F08FFA :109C800056DD000870B5002200F124044FF47A7507 :109C9000082034F8023FD6B23BB15B1A002BB8BFA4 :109CA0005B42AB42BCBF30469DB20132082AF0D1C4 :109CB00070BD000073B50C4682680546B2F8883066 :109CC000B2F88A20002100922046082201F080FA92 :109CD00005EB440283B2042C1846D28C26D803EB41 :109CE00093018A4222DDB5F84630214AA3EB930363 :109CF00012889BB29108B3EB920F38BF0B46013428 :109D0000A5F84630E4B205F13606E3B2072B2CD8AD :109D1000B5F846302046009307220021B5F84C30B4 :109D200001F056FA26F814000134EEE700EBD306F2 :109D3000B2424FEAD30104DDB5F8463003EBD3035A :109D400009E0042C0ED8A0EB93039A420ADAB5F886 :109D5000463003EB9303064A9BB21288934228BF16 :109D60001346CCE7401A8242E6DB02B070BD00BF6A :109D700056DD00082DE9FF418668044606F17405AA :109D8000002202212846FAF7A3F99622034602A9E7 :109D90002046FFF7D3FE00283CD0002203212846AE :109DA000FAF796F901462046FFF76CFF002280463D :109DB00003212846FAF78CF900220746022128469B :109DC000FAF786F904EB4804E38E01460093E28C2F :109DD0003846BDF80C3001F0FBF9104A83B2108808 :109DE000984228BF1846ADF80E003046F9F7C1FD7D :109DF000074606F53570FDF7B3FB44B22246284608 :109E000002A9FAF793FA032339463046009402AACE :109E1000FAF75AFB04B0BDE8F08100BF56DD000838 :109E20002DE9F04F044685688DB005F58B6BB5F8CC :109E300074845846FCF762FEB4F94A301FFA88FA77 :109E40009A451EBF0023A4F84A806361012894F854 :109E5000493005F535760FFA88F740F0E580002B9C :109E600045D0D5F8D43200211B693046984794F884 :109E70004830002B00F0D180002384F84830D5F81A :109E8000D4323046DB69984795F853308046DB077B :109E900000F1BD80384601F0DAF983B294F824105D :109EA00004EB4102D384A2F83680B5F88A20143A34 :109EB000934280F2AE802046FFF7FCFE94F82430F7 :109EC0009622013384F8243020464FF4167309A9F2 :109ED000FFF734FE40B13046FDF742FB09A942B21C :109EE00005F17400FAF722FA002384F8493094F857 :109EF0002430072B00F29E800127D5F8D42204EBF2 :109F00004303D98E3046926984F849709047D5F85A :109F1000D43239461B693046984700236361F7F70E :109F2000AFF8636998427BD3F7F7AAF800F5FA70A7 :109F300060613046FDF714FBD5F8D43280465B698A :109F400030469847D5F8D4320790DB6930469847B9 :109F5000D5F8D43207461B6A30469847002306904E :109F60000FFA88F239462846FAF739F93A4B804613 :109F7000B3F80090B9455DD994F84930F3B1079B27 :109F8000DB1B1033202B19D8D5F8D4323046DB6ACE :109F90009847C82812D8069B012B0FD994F848304F :109FA00063B9A06800F22C60F9F7A0FC58460FFADC :109FB00088F1FCF702FE012384F84830B4F84C1015 :109FC000B94247D864234A4600933846002301F03B :109FD000FFF8C6B22846F9F7BFFD94F8242005968D :109FE00094F848300132049394F8493001460393C1 :109FF000069BD2B2029395F8533005F1A40003F00A :10A000000103CDE900A34346FBF7F4FE08E0534605 :10A0100044E7082384F8243066E784F84930636114 :10A0200020460DB0BDE8F08F002B7FF478AF0228FA :10A030007FF475AF2046FFF79DFE227905F13401CC :10A0400009A8FAF700F809A905F5367000F041FDF6 :10A05000246AE5E70026BDE756DD00081549D088EB :10A06000098830B5884288BFD180032B14D802EB11 :10A070004300032B11D1D3888B4288BFD180911D1F :10A080000B8831F8020D181AC728DEBFC83B23EA37 :10A09000E3730B808A42F3D130BD054630F8024BA2 :10A0A0006D8801332D1BC72DDCBFC8340480DBB2A3 :10A0B000DFE700BF56DD0008F0B5054685B00C4669 :10A0C00017463431027901A81E46F9F7BCFF2D79F5 :10A0D00001A925B1381D00F0FCFC05B0F0BD301D14 :10A0E00000F0F7FC294604F17400F9F7DBFFF4E710 :10A0F0002DE9F04F85680446B5F8748405F58B6B3F :10A100000FFA88F38DB058460993FCF7F7FCB4F9C1 :10A1100034301FFA88FA9A45814605F5357605F5FB :10A12000946717D094F82F30A4F8348083B1237942 :10A1300043B351463046D5F8D4329B699847002343 :10A1400084F82E30F6F79CFF00F59C500830206311 :10A15000002363613046FDF703FA0790BDF91C3018 :10A1600008932379A3B195F8E983B8F1000F19D1C9 :10A170003B46324629462046FFF79EFF40460DB03B :10A18000BDE8F08FD5F8A034514638469B69D5E735 :10A19000236B3BB1F6F774FF236B984202D995F815 :10A1A000B585E2E7B9F1010F40F0F38094F82F3064 :10A1B000002B00F0B380D5F8D432002130461B6963 :10A1C0009847D5F8A03400211B693846984794F881 :10A1D0002E304BB3002384F82E302379002B00F06F :10A1E00098803046D5F8D432DB69984794F824300B :10A1F0009DF91C8004EB4302D084E28C4146ADF80B :10A200002820228D2046ADF82A20628DADF82C2022 :10A21000A28DADF82E200AAAFFF720FF42460AA918 :10A2200005F17400FAF782F801230022CDE9013329 :10A2300000935846032394F8241084F82F2094F8B0 :10A2400024A0FCF7C7FC002363615FFA8AF309933B :10A2500094F82F30002B00F0C58094F824B0F6F766 :10A260000FFF6369A046984288D3F6F709FF237968 :10A2700000F5FA706061002B00F0B780D5F8D43299 :10A2800030465B699847D5F8D4328146DB69304661 :10A290009847D5F8D43282461B6A30469847D5F89D :10A2A000D4320790DB6A30469847C82294F82F30A2 :10A2B00005F17406002B40F0B18000220999304668 :10A2C000F9F706FF089A01462846F9F797FF8146F5 :10A2D000A3682846A4330893F9F73EFC594607467D :10A2E00000223046F9F7F4FE94F82E30024604932B :10A2F00094F82F3039460393079B0898029395F8FA :10A30000533003F00103CDE900935346FBF76AFE97 :10A3100034E7D5F8A0343846DB6966E79DF82410A9 :10A320001A4684F8241084F82F9005F174000793DE :10A33000F9F7CEFE089A01462846F9F75FFF079B1A :10A340000A2202930523CDE90032494B01B2B3F949 :10A350000030804664225846FCF73CFC237963B108 :10A36000D5F8D432414630469B6998474946304635 :10A37000D5F8D4321B69984765E7D5F8A034414633 :10A3800038469B699847D5F8A034494638461B693A :10A39000F1E7B9F1020F7FF458AF2846F9F7E9FA6F :10A3A0008146334BA28D1B889DF91C809A4204F193 :10A3B000260A88BFA3854246514605F17400F9F785 :10A3C000B5FF0323524649462846CDF80080FAF7E8 :10A3D0007BF83B46324629462046FFF76DFED4F80F :10A3E0002080CBE6DDF824B039E7D5F8A034384634 :10A3F0005B699847D5F8A0348146DB6938469847B1 :10A40000D5F8A03482461B6A38469847D5F8A03460 :10A410000790DB6A38469847282247E7A9EB0A03EA :10A420001033202B3FF654AF90423FF651AF079BBD :10A43000012B7FF64DAF94F82E70002F7FF448AFBC :10A44000236B002B3FF444AFF6F71AFE236B9842C0 :10A4500008D9A06800F22C60F9F748FA01232763B5 :10A4600084F82E3094F82F30002B7FF431AF24E79E :10A4700056DD0008F0B51F46012303710023C0E933 :10A480000433C0E90633838103620A4B0446036048 :10A4900005239446084E00F13405816080F8303081 :10A4A0000FCE0FC5336820462B60059BC4E909C752 :10A4B000E362F0BD0CDD00088CD400082DE9F84300 :10A4C0004FF00008012604468568314605F594677B :10A4D000C0F83C800687C0F8408005F17400F9F7A9 :10A4E000E1FD05F1A409E98F384685F83A8185F840 :10A4F0003281FEF7EDFF4846FAF7ECFEA06800F562 :10A500003570FDF72DF8A98F02B22846F9F776FECF :10A51000D5F8A03401469B69384698473846FCF781 :10A5200083FC01464846FAF711FFD5F8A0343146BE :10A530001B69384698474846FAF7D2FE94F84930E6 :10A540002BB1A068314600F53570FCF769FE002399 :10A55000012263636361E263626484F8483095F8C2 :10A560004F3004F1240084F82830BDE8F843FAF7AE :10A570003DBA2DE9F04F8568044689B005F5357080 :10A58000FCF7EEFFE36B064605F5946A05F58B686C :10A59000ABB3F6F775FDE36B984230D395F85330C3 :10A5A000B5F83C90DB07B5F888B0B5F88A7009D4E7 :10A5B0000FFA8BF000F043FE1FFA80FB38B200F078 :10A5C0003EFE87B295F953100FFA8BF200293BB289 :10A5D00033DA05200027B9FBF0F1CDE9010701EBE3 :10A5E00081011FFA81F9009009B24046FCF7F2FAA6 :10A5F000012384F838300023C4F83490E3634046E4 :10A60000B5F87474FCF77AFAE26A03468146BFB281 :10A61000DAB9002B37D004F1240B5846FAF7F5F9D4 :10A62000A0B3B4F934104046FCF7C7FA5846FAF71D :10A63000DDF900239946636128E0012100200091A3 :10A64000CDE901100FFA89F1CFE7079001215046BB :10A6500000F019FE079B83460028DAD12846F9F757 :10A6600094FC594605F17400F9F71CFD94F8493043 :10A670003BB1276B2FB184F849B0384609B0BDE82B :10A68000F08FE76AF9E7636B9F42C4D195F85330C6 :10A690005B0702D5B9F1020F36D0B9F1000F51D1E5 :10A6A000636B05F1A4089F4236B200F08280D5F8B2 :10A6B000A03450465B696763984794F83830814608 :10A6C000B5F8D4B5002B62D0394632462846F9F7A2 :10A6D00095FDD5F8A034014681469B6950469847C0 :10A6E0005F460023324649462846F9F778FD3A4648 :10A6F000014605F13400F9F73BFC0023636104F1E6 :10A700002400FAF773F957E0A06894F8493000F58F :10A71000357073B10021FCF783FDA06800F22C6056 :10A72000F9F701F994F8493083F0010384F84930CE :10A73000B6E70121FCF774FDA06800F22C60F9F780 :10A74000D5F8EFE7002294F838306261D3B14FF0CA :10A750000A0C0520B5F90A36B5F8D4B5B5F9D41503 :10A76000CDE9000C02924046FCF734FA0022C4F80E :10A7700034B084F83820F6F783FCB4F84A30034448 :10A78000E3638DE7F6F77CFC2746E06375E739461F :10A790005046FEF79DFE5046FCF746FB01464046FC :10A7A000FAF7D4FDF6F76CFCB4F84A300344E363DF :10A7B00097E7B9F1000FA2D1636CBBB1F6F760FC6B :10A7C000636C984212D395F8B5357BB1404694F846 :10A7D0004810FAF7C3FD94F84830013303F003033F :10A7E00084F84830F6F74CFC64306064F6F748FCB7 :10A7F000636927469842FFF440AFF6F741FCD5F86D :10A80000A03400F5FA705B69606150469847D5F84E :10A81000A0348346DB6950469847D5F8A03481467A :10A82000DB6A50469847D5F8A0240790126A504634 :10A83000904794F839208246FAB90FFA8BFB0FFA49 :10A8400089F2ABEB020B0BF1310BBBF1620F14D8A9 :10A85000079B072B11D880B1012384F83930F6F714 :10A860000FFC00F59C5008302064A06800F22C60BA :10A87000F9F73CF84046FAF73FFD236C4BB1F6F789 :10A88000FFFB236C984204D34046FAF729FD0023CE :10A8900023644946002332462846B5F83CB0F9F710 :10A8A0009EFC8146A06800F53570FCF7A3FD0146CB :10A8B00028B1012332462846F9F791FC014604F1FC :10A8C00024000791FAF7A1F8079930B10B464A46E0 :10A8D00003214046FAF7C6FECFE694F848300590CB :10A8E0000133DBB2CDE9031395F87C304A46C3F35C :10A8F0004003029395F85330594603F00103CDE924 :10A9000000A340463346FAF741FDB6E67FB58568B9 :10A91000044605F1A4063046FBF762F830461849B4 :10A92000FBF764F8002201231146CDE901330093BF :10A9300005F58B600223FCF74DF9A0684FF4966192 :10A9400000F53570FCF786FC0E4B00211A884FF499 :10A950009660A56800F06AFCA5F8D205A06840F2F0 :10A96000DC5100F59460FEF7B3FD0323238600233A :10A97000C4E90933A38584F82E30636104B070BD47 :10A9800072DA000856DD00084A29104608B50FD0D3 :10A9900005D8282908D0292907D0012008BD4B292E :10A9A000FBD14FF4806105E00120F6F76FFBF4E77F :10A9B0004FF400610148F7F74BF9EEE7000C014056 :10A9C00070B51546A1F1140204461E460C2A3BD868 :10A9D000DFE802F02C3A3A071E2E3A3A3A3A3A3A6F :10A9E00015001A48F8F726FB01280446F9D164231C :10A9F0002A4631461548F8F769FA204670BD2A1EE6 :10AA000018BF01224FF400611148F7F721F90DE05A :10AA100003684FF480611A780E48F7F719F9226835 :10AA200000232C21204665699278A8470124E4E799 :10AA3000026800232C21D2784569A84723684FF487 :10AA400080615A780348E0E70024D6E7340E0020FE :10AA5000000C01400008014030B5143914461D4671 :10AA600085B00C292AD8DFE801F01F2929071C1C12 :10AA700029292929292926001148F7F711FE20281C :10AA8000FAD1104B78211A784FF0FF33003A18BFF3 :10AA90000122CDE901430A48012300959201F7F70D :10AAA00081FB012005B030BD026800232C214469E0 :10AAB0009278A047F5E7034B1A70F2E70020F1E720 :10AAC000E00D0020640F002010B5C0E90012836083 :10AAD00010BD4B680A68312BC26002EB82028968A4 :10AAE0008261C8BF0A220361CCBF93FBF2F3052346 :10AAF0004161C361704730B501600A24002505211A :10AB0000C0E9034445618461C161028480F8223058 :10AB100030BD002309B28180C18083607047022963 :10AB200008D003290BD001290ED1002AA8BFC2608A :10AB3000C0687047002AA8BF026100697047002AF8 :10AB4000A8BF42614069704700207047F0B590F897 :10AB50002260B0F90440B0F906508B1ADEB102F160 :10AB600064068E4217DAD0E9066159436CB903FBDB :10AB70000613C280012283608580B0F92000411E47 :10AB80008A40134443FA00F0F0BDAB1A06FB0311F0 :10AB900083680B44EDE7D0E903615943002CE6D00C :10ABA000AF1A06FB071143691444A4EB450403FBE9 :10ABB0000411EDE790F8D43070B503F0FF020446BD :10ABC0000D460EB2002B60D090F8DD306BB1B0F8BE :10ABD000D0309BB2B34208DA002380F8DD30B0F801 :10ABE000E010883089B200F09AF8B4F8D030B4F8A8 :10ABF000D2209BB292B21344B34220DA002384F8ED :10AC0000D430D4F8D830002B3AD0F6F739FA0646CB :10AC1000D4F8D810411A204600F081F8C4F8D86062 :10AC2000B4F8E23001339BB2A4F8E230002384F898 :10AC3000DD30012384F8DC30ABB2A4F8DE3094F8C8 :10AC4000DC303BB1B4F8DE309BB2AB423CBFABB2C0 :10AC5000A4F8DE3094F8DD303BB1B4F8E0309BB2BC :10AC6000AB4284BFADB2A4F8E050B4F8CC0094F885 :10AC7000D43080B273B3B4F8CE30184480B270BD13 :10AC8000F6F7FEF9C4F8D800D0E790F8DC3063B1ED :10AC9000B0F8D0309BB2B34207DD80F8DC20B0F8CA :10ACA000DE10443089B200F03AF8B4F8D030B4F88D :10ACB000D2209BB292B29B1AB342C0DD0123002284 :10ACC00084F8D43084F8DC2084F8DD30ABB2A4F80A :10ACD000E030B4E7B4F8CE30C01ACFE730B504782E :10ACE0004368027803EB5403B3FBF2F3456829444D :10ACF000C91A416030BD38B50578FFF7EFFF4368EA :10AD0000EDB2007803EB5503B3FBF0F038BD0278E9 :10AD10004368007803EB5203B3FBF0F0704790F800 :10AD2000402090F841309A4209D290F84030DAB28F :10AD30000133DBB280F8403040F82210704790F8C1 :10AD40004230DBB240F8231090F842300133DBB2DE :10AD500080F8423090F84120934224BF002380F8CD :10AD6000423070479342017038BF1346002143813F :10AD700041608281417270470346007A08B1002227 :10AD80001A72704710B504460846B4F90A20B4F99F :10AD90000C1002EB6202A1EB610192B289B200F0E9 :10ADA00045FA81B22046FFF7A6FF637A80B233B13D :10ADB000B4F90C30834201DD0123238110BDB4F9C5 :10ADC0000A308342FADA40F20113F6E70E4B82B002 :10ADD0009A6942F001029A619A6902F001020092B6 :10ADE000009ADA6942F08052DA61DB69074A03F0BF :10ADF00080530193019B536823F0E06343F0007399 :10AE0000536002B0704700BF0010024000000140D4 :10AE1000102230B5054689B00DEB0200002101F08B :10AE2000D3FE2B682B4A934235D12B4B7C219A6958 :10AE30002A4842F400729A619A69294C02F400721D :10AE40000092009A9A6942F004029A619B6903F0A9 :10AE500004030193019B0323CDE9041304A9F6F72E :10AE600017FE4FF400724FF0800C0023C4E903C2B8 :10AE70004FF400621B48C4E90523C4E900032046DF :10AE8000A360E361F6F7E0FC08B1FCF747FE2C6233 :10AE9000656209B030BD144A9342FAD10E4B0F4897 :10AEA0009A6904A942F480629A619A6902F4806204 :10AEB0000292029A9A6942F004029A619B697C228A :10AEC00003F004030393039B0323CDE90423F6F764 :10AED000DFFDDEE7002401400010024000080140D1 :10AEE0009C0D0020080002400028014010B50446D7 :10AEF00086B01022002102A801F066FE2268114BE4 :10AF00009A421CD1104CC022A369104843F0080398 :10AF1000A361A36902A903F008030093009B122315 :10AF2000CDE9022303230593F6F7B2FDE36943F469 :10AF30000013E361E36903F400130193019B06B07E :10AF400010BD00BF0054004000100240000C014042 :10AF500010B5044686B01022002102A801F034FE8C :10AF60002268124B9A421ED103F5EC33DA6910487D :10AF700042F48042DA61DA6902A902F48042009266 :10AF8000009A9A6942F008029A619B694FF4204244 :10AF900003F008030193019B0223CDE9022303235D :10AFA0000593F6F775FD06B010BD00BF00380040F0 :10AFB000000C0140102210B5044688B00DEB0200D1 :10AFC000002101F001FE2368254A934225D1254B3B :10AFD00025489A6904A942F400629A619A6902F4C8 :10AFE00000620092009A9A6942F004029A619B6999 :10AFF00003F004030193019B4FF480530493012356 :10B000000693F6F745FD00221B201146F6F7CAFB12 :10B010001B20F6F7F7FB08B010BDB3F1804F11D13C :10B0200003F50433DA691C2042F00102DA610022E0 :10B03000DB69114603F001030293029BF6F7B2FBB2 :10B040001C20E6E7094A9342E5D1064BDA6942F053 :10B050000402DA61DB6903F004030393039BDAE77C :10B06000002C014000100240000801400008004090 :10B07000102210B5044688B00DEB0200002101F04B :10B08000A3FD23681F4A934215D11F4B9A6942F0D2 :10B0900004029A619B6903F004030193019B4FF43E :10B0A00000630493022319480593079304A9F6F754 :10B0B000EFFC08B010BDB3F1804F0CD103F50433A1 :10B0C0009A6942F004029A619B6903F004030293B7 :10B0D000029B0323E5E70E4A9342EAD10A4B0D484F :10B0E0009A6904A942F008029A619B694FF40072C0 :10B0F00003F008030393039B0223CDE90423079382 :10B10000D5E700BF002C01400010024000080140BC :10B1100000080040000C01407047FEE7FEE7FEE734 :10B12000FEE7704770477047F5F79EBF0148F6F796 :10B130001BBC00BF9C0D00200148F7F7F9BF00BF02 :10B140008C0E00200148F7F7F3BF00BFD40E00209B :10B150000A4A08B51168034609B9094911606946E8 :10B16000106803448B4206D901F06CFD0C23036088 :10B170004FF0FF3008BD1360FCE700BF680F0020F0 :10B18000001500200F4B1A6842F001021A6059683E :10B190000D4A0A405A601A6822F0847222F4803202 :10B1A0001A601A6822F480221A605A6822F4FE0299 :10B1B0005A604FF41F029A604FF00062034B9A608E :10B1C000704700BF001002400000FFF800ED00E0F3 :10B1D000914210B50446184609D0029B521A641ACF :10B1E000191A531001FB043393FBF2F3184410BDFA :10B1F000642807B528BF6420462928BF46210A2AAB :10B2000038BF0A2281424FEA520309D30093002338 :10B210000A461946FFF7DCFFC0B203B05DF804FB35 :10B220000131009201336422C9B2F3E703468B4235 :10B23000084603DB9342A8BF134618467047052310 :10B2400000EBC000A23090FBF3F000B2704709237E :10B250009B3890FBF3F000B270472DE9F0410446B3 :10B260009DF81850BDF81C60BDF8207000F5867080 :10B27000FFF778FD3B463246294604F58E70BDE85F :10B28000F041FFF76FBD19B900F58E70FFF774BD7F :10B2900090F8250170470000FFF774FF0B480C4938 :10B2A0000C4A002302E0D458C4500433C4188C4222 :10B2B000F9D3094A094C002301E013600432A24289 :10B2C000FBD301F0C5FCFCF71FFA7047000000201B :10B2D0004002002058E20008400200200015002033 :10B2E000FEE72DE9F74FCE18531CDBB2F6B290F80B :10B2F00086900093334605460C46904600F027FDA5 :10B3000050B1B9FA89FA80274FF0000B4FEA5A1A68 :10B31000A64204D185F8869003B0BDE8F08F0C9B5F :10B320001B781F4215D085F88690CDF800B0012318 :10B3300042462146284600F06DFC7F0808BF0C9B62 :10B3400004F1010404BF01338027E4B208BF0C9369 :10B35000DEE795F88530002BEFD185F886A00093C5 :10B36000E5E72DE9F3479DF82850DE00F6B21544D5 :10B370009846EDB273180095DBB281460F4614462D :10B38000DDF82CA000F0E3FC68B902B0BDE8F0875E :10B390002246CDF800A0334639464846FFF7A1FFC4 :10B3A0000134C244E4B2A542F2D1EEE72DE9F743FD :10B3B0009DF828501F461544EDB2CB180095DBB21E :10B3C00080460E46144600F0C2FC18B14FF000094A :10B3D000A54202D103B0BDE8F08322463B46314688 :10B3E0004046CDF80090013400F014FCE4B2EFE7E1 :10B3F0002DE9F74304460026036890F83C9090F846 :10B400003D7093F811802368A06B1B7CF5B203FBA1 :10B4100006F1C90089B208447A190135009000216B :10B420002046D2B2EDB201F0DAF8A94504D90136CE :10B43000BB19DBB29845E6D803B0BDE8F0830368DA :10B4400000211A7C90F83C30806B5A43D20001F006 :10B45000BBBB10B50446FFF7CBFF2046BDE810404C :10B4600001F0E5B810B50446436B80F83D101B6849 :10B470009847636B2046BDE810405B68184710B5DD :10B4800090F8873004460BB1FFF7D9FF2046BDE89E :10B4900010400021FFF7E6BF38B50446FFF7A8FFCC :10B4A00094F83C3094F83D501D442368EDB25B7C29 :10B4B000AB4204D8204601F0BAF8002038BD94F819 :10B4C000873013B12046FFF7BAFF20462946FFF721 :10B4D000C9FF0120F2E72DE9F0479DF824900746C7 :10B4E00019F0010F0C4616461D469DF8208012D01B :10B4F000531C6918A8EB0202DBB2D2B2C9B200F049 :10B50000F8FB631CA8EB0402A9193846DBB2D2B2DF :10B51000C9B200F0EEFB19F0020F13D0731CA8EBB8 :10B520000602291B3846DBB2D2B2C9B200F0E1FBF9 :10B53000631CA8EB0402A91B3846DBB2D2B2C9B225 :10B5400000F0D7FB19F0080F0FD0731C29194246E1 :10B550003846DBB2C9B200F0CCFB631CA9194246E5 :10B560003846DBB2C9B200F0C4FB19F0040F11D0A9 :10B57000291B731C42463846DBB2C9B200F0B9FB46 :10B580000134A91B42463846E3B2C9B2BDE8F047D0 :10B5900000F0AFBBBDE8F0872DE9F74F91461C46A0 :10B5A00009F10105013325440B448846121B091B90 :10B5B000EDB20095DBB2D2B2C9B282469DF830B08E :10B5C00000F0C5FB88B14346224600215046CDE934 :10B5D000009BFFF780FF0026C4EBC417C4F10105F0 :10B5E0007F006DB27FB2B44202D803B0BDE8F08FE5 :10B5F000002D05DBBB1C013C5FB22B44E4B25DB205 :10B600000136F6B205EB4605434622463146504622 :10B61000CDE9009B01356DB2FFF75DFFE3E710B5A3 :10B620000446FFF72CFF2046FFF736FF01460028AF :10B63000F9D12046BDE81040FFF714BF082303707E :10B64000004870476C0F002030B585B00D46009360 :10B6500009491346094A044601F00EF80DF10F009E :10B66000FFF7ECFF064B01469DF80F2020460095A2 :10B6700000F035FE05B030BD3DC500081DC4000812 :10B6800047BE00084218435C507800EB032080B2AC :10B690007047012B05D0022B05D033B91044C0B23E :10B6A00070470844FBE7801AF9E7401AF7E7012BD7 :10B6B00005D0022B05D033B90844C0B27047801AB8 :10B6C000FBE7401AF9E71044F7E70020704738B568 :10B6D0000B780D4603704B78044643708B7883706B :10B6E000CB78C3700B7903714B7943718B7983717C :10B6F000CB79C3710B7A03724B7A43728B7A837264 :10B70000CB7AC3720B7B03734B7B43738B7B83734B :10B71000CB7BC3730B7C112103742846FFF7B2FF68 :10B72000132160822846FFF7ADFF1521A08228462D :10B73000FFF7A8FFE08238BD70B5847A036862180D :10B740001D78D2B2072A45FA04F507D8EBB2827207 :10B750004FF0FF30884023EA000070BD5E1C066099 :10B760005B78C4F10804E4B2A3402B43083ADBB28F :10B77000D2B2ECE738B5002300F15805044680F852 :10B780006230816590F86C102846FFF7D5FF94F879 :10B790006D1084F860002846FFF7CEFF94F88630DD :10B7A00084F8610084F86430B3FA83F35B0984F8A9 :10B7B000653038BD10B5FFF7BFFF01234C1EE4B262 :10B7C000A340C01A40B210BD2DE9F04F04460E460A :10B7D00087B090F85E5090F85F70059294F860B072 :10B7E0004FFA87F9ABEB0503DBB2B3429A460393FA :10B7F00094F85D304A4669B2049394F85C0094F87A :10B80000663028BFB246FFF752FF80460498FFF724 :10B8100040FF05990246A9B194F8641084F8861097 :10B82000009341465346204600F0F4F9039B35440B :10B830009E42EDB20DD3A5EB0B050137EEB2FFB280 :10B840000025CBE794F863100029EFD194F8651038 :10B85000E4E784F85E5084F85F9007B0BDE8F08FAD :10B860002DE9F74F044600F15807FFF783FF94F8DE :10B870006E10384694F96190FFF79CFF94F86F10B2 :10B8800083463846FFF796FF94F870100646384610 :10B89000FFF790FF94F960A08046BAF1000F4DDDEC :10B8A0005FFA89F5AA19524252B2594694F86630A5 :10B8B00094F85C00FFF7FBFE84F85C00064694F801 :10B8C0005D00FFF7E6FE024684F85D00032B5BD8BF :10B8D000DFE803F00238425006EB0A032918DBB216 :10B8E000C9B200912046314600F031FA30B300234E :10B8F000A4F85E3094F86A103846FFF71DFF94F8FC :10B900006B1006463846FFF717FF05460022314602 :10B910002046FFF759FF294620460122FFF754FF32 :10B9200001213846FFF708FF0028EFD194F95F3076 :10B930004B45DFDB94F8643084F88630404603B032 :10B94000BDE8F08FC5F10105731C354400EB0A0119 :10B95000DBB2C9B2EEB2C4E7CAF1010AC5F1010512 :10B96000731CB2440544411CDBB2C9B2EAB25FFAAF :10B970008AF6B6E7CAF1010A35448244411CEBB2AB :10B98000C9B25FFA8AF2ACE701463346A9E7036D14 :10B99000FF2970B503F117030D4612D8602909D9A4 :10B9A000B0F87C201344587818B11A78AA4206D10E :10B9B000981C70BD4029F6D9B0F87A20F2E703440C :10B9C000F1E7B0F87E209C18264600213046FFF7AC :10B9D00059FE022104443046FFF754FE854206F129 :10B9E0000406F2D8208840BA80B20028E1D085420F :10B9F00001D1E01CDDE7A3781C44F3E738B5044629 :10BA0000FFF7C5FF0146B8B104F158052046FFF71E :10BA1000B1FE94F86E102846FFF7CCFE94F86F1034 :10BA200084F884002846FFF7C5FE284694F8701075 :10BA3000BDE83840FFF7BEBE38BD2DE9F84300240D :10BA40000F4680F860400546264600F06FFC4FF632 :10BA5000FF784FF6FE79013F17F8011F28466B6803 :10BA600098474045014608D04845F5D02846FFF79D :10BA7000C5FFC4B22644F6B2EEE795F9602032B1B4 :10BA800095F88430134433441B1B03F0FF06304603 :10BA9000BDE8F883F8B51F4690F8663004460E46B8 :10BAA0001546032B07D8DFE803F002151A1E436D75 :10BAB00098472844C5B23946204684F85C6084F82B :10BAC0005D50FFF764FF014618B12046FFF7C8FE3E :10BAD000C0B2F8BD436D9847301AC6B2EBE7436D6C :10BAE0009847281AE6E7436D98473044F5E72DE973 :10BAF000F0471E4607460C4615464FF0000A00F078 :10BB000015FC4FF6FF784FF6FE79013E7B6838460C :10BB100016F8011F9847404503461BD04845F5D00D :10BB20002A4621463846FFF7B5FF97F86630032BC3 :10BB300005D8DFE803F002080B0D0444E4B25044DA :10BB40005FFA80FAE2E70544EDB2F8E7241AF5E778 :10BB50002D1AF9E75046BDE8F087000010B4024CFA :10BB6000446010BCFFF7C3BF1DC30008036D10B5D0 :10BB7000CBB190F9754090F9761090F8813080F84B :10BB8000824080F8831073B1012B0DD190F977308A :10BB9000A342B8BF234680F8823090F978309942AA :10BBA00001DD80F8833010BD90F9742090F9723077 :10BBB00013449C42B8BF80F882309142C8BF80F8DD :10BBC0008320F0E7014B4365704700BFCBB6000808 :10BBD000026D10B58A42044608D001656830FFF74F :10BBE00076FD2046BDE81040FFF7C0BF10BD000045 :10BBF000014B4360FFF721BF1DC3000870B490F8EC :10BC000040609DF80C50046B921BA4460395D2B281 :10BC100070BC6047F0B490F880409DF81050002C44 :10BC20003AD0002B38D0012B04D0022D2BD101317A :10BC3000C91AC9B215F0010530D190F847409442B5 :10BC40002AD890F84840944226D90B44DCB28C4262 :10BC500090F8457090F846601CD28E4219D9741E37 :10BC6000E4B2A74218D2B94238BF3946A64294BFBF :10BC7000C1EB0603C1EB0403446B0495A468DBB27B :10BC8000A446F0BC6047032D02BF0132D21AD2B2E3 :10BC9000D0E739468E42E4D8F0BC704790F8454072 :10BCA0008C42F9D890F846408C42F5D91344DCB266 :10BCB000944290F8477090F8486010D296420DD99F :10BCC000741EE4B2A742E7D2BA4238BF3A46A6424F :10BCD00094BFC2EB0603C2EB0403CDE73A4696429B :10BCE000F0D8D9E713B500240094FFF793FF02B012 :10BCF00010BD13B501240094FFF78CFF02B010BDF6 :10BD000073B590F84760964210D890F84860964214 :10BD10000CD990F845508D4208D890F846308B42A7 :10BD200004D9002300930123FFF774FF02B070BD14 :10BD30008A4206D2834208D89A4294BF002001204A :10BD400070478342F8D8002070470120704770B5D3 :10BD500004460D461E4690F848109DF8103090F8A5 :10BD60004700FFF7E5FF48B133462A4694F84610EE :10BD700094F84500BDE87040FFF7DABF70BD2DE9CB :10BD8000F74F9DF8309099428CBFA1EB0308A3EBCD :10BD900001084A450C4615461E465FFA88F812D936 :10BDA000A2EB0907FFB2B84517D33B46B44247465A :10BDB000984605D92B464D469946234634461E469D :10BDC0004FF0000B0FE0A9EB0207FFB2B845ECD231 :10BDD0004E46144699460D4603E04C461D4616460F :10BDE00089464FF0010B4D4534BF4FF001094FF02C :10BDF000FF39FE2E28BFFE2647F3470AF6B2B442AB :10BE000002D903B0BDE8F08FBBF1000F18D12A466C :10BE10002146AAEB080A0190FFF772FF5FFA8AF346 :10BE20004FFA8AFABAF1000FBCBF4D44DB1904F196 :10BE300001040198BCBFEDB24FFA83FAE4B2DEE729 :10BE400022462946E5E7F0B5012490F8865002F035 :10BE50000706B440012D9DF81470E4B216D82546AB :10BE600016D0D0F800C002F0F8029CF810E00EFBEB :10BE70000211826B11446FB90A78013B2A43624078 :10BE800013F0FF0301F8012BF6D1F0BD0025E8E720 :10BE90000024E6E70A7801362A436240013B16F0A7 :10BEA00007060A70DBB20CD190F83E20114490F8DE :10BEB0008620012A0AD80BD001242546002BE9D17F :10BEC000E3E76D006400EDB2E4B2F7E70124F5E7C3 :10BED0001546F3E7B0F90810B0F90A3010B58B42F7 :10BEE00016DD83898288C4881344C2899BB22244A8 :10BEF00094B212B2002A8381C28105DD0288134404 :10BF000083814388E31AC38101310181012010BD7F :10BF10000020FCE7037E0131C9B28B428CBF08468A :10BF200000207047037E0139C9B28B429CBF03F1E8 :10BF3000FF33D9B20846704718232DE9F04703FBB9 :10BF400000F5DFF88C9009F11C067419217D484634 :10BF500009EB8103B3F90280236939F9217098470D :10BF600039F820A009EB8002BBB2B2F80290AAEB2C :10BF70000301B2F902C009B21FFA88F2A9EB020E5E :10BF800000290FFA8EFE1DDA0132A2EB09024FF0F2 :10BF9000FF39A3EB0A031BB212B22075A4F802E02A :10BFA000A4F80AC0A4F80880A78126F80590E281C9 :10BFB00093FBFEF291FBFEF10EFB1233A180E380B6 :10BFC000BDE8F0870B464FF001090022E5E700BF0E :10BFD0006C130020182370B50546094E03FB01645D :10BFE00094F83010E36A3046984706EB8003B3F9C3 :10BFF00002300146AB4202D184F83000F2E770BD56 :10C000006C13002000222DE9F041524B524C0546A2 :10C010006364524B0121E362B4F9023094461E4638 :10C0200094F818E084F83020CFB2BE4563D8BCF154 :10C03000000F01D084F830209B1B1BB26383002BC0 :10C0400070D094F830300121304684F84830FFF742 :10C05000C1FF00213046FFF7BDFF012394F83020D7 :10C06000637694F8483034F9222034F923309A4228 :10C0700052D0002363760020B4F91A60FFF75CFF0A :10C080000120FFF759FF637E2BB13548FFF722FFF0 :10C090003448FFF71FFF324F07F11808B4F93C206E :10C0A000002A1BDB95F844309A4217DAB4F928309D :10C0B000B4F94000834237DA00280FDB95F84310CB :10C0C0008B420BDA23EAE3738142D8BF08B2D9B2BC :10C0D000431A2846DBB2D2B2FFF704FE3846FFF718 :10C0E000F9FE80B34046FFF7F5FE78B3013E36B265 :10C0F000002ED3DC16E004EB8100B0F90200013120 :10C100008342B8BF0346B042A6BF174630464FF041 :10C11000010C3A46064687E7638B013B1BB26383FB :10C12000002BA8D1BDE8F081002BD7DB95F8431098 :10C130008842D3DA0028B8BF00239942D8BF0BB297 :10C14000C1B25B1AC5E7FFF7F7FEC7E70120FFF7AB :10C15000F3FEC7E715BF00086C13002025BF0008D9 :10C1600088130020A0130020F0B4094CBDF9107012 :10C17000A3800323BDF91460BDF9185021806280AB :10C18000E780268165812376F0BCFFF73BBF00BFC7 :10C190006C13002070B590F83C100268CB0080F85A :10C1A0003F30137C90F83D501F2B28BF1F23DB002E :10C1B00080F83E30EB00DBB280F84030547C4E1902 :10C1C000A642C4BF641BE1B280F8413003EBC10357 :10C1D00080F84230F02380F84330918A994298BF2A :10C1E0000B4680F84330D38A80F8443070BD30B4B9 :10C1F00090F844409DF80850A21A90F84340D2B2FB :10C20000611AC9B23DB9013AC91AD2B2C9B202958E :10C2100030BCFFF7F3BC012D01BF01F1FF31D21A91 :10C22000C9B2D2B2F3E713B590F84C30044600938C :10C2300090F84A3090F84B2090F84910FFF787FDAE :10C2400018B984F8800002B010BD012394F845208D :10C2500084F8803094F849309A4238BF84F84530E9 :10C2600094F8462094F84A309A4288BF84F84630C1 :10C2700094F8472094F84B309A4238BF84F84730FE :10C2800094F8482094F84C309A4288BF84F848309B :10C29000D9E7002390F8432080F8473080F84530F4 :10C2A00080F8462090F8443090F84220934224BF12 :10C2B0009A1A80F8472090F841209B1A80F848305D :10C2C000FFF7B1BFFFF766BF002280F84920FF22C9 :10C2D000436BA0F84A2080F84C205B68184770B583 :10C2E0000025036340F201130446049E80F83C20BD :10C2F00080F83D5080F8635080F88550A0F8863073 :10C30000816333680565466398472046FFF7DCFF85 :10C310002046FFF757FC84F8665070BD19B10A2912 :10C3200001D088B270474FF6FF707047002380F845 :10C330002730704710B404690A46A4460023202120 :10C3400010BC604710B404691346A4460A4610BCEA :10C350001721604707B58DF807100DF1070201217D :10C36000FFF7F0FF03B05DF804FB10B4C4680A46A1 :10C37000A4460023152110BC604710B4C4680A46C7 :10C38000A4460023162110BC604710B4C4681346AD :10C39000A4460A4610BC17216047002310B4C468A5 :10C3A0001A46A446182110BC6047002310B4C46884 :10C3B0001A46A446192110BC604773B505460C46C1 :10C3C000217819290DD8172919D80ED014290AD97E :10C3D000627800232846EE688DF80720B0470234C3 :10C3E000EEE7FE2912D002B070BD63780121284625 :10C3F0000DF107028DF80730FFF7C7FFEFE70023C5 :10C4000028461A46EE680134B047D9E762782921F8 :10C4100028468DF8072000F012F9E0E72DE9F041F9 :10C420001F46A1F1140304460D461646052B1BD8E2 :10C43000DFE803F01003030D10100021FFF77AFF6F :10C4400031462046FFF786FF0120BDE8F08101213B :10C45000FFF770FFD4F810E03B46324629462046ED :10C46000F446BDE8F04160470020EEE70B39F8B52F :10C47000044615461E46042955D8DFE801F003544A :10C480000C1B29002AB929492046FFF796FF0120F5 :10C49000F8BD2749F8E73AB92649FFF78EFF236828 :10C4A0009B7C84F82230F2E72349FFF786FF23685C :10C4B000DB7CF6E7FFF771FF81212046FFF755FF90 :10C4C00029462046FFF759FF2046FFF76EFFDEE7BB :10C4D000FFF763FF737994F82270402107EBC307DD :10C4E00007F0FF072046FFF740FF390941F0100130 :10C4F0002046FFF73AFF07F00F012046FFF73DFF08 :10C50000B179204641F0B001FFF737FF317920467D :10C51000C900326801F0F801013DFFF736FF15F060 :10C52000FF05F3D1D0E70020B2E700BFF3E1000838 :10C53000F8E10008B0E10008B7E1000838B50446AA :10C540000D46FFF793FF50B9092D0AD00A2D07D1E8 :10C55000204600F014F820460449FFF72EFF012082 :10C5600038BD2046024900F005F8F8E7BEE10008B2 :10C5700000E2000801608B7C80F82230704738B5FB :10C58000002328211A4645690446A84700231421A0 :10C590001A462046E568A847204601224B2100F0B4 :10C5A0004EF8236820461A79292100F048F82046E1 :10C5B00000224B2100F043F8236820461A792921F4 :10C5C00000F03DF8204601224B2100F038F82368A6 :10C5D00020465A792921BDE8384000F030B813B51B :10C5E0008DF80430049B8DF805108DF8062000931B :10C5F00001226B460F218468A04702B010BD0023C2 :10C6000010B484681A46A446092110BC6047002370 :10C6100010B484681A46A4460A2110BC604710B4BE :10C6200084680A46A44600230B2110BC60470023FF :10C6300010B484681A46A446102110BC604710B498 :10C6400044690023A44610BC6047002070470000E6 :10C650000023036080F82330C3848361FF23054AED :10C6600080F82430C0E90222C0E9042280F8293091 :10C67000704700BF4BC60008F8B516461D46069F1A :10C68000FFF7E6FFC0E90216C0E90457BDE8F8402D :10C69000FFF7B5BF00F000B800F0C2B938B50446E6 :10C6A00000F092F8214605462046F4F76BFC70B97D :10C6B00000212046F4F75CFC48B900212046F4F73D :10C6C0002FFC30B100F0BEFA2223064D036028464D :10C6D00038BD00F0B7FA212303600348BDE83840B5 :10C6E00000F004B8000080FF1DE200080048704719 :10C6F0000000C07FF8B5C1F30A57A7F2FF32132A32 :10C700000B4605460C4618DC002A09DA013201F016 :10C71000004303D143F07F5343F44013002229E048 :10C72000164810410140294311D04FF4002141FA2D :10C7300002F2134423EA0003F0E7332A0ADDB2F5DC :10C74000806F04D10246F3F711FD05460C462846DA :10C750002146F8BD4FF0FF30A7F21347F8402842BA :10C76000F5D0C2F1330101228A40521928BF0133AA :10C7700022EA000219461046E7E700BFFFFF0F005C :10C78000C0F3C7537F3B162B014610B514DC002BBA :10C7900007DA013300F0004101D141F07E51084633 :10C7A00010BD084A1A411042F9D04FF480011941D6 :10C7B000014421EA0201F2E7802BF0D1F4F714F9E9 :10C7C0000146ECE7FFFF7F0030F000422DE9F84F13 :10C7D0000146034606D100214FF04C40F4F7C0FA61 :10C7E000BDE8F88F002803DAF4F7FCF80021F5E73C :10C7F000B0F1FF4F02DBF4F7F7F8F1E7B0F5000F07 :10C8000035DA4FF09841F4F7F7F96FF01802034664 :10C81000C3F31604DE15714B7F3E234403F400007E :10C8200080F07E5016444FF07E51204306EBD356E5 :10C83000F4F7D8F86A4B04F10F0213400546002BB9 :10C840003AD10021F4F76CFB98B1002E00F0C480BF :10C850003046F4F77DF963490546F4F7CDF96249AE :10C8600004462846F4F7C8F901462046C3E70022EB :10C87000CEE75E492846F4F7BFF901464FF07C50F9 :10C88000F4F7B0F8294604462846F4F7B5F901460E :10C890002046F4F7B1F904460EB921466FE0304660 :10C8A000F4F756F94F490746F4F7A6F90646384615 :10C8B0004D49F4F7A1F972E04FF08041F4F794F894 :10C8C00001462846F4F74CFA81463046F4F740F921 :10C8D000494680464846F4F78FF901468346F4F707 :10C8E0008BF907464249F4F787F94249F4F77CF897 :10C8F0003946F4F781F94049F4F776F83946F4F708 :10C900007BF93E49F4F770F85946F4F775F93C495C :10C9100083463846F4F770F93A49F4F765F8394632 :10C92000F4F76AF93849F4F75FF83946F4F764F92F :10C9300001465846F4F758F8DFF8D0A0C4F557136D :10C94000A24403F5227343EA0A03002B074630DDB5 :10C950004FF07C512846F4F74FF92946F4F74CF98B :10C96000014604463846F4F73FF84946F4F744F9DF :10C97000074646B901462046F4F734F801462846F2 :10C98000F4F730F82CE717494046F4F735F9164923 :10C9900006464046F4F730F93946F4F725F80146E3 :10C9A0002046F4F71FF82946F4F71CF801463046F4 :10C9B000E6E701462846F4F715F84946F4F71CF96E :10C9C0000446002E3FF469AF06494046F4F714F9D7 :10C9D0000549064640466CE7002001E720FB4A0077 :10C9E000F0FF7F008071313FD1F71737ABAAAA3E25 :10C9F0009788173E25333A3E2549923EABAA2A3FF7 :10CA00004FD01C3E298E633ECDCCCC3E305CCFFF58 :10CA1000024B0146186800F02BB800BF3C02002012 :10CA2000024B0146186800F04FB900BF3C020020DD :10CA300070B50E4E0C463168054611B900F0F2F89B :10CA400030602146284600F0EDF8431C0AD0C41C93 :10CA500024F00304A04207D0211A284600F0E2F88F :10CA6000013001D14FF0FF34204670BDBC130020CF :10CA70002DE9F843CD1C25F0030508350C2D38BFF2 :10CA80000C25002D074601DBA94205D90C23002601 :10CA90003B603046BDE8F883DFF8D08000F068F8EE :10CAA000D8F800301C465CBB29463846FFF7C0FF6B :10CAB000431C044655D1D8F800402646002E45D1E7 :10CAC000002C48D023683146384604EB030900F0B7 :10CAD000A9F881453FD1216838466D1A2946FFF7EC :10CAE000A7FF013037D023682B442360D8F80030EB :10CAF000002B38D05A68A2422BD100225A600FE096 :10CB00002268521B1FD40B2A17D96119A342256032 :10CB100018BF5960636808BFC8F8001062514B60C5 :10CB2000384604F10B0600F029F826F00706231D0D :10CB3000F21AAED09B1BA350ABE7A3426268DDD1D3 :10CB4000C8F80020ECE723466468ACE73446766812 :10CB5000B4E71346CCE70C2338463B6000F00EF8F0 :10CB600097E72560DCE75B60FFDE00BFB8130020BD :10CB7000014800F091B800BFFC140020014800F00B :10CB80008CB800BFFC1400200EB46FF0004100B55B :10CB90009CB01DAB0290069007910491084809498A :10CBA00053F8042B0591006802A9019300F02EF9B7 :10CBB0000022029B1A701CB05DF804EB03B07047B2 :10CBC0003C0200200802FFFF03460244934200D1CA :10CBD000704703F8011BF9E710B56AB101398418F1 :10CBE00010F8012B11F8013F9A4203D1A04201D065 :10CBF000002AF5D1D01A10BD1046FCE7034610B547 :10CC0000013932B111F8014F013A03F8014B002C00 :10CC1000F7D100211A44934200D110BD03F8011B43 :10CC2000F9E7000038B50023054D044608462B609F :10CC3000FEF78EFA431C02D12B6803B1236038BD86 :10CC4000F8140020014B1868704700BF3C02002018 :10CC500070B500260C4D0D4C641BA410A64209D1E2 :10CC600000F0C6FB00260A4D0A4C641BA410A64225 :10CC700005D170BD55F8043B98470136EEE755F8ED :10CC8000043B98470136F2E74CE200084CE200080A :10CC90004CE2000854E2000870477047034611F860 :10CCA000012B03F8012B002AF9D170470A44914265 :10CCB00000F1FF3300D1704710B511F8014B9142DC :10CCC00003F8014FF9D110BD38B50546002940D011 :10CCD00051F8043C0C1F002BB8BFE418FFF748FFC5 :10CCE0001C4A136833B9636014602846BDE83840B5 :10CCF000FFF744BFA34208D9206821188B4201BF27 :10CD000019685B6809182160EDE71A465B680BB18A :10CD1000A342FAD911685018A0420BD120680144EF :10CD2000501883421160E0D118685B6808441060B5 :10CD30005360DAE702D90C232B60D6E7206821186C :10CD40008B4201BF19685B680918216063605460F9 :10CD5000CBE738BDB81300202DE9F0471F468E6899 :10CD60008246BE420C4690460B682CD88A8912F443 :10CD7000906F26D06569096905EB4505A3EB0109AC :10CD800005EBD5757B1C4B446D109D4238BF1D468D :10CD9000530527D52946FFF76BFE064660B34A4682 :10CDA0002169FFF783FFA38923F4906343F0800395 :10CDB000A38126614E4426603E466561A5EB0905C8 :10CDC000A560BE4200D93E4632464146206800F08A :10CDD000AFFA0020A3689B1BA36023683344236041 :10CDE000BDE8F0872A4600F0CBFA06460028E0D1DD :10CDF00050462169FFF768FF0C23CAF80030A38969 :10CE00004FF0FF3043F04003A381E9E72DE9F04FF5 :10CE100098468B8907461B060D4614469DB00ED5D5 :10CE20000B6963B94021FFF723FE2860286120B910 :10CE30000C233B604FF0FF30D0E040236B610023B8 :10CE4000099320238DF8293030234FF00109CDF8C4 :10CE50000C80DFF8A0818DF82A3023469A4613F81B :10CE6000012B0AB1252AF9D1BAEB040B0BD05B4692 :10CE7000224629463846FFF76FFF013000F0A980AF :10CE8000099A5A4409929AF80030002B00F0A180C8 :10CE900000234FF0FF32CDE905230AF1010A049384 :10CEA00007938DF853301A935446052214F8011B4A :10CEB000504800F057FA049AD8B9D00644BF20234E :10CEC0008DF85330110744BF2B238DF853309AF857 :10CED00000302A2B15D0544600204FF00A0C079A38 :10CEE000214611F8013B303B092B4DD9B0B10792D7 :10CEF00014E0A0EB080309FA03F31343A2460493DA :10CF0000D2E7039B191D1B680391002BBBBF5B423B :10CF100042F0020207930793B8BF049223782E2BA6 :10CF20000CD163782A2B34D1039B02341A1D1B6861 :10CF30000392002BB8BF4FF0FF330593DFF8B8A082 :10CF400003225046217800F00DFA38B14022049BAC :10CF5000A0EB0A00824013430134049314F8011B30 :10CF6000062226488DF8281000F0FCF9002838D059 :10CF7000234B1BBB039B073323F0070308330393A7 :10CF8000099B3344099368E70C4601200CFB0232ED :10CF9000A6E700234FF00A0C1946013405932046FA :10CFA00010F8012B303A092A03D9002BC6D005917D :10CFB000C4E7044601230CFB0121F0E703AB009317 :10CFC0002A4638460F4B04A9AFF30080421C0646A0 :10CFD000D6D1AB895B063FF52DAF09981DB0BDE8F2 :10CFE000F08F03AB00932A463846064B04A900F0A5 :10CFF0007DF8EBE718E200081EE2000822E20008D4 :10D000000000000059CD00082DE9F047164699466A :10D010008A680B6907469342B8BF1346336091F89C :10D0200043200C46DDF820800AB1013333602368C9 :10D03000990642BF336802333360256815F0060550 :10D0400006D104F1190AE36832689B1AAB422BDC63 :10D0500094F84320131E226818BF0123920630D48F :10D060004946384604F14302C047013023D02368C3 :10D07000226903F00603042B14BF002533684FF028 :10D08000000608BFE56804F11A0408BFED1A54F859 :10D09000123C08BF25EAE5759342C4BF9B1AED1800 :10D0A000B5421AD1002008E00123524649463846CD :10D0B000C047013003D14FF0FF30BDE8F0870135A4 :10D0C000C1E73020E11881F843005A1C94F845105C :10D0D0002244023382F84310C2E701232246494624 :10D0E0003846C0470130E6D00136D9E72DE9FF4781 :10D0F0000F7E9146782F80460C469A460C9D01F192 :10D10000430207D8622F0AD8002F00F0D580582F8D :10D1100000F0C18004F1420584F842703AE0A7F1C2 :10D120006303152BF6D801A151F823F085D100082F :10D1300099D1000815D1000815D1000815D10008B3 :10D1400015D1000899D1000815D1000815D10008A3 :10D1500015D1000815D100089FD20008C5D10008DC :10D1600059D2000815D1000815D10008C1D2000815 :10D1700015D10008C5D1000815D1000815D1000847 :10D1800061D200082B681A1D1B682A6004F1420551 :10D1900084F842300123A0E020682B68070603F1E1 :10D1A0000401296001D51E6803E04606FBD5B3F9EA :10D1B0000060002E03DA2D23764284F843300A23E0 :10D1C000594812E02B682068191D2960050601D511 :10D1D0001E6802E04106FBD51E886F2F0CBF082396 :10D1E0000A235148002184F843106568002DA8BF28 :10D1F0002168A560A4BF21F0040121600EB9002DB3 :10D200004BD01546B6FBF3F103FB1167C75D05F87C :10D21000017D3746BB420E46F4D9082B0BD123685B :10D22000DE0708D5236961689942DEBF302305F81F :10D23000013C05F1FF35521B22614B462146404619 :10D24000CDF800A003AAFFF7DFFE01304AD14FF06E :10D25000FF3004B0BDE8F087236843F0200323606B :10D260007827324884F84570236829681F0651F8EA :10D27000046B02D45F0648BFB6B2DF0748BF43F075 :10D280002003296048BF23601EB9236823F02003D0 :10D2900023601023A6E72448E4E71546BDE72B6882 :10D2A0002668181D6169286035061B6801D519605C :10D2B00002E07006FBD51980002315462361BCE708 :10D2C0002B6800211A1D2A601D686268284600F03C :10D2D00049F808B1401B606063682361002384F84B :10D2E0004330AAE72A46494640462369D0470130E1 :10D2F000ADD023689B0713D4E068039B9842B8BF66 :10D300001846A6E70123324649464046D047013039 :10D310009DD00135E36803995B1AAB42F2DCEBE781 :10D32000002504F11906F5E729E200083AE20008B1 :10D33000884210B501EB020402D98442234607D883 :10D34000431EA14208D011F8012B03F8012FF8E782 :10D35000014602448A4200D110BD13F8014D02F883 :10D36000014DF7E7034610B5C9B20244934218468F :10D3700001D1002003E0047801338C42F6D110BDC6 :10D380002DE9F041804614460E4621B91146BDE80C :10D39000F041FFF76DBB2AB9FFF796FC25462846FA :10D3A000BDE8F08100F01BF88442074602D8B4EBD8 :10D3B000500F12D821464046FFF75AFB0546002879 :10D3C000EDD0BC422246314628BF3A46FFF76EFCFC :10D3D00031464046FFF778FCE1E73546DFE751F894 :10D3E000043C181F002BBCBF0B58C018704700002E :10D3F000F8B500BFF8BC08BC9E467047F8B500BF42 :08D40000F8BC08BC9E46704711 :10D40800C80004014A019001C8002C019001F401F0 :10D418004000200001010000E3D40008EFD4000818 :10D42800F8D40008B1DA0008BDDA0008C3DA000849 :10D43800CADA0008D4DA0008E0DA0008EBDA0008F3 :10D44800F6DA0008FFDA00080CDB000819DB000830 :10D4580026DB00082BDB000832DB000840DB000875 :10D468004EDB000858DB000861DB00086EDB0008B3 :10D478007CDB0008A0DA0008AADA000895DA0008C0 :10D488009BDA000875DA00087FDA000888DA0008F5 :10D4980095DA00089BDA0008020304050607080964 :10D4A8000A0B0C0D0E0F10100102020304050607EB :10D4B80008090A0B0C0D0E0F101001025431322D01 :10D4C800005431322D64656600454550524F4D0A6F :10D4D800726561640A6572726F720074656D706559 :10D4E800726174757265006475726174696F6E003B :10D4F8006261636B20746F206D656E7500000000BB :10D508000000000000000000000000000000000013 :10D518000000000000000000000000000000000003 :10D5280000000000000000000000000000000000F3 :10D5380000000000000000000000000000000000E3 :10D548000000000000000000774500087945000849 :10D558007D4500087F4500084F464600436F6C64D0 :10D568000052656164790049646C6500537462799E :10D5780000426F6F7374002532640046616E3A256D :10D58800336425630054756E650025326425630095 :10D5980054756E6520504944005265662320256401 :10D5A800005469703A005365743A20253364004F7B :10D5B8004B005B005D002825632D2563290041622F :10D5C8006F75740049524F4E202620486F742041D1 :10D5D80069722047756E00342E303800436F6E74C0 :10D5E800726F6C6C657220762E2573004E6F7620F4 :10D5F800203720323032330049524F4E00535442C4 :10D60800590047554E004B70203D20253564004B8E :10D6180069203D20253564004B64203D2025356474 :10D62800006070787C7870607E81A59999A5817E6C :10D638007E8181818181817E040044402E801B008F :10D64800F1E01B002E804440040010286828683848 :10D658003878387CFEFEFE7C385A999999999981D8 :10D66800995A3C7E7FFFFFFFFBF3623CFC020101FD :10D6780002FCFFFEFFFEFFFEFFFEFC00FC00FC00BC :10D68800FC00FC00FFFCFFFCFFFCFFFCFC00FC00B6 :10D69800FC00FC00FC00FC00FFFEFFFEFFFEFFFE9E :10D6A80001FF8007FFE01FFFF03FFFF87FC3FC7F0B :10D6B80001FC7E00FEFE00FEFC007EFC007EFC00FD :10D6C8007EFC007EFC007EFC007EFC00FEFE00FE70 :10D6D800FE00FC7F01FC7F87F83FFFF81FFFF00F7B :10D6E800FFC003FF00FFF800FFFE00FFFF00FFFF81 :10D6F80080FC3F80FC1FC0FC1FC0FC1FC0FC1F80BB :10D70800FC3F80FFFF00FFFE00FFF800FFFC00FC6D :10D71800FE00FC7F00FC3F00FC3F80FC1F80FC1FDC :10D72800C0FC1FC0FC0FE0FC0FE0070007000380EF :10D73800038001800180018003C003C00F701C3B7F :10D74800381F380F70003800000000C000E000707B :10D758000070006000C001C02B807FC0F180E0C075 :10D7680000E0007000780038001800000000000693 :10D77800000E201E7838FD70D7E003C0018001003C :10D7880001800380038001C000E000002000F80051 :10D79800FC00DE000603038F01FF03FE0380060082 :10D7A8000E001C003C003E000E00E03CFF3CE00088 :10D7B8000ED6000817D6000820D60008384444447E :10D7C8003800000060D5000800D6000805D600081B :10D7D8000AD600080A000403050504010611170209 :10D7E80000170017000000000001713024F1EABAA8 :10D7F8002E0FE4A688E66626472647262766FDB745 :10D80800139323932393337343547307925700312D :10D8180010EBF69AA68C8E6206F7FF8F0E1E043266 :10D8280021EFEE9AAE0E4AC828064D9B0ECFCE9237 :10D8380052925292920E4B4A884A88D2D21E7C400B :10D848003326F0EA9AEE0E88A868E648244724476B :10D8580024A78767296BAFC9A7A96B6B4D272467D6 :10D86800A68A0EE6AE003432F1EA5AA7A923842527 :10D87800644544654465248504A5E4A6E4C4D44904 :10D88800094A090A1D1C4C1C1CC8CA03C803C80342 :10D89800C803081F441E44003526EF6E1A5E1C5C40 :10D8A8004C4A4C4A0C6F2C63247120434532381281 :10D8B80049BC7169E5C4E00415CD01D91500362AC3 :10D8C800F1EADA0E0FA8C668064746454645C4D7AA :10D8D800584D1CCC5891504E50DE7A3B213B313983 :10D8E8003338434575407805371BEFEE1A7E40DA2A :10D8F800724270787678769676787678967678ED3D :10D90800F08600382CF1EABA0E0FA8D8D0914C8EC8 :10D918004C8E4C8E4CCECC4DADA3989C88189B9BBE :10D92800999C98F5F6926272A4AAE880F00A0039E8 :10D938002BF06ABA0C0FA68868E6660627462546C5 :10D948003D3DA498AB2832399818B2999E16911C7F :10D95800911C999BA19A3A1834030000000000001A :10D968000000000000000000E16C0008796D00086C :10D97800416D0008B16C0008F1700008C16C000826 :10D988005D6D0008C76C0008E36C0008D56C0008E2 :10D99800336D0008256D0008A96D0008CF6C0008DC :10D9A80000000000000000001F7200083373000828 :10D9B800F7710008DF71000821720008EB71000898 :10D9C80055720008DB720008E972000899720008B5 :10D9D800CD720008BF72000803720008F1710008D8 :10D9E80053656C6563742074697000454550524FE7 :10D9F8004D0A77726974650A6572726F72004163C5 :10DA080074697661746520746970004B45455000EF :10DA1800524545440054494C5400253164206465FE :10DA2800672E00253264206D696E0025336420431B :10DA38000025336420460025326420736563002581 :10DA480032646D20253264730043616C69627261CF :10DA5800746500486F742047756E002B253264206A :10DA680025630025336420732E0044700063616CC5 :10DA78006962726174650074756E652067756E0001 :10DA880074756E652067756E2050494400636C6537 :10DA980061720065786974006175746F6D6174698D :10DAA80063006D616E75616C00626F6F73742073D3 :10DAB8006574757000756E6974730062757A7A653D :10DAC80072006B6565702069726F6E007377697498 :10DAD800636820747970650074656D702E207374A6 :10DAE8006570006175746F2073746172740061757C :10DAF800746F206F6666007374616E646279207457 :10DB0800656D70007374616E6462792074696D6507 :10DB18000073637265656E20736176657200736168 :10DB280076650063616E63656C0063616C6962723F :10DB380061746520746970006163746976617465E5 :10DB480020746970730074756E652069726F6E0059 :10DB580067756E206D656E750072657365742063F8 :10DB68006F6E6669670074756E652069726F6E20E6 :10DB78005049440061626F757400000000000000A5 :10DB8800000000001D9600081D7E00083D7B00086F :10DB9800FF8400080000000000000000537C00081B :10DBA80049920008417B00081B850008000000001E :10DBB80000000000377D0008E99700083F7B000857 :10DBC8000D8500080000000000000000E99400082E :10DBD800F1A000082F7B00089D84000800000000C9 :10DBE800000000003D9000086B900008237B0008AF :10DBF800498400080000000000000000717F000850 :10DC0800398B00082D7B00088F8400080000000075 :10DC180000000000C57B000829850008357B000846 :10DC2800C784000800000000000000009B81000875 :10DC380021820008397B0008E38400080000000006 :10DC4800000000005583000891830008377B000816 :10DC5800D584000800000000000000000DA900089D :10DC6800F98D0008297B0008738400080000000073 :10DC78000000000067950008B98C00082B7B00089D :10DC88008184000800000000000000007F96000862 :10DC9800A1900008217B00083B84000800000000D8 :10DCA80000000000B37F0008798000083B7B000873 :10DCB800F18400080000000000000000998A0008B4 :10DCC800219E0008317B0008AB840008000000009A :10DCD80000000000977B0008E19000081F7B000807 :10DCE8002D8400080000000000000000437B0008AD :10DCF80069890008337B0008B98400080000000027 :10DD0800000000006D7B0008FD890008257B0008E5 :10DD1800578400080000000000000000BDA40008AF :10DD280073A50008277B0008658400080000000030 :10DD380000000000010203040607080900000000B3 :10DD4800010203041019C800F40150000A00740EFF :10DD5800C201B400600003020304030504070F00B6 :10DD6800FD09FD0BFE016E02DE0428200500C20736 :10DD78002107C9C3C721092207A4DE47E414230DDC :10DD880036CE4F940C4BD4322C510224136DBA5713 :10DD9800982D15254AB22D8912A5B2851100251393 :10DDA8004FC2CF30249912256D492D694AB4444C8D :10DDB8000026104EC2CF94255125AC6451A2454B84 :10DDC800002706A1DFC7102809ECBA5FD4D6C7061A :10DDD800290AECBA47D8D6A736002A0B35CE57A55C :10DDE800322D4D11002B0A2DC657180D5218012C33 :10DDF80008ABB68F2929012D068CCEC7102E061226 :10DE0800C3C7102F0E66BA6F310DD3300DD3304D06 :10DE18000130104EC2CF9084DA9428D1268AC99056 :10DE280000310A4FC25F38F76D1802320B4EC2CF6D :10DE3800908469B1E330330E4EC2CF908469694E45 :10DE4800C5644800340E4EC267A82551254B86315B :10DE58000D07350E4EC2C7214D07394DC564480020 :10DE6800360E4EC2CF90A4E9A0848EC9900037091F :10DE78004EC2C7B5D8DA06380F4EC2CF9084C664F2 :10DE8800484263322400390D4EC2CF90848EC9A017 :10DE98005686043A083AC3C7100F013B0AD3B68F17 :10DEA8001D53A4A4043C08CDC267D6B5033D08267B :10DEB800CEC71D1D063E09CDC247DAAD23003F0C73 :10DEC8004EC2CF908469B11DCC00400F4EC2CF9096 :10DED80084D290444A6449E341410D4EC297A84513 :10DEE8002DE13088C600420D4EC2C7A084C6610924 :10DEF8008DC302430C4EC2CF90846A8FC9900044F0 :10DF08000B4EC2C7A0847E1C1600450C4EC2C7210A :10DF1800AD0E4A5A1D06460B4EC2C721AD0E4ADA4F :10DF28000A470D4EC2CF90846A6D34264302480BCF :10DF38004EC247E8380CA26300490B4FC2C7218B79 :10DF4800FB360C014A0B4EC26F57D1980C09004B97 :10DF5800104EC247A825512513932CAA2561004CC1 :10DF6800094EC247DAAFC3004D0D4FC247BA2D154F :10DF7800299222D5354E0D4EC247B829919468A3EF :10DF880063004F0B4EC2CF90847E4C8604500C4EDB :10DF9800C2C7A084C661495B01510E56BECF9084AA :10DFA800BE4452920C7100520C4EC2C7A084C66186 :10DFB800091D03530F4EC2CF90846A3CC4A9980C24 :10DFC800090054094FC2C7218BFB0D550A4EC247A1 :10DFD800E88FC99000560F4FC2476A4DB228AB84EC :10DFE800491A6700570D4FC247EA299222A5B2ADD8 :10DFF80001580E4EC247684CA24CD4A224140359AF :10E008000C4FC2476A4DB24A1AB7015A0A4EC2C7E4 :10E0180035EC351D065B0963BFC710F54F035C0E71 :10E02800E6BA471AA7711AA7711AA7015D09E3BED4 :10E03800C7D43F0D015E089DDA5796D4025F060FDC :10E04800BAC72160069BE24756610B36C2CF30DA69 :10E05800A6249102620C4EC2475A1D94D0715800F2 :10E06800630A36C2CF90846A7910640B4EC26FCBB4 :10E07800303A268300650C36C2CF9084C3A0C6838D :10E0880000660ACCC297924553D609670D4EB6CFA3 :10E09800303A26835A191200680B4EC2475A1D940B :10E0A800D0630069094BC34F0E485D066A0AE3B6A0 :10E0B800570E487D5A006B0E4EC247DA9644954C6F :10E0C80089B2240C6C084BC387D42F036D0D37C25B :10E0D800C7258AA4488AA4482A6E0A36C247A49447 :10E0E80036D1186F0B36C2CF90848EC99000700C51 :10E0F8004EB6C7A0848EC3925601710B4EB6CF3070 :10E108003A2683DA00720A36C247A494C6B40A7360 :10E118000B36C2CF300F713A2C00740ACCC24F565E :10E128009AB24601750A36C247E836258914760B35 :10E1380036C2472826519B2801770E37C247144913 :10E148009114499154B100780C36C247984499A863 :10E15800454918790C4EB647E83119D4CA90007A67 :10E168000836C2C7B1E3307B0BFCB69792F514664C :10E178003D0A7C07E9BBC787007D0CFCB68798F58C :10E188001865BD48007E0716D28F64017F0500C25E :10E198000700000004FFFF0000000000C5C20008DF :10E1A80093C20008EFC100081815A115C819FF1877 :10E1B80015A015C019FF1815AE15D5168015A81687 :10E1C8003F15D316001540158D1614152016001589 :10E1D800A115C815DA1612158116CF15D916F1151D :10E1E800DB1640152E15A415A619FF1815AF19FF33 :10E1F8001815AE19FF0000000001140A64643232D9 :10E2080000127A00000428961008000080004000E0 :10E21800232D302B2000686C4C0065666745464707 :10E22800003031323334353637383941424344458A :10E2380046003031323334353637383961626364F9 :04E248006566000007 :08E24C0035010008D14F000864 :04E2540011010008AC :10E258000100000010000000010000006C03002015 :10E26800430043004300484F47554E42000000001A :10E2780042310000004232000000423300000042F8 :10E288003400000042325A00004243310000424349 :10E29800312E3542433200004243330000424331BD :10E2A8005A004243325A004243345A0042434631EC :10E2B800004243463200424346330042434634005C :10E2C800424346315A424346325A424346335A42FF :10E2D800434D320042434D3300424C000000425A45 :10E2E80000000043310000004332000000433300C7 :10E2F800000043340000004430380000443132004C :10E308000044313600004432340000443332000007 :10E3180044353200004434000000444C313200449B :10E328004C333200444C3532004431325A004432C6 :10E33800345A0044345A00004900000000494C0097 :10E348000000494C5300004A303200004A4C303239 :10E35800004A533032004B000000004B46000000DA :10E368004B4C0000004B520000004B465A00004B3B :10E37800525A00004B5500000057423200005744E3 :10E38800303800574431320057443136005744354D :10E39800320057490000004E312D30364E312D30B5 :10E3A800384E312D31304E312D31334E312D3136FD :10E3B8004E312D32304E312D32334E312D4C3131DC :10E3C80030303100313030320031303033003130CC :10E3D80030340031303035003130303600313030B3 :10E3E8003700313030380031303039003130313099 :10E3F80000313230310031323032003132303300C6 :10E40800313230340031323035003132303600317B :10E41800323037003132303800313230390031345F :10E42800303100313430320031343033003134305F :10E438003400313430350031343036000024F400F3 :10E4480000000000C01300202814002090140020B1 :10E4580000000000000000000000000000000000B4 :10E4680000000000000000000000000000000000A4 :10E478000000000000000000000000000000000094 :10E48800000000000000000000000000F001002073 :040000050800B299A4 :00000001FF ================================================ FILE: BINARY/F1-T12+858D_ssd1309.hex ================================================ :020000040800F2 :100000000050002099B2000819B100081BB1000887 :100010001DB100081FB1000821B100080000000058 :1000200000000000000000000000000023B10008F4 :1000300025B100080000000027B1000829B1000820 :10004000E1B20008E1B20008E1B20008E1B2000844 :10005000E1B20008E1B20008B94F0008E1B20008BF :10006000E1B20008E1B20008E1B200082DB10008D9 :10007000E1B20008E1B20008E1B20008E1B2000814 :10008000E1B20008E1B20008E1B20008E1B2000804 :10009000E1B20008E1B20008E1B20008E1B20008F4 :1000A000E1B20008E1B20008E1B2000839B100088D :1000B00045B10008E1B20008E1B20008E1B2000871 :1000C000E1B20008E1B20008E1B20008E1B20008C4 :1000D000E1B20008E1B20008E1B20008E1B20008B4 :1000E000E1B20008E1B20008E1B20008000000003F :1000F0000000000000000000000000000000000000 :0C01000000000000000000005FF808F1A3 :1001100010B5054C237833B9044B13B10448AFF341 :1001200000800123237010BD400200200000000069 :10013000ECD3000808B5034B1BB103490348AFF3E8 :10014000008008BD0000000044020020ECD300083D :10015000034613F8012B002AFBD1181A0138704707 :1001600081F0004102E000BF83F0004330B54FEA68 :1001700041044FEA430594EA050F08BF90EA020FD5 :100180001FBF54EA000C55EA020C7FEA645C7FEA68 :10019000655C00F0E2804FEA5454D4EB5555B8BF8B :1001A0006D420CDD2C4480EA020281EA030382EAFC :1001B000000083EA010180EA020281EA0303362D8E :1001C00088BF30BD11F0004F4FEA01314FF4801C61 :1001D0004CEA113102D0404261EB410113F0004F73 :1001E0004FEA03334CEA133302D0524263EB43032A :1001F00094EA050F00F0A780A4F10104D5F1200EC8 :100200000DDB02FA0EFC22FA05F2801841F1000122 :1002100003FA0EF2801843FA05F359410EE0A5F1F6 :1002200020050EF1200E012A03FA0EFC28BF4CF027 :10023000020C43FA05F3C01851EBE37101F00045DD :1002400007D54FF0000EDCF1000C7EEB00006EEBEA :100250000101B1F5801F1BD3B1F5001F0CD3490874 :100260005FEA30004FEA3C0C04F101044FEA4452CB :1002700012F5800F80F09A80BCF1004F08BF5FEA52 :10028000500C50F1000041EB045141EA050130BD32 :100290005FEA4C0C404141EB0101013C28BFB1F544 :1002A000801FE9D291F0000F04BF01460020B1FA8F :1002B00081F308BF2033A3F10B03B3F120020CDA62 :1002C0000C3208DD02F1140CC2F10C0201FA0CF040 :1002D00021FA02F10CE002F11402D8BFC2F1200CA5 :1002E00001FA02F120FA0CFCDCBF41EA0C0190405B :1002F000E41AA2BF01EB0451294330BD6FEA0404A4 :100300001F3C1CDA0C340EDC04F11404C4F120028E :1003100020FA04F001FA02F340EA030021FA04F3A0 :1003200045EA030130BDC4F10C04C4F1200220FAF7 :1003300002F001FA04F340EA0300294630BD21FA35 :1003400004F0294630BD94F0000F83F4801306BFFB :1003500081F480110134013D4EE77FEA645C18BFEF :100360007FEA655C29D094EA050F08BF90EA020F86 :1003700005D054EA000C04BF1946104630BD91EA7E :10038000030F1EBF0021002030BD5FEA545C05D181 :100390004000494128BF41F0004130BD14F58004C0 :1003A0003CBF01F5801130BD01F0004545F0FE4134 :1003B00041F470014FF0000030BD7FEA645C1ABF69 :1003C000194610467FEA655C1CBF0B46024650EAA0 :1003D000013406BF52EA033591EA030F41F40021CC :1003E00030BD00BF90F0000F04BF0021704730B552 :1003F0004FF4806404F132044FF000054FF0000127 :1004000050E700BF90F0000F04BF0021704730B5E7 :100410004FF4806404F1320410F0004548BF4042BC :100420004FF000013EE700BF42004FEAE2014FEA11 :1004300031014FEA02701FBF12F07F4393F07F4FEC :1004400081F06051704732F07F4208BF704793F0EF :100450007F4F04BF41F40021704730B54FF4607402 :1004600001F0004521F000411CE700BF50EA010205 :1004700008BF704730B54FF000050AE050EA0102AE :1004800008BF704730B511F0004502D5404261EB1E :1004900041014FF4806404F132045FEA915C3FF45F :1004A000D8AE4FF003025FEADC0C18BF03325FEAFC :1004B000DC0C18BF033202EBDC02C2F1200300FAAD :1004C00003FC20FA02F001FA03FE40EA0E0021FAD2 :1004D00002F11444BDE600BF70B54FF0FF0C4CF4C0 :1004E000E06C1CEA11541DBF1CEA135594EA0C0F72 :1004F00095EA0C0F00F0DEF82C4481EA030621EAAD :100500004C5123EA4C5350EA013518BF52EA0335E7 :1005100041F4801143F4801338D0A0FB02CE4FF099 :100520000005E1FB02E506F00042E0FB03E54FF0C9 :100530000006E1FB03569CF0000F18BF4EF0010EC1 :10054000A4F1FF04B6F5007F64F5407404D25FEABD :100550004E0E6D4146EB060642EAC62141EA555170 :100560004FEAC52040EA5E504FEACE2EB4F1FD0CB2 :1005700088BFBCF5E06F1ED8BEF1004F08BF5FEA30 :10058000500E50F1000041EB045170BD06F00046E2 :1005900046EA010140EA020081EA0301B4EB5C048F :1005A000C2BFD4EB0C0541EA045170BD41F4801187 :1005B0004FF0000E013C00F3AB8014F1360FDEBFAC :1005C000002001F0004170BDC4F10004203C35DA88 :1005D0000C341BDC04F11404C4F1200500FA05F30B :1005E00020FA04F001FA05F240EA020001F00042AC :1005F00021F0004110EBD37021FA04F642EB060122 :100600005EEA430E08BF20EAD37070BDC4F10C044B :10061000C4F1200500FA04F320FA05F001FA04F20F :1006200040EA020001F0004110EBD37041F10001FB :100630005EEA430E08BF20EAD37070BDC4F1200506 :1006400000FA05F24EEA020E20FA04F301FA05F26E :1006500043EA020321FA04F001F0004121FA04F216 :1006600020EA020000EBD3705EEA430E08BF20EAE6 :10067000D37070BD94F0000F0FD101F00046400020 :1006800041EB010111F4801F08BF013CF7D041EAA2 :10069000060195F0000F18BF704703F000465200A6 :1006A00043EB030313F4801F08BF013DF7D043EA77 :1006B0000603704794EA0C0F0CEA135518BF95EA2D :1006C0000C0F0CD050EA410618BF52EA4306D1D1B4 :1006D00081EA030101F000414FF0000070BD50EAD3 :1006E000410606BF1046194652EA430619D094EA5D :1006F0000C0F02D150EA013613D195EA0C0F05D147 :1007000052EA03361CBF104619460AD181EA03019A :1007100001F0004141F0FE4141F470014FF0000052 :1007200070BD41F0FE4141F4780170BD70B54FF0ED :10073000FF0C4CF4E06C1CEA11541DBF1CEA13556D :1007400094EA0C0F95EA0C0F00F0A7F8A4EB05044F :1007500081EA030E52EA03354FEA013100F0888046 :100760004FEA03334FF0805545EA131343EA12630F :100770004FEA022245EA111545EA10654FEA0026C4 :100780000EF000419D4208BF964244F1FD0404F57D :10079000407402D25B084FEA3202B61A65EB0305D9 :1007A0005B084FEA32024FF480104FF4002CB6EB96 :1007B000020E75EB030E22BFB61A754640EA0C0016 :1007C0005B084FEA3202B6EB020E75EB030E22BF56 :1007D000B61A754640EA5C005B084FEA3202B6EB97 :1007E000020E75EB030E22BFB61A754640EA9C0056 :1007F0005B084FEA3202B6EB020E75EB030E22BF26 :10080000B61A754640EADC0055EA060E18D04FEAE3 :10081000051545EA16754FEA06164FEAC30343EA83 :1008200052734FEAC2025FEA1C1CC0D111F4801F50 :100830000BD141EA00014FF000004FF0004CB6E749 :1008400011F4801F04BF01430020B4F1FD0C88BFE8 :10085000BCF5E06F3FF6AFAEB5EB030C04BFB6EBF3 :10086000020C5FEA500C50F1000041EB045170BDE6 :100870000EF0004E4EEA113114EB5C04C2BFD4EB13 :100880000C0541EA045170BD41F480114FF0000E97 :10089000013C90E645EA060E8DE60CEA135594EA13 :1008A0000C0F08BF95EA0C0F3FF43BAF94EA0C0F16 :1008B0000AD150EA01347FF434AF95EA0C0F7FF48B :1008C00025AF104619462CE795EA0C0F06D152EADF :1008D00003353FF4FDAE1046194622E750EA4106C3 :1008E00018BF52EA43067FF4C5AE50EA41047FF4D4 :1008F0000DAF52EA43057FF4EBAE12E74A0011D286 :1009000012F5001211D20DD56FF47873B3EB625269 :100910000ED44FEAC12343F0004343EA505323FA75 :1009200002F070474FF00000704750EA013002D1EA :100930004FF0FF3070474FF0000070474FEA410220 :10094000B2F1E04324BFB3F5001CDCF1FE5C0DD92D :1009500001F0004C4FEAC0024CEA5070B2F1004F77 :1009600040EB830008BF20F00100704711F0804F7A :1009700021D113F13872BCBF01F00040704741F43F :1009800080114FEA5252C2F11802C2F1200C10FA43 :100990000CF320FA02F018BF40F001004FEAC12327 :1009A0004FEAD32303FA0CFC40EA0C0023FA02F3CB :1009B0004FEA4303CCE77FEA625307D150EA0133A1 :1009C0001EBF4FF0FE4040F44000704701F0004071 :1009D00040F0FE4040F40000704700BF80F000404F :1009E00002E000BF81F0004142001FBF5FEA410307 :1009F00092EA030F7FEA226C7FEA236C6AD04FEA07 :100A00001262D2EB1363C1BFD2184140484041404B :100A1000B8BF5B42192B88BF704710F0004F40F4FD :100A2000000020F07F4018BF404211F0004F41F419 :100A3000000121F07F4118BF494292EA030F3FD0E5 :100A4000A2F1010241FA03FC10EB0C00C3F12003F8 :100A500001FA03F100F0004302D5494260EB400087 :100A6000B0F5000F13D3B0F1807F06D340084FEAF2 :100A7000310102F10102FE2A51D2B1F1004F40EBE7 :100A8000C25008BF20F0010040EA0300704749004F :100A900040EB0000013A28BFB0F5000FEDD2B0FAEC :100AA00080FCACF1080CB2EB0C0200FA0CF0AABF0F :100AB00000EBC25052421843BCBFD04018437047AD :100AC00092F0000F81F4000106BF80F400000132B3 :100AD000013BB5E74FEA41037FEA226C18BF7FEA8A :100AE000236C21D092EA030F04D092F0000F08BFCC :100AF0000846704790EA010F1CBF0020704712F0B3 :100B00007F4F04D1400028BF40F00040704712F1F1 :100B100000723CBF00F50000704700F0004343F056 :100B2000FE4040F4000070477FEA226216BF08468C :100B30007FEA23630146420206BF5FEA412390EA4F :100B4000010F40F4800070474FF0000304E000BF45 :100B500010F0004348BF40425FEA000C08BF7047F6 :100B600043F0964301464FF000001CE050EA0102BA :100B700008BF70474FF000030AE000BF50EA0102CF :100B800008BF704711F0004302D5404261EB4101BC :100B90005FEA010C02BF84460146002043F0B643E1 :100BA00008BFA3F18053A3F50003BCFA8CF2083A06 :100BB000A3EBC25310DB01FA02FC634400FA02FC0F :100BC000C2F12002BCF1004F20FA02F243EB020016 :100BD00008BF20F00100704702F1200201FA02FC78 :100BE000C2F1200250EA4C0021FA02F243EB02006B :100BF00008BF20EADC7070474FF0FF0C1CEAD052AF :100C00001EBF1CEAD15392EA0C0F93EA0C0F6FD06F :100C10001A4480EA010C400218BF5FEA41211ED04D :100C20004FF0006343EA501043EA5111A0FB013139 :100C30000CF00040B1F5000F3EBF490041EAD3710E :100C40005B0040EA010062F17F02FD2A1DD8B3F18A :100C5000004F40EBC25008BF20F00100704790F0F9 :100C6000000F0CF0004C08BF49024CEA502040EA4B :100C700051207F3AC2BFD2F1FF0340EAC250704711 :100C800040F400004FF00003013A5DDC12F1190F4F :100C9000DCBF00F000407047C2F10002410021FAC1 :100CA00002F1C2F1200200FA02FC5FEA310040F1D9 :100CB000000053EA4C0308BF20EADC70704792F052 :100CC000000F00F0004C02BF400010F4000F013A8A :100CD000F9D040EA0C0093F0000F01F0004C02BF85 :100CE000490011F4000F013BF9D041EA0C018FE7F4 :100CF0000CEAD15392EA0C0F18BF93EA0C0F0AD0FA :100D000030F0004C18BF31F0004CD8D180EA01001F :100D100000F00040704790F0000F17BF90F0004FB8 :100D2000084691F0000F91F0004F14D092EA0C0F9A :100D300001D142020FD193EA0C0F03D14B0218BF2D :100D4000084608D180EA010000F0004040F0FE4073 :100D500040F40000704740F0FE4040F4400070470F :100D60004FF0FF0C1CEAD0521EBF1CEAD15392EA8E :100D70000C0F93EA0C0F69D0A2EB030280EA010C7E :100D800049024FEA402037D04FF0805343EA111117 :100D900043EA10130CF000408B4238BF5B0042F175 :100DA0007D024FF4000C8B4224BF5B1A40EA0C001A :100DB000B3EB510F24BFA3EB510340EA5C00B3EB4C :100DC000910F24BFA3EB910340EA9C00B3EBD10F3A :100DD00024BFA3EBD10340EADC001B0118BF5FEA8C :100DE0001C1CE0D1FD2A3FF650AF8B4240EBC250B5 :100DF00008BF20F0010070470CF0004C4CEA502076 :100E00007F32C2BFD2F1FF0340EAC250704740F4C4 :100E100000004FF00003013A37E792F0000F00F0B6 :100E2000004C02BF400010F4000F013AF9D040EA34 :100E30000C0093F0000F01F0004C02BF490011F4C8 :100E4000000F013BF9D041EA0C0195E70CEAD153C0 :100E500092EA0C0F08D142027FF47DAF93EA0C0FA7 :100E60007FF470AF084676E793EA0C0F04D14B028B :100E70003FF44CAF08466EE730F0004C18BF31F03D :100E8000004CCAD130F000427FF45CAF31F0004337 :100E90007FF43CAF5FE700BF4FF0FF3C06E000BFD0 :100EA0004FF0010C02E000BF4FF0010C4DF804CDF3 :100EB0004FEA40024FEA41037FEA226C18BF7FEA03 :100EC000236C11D001B052EA530C18BF90EA010F05 :100ED00058BFB2EB030088BFC81738BF6FEAE17094 :100EE00018BF40F0010070477FEA226C02D15FEA30 :100EF000402C05D17FEA236CE4D15FEA412CE1D09C :100F00005DF8040B704700BF844608466146FFE762 :100F10000FB5FFF7C9FF002848BF10F1000F0FBD44 :100F20004DF808EDFFF7F4FF0CBF012000205DF83D :100F300008FB00BF4DF808EDFFF7EAFF34BF0120C2 :100F400000205DF808FB00BF4DF808EDFFF7E0FF5B :100F500094BF012000205DF808FB00BF4DF808EDAC :100F6000FFF7D2FF94BF012000205DF808FB00BF0F :100F70004DF808EDFFF7C8FF34BF012000205DF8F1 :100F800008FB00BF4FEA40024FEA41037FEA226CB0 :100F900002D15FEA402C08D17FEA236C02D15FEADC :100FA000412C02D14FF0000070474FF00100704714 :100FB0004FEA4002B2F1FE4F0FD34FF09E03B3EB66 :100FC00012620DD94FEA002343F0004310F0004FA6 :100FD00023FA02F018BF404270474FF000007047FC :100FE00012F1610F01D1420205D110F0004008BF9B :100FF0006FF0004070474FF00000704738B50E4B5F :1010000005461A784FF47A73B3FBF2F30B4A106873 :10101000B0FBF3F000F004FC044658B90F2D09D8DA :10102000024629464FF0FF3000F0BCFB2046044B3F :101030001D6038BD0120FCE700000020EC0100200D :1010400004000020074A08B51368032043F010038A :10105000136000F095FB0020FFF7D0FF09F0B6FE0B :10106000002008BD00200240034A044B11681B7891 :101070000B441360704700BF5C020020000000209A :10108000014B1868704700BF5C02002038B5044669 :10109000FFF7F6FF0546631C1EBF044B1B78E418E0 :1010A000FFF7EEFF431BA342FAD338BD0000002038 :1010B000436A10B59A6A12F0500F1BD19A6A42F433 :1010C00000729A621A68926802F46022B2F5602F88 :1010D0000CD11A7B52B99A6A22F480729A629A6A87 :1010E000D2045EBF9A6A42F001029A62184603F087 :1010F0008DFE10BD1B6ABDE810401B6B1847704782 :1011000008B5406AFFF7FBFF08BD406A08B5836A6F :1011100043F040038362C36A43F00403C36203F0F5 :1011200049FF08BD002373B5019390F824300446AD :10113000012B6CD0012380F824304D680268062D05 :10114000086805EB850322D81F26556B053B9E409A :1011500025EA060500FA03F32B43536309288B683D :1011600000EB40054FF0070129D9D6681E3DA94084 :1011700026EA0101AB400B43D360A0F11003012B21 :1011800025D90020002384F8243002B070BD0C2D36 :101190004FF01F0509D8166B233B9D4026EA050535 :1011A00000FA03F32B431363D8E7D66A413B9D4013 :1011B00026EA050500FA03F32B43D362CEE7106954 :1011C000A94020EA0101AB400B431361D9E7114B61 :1011D0009A4216D193681B02D3D49368102843F423 :1011E00000039360CDD10C4B0C4A1B68B3FBF2F3A8 :1011F0000A2253430193019B002BC2D0019B013B68 :10120000F8E7A36A012043F02003A362BAE70220B3 :10121000BBE700BF00240140EC01002040420F006A :10122000002337B50193036804469A68D20702D5B4 :10123000002003B030BD9A6842F001029A60144B5E :10124000144A1B68B3FBF2F30193019BE3B9FFF768 :1012500017FF054623689B68DB07E9D4FFF710FFFB :10126000401B0228F6D923689B6813F00103F1D1D3 :10127000A26A012042F01002A262E26A84F82430DD :1012800042F00102E262D4E7019B013BDCE700BFD0 :10129000EC01002040420F0010B590F824300446C5 :1012A000012B54D0012380F82430FFF7B9FF002828 :1012B00049D1A36A274A23F4407323F0010343F47E :1012C0008073A3622368934204D123494A6812F4CD :1012D000702F2ED1A26A22F48012A2625A6852059F :1012E00041BFA26A22F4405242F48052A262A26A32 :1012F00012F480521CBFE26A22F00602E26200226F :1013000084F824206FF002021A609A6802F46022C6 :10131000B2F5602F13D10F4A934205D1A2F5806236 :10132000526812F4702F0AD19A6842F4A0029A60AF :1013300010BDA26A42F48012A2624A68CFE79A689E :1013400042F48012F3E7002384F82430F0E702200F :10135000EEE700BF002801400024014038B50368D3 :1013600004469A68D10701D4002038BD9A6822F05B :1013700001029A60FFF784FE054623689B68DB073D :10138000F2D5FFF77DFE401B0228F6D923689B6843 :10139000DA07F2D5A36A012043F01003A362E36ADF :1013A00043F00103E362E0E7F8B5044600286DD09E :1013B000836A23B9C36280F8243009F029FD2046EE :1013C000FFF7CCFFA36A13F0100361D100285FD1AF :1013D000A26A616822F4885222F0020242F00202FC :1013E000E569A668A262227B2943B6F5807F41EABF :1013F000420136D0771E7D427D412D02277D012F8F :1014000006D182BBA269013A45EA423242F4006544 :101410002268B6F5807F576827F4694745EA0705D3 :10142000556097681D4D05EA070545EA0105956079 :1014300001D0012E02D12369013B1B05D56A25F499 :1014400070052B43D3629268154B1340994213D118 :101450000023E362A36A23F0030343F00103A362C2 :10146000F8BD3546CAE7A26A42F02002A262E26AEB :1014700042F00102E262CBE7A36A23F0120343F0D9 :101480001003A362E36A43F00103E3620120E7E78C :10149000A36A43F01003A362F8E700BFFDF7E1FF82 :1014A000FE0E1FFF10B590F824300446012B11D01A :1014B000012380F82430FFF751FF38B9A36A23F4E1 :1014C000885323F0010343F00103A362002384F84F :1014D000243010BD0220FCE7002373B5019390F87F :1014E00024300446012B62D0012380F82430FFF71A :1014F00035FF2046FFF794FE054600282FD1A36A4A :10150000022023F4885323F0020343F00203A36272 :10151000284B1E6801F0C0FBB6FBF0F67600019682 :10152000019B03BB2268936843F008039360FFF7B5 :10153000A7FD064623689A68110718D49A6842F0F6 :1015400004029A60FFF79CFD064623689B685B07D0 :1015500023D4A36A23F0030343F00103A36200230F :1015600084F8243016E0019B013B0193D8E7FFF794 :1015700087FD801B0A28DDD923689B681807D9D509 :10158000A36A012523F0120343F01003A362002392 :1015900084F82430284602B070BDFFF771FD801B2F :1015A0000A28D2D923689B685A07CED5E8E70225D6 :1015B000F0E700BFEC0100202DE9B04104468DB0FA :1015C0000F4690460021302268460BF0FBFA94F853 :1015D0002430012B5BD001252E4B84F8245000933E :1015E0009B6803F46023B3F5602F07D0A36A43F030 :1015F0002003A362002384F8243044E02046FFF750 :101600000FFE05460028F5D16846FFF709FE05469E :101610000028EFD1A26A204B2168134043F4807365 :10162000A3624B683A465B054FF0000348BFA06ACF :1016300084F8243042BF20F4405040F48050A0622F :10164000E362206A154B4C318362154BC362154B24 :1016500003636FF0020341F84C3C51F8443C43F4FF :10166000807341F8443C434600F020F923689A68AF :1016700002F46022B2F5602F9A680CBF42F4A00217 :1016800042F480129A6028460DB0BDE8B081022570 :10169000F9E700BF00280140FEFCEFFFB110000891 :1016A000011100080B11000870B504468CB03022FF :1016B000002168460BF086FA94F82430012B30D0D4 :1016C0000126204684F82460FFF748FE054620BB2B :1016D000154B68460093FFF741FE48B184F824504B :1016E0003546A36A43F01003A36228460CB070BDD0 :1016F0002368206A9A6822F480729A605A6822F4F9 :1017000070225A6000F011F90546A36A23F4885349 :1017100023F0010343F00103A362002384F8243083 :10172000E3E70225E1E700BF0028014010B590F88B :1017300024300246012B1FD00123046880F8243096 :10174000A368DB0712D40D4B986810F001000DD18F :10175000A3F580639C4209D16368096823F4702370 :101760000B436360002382F8243010BD936A01208C :1017700043F020039362F5E70220F6E700280140DA :1017800007490302CA6803F4E06322F4E06212042A :10179000120C134343F0BF6343F40033CB60704734 :1017A00000ED00E0154B30B5DC68C4F30224C4F151 :1017B0000703251D042B28BF0423062D4FF0FF35FA :1017C00094BF0024033C05FA03F321EA0303A54078 :1017D00022EA0502A340002843EA0203ACBF00F15D :1017E0006040074A4FEA0313DBB2ABBF00F561402C :1017F00000F00F0080F80033135430BD00ED00E01E :1018000014ED00E0002807DB01234109034A00F042 :101810001F00834042F82130704700BF00E100E024 :101820000138B0F1807F0BD24FF0E023F021054A60 :10183000586182F823100020072298611A617047CE :101840000120704700ED00E0034610B540B31421BD :101850000068144A0244B2FBF1F292001A64124A80 :10186000DA63022283F82120D3E901242243DC68D1 :10187000016822431C6921F47F5122435C6921F0F5 :10188000300122439C692243DC6922430A430260FF :1018900000200122986383F8200083F8212010BDE6 :1018A0000120FCE7F8FFFDBF00000240F0B505464F :1018B00090F82000012836D0012085F8200095F806 :1018C000210000240128C6B24FF0020028D185F87B :1018D0002100AC632C68206820F001002060D5E96D :1018E0000F7006FA00F0786063606B68102BEB6A8B :1018F0000BBFA260A160E160E2604BB1236843F0DE :101900000E0300202360236843F001032360F0BD31 :10191000236823F004032360236843F00A03F0E7FD :1019200085F82040F3E70220F1E790F821200346F4 :10193000022A06D0042282630120002283F820209C :1019400070470268C06B116821F00E0111601168C8 :1019500021F00101116001211A6C01FA02F24260CA :10196000002083F82110E8E770B40425C66B026CF0 :101970003468036895402542196832D04D0730D548 :101980001A6896065EBF1A6822F004021A603E4A80 :10199000934219D01432934218D01432934217D084 :1019A0001432934217D01432934217D01432934218 :1019B0000CBF4FF480034FF08063344A5360C36A16 :1019C000002B5ED070BC18470423F6E74023F4E7F1 :1019D0004FF48063F1E74FF48043EEE74FF4802348 :1019E000EBE702259540254235D08D0733D51A689F :1019F000940606D41A6822F00A021A60012280F8BE :101A00002120214A934219D01432934218D0143223 :101A1000934217D01432934217D01432934217D006 :101A2000143293420CBF4FF400134FF00073174A67 :101A30005360002380F82030836AC1E70223F6E771 :101A40002023F4E74FF40073F1E74FF40053EEE77F :101A50004FF40033EBE708259540254211D00907E4 :101A60000FD5196821F00E011960012303FA02F263 :101A70007260836380F82130002380F82030036B8C :101A80009EE770BC704700BF0800024000000240A3 :101A90002DE9F74F00221646644F654BDFF894C1DD :101AA000DFF894E10D6835FA06F402D103B0BDE821 :101AB000F08F4FF0010808FA06F805EA080438EA42 :101AC00005057AD14D68032D07D8013D022D00F29E :101AD0008780DFE805F0959AA000122D00F098802D :101AE0006DD8112D00F08E80FF2C98BF82464FF0EC :101AF0000F0988BF00F1040A4FEA8605DAF8008072 :101B000088BF203D09FA05FB28EA0B0802FA05F513 :101B100048EA0505CAF80050D1F804A01AF0805F21 :101B20004BD0BD6926F0030845F00105BD61BD69D4 :101B300008F1804805F00105019508F5803806F0A8 :101B4000030B019D4FEA8B0BD8F8085009FA0BF9EB :101B500025EA0909394DA84261D005F58065A842FA :101B60005FD005F58065A8425DD005F58065A84287 :101B70000CBF0325042505FA0BF545EA0905C8F84D :101B800008509D681AF4801F14BF2543A5439D602B :101B9000DD681AF4001F14BF2543A543DD605D68AE :101BA0001AF4003F14BF2543A5435D601D681AF475 :101BB000803F14BF2543A5431D60013672E7DFF85F :101BC00080904D450CD017D8A9F580194D4507D008 :101BD00009F570294D4503D0A9F580194D4583D1EC :101BE0008A68D2B1012A08BFC0F810804FF00802FD :101BF00018BFC0F8148077E76545F1D07545EEE76A :101C0000CA6871E7CA6804326EE7CA6808326BE7CF :101C1000CA680C3268E7002266E7042264E7002500 :101C2000A9E70125A7E70225A5E700BF00100240AC :101C30000004014000003110000032100008014093 :101C4000000022108368194214BF01200020704751 :101C50000AB1016170470904FBE7016800224B6982 :101C600013F4806310D06FF480634B612023026310 :101C700080F83D3080F83E20036C80F83C2043F033 :101C80000403036401207047184670472DE9F846A5 :101C900006460F4691461D464FEA114A3368BAF18F :101CA000010F0CBF5C699C6927EA0404A4B2B4FA72 :101CB00084F46409A14501D0002025E06A1CEED01F :101CC000FFF7DEF9089BC01AA84201D8002DE5D124 :101CD0003368BAF1010F0CBF5B699B6927EA030304 :101CE0009BB2B3FA83F35B099945D7D10023202235 :101CF0000120336386F83D2086F83E30326C86F84A :101D00003C3042F020023264BDE8F8862DE9F04113 :101D100004460F46164698462568686927EA00007B :101D200080B2B8B16B695A0516D52B68202243F4EE :101D300000732B606FF480636B610023236384F86E :101D40003D2084F83E30226C42F0040201202264DF :101D500084F83C30BDE8F081731CDED0FFF790F9C9 :101D6000A0EB0800B04201D8002ED5D123685A69F3 :101D700027EA020292B2002ACED000232022236357 :101D800084F83D2084F83E30226C42F02002DDE7EA :101D900070B504460D46164623685B691B0601D5DF :101DA000002070BD2046FFF758FFC8B96A1CF3D069 :101DB000FFF766F9801BA84201D8002DECD12368FB :101DC0005B6913F08003E7D12022236384F83D2070 :101DD00084F83E30226C84F83C3042F020022264C9 :101DE0000120DEE72DE9F0431546026899461368A5 :101DF00085B043F480731360DDE90C780E463B46F2 :101E000000224FF00111CDF800800446FFF73EFF9D :101E1000236838B11B68DB0502D54FF400732364D7 :101E200003200AE006F0FE061E613A4643462046BD :101E30001749FFF76BFF18B1012005B0BDE8F0832B :101E4000236803905A69394603929B69424603937B :101E50002046039BFFF79CFF40B1236C042B01BF7E :101E60002268136843F400731360E5E7B9F1010FCA :101E7000236802D1EDB21D61DFE72A0A1A613946F3 :101E800042462046FFF784FF0028E6D12368F1E7A9 :101E9000020001002DE9FF479A46DDE90C7803684E :101EA00015461A680E4642F480621A601A684FF0AE :101EB000011142F480721A603B460022CDF8008086 :101EC0000446FFF7E3FE236848B11B68DB0502D533 :101ED0004FF400732364032004B0BDE8F0875FFA79 :101EE00086F906F0FE061E613A4643462046294919 :101EF000FFF70CFF08B10120EEE7236803905A6951 :101F0000394603929B69424603932046039BFFF7A1 :101F10003FFF40B1236C042B01BF2268136843F4D8 :101F200000731360E7E7BAF1010F23681AD1EDB22D :101F30004246394620461D61FFF72AFF0246002827 :101F4000E8D1216820460B6843F480730B603B4660 :101F50004FF00111CDF80080FFF798FE226860B1C4 :101F60001368B3E72A0A1A61394642462046FFF74A :101F70000FFF0028CED12368D9E749F00103136190 :101F8000204643463A460349FFF7C0FE003818BFD3 :101F90000120A1E70200010070B504460D46164677 :101FA00023685B695B0701D5002070BD2046FFF701 :101FB00054FEC8B96A1CF3D0FFF762F8801BA84230 :101FC00001D8002DECD123685B6913F00403E7D13D :101FD0002022236384F83D2084F83E30226C84F86C :101FE0003C3042F0200222640120DEE770B5044656 :101FF0000D46164621684B6913F0400301D00020BE :1020000010E04A69D2060ED56FF010024A61202214 :10201000236384F83D2084F83E30226C0120226442 :1020200084F83C3070BDFFF72BF8801BA84201D824 :10203000002DDFD123685B6913F04003DAD1202241 :10204000236384F83D2084F83E30226C42F0200265 :10205000E4E7000070B5044608B9012070BD90F8AF :102060003D3003F0FF021BB980F83C2008F03EFF32 :10207000242384F83D3023681A6822F001021A6094 :102080001A6842F400421A601A6822F400421A6088 :1020900000F068FD3F4B65689D4294BF3E4B3F4B4F :1020A00098428CBF00230123002BD6D1394E3C4BE4 :1020B000B542B0FBF3F388BF4FF4967622685168BF :1020C00021F03F0141EA030182BF73434FF47A7666 :1020D000B3FBF6F35160116A013321F03F010B436A :1020E0001362D169431E2B4821F44F41854221F0F0 :1020F000FF0132D86D00B3FBF5F340F6FC700133FD :10210000034242D0C3F30B031943D1611168D4E9F0 :10211000073021F0C00103430B4313609168D4E9F9 :10212000030321F40341034321F0FF010B439360B8 :10213000D168D4E9053021F0FF0103430B43D3609C :102140001368002043F0010313602023206484F807 :102150003D30206384F83E0080E7A06850B905EB6D :102160004505B3FBF5F30133C3F30B037BB143F434 :102170000043C9E719206843B3FBF0F30133C3F30D :102180000B0323B143F44043BEE70423BCE7012320 :10219000BAE700BFA08601007F841E00FF083D0053 :1021A00040420F002DE9F743044699460F469046FA :1021B0000C9EFEF765FF94F83D300546202B03D0BA :1021C000022003B0BDE8F0830090192301222046CD :1021D0003A49FFF75BFD0028F2D194F83C30012B1F :1021E000EED00123206884F83C3003684246D907CA :1021F00058BF036839465CBF43F0010303600368BE :1022000023F400630360212384F83D30402384F8E5 :102210003E30002323640A9B20466362BDF82C30C5 :10222000CDE900656385638D2385254BE3624B46CD :10223000FFF7D8FD00282AD00120C2E7FFF7A8FD4C :1022400040B1236C042B01BF2268136843F4007370 :102250001360F1E7636A27681A4612F8011B3961B7 :102260006262628D218D013A92B262857A69481E5E :1022700080B2520720850AD548B15A7802333A61B4 :102280006362638D0239013B9BB221856385238D97 :102290002A4631462046002BD0D1FFF77DFE00288C :1022A000CFD12268136843F400731360202384F8AD :1022B0003C0084F83D3084F83E0082E702001000C4 :1022C0000000FFFF2DE9F04399460023044689B042 :1022D00003930D469046129FFEF7D2FE94F83D30D0 :1022E0000646202B04D00225284609B0BDE8F0831D :1022F00000901923012220468D49FFF7C7FC0028D2 :10230000F1D194F83C30012BEDD00123206884F802 :102310003C3003682946DB0758BF036842465CBF70 :1023200043F001030360036823F400630360222386 :1023300084F83D30402384F83E3000232364109B12 :1023400020466362BDF84430CDE900766385638D35 :102350002385784BE3624B46FFF79CFD054608B1A9 :102360000125C1E7228D2368C2B904905A690492FD :102370009A690492049A1A6842F400721A60DFF8AB :10238000B881DFF8B891238D002B37D1202284F853 :102390003C3084F83D2084F83E30A5E7012A11D175 :1023A0001A6822F480621A6072B6236805905A692E :1023B00005929A690592059A1A6842F400721A60A9 :1023C00062B6DCE7022A1A680ED142F400621A6093 :1023D00072B6236806905A6906929A690692069A1E :1023E0001A6822F48062EAE742F480621A60079079 :1023F0005A6907929B690793079BC0E7032B78D81C :10240000012B15D1324639462046FFF7EFFD002853 :10241000A6D123681A69636A1A70636A013363621A :10242000238D013B2385638D013B9BB26385AAE726 :10243000022B4FF000023B4641462046009618D141 :10244000FFF724FC00288BD172B623681A6842F487 :1024500000721A601A69636A1A70636A01336362F0 :10246000238D013B2385638D013B9BB2638562B65F :10247000CFE7FFF70BFC00287FF472AF22681368E8 :1024800023F48063136072B646F2A81123681A69B8 :10249000636A1A70626A531C6362238D013B238551 :1024A000638D013B9BB26385D9F80030B3FBF1F338 :1024B00023214B430393039B013B0393039B6BB982 :1024C0002022236384F83D2084F83E30226C42F0C1 :1024D0002002226462B684F83C3041E723685969DF :1024E0004807E8D5196841F4007119601B695370F9 :1024F000B3E7324639462046FFF778FD00287FF4DF :102500002FAF23681A69636A1A70626A531C636288 :10251000238D013B2385638D013B9BB2638523683B :10252000596949077FF52FAF1B69537075E700BFE5 :10253000020010000000FFFF04000100EC01002079 :102540002DE9F04F044685B01F4688469246FEF7B7 :1025500097FD94F83D300546202B03D0022005B0AE :10256000BDE8F08F00901923012220464A49FFF769 :102570008DFB0028F2D194F83C30012BEED00123E2 :1025800084F83C30236800261A68DFF80CB1D207C3 :1025900058BF1A6808F0FE085CBF42F001021A60DA :1025A0001A6822F400621A60242384F83D303B4B01 :1025B0002664E36222684FF001111368204643F459 :1025C000807313603B4600220095FFF75FFB236892 :1025D00038B11B68DB0502D54FF400732364032078 :1025E000BDE7C3F81080FEF74BFD4FF0A00905468C :1025F00023685A695B69C2F34002C3F3802394F8ED :102600003D10A02901D013431DD04FF020092368AD :1026100084F83D905A6912F0020F1A6842F4007271 :102620001A6025D0002203925A69204603929B69C2 :1026300001220393039B184919230095FFF726FBFA :1026400088B101208BE7FEF71BFD401BB84200D884 :102650000FB984F83D9023685A695B69C2F3400260 :10266000C3F38023CBE784F83D9084F83C0076E701 :102670006FF4806259465A61204619230122009561 :10268000FFF704FB0028DCD10136564592D384F8CD :102690003D9084F83C00D4E7020010000000FFFFEA :1026A00090F83D00704700002DE9F341054638B32E :1026B0000368DB0710D42B689F075ED42B681907CB :1026C00000F195802B685A0700F1C180E869002865 :1026D00040F02C81002029E0904C636803F00C034B :1026E000042B07D0636803F00C03082B0AD163683E :1026F000DE0307D523689C03DDD56B68002BDAD198 :10270000012013E06B68B3F5803F12D1236843F4D6 :1027100080332360FEF7B4FC064623689803CAD4CE :10272000FEF7AEFC801B6428F7D9032002B0BDE899 :10273000F0819BB9236823F480332360236823F45A :1027400080232360FEF79CFC064623689903B2D5DC :10275000FEF796FC801B6428F7D9E6E7B3F5A02FB7 :10276000236803D143F480232360CFE723F480332D :102770002360236823F48023CBE7684C636813F05D :102780000C0F07D0636803F00C03082B10D16368AB :10279000DA030DD423689B0702D52B69012BAFD137 :1027A00023686A6923F0F80343EAC203236085E7DC :1027B0002A695B4B6AB101221A60FEF761FC06468A :1027C00023689F07ECD4FEF75BFC801B0228F7D937 :1027D000ABE71A60FEF754FC0646236898077FF5BE :1027E0006DAFFEF74DFC801B0228F6D99DE7AA6964 :1027F0004A4E4B4BE2B10122C3F88024FEF740FC65 :102800000446736A9B070DD54FF4FA52454B1B687B :10281000B3FBF2F3019300BF019B5A1E0192002B00 :10282000F9D14FE7FEF72CFC001B0228E9D97CE721 :10283000C3F88024FEF724FC0446736A9F077FF5E3 :1028400041AFFEF71DFC001B0228F6D96DE7334CA3 :10285000E369D80024D40127E36943F08053E3619E :10286000E36903F080530093009B2F4E3368D90532 :1028700018D5EB68012B26D1236A43F001032362AC :10288000FEF7FEFB41F288380646236A9B073FD5D8 :10289000002F3FF41BAFE36923F08053E36115E79A :1028A0000027E2E7336843F480733360FEF7E8FB08 :1028B00080463368DA05DCD4FEF7E2FBA0EB0800C3 :1028C0006428F6D931E7ABB9236A41F2883823F09E :1028D00001032362236A23F004032362FEF7D0FB83 :1028E0000646236A9807D3D5FEF7CAFB801B4045EE :1028F000F7D91AE7052B236A03D143F004032362B7 :10290000BAE723F001032362236A23F00403B6E746 :10291000FEF7B6FB801B4045B7D906E70010024022 :1029200000004242EC010020007000402A4C636825 :1029300003F00C03082B3ED00022284B02281A6615 :102940002CD1FEF79DFB06462368990120D42B6A03 :10295000B3F5803F05D16268A96822F400320A43CA :102960006260696A62680B4322F4741213430122A5 :1029700063601A4B1A66FEF783FB054623689A01CB :102980003FF5A8AEFEF77CFB401B0228F6D9CCE64B :10299000FEF776FB801B0228D6D9C6E6FEF770FB51 :1029A000054623689B017FF595AEFEF769FB401B4A :1029B0000228F6D9B9E601283FF4B8AE63682A6A5E :1029C00003F4803191427FF49BAE6A6A03F4701382 :1029D00093423FF47FAE93E6001002400000424273 :1029E0000D4A536803F00C01082912D10B48C3F3B8 :1029F0008341DB03405C09D55368094AC3F3404374 :102A00005043084AD35CB0FBF3F07047064B584381 :102A100070470348704700BF001002409CD4000874 :102A200000127A00ACD4000800093D002DE9F04105 :102A30000D46044610B90120BDE8F081444A1368F0 :102A400003F007038B4228D321688E0730D4CA07CE :102A500043D43F4A136803F00703AB4265D82268AA :102A60003C4D12F0040F6CD1130706D56B68226938 :102A700023F4605343EAC2036B60FFF7B1FF6B6856 :102A8000354AC3F30313D35CD840344B1860344B3E :102A90001868FEF7B3FA0020CEE7136823F00703A7 :102AA0000B431360136803F007038B42C3D1CBE7DA :102AB000284B11F0040F1EBF5A6842F4E0625A60BE :102AC000080742BF5A6842F460525A605A68A068C8 :102AD00022F0F00202435A60B9E762681D4E012AF3 :102AE00033681AD113F4003FA5D0736841F28838D7 :102AF00023F0030313437360FEF7C2FA07467368BB :102B0000626803F00C03B3EB820FA2D0FEF7B8FAB1 :102B1000C01B4045F3D903208EE7022A02D113F0EF :102B2000007FE1E713F0020FDEE7136823F00703ED :102B30002B431360136803F00703AB427FF47BAFB2 :102B40008DE76B68E16823F4E0630B436B608BE710 :102B5000002002400010024030DD0008EC0100209F :102B600004000020044B054A5B68C3F30223D35CD6 :102B7000034A1068D84070470010024040DD00084A :102B8000EC010020044B054A5B68C3F3C223D35C0D :102B9000034A1068D84070470010024040DD00082A :102BA000EC01002003682DE9F341D907054621D542 :102BB000364CE369DA0033D40126E36943F08053ED :102BC000E361E36903F080530193019B304F3B685D :102BD000DB0527D5236A6A6813F4407336D1236A6C :102BE0006A6823F44073134323621EB1E36923F040 :102BF0008053E3612868830706D52449AB684A6897 :102C000022F440421A434A6010F010001BD01F4AC1 :102C1000E9685368002023F480030B43536012E0FB :102C20000026D3E73B6843F480733B60FEF728FA45 :102C300080463B68D805CDD4FEF722FAA0EB080009 :102C40006428F6D9032002B0BDE8F08102F4407296 :102C50009A42C4D001200F4A236AC2F840040020DF :102C600023F44071C2F840042162D907B7D5FEF7BA :102C700007FA41F288380746236A9A07AFD4FEF76D :102C8000FFF9C01B4045F7D9DCE700BF0010024048 :102C90000070004000004242022808B544D01028CD :102CA00003D0012822D0002034E0254B5A68186850 :102CB00010F080702ED0C2F383412248D20348BF67 :102CC0005A68405C41BF2049C2F34042895C1F4AB8 :102CD0005B684CBFB2FBF1F21D4A5B0202FB00F0E5 :102CE00018D403234000B0FBF3F013E040F20231AC :102CF000134A136A1940B1F5817F1ED003F4407363 :102D0000B3F5007F07D149F64043506A10F0020046 :102D100018BF184608BDB3F5407FC4D110684FF204 :102D2000244310F40030F3E7FFF72CFF044B5B68FB :102D3000C3F3813301335B00D5E74FF40040E9E78B :102D400000100240AED40008BED4000800127A0081 :102D500000093D002DE9F3411C4616460F46054685 :102D6000FEF78EF93444241AFEF78AF98046234B85 :102D70001B68C3F3CB3363432A680193936837EA34 :102D8000030301D000202EE0731CF7D0FEF778F982 :102D9000A0EB0800A04229D32B685A6822F0E00279 :102DA0005A606A68B2F5827F0AD1AA68B2F5004F0C :102DB00002D0B2F5806F03D11A6822F040021A6087 :102DC000AA6AB2F5005F07D11A6822F400521A60AD :102DD0001A6842F400521A60012385F8513000232A :102DE000032085F8503002B0BDE8F081019B002B34 :102DF000019B08BF0024013BBEE700BFEC0100209F :102E000010B513460A4680210446FFF7A3FF20B100 :102E10000320636D43F02003636510BD10B50446C5 :102E2000002851D0436A002B4AD14268B2F5827F14 :102E300000D0C3610023A36294F8513003F0FF0275 :102E400023B9204684F8502008F082F80223226833 :102E500084F851301368A06823F04003136063685E :102E600000F4044003F482730343E068A16900F4B2 :102E700000600343206900F002000343606900F032 :102E80000100034301F400700343E069090C00F002 :102E900038000343206A01F0040100F0800003437E :102EA000A06A00F40050034313605160D36900200E :102EB00023F40063D3610123606584F8513010BDB1 :102EC0000023C0E90433B5E70120F8E72DE9F34713 :102ED0001F4690F850300446012B0D46904600F0F6 :102EE000A680012380F85030FEF7CAF894F85130DC :102EF0008246012B5FFA83F940F09680002D67D05F :102F0000B8F1000F64D0032384F8513000236365C7 :102F1000C4E91033A4F83680A363A387E387A368CA :102F20002668B3F5004F2563A4F8348007D13368D1 :102F300023F040033360336843F4804333603368E5 :102F400062685B065EBF336843F040033360E3684A :102F5000B3F5006F43D112B1B8F1010F07D135F8C5 :102F6000023BF3602563E38E013B9BB2E386E38E75 :102F70009BB2B3B9524639462046FFF741FF0028BD :102F80004FD1A36833B901932368DA6801929B6833 :102F90000193019B636DDBB90122994684F85120AE :102FA00016E022689368980705D5236B33F8021B57 :102FB000D1602363D7E7FEF763F8A0EB0A00B842BD :102FC000D5D3791CD3D001234FF0030984F85130B5 :102FD000002384F85030484602B0BDE8F08712B1B3 :102FE000B8F1010F08D12B783373236B01332363BE :102FF000E38E013B9BB2E386E38E9BB2002BB9D0FC :1030000023689A68920703D5226B12781A73ECE74B :10301000FEF736F8A0EB0A00B842EDD37B1CEBD0EC :10302000D1E720236365ACE74FF00209D0E74FF00A :103030000209D0E790F8510070470000036A026A65 :1030400070B522F001020262446882690D6822F0C4 :1030500073022A438D6823F002032B430A4DA842D2 :103060000BD1CD6823F008032B4324F44074D1E93D :103070000556354323F004032C43446082614A68BB :103080004263036270BD00BF002C0140036A026A04 :1030900070B522F4807202624468C2690D6822F041 :1030A00073022A438D6823F4007343EA05230B4D12 :1030B000A8420DD1CD6823F4006343EA052324F42C :1030C0004054D1E90556354323F4806344EA05149E :1030D0004460C2614A68C263036270BD002C014053 :1030E000036A026A30B522F4805202624468C269FF :1030F0000D6822F4E64242EA05228D6823F400536B :1031000043EA0533064DA84202BF4D6924F48044CA :1031100044EA85144460C2614A680264036230BDB7 :10312000002C0140704770477047704770477047E8 :10313000036810B51A69044691070ED5DA6892073C :103140000BD56FF002021A61012202779B699B077F :1031500077D0FFF7EAFF0023237723681A69500727 :1031600010D5DA6851070DD56FF004021A610222FA :1031700022779B69204613F4407F68D0FFF7D5FF84 :103180000023237723681A6912070FD5DA6810071E :103190000CD56FF008021A6104222277DB69204601 :1031A00099075AD0FFF7C1FF0023237723681A69D4 :1031B000D20610D5DA68D0060DD56FF010021A616C :1031C00008222277DB69204613F4407F4BD0FFF7BB :1031D000ACFF0023237723681A69D10708D5DA6882 :1031E000D20705D56FF0010220461A61FFF79CFF58 :1031F00023681A69100608D5DA68110605D56FF03C :10320000800220461A6100F05AFB23681A695206B0 :1032100008D5DA68500605D56FF0400220461A61DD :10322000FFF785FF23681A69910622D5DA689206AE :103230001FD56FF020022046BDE810401A6100F053 :103240003DBB01F0B9FD2046FFF770FF83E701F0B9 :10325000B3FD2046FFF76AFF92E701F0ADFD20467F :10326000FFF764FFA0E701F0A7FD2046FFF75EFF30 :10327000AFE710BD1A4A036890420AD0B0F1804F00 :1032800007D0A2F59432904203D002F580629042BA :1032900015D14A6823F070031343114A90420AD0B3 :1032A000B0F1804F07D0A2F59432904203D002F5DE :1032B0008062904203D1CA6823F4407313434A6981 :1032C00023F08003134303608B68C3620B6883623F :1032D000034B984204BF0B690363012343617047AA :1032E000002C014010B5044630B390F83D3003F097 :1032F000FF021BB980F83C2007F05CFE0223206827 :1033000084F83D30211DFFF7B5FF0123002084F82C :10331000463084F83E3084F83F3084F8403084F8FA :10332000413084F8423084F8433084F8443084F8E3 :10333000453084F83D3010BD0120FCE710B504464F :1033400030B390F83D3003F0FF021BB980F83C2009 :10335000FFF7E8FE0223206884F83D30211DFFF7C7 :1033600089FF0123002084F8463084F83E3084F839 :103370003F3084F8403084F8413084F8423084F89B :10338000433084F8443084F8453084F83D3010BD33 :103390000120FCE710B5044630B390F83D3003F04F :1033A000FF021BB980F83C20FFF7BDFE0223206816 :1033B00084F83D30211DFFF75DFF0123002084F8D4 :1033C000463084F83E3084F83F3084F8403084F84A :1033D000413084F8423084F8433084F8443084F833 :1033E000453084F83D3010BD0120FCE7036A026AD5 :1033F00070B522F010020262446882690D6822F4FE :10340000E64242EA05228D6823F0200343EA0513D1 :103410000B4DA8420DD1CD6823F0800343EA05137C :1034200024F44064D1E90556354323F0400344EACF :103430008504446082614A688263036270BD00BF94 :10344000002C014038B590F83C300546012B1DD0CA :10345000082A17D007D862B1042A0FD00120002310 :1034600085F83C3038BD0C2AF8D10068FFF738FEEB :1034700002E00068FFF7E2FD0020F0E70068FFF7D8 :10348000B5FFF9E70068FFF701FEF5E70220E9E77D :1034900070B590F83C300546012B50D00123082A26 :1034A00080F83C303BD007D8C2B1042A27D0184658 :1034B000002385F83C3070BD0C2AF8D10068FFF776 :1034C0000FFEC3690A6943F40063C361C36923F44F :1034D0008063C361C36943EA02232EE00068FFF7FB :1034E000ADFD83690A6943F008038361836923F0B2 :1034F000040383618369134383610020D8E7006874 :10350000FFF774FF83690A6943F400638361836989 :1035100023F480638361836943EA0223ECE7006854 :10352000FFF7B4FDC3690A6943F00803C361C369C7 :1035300023F00403C361C3691343C361DDE70220C1 :10354000B9E710B584680A4324F47F4442EA0322B1 :103550002243826010BD38B590F83C300446012B00 :103560004FF0020000F08E80012284F83D002068B8 :1035700084F83C20836823F47F4323F0770383603F :103580000B68602B4FD032D8402B64D016D8202B3C :103590000DD00AD833F0100109D0012384F83D3052 :1035A000002384F83C30104638BD302BF5D18268BA :1035B00022F07002134343F0070328E0502BECD1B4 :1035C0004A68CD68016A036A21F00A0123F0010309 :1035D000036283690A4323F0F00343EA051383611E :1035E0000262836823F0700343F057030FE0B3F5E2 :1035F000805F0DD0B3F5005F0CD0702BCDD1CB68C0 :10360000D1E90121FFF79DFF836843F077038360D1 :103610000022C2E7CB68D1E90121FFF792FF83685E :1036200043F48043F3E7036A026A4D6822F0100214 :10363000C9680262826923F0A00322F4704243EA5F :10364000051342EA013282610362836823F070034A :1036500043F06703DBE74A68CD68016A036A21F03B :103660000A0123F00103036283690A4323F0F00394 :1036700043EA051383610262836823F0700343F019 :103680004703C4E702468EE710B50124036A01F040 :103690001F018C4023EA04030362036A8A401A4331 :1036A000026210BD08B529B990F83E30012B21D037 :1036B000012008BD042907D190F83F30012BF7D134 :1036C000022380F83F3018E0082907D190F84030F5 :1036D000012BEDD1022380F840300EE090F841300C :1036E000012BE5D10429EBD00829F3D0022380F87F :1036F000413002E0022380F83E3000680122FFF7EB :10370000C3FF0E4B98420AD1436C43F40043436419 :10371000836803F00703062B0BD10020C9E7B0F143 :10372000804FF5D0064B9842F2D003F58063984263 :10373000EED0036843F001030360EEE7002C014084 :1037400000040040FFF7AEBF08B5034629B990F862 :103750003E20012A30D0012008BD04290BD190F869 :103760003F20012AF7D10222186883F83F20C2685F :1037700042F0040227E008290BD190F84020012AEA :10378000E9D10222186883F84020C26842F008029A :1037900019E090F84120012AD0B2DCD10429E2D00E :1037A0000829EED002220C2983F84120D4D11868D0 :1037B000C26842F0100206E0022280F83E20006853 :1037C000C26842F00202C26018680122FFF75CFF83 :1037D0000E4B98420AD1436C43F400434364836820 :1037E00003F00703062B0BD10020B5E7B0F1804FA3 :1037F000F5D0074B9842F2D003F580639842EED0A3 :10380000036843F001030360EEE700BF002C0140B2 :103810000004004030B590F83C300246012B4FF0D8 :10382000020022D0136882F83D005C680D6824F025 :1038300070042C4398685C600C4CA3420AD0B3F12E :10384000804F07D0A4F59434A34203D004F58064DC :10385000A34204D1496820F080000143996001230C :10386000002082F83D3082F83C0030BD002C014041 :1038700090F83C300246012B1ED0CB68886823F4B8 :1038800040730343486823F480630343086823F4C8 :1038900000630343086923F480530343486923F416 :1038A000005303430020C96923F480430B4311688C :1038B0004B6482F83C0070470220704770477047A5 :1038C000012300220370014B1A6470470008004076 :1038D00010B5054C4B1E4908E36210462164FDF704 :1038E000D5FB0023236410BD00080040037823B1FA :1038F000A0224FF48E71FFF7EBBF7047037810B52D :1039000004467BB1A0224FF48E71FFF7E1FF6420E3 :10391000FDF7BCFB2046BDE81040A0224FF48E719D :10392000FFF7D6BF10BD037823B1A02240F61831AF :10393000FFF7CEBF7047037810B50446C3B1A0228D :103940004FF48E71FFF7C4FF3220FDF79FFB3C223E :1039500040F618312046FFF7BBFF3220FDF796FBFB :103960002046BDE81040A02240F28C51FFF7B0BFC6 :1039700010BD90F88C3013B990F8510070470020BA :10398000704790F88C3073B504460D46D3B1B0F84B :10399000966032462946B4F84C0007F047FC0A22EC :1039A00094F88C30A4F84C0002FB0344B4F8743053 :1039B000324600932946002380B207F009FC80B20A :1039C00002B070BDB0F88E60E3E71FB54FF6FF732D :1039D000144643850A46694602F0DDFF58B904F1F2 :1039E000080302AA0D3412F8010F13F8011F8842D0 :1039F00004D1A342F7D1012004B010BD0020FBE7A1 :103A00002DE9F04304460026012785B000F1340873 :103A1000404603F01DFEF5B2854224DAD4F8A0300A :103A20004FEA450903EB450213F81530FF2B01D18E :103A30000136EDE7537803F00303032BF8D12A4650 :103A40006946204602F0A7FF0028F1D1D4F8A03043 :103A50008DF808704B442A46694620465F7002F094 :103A6000D1FF0028E4D005B0BDE8F0832DE9F04394 :103A7000002406460D464FF0FF08A14685B000F130 :103A80003407384603F0E4FD631CE4B284420BDBE8 :103A90004FF000084446304602F03AFE40450BDC49 :103AA000E0B205B0BDE8F08305EB440205F81480F0 :103AB0001C4682F80190E4E75FFA88F94A466946B5 :103AC000304602F068FF20B10128E9D008F1010872 :103AD000E1E738460DF1090103F0C6FD031EF5DBF1 :103AE0009DF80820002AF1D015F8130005EB4301DA :103AF000FF2802BF05F8139001344A70E6E7000082 :103B000070B534300C461146164603F0A3FD054649 :103B1000C0B116B103784E2B08D1052229462046A4 :103B200009F06AF800236371204670BD08492046F9 :103B300009F0B2F805222946201D09F05DF800239E :103B40006372F1E72046034909F0A6F8ECE700BFED :103B5000C0D40008C5D4000890F88C3023B990F880 :103B600051200249FFF7CCBF0022FAE76002002093 :103B70002DE9F84F1446D0F8A02080460E461F4687 :103B80009DF828906AB911460C20023403E000FB2E :103B900002F30132E154D3B29F42F8D80020BDE8CD :103BA000F88F4B1E0132002B01DC002513E0590079 :103BB000B9F1000F03D012F81300C0071FD5DAB215 :103BC0002270D8F8A03040460B445B78A11C63708B :103BD000FFF796FF01254FF00C0B08F1340A504611 :103BE00003F036FD86420CDB0C23002203FB054468 :103BF0002B46BB4204F10C0423D32846CFE7013BFC :103C0000D1E7DEB17200B9F1000F05D0D8F8A030CD :103C100013445B78DB0711D50BFB05F3E654E11881 :103C2000D8F8A030013513445B7832464B704046DB :103C30000231EDB2FFF764FFBD42DED20136F6B2CB :103C4000CDE7013304F80A2CDBB2D2E7C288C38C7B :103C50009A422BD10289038D9A4227D14289438D02 :103C60009A4223D1028B038F9A421FD1827E90F811 :103C70003A309A421AD1427F90F83D309A4215D19B :103C8000827F90F83E309A4210D1C27F90F83F3048 :103C90009A420BD1C27E90F83B309A4206D1037F04 :103CA00090F83C209B1A58425841704700207047BA :103CB0002DE9F0410546002600F13408284602F0BF :103CC00027FDF4B2844211DB0026404603F0C0FC1D :103CD000F4B2844214DBFF240FE0D5F8A0200137B2 :103CE00012F81330A34202D10136E7E7002740461D :103CF00003F0AEFCFBB28342EFDB2046BDE8F0816F :103D0000D5F8A030610003EB440213F81430FF2B08 :103D10000AD0537813F0010306D1FF201070D5F8B4 :103D2000A0200A445370E8E70136CEE7F0B5D0F89A :103D3000A03004460D4685B013B9002005B0F0BD93 :103D400013F811604F00FF2E2DD1FFF7B1FFFF28B0 :103D50000646F2D0294604F1340003F07BFC01460C :103D60000028EAD005220DF1090008F045FF0123E3 :103D70003246694620468DF8083002F043FE00289E :103D8000DBD16A4631462046FFF71FFE0028D4D01B :103D9000D4F8A03003F81560D4F8A0309DF80820BE :103DA0003B445A70CAE73246694602F0F4FD0028E7 :103DB000C3D19DF80830324683F00103694620469E :103DC0008DF8083002F01EFE0028B6D1D4F8A030DD :103DD0009DF808203B4401205A70AFE7EB234FF4D5 :103DE000A02C064AC380064B0649C0E90223064BB5 :103DF000C0E90413054BC0E906C370472C01B004A9 :103E0000FC083200DF02C8004000C30000010003CC :103E100010B5044602F02DFD04F13400FFF7DEFF7B :103E20000146204602F06BFD2046BDE81040FFF73A :103E3000E7BD0000F8B5CB7F0746DA070C46CE8811 :103E40000D8907D430B207F002FA86B228B207F023 :103E5000FEF985B2194B30461A88194B198807F0BC :103E6000E5F9184B06461A88174B2846198807F0BB :103E7000DDF9E37F0546DB0717D5B6B285B2A37F30 :103E800025811E2B88BF1E23384688BFA377E68076 :103E9000657F03F0DDFB8542C4BF01236377E37ECA :103EA0003C2B84BF3C23E376F8BD30B207F0C7F962 :103EB00086B228B207F0C3F985B2E0E754DD000806 :103EC00056DD00084CDD00084EDD00082DE9F04706 :103ED0001D4691469DF83820C37FC276BDF830203C :103EE00003F0010302839DF83420AB4204469DF8A1 :103EF00020A09DF824809DF828709DF82C60817783 :103F000082760AD0B0F906002DB307F0A0F9E08060 :103F1000B4F9080007F09BF92081B9F1000F22D114 :103F2000E577BAF1000F03D0E37F43F00403E377B2 :103F3000B8F1000F03D0E37F43F00803E3771FB12C :103F4000E37F63F07F03E3771EB1E37F43F0100369 :103F5000E377BDE8F08707F072F9E080B4F9080074 :103F600007F06DF9D8E745F00205D9E7C180704741 :103F700001814281704700F120031A4650F8041B6A :103F8000984242F8041BF9D1704738B500F1340566 :103F900004462846FFF75AFE40B92946204602F05B :103FA000AEFC2846BDE83840FFF7E5BF38BD38B560 :103FB0000D888C880B897AB1A0F84050A0F8424057 :103FC000A0F8443000F13404214602F098FC204669 :103FD000BDE83840FFF7CFBFA0F84650A0F84840F2 :103FE000A0F84A30EEE700F1200300F1400253F858 :103FF000041B934240F8041BF9D17047007F00096D :1040000000EB80007047007F00F00F00013000EBF4 :104010008000800070474B2928BF4B21052A38BFFC :104020000522B2F5A07F28BF4FF4A072531E1422C0 :10403000B3FBF2F305220431C9B2B1FBF2F143EA5A :1040400001130377704710B5044632B10B8ACA8951 :10405000898906F039FD204610BDCB8A8A8A498AB3 :10406000F7E710B504463AB1C8230A2240F23F21CF :1040700006F02AFD204610BD32231E22C821F7E794 :104080000A235A4310B50C88831884524A885A80F0 :104090008A889A80CA88DA800A7A1A7291F90E2080 :1040A0005A7210BD39B1064B1B888382054B1B88A1 :1040B0000176C3827047044B1B888382034BF6E76B :1040C0004EDD00084CDD000856DD000854DD000818 :1040D00003290DD82AB1022A06D000EB4100408BFB :1040E0007047037E002BF8D000EB4100408C7047F6 :1040F000002070472DE9F04F04460D461646007E1D :1041000085B07BB907460A227A43A118A25A91F9D1 :104110000980AA42A6EB08081CD93BB1022B07D0A4 :10412000638B06E09A1E57425741ECE70028F7D010 :10413000638C4344009300213346284607F048F837 :1041400000B240F2E732314607F070F880B205B0B5 :10415000BDE8F08FCA88B1F802A0AA422AD355451B :1041600022D3B1F804A0554521D3AA4235D99246AD :104170004FF0030909F1FF311A46C9B22046FFF793 :10418000A7FF494600EB080320460393FFF7A0FF73 :1041900007EB870709F1FF3B5F4440445246039B0E :1041A00034F817100090C8E74FF00109E2E74FF02C :1041B0000209DFE723B1022B04D00021A38B03E027 :1041C0000028FAD00121A38C434421B1218D414420 :1041D00000915146B1E7218CF9E70020B1E710B515 :1041E00004467430FFF786FF94F85330DB0703D49E :1041F00000B207F024F880B210BD00002DE9F347AB :1042000017460A2290F88C30054602FB030292F909 :104210007D4088463C1B002B64D0B0F89660A4B269 :104220002644B6B2002B60D0B5F89C301C4495F8FB :104230005330B5F88890DB07B5F88AA0A4B213D440 :1042400030B206F0FCFF86B220B206F0F8FF84B26E :104250000FFA89F006F0F3FF1FFA80F90FFA8AF0DF :1042600006F0EDFF1FFA80FA52464946404606F036 :10427000DDFF264B95F88C20B3F800A00A2303FB42 :104280000252B2F87430B2F87A201FFA80F931463F :1042900000924846224606F09BFF14264FF0000885 :1042A00084B2B4EB5A0F4FEAAA03CCBFE41AE41865 :1042B000A4B200233A4621462846FFF790FF8145E5 :1042C00022D017D90AEB0400C0F34F00A04201D15D :1042D000601C80B2A046013E16F0FF0608D102B075 :1042E000BDE8F087B0F88E6099E7B5F894309DE7A7 :1042F0000446DEE708EB0400C0F34F00A04201D102 :10430000631E98B2A246E6E72046E8E752DD0008C1 :104310000A22037E5343C218C35A0B8053884B8032 :1043200093888B80D388CB80704700000A2330B5F8 :10433000047E0D885C43055303194888588088889B :104340009880C9885A7203221A72034A12889142CD :1043500028BF1146D98030BD52DD00080A234FF432 :104360002A72594342524FF4717243185A8040F2F4 :104370000A529A804FF4C862DA80034A12785A725D :1043800001221A72704700BF49DD0008017EFFF765 :10439000E5BF4A880B88934208D28B889A4205D29F :1043A000C888984294BF00200120704700207047C1 :1043B0007FB5D0F8A04006466CB1B1FA81F514F88B :1043C00011207436FF2A4FEA551507D12946304689 :1043D000FFF7C4FF0024204604B070BD694602F018 :1043E000DAFA0028F2D19DF808309B0705D4294657 :1043F0003046FFF7B3FF0124EDE769463046FFF78B :10440000C8FF04460028F2D02A463046FFF738FE9F :10441000E1E7F8B5054600F174070021384605F1DB :104420003406FFF73FFE304603F012F9400008F073 :10443000EDFAC5F8A000284602F0D1F9044628B3E9 :10444000D5F8A010E1B12846FFF710FB044631462D :10445000284602F037FAA8B131463046FFF7EAFCA9 :1044600000212846FFF7A4FF95F851102846FFF7D2 :104470009FFF3046FFF77FFDB4FA84F04009F8BD96 :104480000C46E4E73046FFF7A9FCE9E73046FFF7C2 :10449000A5FC21463846FFF761FF01212846FFF7BA :1044A00087FF3046FFF767FD0220E8E738B504468E :1044B0000D46FFF77DFF30B1204684F85150BDE82E :1044C0003840FFF762BD38BD2DE9FF411E46138815 :1044D0008DF80860ADF8003053880446ADF802301E :1044E00093883430ADF80430D3880D46ADF80630EB :1044F0009DF928304FEA41088DF80E30C36E03EB6A :1045000041035E7003F0A6F8074688B3694604F1DC :104510007400FFF73EFF58B3394605220DF109003C :1045200008F06AFBD4F8A03004F19E0713F81530A8 :10453000FF2B10D12046FFF7BBFBFF2803D13846E5 :10454000FFF7F9F914E0D4F8A03003F81500D4F817 :10455000A03043445E70D4F8A0306946204613F87A :10456000152002F04FFA0028E9D13846FFF7BEF9CE :1045700004B0BDE8F081704700207047704710B567 :104580000446242108F084F8204610BD38B50B4DB0 :1045900004462B783BB100234FF08042536302F571 :1045A0009632136438BD0648FCF776FE08220549AA :1045B0000548FDF701F82C70F4E700BF400B002020 :1045C0006C0D0020A00300203C0D002000221421CF :1045D000C0E901120A21C0E90411C0E90621052140 :1045E00001620B218184012180F82610254980F881 :1045F0006A20097880F8682080F8691080F8AE2079 :1046000080F8AC2080F8AD1080F8F22080F8F0201F :1046100080F8F1101C49A0F8F42030B5A0F8F6207D :104620004FF0C875A0F8F8204FF4FA74A0F8FA20FB :10463000C26080F8FC20C0F8002180F8042180F8D6 :104640000521A0F80621A0F80821A0F80A210160A0 :104650000821C0F8145180F80C11A0F81841C0F8D6 :104660001021C0F8245180F80C11A0F82841C0F89E :10467000102180F81C11C0F8202180F81C11C0F80E :10468000202130BD48DD00080CD500084FF6FF732F :104690002DE9F34143854FF0401300250446A02740 :1046A000984A994EC0E90B23984B05710360336813 :1046B000C580C0F88E3073680581C0F89230B36849 :1046C000A0F88850C0F89630F368A0F88A5080F8B7 :1046D0008C50C0F89A309E30FFF7F2F88C4B04F102 :1046E000A400C4F82C31C4F8A050A4F8305107F04D :1046F0001DFE29462822C4F83251C4F83651C4F8A8 :104700003A51C4F83E51A4F8425104F5A27008F0A1 :1047100059FA29461922C4F86C5104F5B87008F00A :1047200051FA3A462946A4F8895184F88B5104F588 :10473000C67008F047FA3A46294604F50B7008F0AF :1047400041FA3369A4F8CC52C4F8CE32B38A04F5E6 :104750003570A4F8D232FFF739FF6E4B0826C4F843 :10476000D4326D4B4FF06408C4F83C34142384F801 :1047700040346A4B84F80654C4F8005484F8075453 :10478000A4F80454A4F8085484F80C64C4F8105431 :1047900084F80C64C4F8105484F81464C4F81854F1 :1047A00084F81464C4F8185484F81C64C4F82054C1 :1047B00084F81C64C4F8205484F82464C4F8285491 :1047C00084F82464C4F8285484F82C64C4F8305461 :1047D00084F82C64C4F8305484F83464C4F8385431 :1047E00084F83464C4F83854A4F84284C4F84434D7 :1047F0004B4B0127C4F8483440F21453A4F84C340E :10480000022384F84E3440F63C734FF4007245495D :10481000A4F85434C4F85084434B009704F58B60DB :1048200002F02EF904F59460FFF7D0FE3F4B84F8B8 :10483000CC55C4F8A0343E4B84F8DC651B78C4F832 :10484000E05584F8DC35C4F8E05584F8E465C4F834 :10485000E85584F8E43546F24633A4F80636354B7D :10486000C4F8E855C4F80836334B84F8EC6584F88E :10487000CD55C4F8F055A4F8CE5584F8EC6584F80D :10488000D075C4F8F055A4F8D25584F8F465A4F8AE :10489000D455C4F8F855C4F8D85584F8F465C4F86C :1048A000F85584F8FC65C4F8005684F8FC65C4F833 :1048B0000056A4F80456C4F80C36204BA4F8108611 :1048C000C4F814364EF66023C4F818361C4BC4F8EE :1048D0002476C4F81C3643F61E43A4F820360A2377 :1048E00084F82236174B04F22C60C4F82836FEF701 :1048F000E7FF2046C4F83056A4F8345602B0BDE8AD :10490000F08100BF8000500004D40008E00D0020BA :104910001DC30008ACD90008CF07E8030A08F4015A :10492000E803030E00080140000C01406CD90008A8 :1049300050DD00085802CF0740062003407E0500E6 :10494000F401E803E0930400064A8160026001225A :1049500002710022C0E90422C0E9062282810262BB :10496000704700BF4CD50008014B1878704700BF56 :10497000140B002070B5FCF783FB1B4B00F59675FC :104980005B6A9BB29C1CA4B2632C01D9613B9CB2B4 :10499000154EFCF775FBA84206D2736AA342F8D104 :1049A0004FF0804300225A62FCF76AFB0E4B00F581 :1049B00096755B6A9BB29C1CA4B2632C01D9613BC7 :1049C0009CB2094EFCF75CFBA84204D34FF0804335 :1049D000D86A013005E0736AA342F3D14FF08043F7 :1049E000586A80B270BD00BF002C014010B5037939 :1049F000044633B1FCF744FB4EF66022237902FBF8 :104A0000030323600023637110BD026810B543796E :104A100004463AB133B9FCF733FB2368984224BF0C :104A200001236371607910BD2DE9F041044686B021 :104A3000A43000F017FC04F5357002F083FC04F597 :104A4000946002F019FA02221B4904F58B6002F00F :104A500049F82046FFF7DDFC6D46074604F13408AF :104A6000012241462846FFF7EEFA03AE294604F537 :104A7000367006F02EF8414630460022FFF7E3FA82 :104A800096E8070085E80700294604F2A44006F0EE :104A900020F894F8533004F5C660C3F3400384F85B :104AA0002C3694F84F3084F83436FFF79FFF3846A1 :104AB00006B0BDE8F08100BF000C01402DE9F047D1 :104AC0005D4F5E4C3846FFF7AFFF06465C48FCF78B :104AD00003FD5C48FCF700FD0C215B48FEF732FE4D :104AE00008215948FEF730FE00215848FEF72AFEFB :104AF00004215648FEF726FE08215448544DFEF77F :104B000023FE0C215148FEF71FFE0C215148FEF7F1 :104B100019FEDFF844A120462A46504B504904F0C4 :104B20005EFD2246214628464E4B04F058FDDFF834 :104B3000388121462B462A46504604F050FD2B462C :104B40002A462946474804F04AFD21464246434B3F :104B5000434804F044FD2246214640463F4B04F0C2 :104B60003EFD234622462146404804F038FD2346B8 :104B700022463F493F4804F032FDDFF8FC902346CF :104B8000224621463A4804F02AFD23462246214681 :104B90003A4804F024FD234622462146484604F0C4 :104BA0001EFD2E4A23461146354804F018FD2346C3 :104BB00022462146334804F012FD23462246274967 :104BC000314804F00CFD234622462146234804F0D8 :104BD00006FD224621462D4B2D4804F000FD2346BC :104BE00022462146294804F0FAFC2A4B012EC3E94B :104BF0000B456362C5E9093A274C07D0022E13D052 :104C000097F85330DB0648BF256001E0C4F8008008 :104C1000FFF7B0FE4FF47A70FCF738FA2068BDE871 :104C2000F04703681B6818471C4907F1A40001F00E :104C30009DFCC4F80090EBE7C00300206C0300204B :104C40003C0D00206C0D00208C0E0020D40E0020A6 :104C5000E40C00201C0F00200C0C0020380C00205D :104C6000C40A00206C0A0020180B00206C020020EF :104C7000BC02002034030020F80900201C0A002098 :104C8000FC0200208C0B0020440B0020940A002022 :104C9000480A0020C00B00200C000020CDD40008E2 :104CA00070B5FCF7EDF9364C236898421AD9FCF739 :104CB000E7F96430082120603248FCF7C3FF01287F :104CC0000CBF64210021304806F05CF84FF480717D :104CD0002E48FCF7B7FF01280CBF642100212C48A7 :104CE00006F050F82B4D286804F07DFC0446A0B176 :104CF0002B68834211D02848FEF700FE2748002188 :104D000002F08EFA4FF0804300225A632368204657 :104D10002C601B68BDE870401847286803685B6812 :104D200098472B680446834214D01D4B002100286D :104D300008BF1C46194802F073FA1A48002102F015 :104D4000D7F94FF0804300225A63236820461B683E :104D50002C609847FCF794F9134C236898420ED3C3 :104D60001249134A4B6A10681B1A18BF01231148D5 :104D700003704B6A1360FCF783F92930206070BD23 :104D8000300D0020000C0140B00700200008014059 :104D90007C0900200C000020EC0900209406002073 :104DA000F8090020600800202C0D0020002C014094 :104DB000E00C0020140B002038B50568114B0446A8 :104DC0009D420AD1037F042B1BD10F4802F09EF8AD :104DD0006322002106F02AFA28642368B3F1804F89 :104DE0000FD1227F042A08D15A6B0AB99B6B43B1B9 :104DF0000120BDE83840FFF7C9BB082A01D10220D5 :104E0000F7E738BD002C014060080020F0B50268CB :104E10005D4B87B09A4275D15C485D4CFCF744FC11 :104E20005C48FCF73FFB2378022B71D100255A4BDD :104E30000195029503955A88DE885889B6B2D989BA :104E400092B280B23244019F89B202440A443A4489 :104E500001921A89029992B20A4402929A8903999C :104E600092B20A4403925A8ADE8A588B92B2D98B44 :104E7000B6B280B23244019F89B202440A443A4435 :104E800001921A8B029992B20A4402929B8B039A66 :104E90009BB213440393019B404804330193019B4D :104EA000DB080193029B01330293029B5B08029390 :104EB000039B01330393039B5B080393039905F062 :104EC0000DFF374A1378013BDBB2137013B9062389 :104ED00001251370334890F8E933ABB1019900F51F :104EE000357002F09FFA4FF4F562294606F09EF9FC :104EF0004FF08043586302992B4889B201F081FF3B :104F00000023237007B0F0BD4FF080435D63F2E7EC :104F10002378012BF4D100231F4A049305931388AF :104F200004999BB20B440493938805999BB20B445C :104F30000593138A04999BB20B440493938A059AB0 :104F40009BB213440593049B01330493049B5B08B9 :104F50000493059B01330593059B5B0805934FF074 :104F600080435B6B23B10499104889B205F00AFFB6 :104F70004FF080439B6B002BC2D005990C4889B23F :104F800005F000FFBCE700BF002401403C0D0020FD :104F9000400B00206C0D0020A0030020D40700204F :104FA00008000020C003002060080020A0070020A7 :104FB0006C0900207047000008B5034801F01DFE91 :104FC0000122024B5A6108BD18080020000401406C :104FD0002DE9F04F00247C4D7C4E87B02846FFF72A :104FE00055FB29463046FFF7AFFC794BC6E909442B :104FF0003360B48586F82E403486764E2946304696 :10500000FFF7A2FC744BC6E909443360082386F815 :105010002C30346386F82C304FF0FA733364052358 :10502000C6E90E443463B48686F844306B4E294694 :105030003046FFF789FC6A4B4FF0030B33604FF4A7 :105040007A7386F82440F4843385664E29463046C8 :10505000FFF77AFC644BB484336086F82640634ED5 :1050600029463046FFF770FCDFF88491614B2946F2 :105070003360B46486F84CB04846FFF765FC5E4B7D :105080005E4EC9F80030FF232946304689F82430A7 :10509000FFF75AFC5A4B5B4F33604FF44033B36415 :1050A0004FF41673294686F82440A6F84640A6F821 :1050B0004C303846FFF748FC534BDFF850A13B60BB :1050C000534B3246294687F82440FC853C637B637A :1050D00050483B4604F010FD29465046FFF734FC8B :1050E0004D4A4E4ECAF800204FF4803229463046D1 :1050F000DFF82C81CAE90924FFF726FC494A294632 :1051000032604046FFF720FC474A08F12C06C8F8F9 :105110000020464A88F8244007CA86E80700444E23 :1051200029463046A8F82640A8F82840FFF70CFC8E :10513000404A534632603A463F4FA6F830B02946BF :10514000C6E90944B48586F82E403C48009605F02F :1051500091F929463846FFF7F7FB394ADFF8E4B002 :105160003A6001223A87384A2946BA64C7E90B44B3 :10517000C7E90F447C623C857C637C645846FFF73A :10518000E3FB324F32493846CBF800102946FFF78F :10519000DBFB3049294B39602F49BC84B96240F2AE :1051A000CF7187F82640B9854246CDE9026329468A :1051B000CDE9009A174BCDF810B0284804F05EFCFA :1051C00007B0BDE8F08F00BFC00300206C030020D3 :1051D000A0DB0008E40C0020B8DB00080C0C002069 :1051E00088DB00086C0A0020A8DC0008C40A002044 :1051F000180B002030DC000848DC00086C0200209E :10520000C0DC000834030020D0DB00081C0A0020AA :105210000400DC05BC02002078DC0008F80900204E :10522000FC020020E8DB000800DC00081CD40008B9 :105230008C0B002060DC0008C00B0020440B002019 :1052400020DD0008480A00200000B80B940A002066 :1052500090DC0008D8DC00082C015802380C002033 :1052600006F07CBC022310B51A46044678210F488C :10527000FDF766F90E490F4A0F4B002808BF0A4692 :105280000E49204606F0E0F94023A4F82A322023F4 :105290002046A4F82C3207F0B8F9204606F0BFF9F2 :1052A0002046BDE81040002107F0B7B9E00D00200E :1052B00059AA0008C1A9000889A90008A0E10008AE :1052C00010B5072204468E3007F096FC002384F8C0 :1052D000953010BD0149FFF7F3BF00BF5CD5000852 :1052E0000149FFF7EDBF00BFFED500080149FFF7F8 :1052F000E7BF00BF60D500080149FFF7E1BF00BF6D :1053000065D500080149FFF7DBBF00BF6BD500087A :105310000149FFF7D5BF00BF70D500080149FFF76D :10532000CFBF00BF75D500080A468E30014907F08F :1053300029BC00BF7BD5000810B509220446963071 :1053400007F05AFC002384F89F3010BD0A4625233D :105350000149963007F016BC7FD5000813B50A4BFB :1053600001F0030103EB4113019310230446009362 :1053700018220223002105F0F4FF204602B0BDE808 :10538000104006F066B800BF2ED700082DE9F04F98 :105390008DB09846BDF86430154605939DF8683089 :1053A00040F2E73206939DF86C300446084600212F :1053B00007939DF860A005F039FF40F2E73281467F :1053C0000021284605F032FF6422074600219DF89F :1053D000580005F02BFF9DF85C30BFB2002B14BFC6 :1053E00043224622954BB845C6B21A701FFA89F976 :1053F00080F2FA80A7EB0803142B40F3F5805623C4 :105400004A4600933846002308F1140105F0E0FEF7 :10541000C5B2752D28BF75251E220A21304605F01C :10542000E7FE0646204606F00AF82046844906F0C4 :10543000CFFB4A46834909A807F0A4FB824B4FF0F3 :105440000F0B0193012300211A462046CDF800B02E :1054500005F087FF09A9204606F0CAFB5946814698 :105460000C22204609ABFFF7FBFE05230093012326 :10547000DFF8D8B109F110011A462046C9B2CDF8BB :1054800004B005F06EFF09F118010C226B4B2046A9 :10549000C9B204F18E09FFF7E3FE4946204606F043 :1054A000A7FBC0F17B00C1B24B460C222046FFF7A0 :1054B000D7FE40220C21204604F19603FFF7D0FED0 :1054C000BAF1000F09D1624B3722019309235146EB :1054D00000932046012305F044FF7EB1C6F12D0361 :1054E000C6F387061BB2C6F17A06CDE900360293F1 :1054F0007B232D221946204606F036FE059B002B05 :1055000074D01A464F4909A807F03CFB09A9204668 :1055100006F06EFBC0F16C0106464022204609AB46 :10552000C9B2FFF79DFE0F23C6F1640100933B2231 :1055300002232046C9B206F02FF8052601233422A3 :105540006C212046CDF804B0009605F00AFF3B4BD5 :10555000402274212046FFF783FE3A46394909A8C4 :1055600007F010FB20463B4906F032FB09A9204614 :1055700006F03EFBC0F1810101EBD1712A222046E9 :1055800009ABC1F34701FFF76BFE762333223146A7 :10559000204606F0A7FB06232F225B21204606F0BB :1055A000A8FB032D0ED90323302231462046009359 :1055B0002B4605F0FBFE6B1E2F2231462046DBB248 :1055C00006F090FB079B43B3234B1C220193092356 :1055D000002100930223204605F0C3FE204605F07B :1055E00038FF0DB0BDE8F08F002515E708F109037D :1055F0009BB26C2BA1D84246184909A807F0C2FA01 :1056000009A9204606F0F4FAC0F16C0140222046B8 :1056100009ABC9B2FFF724FE8FE7069B002BDDD054 :105620000F4A013B03F0030302EB431301931023E2 :105630001822009307990223CDE700BF1200002033 :1056400058DD0008AFD500084ED60008C0D70008C6 :105650005DD60008D8D700083CD600087BD50008E6 :105660002ED700082DE9F34104461F460E46154685 :1056700005F0E5FE2046584906F0AAFA574B002FE0 :1056800072D053F826802046414606F0B1FAB4F8AD :105690002A62B4F82C22A6EB5000103A4346C1B25D :1056A000D2B22046FFF7DCFD3A464D49684607F086 :1056B00069FA6946204606F09BFAB4F82C22B4F841 :1056C0002A121F32A1EB50016B46D2B22046C9B25A :1056D000FFF7C6FD2046434906F07AFA2A464049BC :1056E000684607F04FFA6946204606F081FAB4F89A :1056F0002C22B4F82A120F32A1EB500105466B465A :105700002046D2B2C9B2FFF7ABFD3E26204605F0D7 :10571000A0FE94F92E32C5F34705002BB4F82A32C7 :1057200052DD2B447F2B02DDFF2384F82E3294F9C7 :105730002F22B4F82C32002A4FEA560648DD1E44C8 :105740003F2E02DDFF2284F82F22B4F82A1294F9AA :105750002E220A44A4F82A2294F92F221344A4F8F2 :105760002C3202B0BDE8F08153F82670204639464D :1057700006F03EFAB4F82A62B4F82C22A6EB5000E8 :105780000A3A3B46D2B2C1B22046FFF769FD204635 :10579000144906F01DFA2A461149684607F0F2F945 :1057A0006946204606F024FAB4F82C22B4F82A12EE :1057B0001732A1EB500105466B462046D2B2C9B262 :1057C000FFF74EFD2E26A1E7AB42B0DC0123ACE78C :1057D000B342BADC0122B6E758DD0008C8D700089A :1057E000AFD50008D8D700082DE9F04F1D460E466A :1057F0008BB09146044625232A46724906A807F035 :10580000C1F93246704908A807F0BCF94323204685 :105810006E49ADF8143006F0DBF906A9204606F013 :10582000E7F9461DF6B2C6F1760300930023642221 :105830001946284605F0CCFC14220A215FFA80F8AC :10584000284605F0D5FC40F6FF72914507464846CC :1058500028BF1046B9F5006F00F2AD801423009305 :1058600000234FF40062194605F0B2FC4FF0700AB5 :10587000142340F6FF7240F60101C5B2CDF800A036 :105880004FF4616005F0A4FC8146204605F0D7FD89 :105890004F49204606F0ACF9C0F1800101EBD1710F :1058A0000F224B4B2046C1F3470104F18E0BFFF74B :1058B000D7FC5946204606F09BF9C0F17B00C1B2E7 :1058C0005B460C222046C7F12307FFF7C9FC3FB215 :1058D00008F10503CDE90137232705213A46204683 :1058E000009706F041FCC6F180013A46204606AB1F :1058F000C9B2FFF7B5FC374B282201930A230021D8 :1059000020460093012305F02CFD334B2A220193FE :105910000623782120460093012305F022FD5346FB :105920002A220821204606F0DDF953462F220821BD :10593000204606F0D7F909F1080104232F2220465A :10594000C9B206F0D6F92B462C220821204606F0D3 :10595000C9F9012D0CD92B462B220821204606F02F :10596000C1F96B1E2D2208212046DBB206F0BAF9E0 :1059700008A9204606F03CF9184B0546019305237B :105980002046009334220123702105F0EAFCC5F182 :105990007001204608AB4022C9B2FFF761FC4022EB :1059A0007821204605ABFFF75BFC204605F051FD52 :1059B0000BB0BDE8F08F702340F601010093142373 :1059C00052E700BF83D50008AFD5000858DD0008B6 :1059D00089D5000866D6000870D60008C0D7000830 :1059E0000023A0F82832C0F8C83070470B7880F840 :1059F000E5304B7880F8E630002380F8E7307047D8 :105A0000022970B504460D4616460FD8FBF738FB41 :105A1000074B00F57A70C4F8C800324653F82510D9 :105A200004F1CC00BDE8704007F0ACB870BD00BF19 :105A3000B4D70008F8B50546174608464FF4FA7281 :105A40000E4995F8284205F0F1FB40F2E732064690 :105A50000021384605F0EAFB05EB4403A3F8E860B3 :105A6000A3F88801631CDBB24F2B82BF012385F8AA :105A70002932002385F82832F8BD00BF0CFEFFFF55 :105A80002DE9F04F0446B3B008466322002105F02B :105A9000CDFB94F829520390002D40F0A98094F892 :105AA0002872002247F6FF769F4B04F1E601D0B240 :105AB000874200F29F80002EBCBF764236B29E42E3 :105AC000B8BF1E46002347F6FF7A994604F5C37215 :105AD000D9B28F4200F2988035B194F8285201353E :105AE000EDB2502D28BF00254FF0000B28230DF1FB :105AF00028085FFA8BF2974200F29080B6F57A7F21 :105B0000C0F2D48000238DF8183025239DF80C2096 :105B1000864908A807F036F8D4F8C850002D40F0A0 :105B2000CB8000230126C4F8C830B9F57A7F80F015 :105B3000CA804A467E4905A807F024F84FF00108BC :105B40007C49204606F044F8204605F078FC5E23A8 :105B500014221A21204606F0C5F8774B1222019331 :105B600005236F2120460093012305F0FAFB0F2245 :105B700076212046714BFFF773FB0125013FBD42A3 :105B8000C0F2A4809DF818302BB10F2200212046CE :105B900006ABFFF765FB28220021204608ABFFF784 :105BA0005FFB002E00F0BA8094F8E5306BB104F191 :105BB000E5052946204606F01BF8C0F17E00C1B27B :105BC0002B463C222046FFF74BFB0125AF4200F35A :105BD0009180B8F1000F05D03C22002105AB204692 :105BE000FFF73EFB204605F034FC33B0BDE8F08FF4 :105BF000502756E731F9020F01328642A8BF064608 :105C00008342B8BF034652E732F8021F01338A4588 :105C100028BF8A46894538BF894659E7002E40D0BB :105C200005F1740234F91220002A0BDD5A4392FB6D :105C3000F6F2C2F1140252B2002AD8BF012288F84B :105C400000200AE0524212B25A4392FBF6F214329A :105C500052B2282AF3DD88F80030D14524D905F165 :105C6000C40234F81200A9EB0A02A0EB0A00C0EB50 :105C7000001090FBF2F000210F2200B205F0D6FADE :105C80002823C0F13F0040B20135EDB21EAA502DCD :105C90000BF8020008BF00250BF1010B08F1010809 :105CA00027E74FF01402CAE73F20EDE732462449C8 :105CB00006A806F067FF28E7FBF7E2F985427FF6C2 :105CC00030AF002631E74FF0000839E705F1C80290 :105CD0006A4412F8A00C05F11B03009005F11A01AB :105CE000204612F8A12CDBB2C9B2013506F047F804 :105CF000EDB244E705F1C8026A4412F8500C05F110 :105D00001B03009005F11A01204612F8512CDBB25A :105D1000C9B2013506F033F8EDB257E73E223146FD :105D200004F1CC035BE700BF0180FFFF8ED50008C4 :105D3000AFD5000858DD0008AED700089ADA000891 :105D40007BD500082DE9F047044686B00F4625496B :105D5000904605F03DFF204605F071FB22492046A4 :105D600005F046FF0646C0F1800505EBD575C5F385 :105D7000470529460D2220461B4BFFF771FA334693 :105D800029460F22204605F0ADFF1C250026DFF82E :105D90005C90DFF85CA037F8162059F8041B03A8C4 :105DA00006F0F0FE03AB2A4614212046FFF758FA0E :105DB000F3B298450BD10723A5F108020093002107 :105DC00001232046CDF804A0D2B205F0CAFA01366C :105DD0000D35032EEDB2DED1204605F03AFB06B0BC :105DE000BDE8F08758DD000894D50008B4D7000856 :105DF00025D600082DE9F04F8FB098469DF8643005 :105E0000DFF8B8A1002B14BF4323462304460F46F6 :105E10000AA86B498AF800309DF870B09DF86C9024 :105E200006F0B0FE2D220A219DF8680005F0E0F989 :105E300064490546204605F0CBFE204605F0FFFAF2 :105E40006149204605F0D4FE39460646204605F055 :105E5000CFFE81190531C9B2C1F1800101EBD171C9 :105E600041F3470121EAE171C9B20D222046564BA8 :105E70000591FFF7F5F90599053631443B460D22AA :105E80002046C9B2FFF7ECF976230F220521204600 :105E900005F028FF0AA9204605F0AAFE0AAB212238 :105EA00005212046FFF7DCF94246484907A806F0DD :105EB00069FE474B2A2201930F23052120460093B8 :105EC000012305F04EFA07A9204605F091FE39227C :105ED00006461021204607ABFFF7C2F93D4B06F1FD :105EE0001101019305232D2220460093C9B20123FD :105EF00005F037FA06F11901534639222046C9B296 :105F0000FFF7AEF9BBF1000F15D0334B32220193EE :105F10000723462120460093012305F022FABDF80D :105F200060202A4907A806F02DFE3922502120467C :105F300007ABFFF795F955B9B9F1000F1CD0274908 :105F4000204605F055FE254BC0F17B011BE0C5F155 :105F50003F03C5F387021BB2C2F17A02CDE90032DA :105F600002937B233F221946204606F0FDF81B2DA5 :105F7000E2D9B9F1000F0BD11949204605F038FEDE :105F8000174BC0F17B0121222046C9B2FFF768F907 :105F9000642200219DF8740005F048F9C3B2012B7A :105FA00006D902220E21009220463E2205F0FEF97B :105FB000204605F04EFA0FB0BDE8F08F1400002027 :105FC0009DD5000858DD0008A5D50008AFD500080C :105FD0004ED60008C0D7000825D60008FED5000818 :105FE0005CD500082DE9F04F89B01E469DF84C3075 :105FF0008946002B14BF43214621874B9DF85070E2 :1060000019700546854904A8BDF848409DF854A07C :106010009DF858B006F0B6FD0A2F09D92D23A7F137 :106020000A0000935A220A23002105F0D1F8C7B2D2 :10603000A642C0F0B880301B48BF07301E220021A6 :10604000C01005F0F3F800F142047549284605F048 :10605000BFFD284605F0F3F97249284605F0C8FD52 :1060600049468046284605F0C3FD00EB0806053684 :10607000F6B2C6F1800606EBD67646F3470626EA68 :10608000E676F6B231460D222846664B08F1050841 :10609000FFF7E6F806EB08014B460D222846C9B289 :1060A000FFF7DEF876230F220521284605F01AFEB9 :1060B0002122052104AB284605F050FD5A4B064627 :1060C00001930523411D152228460093C9B20123DF :1060D00005F047F906F10D01212228464E4BC9B2C1 :1060E000A4B2FFF7BDF8BBF1000F0BD04F49284613 :1060F00005F07EFDC0F17B01212228464B4BC9B241 :10610000FFF7AEF84A4B2D2201930A2300212846BF :106110000093012305F025F9464B2F220193062316 :10612000682128460093012305F01BF960232F22E4 :106130000821284605F0D6FD602334220821284690 :1061400005F0D0FD042334224221284605F0D1FD7C :1061500004232B224221284605F0CBFD0A2C16D918 :10616000E4B2A4F10906F6B23346312208212846EA :1061700005F0B8FD0A3C334630220821284605F0D8 :10618000B1FD322208212846E3B205F0ABFDF7B994 :10619000BAF1000F2ED02849284605F029FD264BDC :1061A000C0F17B012DE0A41B48BF0734C4F3CF042A :1061B0001E2C02D8C4F1420447E71E3CC4F3CC00B5 :1061C0001C22002105F032F8C0F124043DE7BB0891 :1061D000C7F13F02C3F17A03CDE900237B2302928A :1061E00019463F22284605F0BFFF1B2FD0D9BAF130 :1061F000000F0BD11149284605F0FAFC0F4BC0F1F6 :106200007B0121222846C9B2FFF72AF8284605F06B :1062100020F909B0BDE8F08F10000020AAD50008D1 :1062200058DD0008A5D50008C0D70008B3D5000880 :1062300066D6000870D60008FED500085CD50008B8 :106240002DE9F74F04468A463F491E4615469DF8FC :1062500034709DF830B005F0BBFC204605F0EFF837 :106260005146204605F0C4FC8146C0F1800808EB89 :10627000D878C8F34708414653460D222046FEF71A :10628000EFFF4B4641460F22204605F02BFD06EB63 :10629000460306EB8306002F06F114065FFA86F923 :1062A0000CBF4FF000084FF00F081426DFF89CA039 :1062B00002354E4505D1204603B0BDE8F04F05F04C :1062C000C8B82B78002B3AD015F8023C5B4509D1B1 :1062D0001F4B32460193072341460093204601237A :1062E00005F03FF806F108022B4618212046D2B2ED :1062F000FEF7B6FF15F8013C9B070AD4154B721E3A :10630000019309236421009320460123D2B205F0B2 :1063100028F8A7B915F8013C0C2113F0010F4FF034 :10632000080308BF0C4A009308BF01924FF0010315 :106330003246204618BFCDF804A005F012F80D36FD :10634000F6B20C35B5E700BF58DD00082CD60008C2 :1063500025D600085DD6000834D600082DE9F047A0 :1063600006468A46374990461F469DF8209005F01C :106370002FFC304605F063F85146304605F038FCF6 :106380000546C0F1800404EBD474C4F347042146ED :1063900053460D223046FEF763FF2B460F2221465F :1063A000304605F09FFC4146304605F021FC394659 :1063B0000546304605F01CFC0446CFB33B78BBB322 :1063C00043462D220A213046FEF74AFFB9F1000F5D :1063D00014D12544662D0CDC3B462D22C4F17101FD :1063E000C9B23046FEF73CFF3046BDE8F04705F045 :1063F00030B83B46C4F180013C22F1E7C4F180058E :1064000005EBD575C5F347053B463C22294630468A :10641000FEF726FFA5F10A010B4BC9B23C2230461C :10642000FEF71EFF04F180014910084B0231E3E73B :10643000C5F1800505EBD57543462D22C5F347010F :10644000CFE700BF58DD0008B6D50008B8D5000872 :106450002DE9F74F044604F0F2FF94F8A0308BBB0F :1064600017253E4B3E4E14220A21204601930095EB :10647000022304F076FF032314221C212046CDE9D9 :10648000005604F06EFF0323142230212046CDE98C :10649000005604F066FF334B142244212046CDE918 :1064A0000053032304F05DFF032314225E212046E2 :1064B000CDE9005604F055FF204603B0BDE8F04F8B :1064C00004F0C7BF2046284905F082FB04F1A00074 :1064D000F9F73EFE00234FF00D0A98464FF00A09E7 :1064E000C6B2B342E8D29A1CD2B25D1C9F32EDB262 :1064F00022442F460135EDB2AE4226D8A03304EB3C :10650000030B5946204605F073FB03065FBFC0F13D :106510008000C0F347015B46524642BF5B4652468D :1065200000212046FEF79CFEBAF1340FC4D0AE42E3 :1065300088BF2D1907F102070AF10D0A88BF85F8F7 :10654000A090FBB25FFA8AFACBE712F8011F0A2982 :10655000CFD1621982F8A080D0E700BF76D60008BC :10656000E9D60008A4D6000858DD00080B781BB156 :106570002822A03006F040BB80F8A0307047000011 :106580002DE9F04104460E4686B0264915461F46C1 :1065900005F01EFB204604F052FF4EB1224B0022B4 :1065A00001931023114600932046022304F0D9FEE4 :1065B0002A460F251D4902A806F0E4FA1E220021F2 :1065C000204602ABFEF74CFE0D9EDFF86080023ED7 :1065D000414636F8022F02A806F0D4FA2A460F35B3 :1065E0003C21204602ABEDB2FEF73AFE4B2DEFD137 :1065F0009DF83030002F14BF69222022002B14BFD9 :10660000672320230A4902A806F0BCFA3A22052192 :10661000204602ABFEF724FE204604F01AFF06B027 :10662000BDE8F08158DD00082ED7000821D600080B :10663000BAD50008F0B5044689B02E492E4F05F0B2 :10664000C7FA204604F0FBFE3946204605F0D0FA92 :106650000646C0F1800505EBD575C5F347053B46F9 :10666000294620460D22FEF7FBFD33460F22294620 :10667000204605F037FB6846204906F00DFB6946C9 :10668000204605F0B5FAC0F1800101EBD1716B46EF :1066900020461E22C1F34701FEF7E2FD184A684674 :1066A000184906F06FFA6946204605F0A1FAC0F1D4 :1066B000800101EBD1716B462D222046C1F34701C9 :1066C000FEF7CEFD6846104906F0E6FA6946204618 :1066D00005F08EFAC0F1800101EBD1716B463D22CD :1066E0002046C1F34701FEF7BBFD204604F0B1FE92 :1066F00009B0F0BD58DD0008C2D50008C8D50008B3 :10670000DBD50008E0D50008F0D500081020704760 :1067100008B502462023FFF7F9FFB3FBF0F3508ED4 :10672000584380B208BD30B5438D04468B420D46B8 :1067300085B018D0838D8B4202D8002005B030BDC3 :1067400020234A01C18D64204900CDE9013004F1C4 :106750000A0300932068102392B289B2FBF7B2FDBE :106760000028EAD165850120E8E730B5838D04462D :106770008B420D4685B01BD943854A012023C18D2C :1067800064204900CDE9013004F10A030093206838 :10679000102392B289B2FBF705FD30B9142065854C :1067A000FAF774FC012005B030BD1420FAF76EFC36 :1067B0000020F8E7002388888B80752370B54C1E75 :1067C00001F11F0514F8016F06EB4303A5429BB2CC :1067D000F8D1C41A6042604102B18B8070BD2DE9CE :1067E000F84F0223C18D044649001A46006889B259 :1067F000FBF7A6FE0546002015B12071BDE8F88F15 :1068000001232E46AA46A8464FF0FF39237104F112 :106810000A0B238EAFB2BB4217D939462046FFF789 :1068200082FF88B1002259462046FFF7C3FF60B1BE :10683000D4F80A304B453CBFB8469946534501D978 :106840003E469A460135E4E72071207917B9E78082 :106850002781D3E7238EE680BB4207D90136B6B243 :10686000B34296BF002326812381C7E7A4F808809E :10687000C4E72DE9FF4100F10A0604462022FF216A :10688000304606F09FF9002564274FF02008238E3C :10689000AB420CDDE18D6A0149001023CDE901878F :1068A000206892B289B20096FBF77CFC28B12046A2 :1068B00004B0BDE8F041FFF792BF0A20FAF7E6FB0B :1068C0000135E4E770B50D46C1880446FFF72BFF9C :1068D000064610B90026304670BD0022204604F15D :1068E0000A01FFF767FF0028F4D00B4629462A3437 :1068F00053F8042BA34241F8042BF9D1EBE738B548 :10690000037904460BB9002038BD0B68012201331E :106910000B60FFF74FFF04F10A0301F1200251F869 :10692000040B914243F8040BF9D120462189FFF76B :106930001CFF0028E7D02389228EE38001339BB21D :106940009A4223819CBF00232381DDE708884B887E :1069500030B503EB4003888801F10D0400EB4300E0 :10696000CB8803EB4003087A00EB430091F90E302B :1069700003EB400301F1080010F8015F844205EBCE :106980004303F9D1C87B7533DCB2041B604260411C :1069900002B1CB7330BD2DE9F84305464FF0200816 :1069A000FFF7B4FEB8FBF0F817466B8E0E4608FBF7 :1069B00003F2974204461FDCB7FBF8F9A98D28467D :1069C000C91A494489B2FFF7AEFEB8B108FB19777E :1069D0007C43E1B20A31002228462944FFF7B6FF82 :1069E00070B101F1100351F8042B994246F8042BC1 :1069F000F9D10020BDE8F8830320FBE70120F9E787 :106A00000220F7E72DE9F04705464FF02009FFF790 :106A10007DFEB9FBF0F990466B8E0F4609FB03F241 :106A20009045044627DCB8FBF9FAAE8D2846F61AE5 :106A30005644B6B23146FFF776FEF0B109FB1A882C :106A400008FB04F4E4B20A3429190B4607F11002DA :106A500057F8040B974243F8040BF9D1012228465A :106A6000FFF774FF31462846FFF77FFE80F00100F4 :106A7000C0B2BDE8F0870320FBE70120F9E7000082 :106A800070B500250826C0E90C13BDF8103006705B :106A900083874560104B067043F2642683600123B0 :106AA000DFF838C0C6870E4E4560C0E9095545611C :106AB000C0E910C685618581858385738577C57733 :106AC000456180F820508583C562856105874287CE :106AD000C3738577037470BD0180FE7F0414DC05E9 :106AE0002C01C40900230287B0F84620436282814A :106AF00090F84020C16202704360704738B5044688 :106B0000FAF7BEFAA36A984201D2002038BDFAF71C :106B1000B7FA94F84130218F0344A362E06AFBF78F :106B200091F8C0B994F83E104900C9B294F82030E9 :106B3000204693B104F0DFF894F83F30984221DA10 :106B4000002384F82030636A0BB1E57F55B3002041 :106B50006062E077DAE70021E8E704F0CCF894F827 :106B60003E3098420EDD012384F82030FAF788FA8F :106B7000636A1BB1C01AA389834208D2FAF780FA6C :106B80006062C2E794F82030002BDCD0EEE7B4F866 :106B900042308342B9D2E37F002BB6D101230220D9 :106BA000E377B3E7FAF76CFA636A6562C31AA08900 :106BB000984294BF00200120A8E7B0F908308B422A :106BC00006DCB0F90A308B4202DB8183012070477A :106BD0000020704738B50446438102819DF810506B :106BE000FFF7EBFF9DF81430E5739D4238BF1D465B :106BF0009DF818302574A37338BD70B5418F0446D5 :106C0000006BFBF71FF80646FAF73AFA012E054625 :106C100063690FD023B16369A289C31A934208D96B :106C2000A18F606B6561FBF70DF8431E5842584118 :106C3000A07770BD002BFCD0A18F606BA67FFBF707 :106C400001F8B0FA80F0F6B24009B0421FD1626993 :106C5000A189AA1A8A42E37B19D2A269B4F8441026 :106C6000AA1A8A42A56138BF237CA27F9BB28AB14F :106C7000A28BD31A1BB2A383A28BB4F90A3012B22F :106C80009A420ADDA27B0AB1B4F90830A38300233B :106C90006361CEE7A28B1344ECE7A28BB4F9081032 :106CA00012B28A42F3DAA27B002A08BF0B46EDE754 :106CB00090F82D01023801288CBF00200120704778 :106CC000B0F832017047B0F8640180B2704790F8B4 :106CD0006601704708B503681B6A984780B208BD13 :106CE000704790F82D3113B5032B04460FD1642360 :106CF00000930023194690F8662190F82E0104F0C5 :106D000067FAC0B2642828BF642002B010BD00F545 :106D10009E7003F0FCFF64230093002394F8672126 :106D20001946ECE708B500F5A67003F0F0FF80B255 :106D300008BD08B500F5AA7003F0E9FF80B208BDF0 :106D400010B5044600F5A27003F0E1FFB4F870310D :106D50009842ACBF0020012010BD0000054B10B5CB :106D60001A8804460846002104F060FAA4F83201AB :106D700010BD00BF52DD000810B504464FF4C671C7 :106D800005F086FC204610BD10B5044601224FF4E4 :106D900000410448FAF75CFF94F8843184F82C3100 :106DA00010BD00BF0008014070B5044621B9BDE820 :106DB000704003681B69184790F8675103238D42A0 :106DC00028BF0D4680F82D31FFF7DEFF84F82E51E5 :106DD00070BD08B54FF0804340F2CF720021986B30 :106DE00004F024FA80B208BD10B5044600F5A27084 :106DF00003F08DFF94F82D31002B08BF002080B2E6 :106E000010BD38B590F8153104460D465BB100F55C :106E1000A27003F070FF411B494304F5AA70BDE85E :106E2000384003F05BBF38BD642307B500930023EF :106E3000B0F86A211946B0F8340104F0C9F980B2FB :106E4000642828BF6420C0B203B05DF804FB0000D2 :106E500038B505460C4619B1BDE83840FFF794BF78 :106E60000A4604484FF40041FAF7F2FE85F82C4137 :106E700038BD00BF0008014030B50025044690F839 :106E8000813185B090F88211A0F8345180F82D51ED :106E9000A0F82E51029390F88031CDE90013B0F89C :106EA0007E31B0F87C2104F0D8F929462046FFF75E :106EB000CFFF0E4BC4F840511B78C4F8485184F8FA :106EC0004C31C4F8505184F85431C4F8585104344A :106ED00020462B460D224FF47A7103F00CFE294612 :106EE000204605B0BDE8304003F013BE4ADD00087F :106EF00000214FF0804310B580F82D1199630446AE :106F0000FFF7A6FF012384F8303110BD73B50446A6 :106F100000F5A27003F0FBFE83B21D46A4F86431B5 :106F2000714B06461B886333AB4294F82D3105DB69 :106F3000B4F8322102F5C872AA4213DA022B11D139 :106F4000012384F82F31694BB4F834211B689A630C :106F500094F82F31E3B1B4F83231023BAB4211DC8B :106F6000002552E0013B042BFAD801A252F823F08D :106F7000476F0008476F0008ED6F00084F7000086A :106F8000D97000080021201D84F82F1103F0C1FDE5 :106F900094F82D31012B0AD1B4F832311333AB42BE :106FA000BFBF022384F82D31D4F88831E36094F810 :106FB0002C3103F0FF0563B194F82C31013BDBB2B7 :106FC00084F82C3194F82C3103F0070384F82C3129 :106FD000C6E7B4F9321132B2201D03F0B7FD2946DD :106FE00094F8672104F022F905460EE094F82C315C :106FF00053B3002594F82C31013BDBB284F82C31DB :107000003A4BB4F834211B689A632046FFF7E1FE3F :10701000B4F86831834265D894F81531002B08BF65 :10702000002504F59E762946304603F057FE294692 :10703000304603F060FE411B494304F5A67003F09F :107040004DFEA8B202B070BD94F82E51D8E720468C :10705000FFF7BFFEB4F86821904203D22046FFF745 :1070600047FF7DE794F815319BB1B4F86431B4F86B :1070700070119BB28B4219D294F830314BB9012375 :1070800084F83031F9F7FCFFD4F878310344C4F8C0 :107090003831D4F83831002B3FF462AFF9F7F0FF04 :1070A000D4F838319842FFF45BAFD7E7B4F8640105 :1070B000B4F86C31009280B2B4F8322104F088F850 :1070C000B4F86A21B4F8681180B204F0AFF8074B45 :1070D00080B21B689863DCE7294604F1280003F0BE :1070E00069FD81E700259CE752DD0008D40E0020F1 :1070F00038B50023C0F8383190F82D3104460D46DC :10710000052B0ED8DFE803F0032929384F29FFF7B4 :1071100060FE60B92DB12046FFF736FE012384F8EA :107120002D310023C4F84031C4F8503138BD94F8F3 :10713000153145B383B32046FFF726FE04F5A27050 :1071400003F0E5FDB4F8323182B2934203D9104620 :10715000C8309842E2DB0223E1E70029E1D10423B1 :1071600084F82D31F9F78CFFD4F8743184F830515C :107170000344C4F83831D4E7FFF72BFE80B1002D6B :10718000E9D194F81531002BCBD0B4F86431B4F8C0 :1071900070219BB29A42E2D92046FFF7A9FEC0E7D0 :1071A000002DBED1F8E7FFF714FE0028B2D094F806 :1071B0001531002DBED1002BEED0B4F86431B4F8F7 :1071C00070219BB29A42ACD9F9F75AFFD4F87831C2 :1071D0000344C4F83831012384F83031A1E790F832 :1071E0003201431E584258417047B0F82C01704795 :1071F000B0F86A01704790F83201B0FA80F04009A7 :1072000070470023A0F83011C0F84C31C0F85C3151 :1072100019B9032380F8323170470223FAE7704727 :1072200010B5044679B990F83231A0F8301113B195 :10723000032384F832310023C4F84C31A4F82E31F2 :10724000C4F85C3110BD0021043003F062FC01235E :10725000EFE7000090F8323170B5012B05460E467D :1072600003D10021043003F054FC0A4B05F5A8704B :107270001C88B44228BF3446A5F82C4103F047FDD2 :10728000143480B28442ACBF0024012485F8334119 :1072900070BD00BF52DD000810B5044600F5A470B3 :1072A00003F035FD94F83231022B14BF83B2B4F8E9 :1072B0003031B4F86801984228BF184610BD08B5AF :1072C00000F5AC7003F023FD80B208BD08B500F5F1 :1072D000B07003F01CFD80B208BD08B500F5A870C1 :1072E00003F015FD80B208BD37B5044600F5A47063 :1072F00003F00DFD94F83231B4F86851022B80B2DE :1073000004D1B4F83001B4F86A5103E094F8323192 :10731000042BF8D02A46002103F088FF6423009351 :1073200000232A46194680B203F052FFC0B203B0D0 :1073300030BD10B504464FF4C27105F0A9F92046DE :1073400010BD000030B50025044690F8783185B0B6 :1073500080F83251A0F8305180F83351029390F800 :1073600077310434019390F87A310093B0F8743196 :10737000B0F8722190F8761103F06FFF94F86D3138 :1073800084F8343194F86C31C4F8385184F83C31C5 :1073900094F86831C4F8405184F84431C4F8485135 :1073A00084F84C31C4F8505184F85431C4F8585121 :1073B00084F85C314FF08043C4F860519A6AD96A0E :1073C0000B4B013102FB01114FF47A721B6820460E :1073D000B3FBF2F3B1FBF3F10B22012389B203F00B :1073E0008AFB2946204605B0BDE8304003F091BB3A :1073F000EC01002010B5044600F5A87003F087FCEE :1074000094F83231002B08BF002080B210BD00007C :10741000034B1B888B4228BF0B46A0F82C317047CA :1074200052DD000870B5044600F59C7003F063FC63 :1074300083B2A4F83431B4F83411054689B204F5A6 :10744000A87003F058FCB4F83411064689B2411A0A :10745000494304F5B07003F041FC2E4B1B886333A5 :10746000AB4205DBB4F82C3103F5C873AB4206DA46 :1074700094F83231DAB2012B08BF84F8332194F842 :107480003231013B032B40D8DFE803F016360239D6 :10749000B4F86E310025B34201DD84F8325129463B :1074A00004F5A47003F027FC411B494304F5AC70BC :1074B00003F014FCA8B270BDB4F82E31B4F82C61FE :1074C000002B18BF1E4694F833314BB1B31EAB42AC :1074D0004FF000011BDD84F83311201D03F019FB70 :1074E0002AB231B2201D03F031FB0021B4F868212B :1074F00003F09CFE0546D2E7B4F83051CFE72946A9 :1075000004F1280003F056FBF4E70025C7E70D4619 :10751000C5E700BF52DD00080023C0F83C31C0F8C9 :107520004C31C0F85431C0F85C31C0F8643180F897 :107530003231704790F83231012BDAB20CD1B0F809 :107540002C318B4208D9002380F83321A0F82E116A :10755000C0F84C31C0F85C317047000000000000FA :10756000F8B590F81531044613B9334B1878F8BDC7 :1075700000F5A077384603F0CAFB304E304D336833 :10758000C01A0028B8BF4042132801DC2868EEE783 :10759000384603F0BCFBB4F880213060904239DA01 :1075A000F9F7D6FAF8F740FF02460B461CA1D1E9DD :1075B0000001F9F7BBF80022224BF8F7D5FDF9F7E7 :1075C000BDF901462048F9F7CBFB1F49F9F7C8FB85 :1075D00005F062F81D49F9F7C3FBF8F725FF12A380 :1075E000D3E90023F8F7C2FDF9F7A8F901464FF0F7 :1075F0007E50F9F7B5FBF8F717FF0DA3D3E9002389 :10760000F8F7B2FDF9F79AF905F0B8F8F9F7D0FCF8 :107610002860ACE7084B1878FAE700BFAFF30080AA :107620000000000000FEAF4083DBB5DCE1796B3F7A :10763000666666666612714049DD0008380D0020F6 :10764000340D00200000F03F00401C4600E076456D :107650005E2070475D29DDBF024801EB81014018C3 :10766000002070471600002070B500230E46094D1B :107670000522294630461C4605F0ACFA38B15D2C8F :1076800004F1010305F10505F2D14FF0FF34204666 :1076900070BD00BF1600002010B5142494B022461F :1076A00000210CA805F08EFA22460DEB0400002103 :1076B00005F088FA0021102201A805F083FA0224BF :1076C00001224FF48033CDE90A23CDE911434FF471 :1076D000E0130AA80E921393FAF7E6FF0F234FF474 :1076E0008062CDE905340023214605A8CDE90732A3 :1076F0000993FBF79BF94FF4004301A8019403930E :10770000FBF750FA14B010BD2DE980480126002483 :107710004FF002099BB0CD4DF9F794FCFFF7BCFF89 :107720001022002112A805F04DFAAB69002243F0A7 :107730002003AB61AB694FF4406103F02003029377 :10774000029BAB69C24843F00403AB61AB694FF4E1 :10775000807803F004030393039BAB694FF4007A32 :1077600043F00803AB61AB69082703F008030493F7 :10777000049BFAF76DFA00224FF40441B548FAF77A :1077800067FAB54BB24812A9CDE912631496FAF71D :107790007FF9AF4812A9CDE912941496FAF778F957 :1077A0004FF44063AA4812A9CDE91236CDE9144935 :1077B000FAF76EF9A74812A9CDE912841494FAF7E2 :1077C00067F9A44812A9CDE912A41496FAF760F952 :1077D0004FF404439F4812A9CDE91236CDE914496C :1077E000FAF756F99A4812A9CDE912741494FAF7E7 :1077F0004FF9224621460620F9F7D4FF0620FAF772 :1078000001F86B69214633436B616B692246334053 :107810000B200193019BF9F7C5FF0B20F9F7F2FF4D :107820004FF482738D488E4A8E4DC0E900230A239F :10783000C0E906A74FF4602BC362C0E90244C0E967 :107840000444C0E908448462FBF7E8FAC5F80880FC :107850004FF00408844B28462B602E732C75C5F816 :107860001CB06C60C5F81080CDE912440B941494E0 :10787000F9F79AFD4FF4E0234FF0060A28460BA9CA :107880000B93F9F753FF284612A9CDE91296CDF8CC :1078900050A0F9F747FC0323284612A9CDE9123975 :1078A000F9F740FC05220323284612A9CDE912234B :1078B000F9F738FC12A928466C4DCDE912A8F9F762 :1078C00031FC6B4B28462B602E732E61AC602C75FF :1078D000C5F81CB06C60CDE912441494F9F764FD4E :1078E000284612A9CDE91286CDF850A0F9F71AFC66 :1078F00060486149614BC0E90244C0E900134FF49C :107900008043C0E90644C0E904340462FAF7A2FBEC :107910001022214607A805F055F91C2221460BA884 :10792000CDE9054405F04EF92022214612A8544D18 :1079300005F048F9534B4FF40059C5E9003463236F :107940002846C5E90334C5E90544AC60FBF7CAFC29 :1079500007A92846CDE90794CDE90944FBF7FBFDCB :107960002846FBF7EBFC2846FBF714FD284605A943 :10797000CDE90544FBF74EFF612360263A462846D1 :107980000BA9CDE90C34CDE90E44CDE910440B949C :10799000FBF758FD0C2228460BA9CDE90B64FBF739 :1079A00077FD12A92846CDE91649CDE91244CDE963 :1079B00014441994FBF75CFF284603F059FB10228E :1079C00021460BA805F0FEF81C22214612A8CDE99D :1079D000074405F0F7F84FF0804040F2CF232A4DDE :1079E0004FF48059C5E9000340F2CF732846C5E93A :1079F0000334AC60AC61FBF775FC0BA92846CDF8ED :107A00002C90FBF7A8FD2846FBF7C4FC2846FBF7A3 :107A100095FC284607A9CDE90744FBF7FBFE224663 :107A2000284612A9CDE9126414941694FBF730FD90 :107A30004246284612A9FBF72BFD3A46284612A9D2 :107A40001294FBF7FFFC40F2BC731FE000100240F1 :107A5000000C01400008014000003110340E0020ED :107A6000003800403C0D0020002401406C0D002037 :107A700000280140E00D002000540040801A06005C :107A80008C0E0020002C0140D40E00200C2212A9E4 :107A900028461393FBF7D6FC284603F0E9FA102298 :107AA00021460BA805F08EF81C22214612A8CDE92C :107AB000074405F087F84723164D174F2846C5E9B8 :107AC00000734FF6FF73AC60C5E90334AC61FBF79C :107AD00009FC0BA92846CDF82C90FBF73CFD284665 :107AE000FBF758FC07A92846CDE90744FBF792FEAF :107AF0000C2212A92846CDE9126414941694FBF7BF :107B0000C7FC284603F0B4FAFCF7D8FFFDF7C8F825 :107B1000FCE700BF1C0F00200008004070477047C2 :107B2000704770477047704770477047704770479D :107B3000704770477047704770477047704770478D :107B400070471FB501230022044680681146CDE925 :107B50000133009300F58B600323FFF73BF8042308 :107B600084F82C300023636104B010BD1FB50123DD :107B70000022044680681146CDE90133009300F5E8 :107B80008B600423FFF726F8052384F830300023A8 :107B9000636104B010BD30B5002504460123052201 :107BA00080F82650806885B0CDE9003229462A4603 :107BB000B4F92830029500F58B60FFF70BF865618A :107BC00005B030BD1FB50446826892F8523002F508 :107BD0008B6084F84030B2F84C30A4F8423092F810 :107BE0004E3084F8443092F85330C3F3400184F8A7 :107BF000461003F0010184F84710C3F3800184F8B4 :107C00004810C3F3C00184F84910D909C3F3001325 :107C100084F84A1084F84B3092F84F3084F845309D :107C2000002384F84C3092F87C3000229B075CBF24 :107C300094F8A23084F84D30012394F84D10CDE92A :107C4000013300931323FEF7C5FF0023636104B0E3 :107C500010BD2DE9F04F846885B0D4F8D43204F516 :107C6000357800211B690546404698470023404669 :107C700084F83A3184F8323194F853B0FFF770FC4D :107C8000678F02B239462046FCF7B8FAD4F8D432EE :107C900001469B6904F1A406404698473046FDF72B :107CA00019FB2046FBF758FF0BF0010B014630464D :107CB000FDF742FB04F58B69B4F888A0B4F88A603C :107CC000BBF1000F09D10FFA8AF003F0B8FA1FFADE :107CD00080FA30B203F0B3FA86B294F953100FFA77 :107CE0008AF2002933B21FDA05200026B7FBF0F133 :107CF000CDE9010601EB81018FB2009009B248463F :107D0000FEF768FF002385F82E306B61AB62D4F874 :107D1000D43240469B682F86984780F0010085F852 :107D20002C0005B0BDE8F08F012100200091CDE9C5 :107D3000011039B2E3E72DE9F04F846887B094F879 :107D4000533004F5357803F00103054640460593AA :107D5000FFF706FC678F02B239462046FCF74EFA61 :107D6000059A0646B4F888B0B4F88A3004F1A4093C :107D700004F58B6A5AB90FFA8BF0059303F05FFA9A :107D8000059B1FFA80FB18B203F059FA83B294F9ED :107D900053100FFA8BF200291BB238DA05204FF08E :107DA000000CB7FBF0F1CDE9010C01EB81018FB2C2 :107DB000009009B25046FEF70DFF31460026D4F878 :107DC000D43240469B699847484684F83A6184F823 :107DD0003261FDF785FA2046FBF7BEFE01464846B4 :107DE000FDF7AAFA0121404695F84430AE8685F8A1 :107DF0002C30D4F8D4322E631B692E63EE632E61CF :107E0000A5F840706E6107B0BDE8F04F184701213A :107E100000200091CDE9011039B2CBE72DE9F04FF8 :107E20008568044689B005F58B60B5F87474FEF773 :107E300065FEE369804605F5357613B395F8531072 :107E40003046C1F3C00103F01EFA28B1D4F81C90EB :107E5000484609B0BDE8F08FA068012100F59460A4 :107E600003F011FA0028F1D1B8F1000F03D1E38C2F :107E7000BFB2BB4205D0A06800F5C660FCF7B6FDF6 :107E8000E4E7F9F7FDF86369A1469842E0D3F9F712 :107E9000F7F8238D034463613046FFF761FBD5F8A3 :107EA000D43207B2DB6930469847D5F8D4328046E1 :107EB0001B6A30469847414600233A4606902846BA :107EC000FCF78DF98046A068B5F84CB000F59460D9 :107ED000FEF78AFF064630B1014602233A4628469D :107EE000FCF77DF90646216905F1A40AD1B1079195 :107EF000F9F7C6F807991D4B091A994212D84FF4A1 :107F00007A73B1FBF3F15046C9B2FDF70DFA94F85C :107F100024303BB9A06800F22C60FBF704FD01237C :107F200084F82430A06800F5C660FCF76EFD30B11F :107F30003346424602215046FDF794FB88E7CDE9DF :107F40000400039695F87C304246C3F34003029345 :107F500095F85330594603F001030193069B5046B0 :107F600000933B46FDF712FA72E700BF9F860100BF :107F70007FB58668044606F134052846FCF73EF8CE :107F800084F824002846FCF73EF800250123E0840D :107F9000CDE9013300932A460223294684F828506C :107FA00006F58B60FEF716FE84F82950656104B073 :107FB00070BD2DE9F04F846885B0D4F8D43204F553 :107FC00035765B690546304698478146304694F8D9 :107FD00053A0FFF7C5FA07B2494600233A462046A8 :107FE000FCF7FDF804F1340983464846FCF706F82F :107FF0000AF0010A014604F58B68BAF1000F34D08B :1080000089B259443A46204689B2FCF7F7F8D4F8C9 :10801000D43201469B69304698474846FBF7F3FF48 :10802000D4F8D43207464FF6FF7130461B6B9847A1 :10803000F9F726F84FF47A73002403FB07000123B5 :1080400022462146CDE90134286100934046FEF7DF :10805000C1FDA86800F22C60FBF748FCAC846C61A1 :1080600085F8264005B0BDE8F08F052300EBC00180 :108070000331B1FBF3F1C3E72DE9F047846806460D :10808000B4F8745486B004F58B602DB2FEF736FD5B :1080900010B9B38CAB4204D0B669304606B0BDE827 :1080A000F08796F8267004F53575002F5ED1D4F868 :1080B000D4322846DB699847D4F8D43207465B6946 :1080C00028469847874208D3D4F8D43201211B6947 :1080D00028469847012386F82630F8F7D1FF7369C0 :1080E0009842DAD3F8F7CCFF00F5FA7070612846B1 :1080F000FFF736FAD4F8D4320746DB6928469847AA :10810000D4F8D43280461B6A284698473FB23A4694 :108110004146814600232046FCF761F8D4F8D4326A :1081200080465B69284698473A4601460023204628 :10813000FCF755F804F1A40A05465046FDF7EEF8A1 :108140000023CDE90433039394F87C304246C3F313 :108150004003029394F85330294603F00103CDE91C :10816000009350463B46FDF711F996E7012FB4D135 :10817000D4F8D4322846DB699847D4F8D432804604 :108180005B69284698478045A7D8D4F8D432394649 :108190001B692846984702239DE72DE9F043846830 :1081A00085B005462046FBF7E4FB012305F12409D1 :1081B00001460093074603234A462046FBF7D8FCB6 :1081C0000026C3B23146FF204FF00C0C04F58B683B :1081D000F2B2934214D8002401224046CDE9012492 :1081E0000092013B224609B2FEF7F4FCF8F748FF83 :1081F0000323A86485F84C306C6105B0BDE8F083BA :108200000CFB06F419F8044001363C1B002CB8BFE7 :108210006442E4B2A04284BF20461146D8E7000081 :108220002DE9F74F866890F84C30B6F8747406F56F :108230008B683DB2FFB2BB4218BF002304461CBF8F :10824000836443614046FEF759FC814606F21440C0 :1082500002F05DFDB6F85434984203DBA06903B028 :10826000BDE8F08F96F8E93373B1A36CABB90C237A :1082700003FB0743304693F82410FCF717F906F583 :108280003570FFF749F9E9E7FCF76EFB0028ECD001 :10829000B9F1020F0AD1206AE1E7F8F7F1FEA36C09 :1082A000C01AB0F57A7FE2D20020D8E7F8F7E8FEEE :1082B0006369984201D22046D1E7F8F7E1FE00F564 :1082C0009C40203060610C206BB204F132011A0630 :1082D00001D53A4606E0DAB2013B00FB03F54D5DFD :1082E000002DF4D00C270025012384F84C2007FB37 :1082F000024292F8249004F1240A00935246032388 :108300004946304684F8265084F8325084F83E506E :10831000FBF72EFC10F0FF0B01D1E0699FE707FB94 :1083200005F31AF803304B4503D1404629B2FEF756 :1083300044FC0135EBB29B45F1D801235246CDE90F :1083400000930349032306F1A400FDF779FFB2E788 :10835000E4D90008F0B5856885B004462846FBF7E7 :1083600008FB064605F13400FFF772F900270122E9 :10837000431ECDE9012700921BB231B205F58B6097 :10838000FEF728FCFF23676184F8243005B0F0BDB8 :108390002DE9F041866804468CB006F58B60B6F88E :1083A0007454FEF7ABFB012806F1A408EDB234D1FA :1083B00029463046FBF7BAFC074638B9404619490A :1083C000FEF7D4F838460CB0BDE8F08100236361B5 :1083D00094F82430AB421EBF002384F8245063611C :1083E000F8F74EFE6369984215D300270323294608 :1083F00003AA30460097FBF7BBFB0B49C3B203AAA5 :108400004046CDE90057FDF71BFFF8F739FE00F5B0 :108410006A40603060612046D5E70228D8D1206AE2 :10842000D1E700BFEFD9000802DA000810B5044612 :10843000302104F02DF9204610BD10B5044624214A :1084400004F026F9204610BD10B50446242104F09E :108450001FF9204610BD10B50446482104F018F954 :10846000204610BD10B504464C2104F011F92046F9 :1084700010BD10B50446342104F00AF9204610BDA1 :1084800010B504462C2104F003F9204610BD10B5A8 :108490000446382104F0FCF8204610BD10B504460F :1084A000382104F0F5F8204610BD10B504465021DF :1084B00004F0EEF8204610BD10B50446402104F04B :1084C000E7F8204610BD10B50446A82104F0E0F8F6 :1084D000204610BD10B50446282104F0D9F82046E6 :1084E00010BD10B50446502104F0D2F8204610BD4E :1084F00010B50446282104F0CBF8204610BD10B575 :1085000004462C2104F0C4F8204610BD10B50446E2 :10851000482104F0BDF8204610BD10B504463421B2 :1085200004F0B6F8204610BD2DE9F04387680446F4 :1085300007F58B6840468DB0B7F87454FEF7DEFA45 :1085400094F84D30EDB2AB42064694F84C900FD003 :10855000A9F1070384F84D50032B07D8DFE803F097 :10856000022A34371DB3AB1C84F84030002363610A :10857000B9F1000F40F05281002E5AD0132D00F2B5 :108580004881DFE815F02C00500088008F0096002D :108590009D00A400AB00BE00D500E100F200460142 :1085A00025012A012F0136013B013F01410184F8D9 :1085B0004050DBE7B4F8A4309D42B6BF0023A4F8D6 :1085C0004250A4F84230D1E784F84450CEE71DB1C0 :1085D000AB1C84F84530C9E784F84550C6E794F8E9 :1085E000453094F84620069394F8443094F84010AF :1085F0000593B4F8423007F13400049394F84B30FB :10860000039394F84A30029394F84930019394F814 :108610004830009394F84730FBF758FC666A3046C0 :108620000DB0BDE8F08394F8473083F0010384F87F :10863000473094F84C3094F8A0209A4200F2008120 :1086400094F8A1209A422ABF1D464FF000084FF02F :1086500001080EB100236361F8F712FD6369264635 :108660009842DCD3F8F70CFD002200F51C501030C6 :108670006B1E60618DF82520092B00F25981DFE81F :1086800013F0E200F700010107010E0119012501B5 :108690002B013A01540194F8463083F0010384F829 :1086A0004630C6E794F8483083F0010384F8483038 :1086B000BFE794F8493083F0010384F84930B8E704 :1086C00094F84A3083F0010384F84A30B1E794F813 :1086D0004B3083F0010384F84B30AAE707230022D4 :1086E00084F84C300123CDE9013200931C2394F827 :1086F0004010022984BF0239C9B24046FEF76AFA27 :1087000097E70823002284F84C30114607F17400E3 :10871000FBF7DEFC05230021CDE901310123B4F88C :10872000A4200093013AB4F9421003B212B2E4E774 :108730000923012284F84C30002394F84410CDE939 :1087400001230092FF23D8E70A23002284F84C304B :10875000012394F84510CDE90132022988BF02397E :10876000009388BFC9B23A23C7E794F8453094F81C :108770004620069394F8443094F840100593B4F8DA :10878000423007F13400049394F84B30039394F88B :108790004A30029394F84930019394F8483000939A :1087A00094F84730FBF792FB3846FBF7EEFBA068E6 :1087B00094F8463000F5C66000F8043C97F84F3056 :1087C0000371FCF713F90023A66984F84D3026E7FE :1087D0000823A66A84F84D3021E70023E66A84F86E :1087E0004D301CE7002384F84D300123266B337194 :1087F00015E70B23A66B84F84D3010E73846FBF7DE :1088000007FBE0E7666B0AE70023E66B84F84D3070 :1088100005E707F13400FBF7E6FBD4E7012E7FF410 :1088200008AF0022132349464046CDE9016684F88B :108830004D9084F84C200096FEF7CCF94D46F8E6B2 :108840004FF0000805E746238DF8243094F84730B0 :1088500013B143238DF82430143554F825203649BC :10886000CDF8008009AB07F1A400FDF777FDD6E64F :1088700094F8463023B1314909A804F00DFAEBE72A :108880002F49F9E794F84830002BF9D02D49F3E748 :1088900094F849300BB12C49EEE72C49ECE794F8F9 :1088A0004A302B49002B14BF0522012209A804F0ED :1088B00069F9D1E794F84B10204A214B09A8002907 :1088C00014BF1146194604F05DF9C5E794F840203D :1088D000002AD5D01F49E9E7B4F84220002ACFD0BA :1088E00094F847300BB11C49E0E710B202F0A7FC46 :1088F0001A490246DAE7B4F84230002BC0D094F8A7 :10890000442002EB82023B2A01D81549CEE73C23E2 :10891000B2FBF3F103FB11239BB28AB2002BD9D037 :10892000104909A804F02EF996E794F84520CFE7FE :108930008DF8242090E700BFB3DA0008FED50008C8 :108940005CD500080FDA000814DA000819DA00080C :108950001EDA000827DA00082FDA000835DA0008E6 :108960003BDA000843DA0008F7B58768044607F5E4 :108970008B60B7F87454FEF7C1F801280646EDB2D3 :1089800010D10023636194F82C30AB421EBF00234A :1089900084F82C506361F8F773FB6369984206D240 :1089A000204602E00228EED1206A03B0F0BDF8F7BD :1089B00067FB00F51C501030012E606110D1012DB5 :1089C00005D0022D06D04DB9606A0671EDE7A06AA8 :1089D0000571EAE707F17400FBF7D8FCA069E4E74A :1089E00000230C3554F825200349009307F1A40017 :1089F000FDF7B4FCD4E700BF4DDA0008F7B587688F :108A0000044607F58B60B7F87454FEF777F8012831 :108A10000646EDB210D10023636194F83030AB42CA :108A20001EBF002384F830506361F8F729FB6369A7 :108A3000984206D2204602E00228EED1206A03B016 :108A4000F0BDF8F71DFB00F51C501030012E6061E1 :108A500014D1032D10D8DFE805F00207090B606A76 :108A600060B100230371EAE7A06AF9E7E06AF7E77B :108A700007F17400FBF78AFCA069E0E7002304EB30 :108A8000850500936A6B034907F1A400FDF766FCB6 :108A9000D0E700BF57DA00082DE9F041856888B0BB :108AA00095F85330012203F00103002B05F1340146 :108AB000044605A814BF4FF032084FF07A0840F280 :108AC000574605F58B6718BF4FF41676FBF7C9FAC2 :108AD00005F53670002505A901F0FBFF012342468C :108AE000A8463846CDE90135009329463346FEF7BE :108AF00071F8104B04F124071E88760827F8028FBE :108B0000284607220021B4F84C30009602F060FBA2 :108B10000135082D3882F1D14FF0000384F824305C :108B20004FF44033C4F81480A364A4F8466008B03E :108B3000BDE8F08152DD00082DE9F0418668044669 :108B400006F58B68404688B0B6F87454FDF7D6FF3A :108B500001280746EDB22CD10023636194F8293037 :108B6000AB4209D094F8283084F82950012B2ED03C :108B7000022B2FD000236361F8F782FA63699842D1 :108B800021D3F8F77DFA94F8281000F51C50103026 :108B90006061002948D1012F2BD1EDB1012D37D0D3 :108BA000E28C94F8241006F13400FBF734FAA4693F :108BB00009E00228D2D1E28C94F8241006F13400A6 :108BC000FBF729FA246A204608B0BDE8F08184F852 :108BD0002450CFE7E584CDE7052384F828702A46A2 :108BE000CDE900334B23029594F824104046FDF75D :108BF000F1FF00238DF8153094F828300BB1013BBC :108C0000DDB205B3012D48D000238DF814302FE0DC :108C10000223142284F82830CDE9002202914FF477 :108C2000A073B4F92610E1E7012FE2D1022300225C :108C30004046CDE9017700970139FDF7CBFF0023CE :108C400084F82830BFE794F824200AB396F853300C :108C50001549DB075FBF052302EBC2020332B2FBFB :108C6000F3F24ABF4323462392B205A803F08AFFDA :108C700094F8283004EB8505003B18BF01230093CE :108C8000EA6A0A4905AB06F1A400FDF767FB9AE71B :108C9000074905A804F000F8EAE7E28C054905A8B1 :108CA00003F070FFE4E700BF5FDA000875D5000845 :108CB0005CD5000867DA00082DE9F04785680446AE :108CC00005F58B60B5F87464FDF718FF94F827304C :108CD000814605F1A40705F5357A05F5946836B2A5 :108CE000002B52D1F8F7CCF9A36A984234BF002088 :108CF000012084F82700B9F1010F5DD194F82630E6 :108D0000384683F0010384F82630002B51D0FCF75D :108D1000E7FA0023636194F82630002B08BF002691 :108D2000A38CB6B2B3420BD02379002B4ED0314680 :108D30005046D5F8D4321B6B98470023A684636154 :108D4000F8F79EF96369984226D3F8F799F9284B0A :108D500000F5FA70B3F8009023796061002B3BD0E6 :108D6000244B5046B3F80090D5F8D432DB699847CD :108D700006465046D5F8D4321B6A98473246034619 :108D800049463846FCF730FD06E023793BB195F8BB :108D9000E933002BAFD100242046BDE8F0874046E0 :108DA000FEF717F8B5F808368342A4D895F8B5351C :108DB000EFE7FCF78FFAACE7B9F1020FABD1A0688F :108DC00000F22C60FAF792FD246AE5E7D5F8A034AA :108DD000314640461B6BAFE7D5F8A0344046DB690F :108DE0009847D5F8A03406461B6A4046C5E700BF41 :108DF0004CDD000854DD00082DE9F04F85688BB08C :108E0000B5F87474044605F58B63049305F58B601F :108E10003BB20593FDF772FE2379064605F1A409DE :108E200005F5357B05F5946ABFB2002B55D095F852 :108E3000E933002B4CD016B9238EBB4201D000235E :108E40006361F8F71DF9636A98421FD3F8F718F9C0 :108E5000237964306062002B4AD0D5F8D43258466A :108E6000DB699847D5F8D43280465B695846984705 :108E7000A8EB00085846D5F8D4320FFA88F8DB6A18 :108E80009847414682B24846FCF7D4FDF8F7F8F817 :108E9000636998421DD32379002B3DD105F2A44884 :108EA00094F82D30002B7CD0F8F7EAF8012E00F171 :108EB0006400606133D10022022394F82C1084F8FE :108EC0002D20CDE9016600960498FDF783FE00E0B1 :108ED000002420460BB0BDE8F08FA36A002BAAD077 :108EE000F8F7CEF8A36A9842A5D995F8B535A0E76A :108EF000D5F8A0345046DB699847D5F8A0348046B1 :108F00005B6950469847D5F8A034A8EB0008DB6AA7 :108F100050460FFA88F8B3E705F53678C0E7022E19 :108F200017D194F82E10237981F0010184F82E10C6 :108F30006BB35846D5F8D4321B69984794F82E3055 :108F400013B14846FCF74CFDA06800F22C60FAF71C :108F5000CDFC238EBB420ED094F82C103A46013142 :108F6000C9B24046278601F0DAFD3A46484694F8F1 :108F70002C10FCF745FD237973B15846D5F8D4324F :108F80001B6A984701464846FCF77AFDA1E7D5F8E9 :108F9000A03450461B69D0E7D5F8A03450461B6A70 :108FA000EFE7F8F76DF8238E00F57A70BB421EBF2D :108FB000059B278684F82C30012E606115D19DF821 :108FC00014104FF0FF3284F82C100131C9B2404622 :108FD00084F82D6001F0A3FD0A2300220096CDE95C :108FE000013201B244F620636EE7022E12D1D8E9B5 :108FF0000423D8F80C1007A801F066FD2279284652 :1090000007A9FAF7D4FFA06800F22C60FAF76EFC0B :10901000246A5EE7012507AEE9B24FF0FF32404611 :1090200001F07DFD0135042D26F8020BF4D14846F0 :1090300094F82C2007A9FCF785FE4AE730B50123F8 :1090400000250446806885B02A462946CDE90135C9 :10905000009300F58B60FDF7BDFDA06800F22C6069 :10906000FAF769FC656105B030BD38B5856804461E :1090700005F58B60FDF742FD10B1A469204638BDAF :10908000F7F7FEFF63699842F8D3F7F7F9FF00F5A9 :109090006A406030606105F1A400FDF7D9F9EDE7A1 :1090A00038B58568044605F58B60FDF727FD012876 :1090B00002D1A469204638BD022801D1246AF9E70B :1090C000F7F7DEFF63699842F4D3F7F7D9FF00F5AD :1090D0006A406030606105F1A400FDF7ABFAE9E792 :1090E0002DE9F0418568044605F594680121404664 :1090F00086B002F0C8F894F8263005F5357783423B :1091000023D0D5F8D43200211B6B84F826003846D2 :1091100098470021B5F80A26084602F087F84FF074 :1091200080439863002394F82620A068A3846AB340 :1091300002930123B4F92A20CDE90033B4F92C308D :10914000114600F58B60FDF745FDA368B3F8746424 :10915000A38CB6B2B3420DD0002194F82630A68479 :109160006161DBB13046B5F80A2602F05FF84FF0D6 :1091700080439863A06800F58B60FDF7BFFC022870 :1091800013D1276A384606B0BDE8F08101230521D6 :109190000292CDE90031B4F92830D1E7D5F8D432C4 :1091A000314638461B6B9847E4E7F7F769FF636978 :1091B00027469842E6D3F7F763FF00F2EB106061B1 :1091C00005F2144001F0A3FD94F82630ADF8140028 :1091D0003BB3D5F8A0344046DB699847ADF81000A2 :1091E00005F2AC5001F093FD164BADF812005B6A2E :1091F000ADF81630FBF7B8FB20B1BDF8163064337C :10920000ADF8163004AA95F8E933019295F8B52522 :1092100094F82610009205F1A4003246FDF7B0F94B :10922000B0E7B5F8083405F57870ADF8103001F006 :109230006EFDADF8120005F57C7001F068FDADF82B :109240001600DFE7002C01402DE9F04F8568044649 :1092500005F58B6A504689B0B5F87474FDF74EFC7D :10926000636A064605F5946863B10121404602F041 :109270000AF838B10023666A86F84930304609B0EA :10928000BDE8F08F05F21449484601F040FDB5F8FD :10929000543498420FDBBFB2BEB1A06800F5C6607F :1092A000FBF7B3FB00287FD1012E40F09580E669E3 :1092B000002EE3D184E095F8E933002BEBD1FBF7E6 :1092C00053FB0028E7D0A669D8E7238EBB42E4D140 :1092D000F7F7D6FE636926469842CFD3F7F7D0FE5C :1092E00094F82C3000F57A7005F1A40705F5357A6D :1092F0006061B3B1D5F8D43250469B68984780B1CD :109300003846FBF7F3FFA06800F22C60FAF70BFB7E :10931000F7F7B6FE002300F56A406030A06284F8DB :109320002C30A36A4BB1F7F7ABFEA36A984204D383 :1093300000233846A362FBF7CDFF484601F0E7FC67 :10934000B5F85434984294F82E3069DB6BB901219A :1093500005F1740084F82E10FAF7A4FE2846FAF7F7 :10936000FBFB01463846FBF7E7FFD5F8A034404643 :10937000DB699847554B014693F800B02846002317 :109380005A46B5F83CA0FAF72AFF8146A06800F5D6 :10939000C660FBF73AFB044638B300234A46032174 :1093A0003846FCF75FF969E7B4F930105046FDF72D :1093B00004FCA06800F5C660FBF718FB002363619E :1093C000238EBB4284D03946278605F13400FAF754 :1093D000CDFD002363617BE7022EF1D1A06800F28E :1093E0002C60FAF783FA266A62E7D5F8A034404683 :1093F0001B6A98470123CDE90343059495F87C3017 :109400004A46C3F34003029395F85330514603F0A4 :109410000103CDE900035B463846FBF7B7FF2DE7B4 :109420006BB1002105F1740084F82E10FAF73AFEB2 :109430002846FAF791FB01463846FBF77DFF504678 :10944000FEF78EF8D5F8D4320FFA80F8DB69504673 :1094500098470023014642462846FAF7C0FE814657 :10946000A068B5F83AB000F59460FDF7BDFC014680 :1094700028B1022342462846FAF7B1FE0146A06809 :10948000079100F5C660FBF7C0FA0799044618B1CA :109490000B464A46002183E7D5F8D43207911B6A70 :1094A00050469847CDE9044407994A46039195F8F8 :1094B0007C305946C3F34003029395F8533003F0D0 :1094C0000103CDE900034346A6E700BF49DD0008DC :1094D00010B504460846B4F86A21B4F86E1101F0DC :1094E000A5FEA4F8340110BD30B50446856889B0E6 :1094F000027905F1340105A8FAF7B3FD2379A068D4 :1095000005A92BB300F5367001F0E3FA2179743523 :10951000284681F00101FAF7C5FD00220123A06869 :109520001146CDE90133009300F58B600323FDF76D :1095300051FB284604F12601FAF7EAFE0023042233 :1095400084F82430E3852363A286636109B030BDCB :1095500000F2A44001F0BDFAA068E18E00F594602D :10956000FFF7B6FFD2E7F0B583680279044685B00D :1095700003F58B670AB30020B3F83E540026052399 :109580000321CDE90136B5FBF1F10123A06200937F :1095900038462BB2324609B2FDF71CFB4FF480333C :1095A0006362A36883F83A6183F83261A068A430EB :1095B00005B0BDE8F040FBF793BE03F59466D3F821 :1095C000A03430465B6B984740F2DC51054630468C :1095D000FFF77EFFF7F754FD00F5FA60CEE7C0E92C :1095E000061203627047836910B504463BB10369F4 :1095F0002BB1F7F745FD2369984228BFA46920469F :1096000010BD838910B504463BB1F7F739FD4FF41F :109610007A72A38902FB0300206110BDF8B585684A :109620000446B5F8743405F53576C38495F85230A0 :10963000C3EB03139B008381FFF7E3FF3046FDF785 :109640008FFF01B22846FAF79CF9D5F8D4320746C5 :109650001B69304601219847304600263946FDF700 :1096600069FF05F1A40084F82460FBF751FEA068AF :10967000666100F22C60BDE8F840FAF754B930B5E5 :10968000012300250446806885B02A462946CDE995 :109690000135009300F58B60FDF79CFA14232046FA :1096A000A381FFF7AEFF656105B030BDF8B58468F2 :1096B000D4F8D43204F535755B69284698470646D8 :1096C0002846678FFDF74CFF394602B22046FAF76D :1096D00095FD8642014604D02846BDE8F840FDF7D6 :1096E00097BEF8BD70B504460D468668F7F7C8FC0E :1096F000E36B03B135B141F2883296F84E3002FB8C :109700000303E363E36B83428CBF0020012070BD41 :109710002DE9F74F894690460C9B00F12C0A87688B :1097200004465046DDF834B0BDF83850019301F0DE :10973000EEFAC14507F1A4060ED8A8EB0908B8F166 :10974000040F09DC019BC82B06D8BBF1190F03D805 :109750002946504601F0CFFA281A0028B8BF4042E7 :10976000952811DDF7F78CFC4EF6602297F8523001 :1097700002FB030000232061304684F8343003B03C :10978000BDE8F04FFBF7ACBD236943B9F7F778FCB0 :109790004EF6602297F8523002FB030020612569E3 :1097A000F7F76EFC0F4B291A994215D84FF47A73CC :1097B000B1FBF3F13046C9B2FBF7B6FD94F8343093 :1097C0003BB9A06800F22C60FAF7ADF8012384F8E9 :1097D000343003B0BDE8F08F304603B0BDE8F04F41 :1097E000FBF790BD9F8601002DE9F04F8568044688 :1097F00005F58B6738468FB0B5F874B4FDF77EF980 :10980000636A06460FFA8BF983B1A068012100F55F :10981000946001F038FD48B195F85330606AC3F3A5 :10982000800380F849300FB0BDE8F08F1EB9B4F85E :1098300040304B451AD0A06800F5C660FBF7E5F84C :1098400040B9012E41D12846FAF79FFBE069002874 :10985000E9D10BE0B4F940103846FDF7AEF9A06845 :1098600000F5C660FBF7C2F80023636105F53578A3 :109870004046FDF775FEB4F8403007B24B451DD0A9 :1098800000261FFA8BF93A4649462846A4F840902C :109890002661A6866661FAF7B1FCD5F8D432014696 :1098A0009B694046984705F134004946FAF75EFB4C :1098B000A068266300F5C660FBF798F8F7F7E0FBB1 :1098C000636998420BD22046ADE7022ECED105F156 :1098D0003400FAF793FB0028C8D0206AB7E7F7F7FF :1098E000CFFBB4F8423003446361D5F8D43240462C :1098F000DB699847D5F8D43207905B6940469847B2 :10990000D5F8D43208901B6A404698473A460799E2 :1099100000230A902846FAF762FCD5F8D432824632 :109920009B6A40469847D5F8D4320B90DB6A404694 :109930009847D5F8D4320C905B6A40469847099016 :10994000A06800F59460FDF74FFA064630B1014675 :1099500002233A462846FAF742FC0646B5F84C3050 :10996000002B49D095F853104046C1F3C0010D9328 :1099700001F089FC80460D9BDDE90702121A0532D1 :109980000A2A94F8351005F1A40937D80B9AB2F5D4 :10999000FA7F33D8099A8AB389BB012384F835301A :1099A000F7F76EFB00F5FA60A0634846FBF7A4FCEE :1099B000A06800F22C60F9F799FFA06800F5C66076 :1099C000FBF723F800287FF47EAFCDE90408039667 :1099D00095F87C305246C3F34003029395F8533018 :1099E000484603F0010301930A9B1FFA8BF1009391 :1099F0003B46FBF7CBFC66E79846BDE759B1A26B47 :109A00004AB943B341462046FFF76CFE18B1A06A3D :109A100000287FF408AF2046FFF748FE94F8353061 :109A20005BB1A36B4BB1F7F72BFBA36B984204D34D :109A300000234846A363FBF753FCA06800F5C6600B :109A4000FAF7E3FF0028C0D03346524601214846CA :109A5000FBF708FE37E795F85230002BDBD0DDE945 :109A60000712099B204602930C9B01930B9B0093CA :109A70001FFA8BF3FFF74CFECDE7000070B51D46D3 :109A80000123044603710020184B16462360184B2F :109A90005022C4E911304FF48073C4E90400C4E9D2 :109AA0000600A0812062A16084F84000A4F8420072 :109AB000A4F84C300F49A01803F0F6F840F607233D :109AC000A4F8A0300D2384F8A2307823A4F8A430A1 :109AD000049B2046E362059BC4E909652363069B5A :109AE0006363079BA363089BE36370BD18DC0008F6 :109AF0000000010128D40008F0B51E4601230371BF :109B00000023C0E90433C0E9063383810362094BB3 :109B1000044603600423174680F82C30064B00F1FE :109B2000300581600FCB85E80F002046C4E9097637 :109B3000F0BD00BFF0DC000878D400082DE9F04F3C :109B400000F1240C054600F13409002004460746C4 :109B50008046064687B001913CF8021F9142BCF84E :109B600010E008D3994206D80EFB016601FB0144C0 :109B7000884477440130CC45EED102287CDDF6F7ED :109B800041FC824640468B46F6F73CFC8046384610 :109B90008946F6F737FCCDE902013046F6F732FC8C :109BA00052465B46F6F798FCDDE9022306460F466F :109BB00040464946F6F790FC02460B463046394689 :109BC000F6F7D2FACDE904012046F6F71BFC52461F :109BD0005B46F6F781FC424606460F464B4640463A :109BE0004946F6F779FC02460B4630463946F6F709 :109BF000BBFA02460B46DDE90401F6F797FD024683 :109C00000B4606460F4640464946F6F765FC0246B7 :109C10000B46DDE90201F6F7A7FA52465B46F6F776 :109C200085FD4FF0000A80468946A86800225FFA49 :109C30008AF17430FAF74CFAF6F7D4FB32463B4619 :109C4000F6F74AFC4B464246F6F790FA02F050FD12 :109C5000F6F754FE019B23F81A000AF1010ABAF143 :109C6000040FE2D1064B019A1B88D2889A4201D98F :109C7000019AD380012000E0002007B0BDE8F08FFA :109C800052DD000870B5002200F124044FF47A750B :109C9000082034F8023FD6B23BB15B1A002BB8BFA4 :109CA0005B42AB42BCBF30469DB20132082AF0D1C4 :109CB00070BD000073B50C4682680546B2F8883066 :109CC000B2F88A20002100922046082201F080FA92 :109CD00005EB440283B2042C1846D28C26D803EB41 :109CE00093018A4222DDB5F84630214AA3EB930363 :109CF00012889BB29108B3EB920F38BF0B46013428 :109D0000A5F84630E4B205F13606E3B2072B2CD8AD :109D1000B5F846302046009307220021B5F84C30B4 :109D200001F056FA26F814000134EEE700EBD306F2 :109D3000B2424FEAD30104DDB5F8463003EBD3035A :109D400009E0042C0ED8A0EB93039A420ADAB5F886 :109D5000463003EB9303064A9BB21288934228BF16 :109D60001346CCE7401A8242E6DB02B070BD00BF6A :109D700052DD00082DE9FF418668044606F17405AE :109D8000002202212846FAF7A3F99622034602A9E7 :109D90002046FFF7D3FE00283CD0002203212846AE :109DA000FAF796F901462046FFF76CFF002280463D :109DB00003212846FAF78CF900220746022128469B :109DC000FAF786F904EB4804E38E01460093E28C2F :109DD0003846BDF80C3001F0FBF9104A83B2108808 :109DE000984228BF1846ADF80E003046F9F7C1FD7D :109DF000074606F53570FDF7B3FB44B22246284608 :109E000002A9FAF793FA032339463046009402AACE :109E1000FAF75AFB04B0BDE8F08100BF52DD00083C :109E20002DE9F04F044685688DB005F58B6BB5F8CC :109E300074845846FCF762FEB4F94A301FFA88FA77 :109E40009A451EBF0023A4F84A806361012894F854 :109E5000493005F535760FFA88F740F0E580002B9C :109E600045D0D5F8D43200211B693046984794F884 :109E70004830002B00F0D180002384F84830D5F81A :109E8000D4323046DB69984795F853308046DB077B :109E900000F1BD80384601F0DAF983B294F824105D :109EA00004EB4102D384A2F83680B5F88A20143A34 :109EB000934280F2AE802046FFF7FCFE94F82430F7 :109EC0009622013384F8243020464FF4167309A9F2 :109ED000FFF734FE40B13046FDF742FB09A942B21C :109EE00005F17400FAF722FA002384F8493094F857 :109EF0002430072B00F29E800127D5F8D42204EBF2 :109F00004303D98E3046926984F849709047D5F85A :109F1000D43239461B693046984700236361F7F70E :109F2000AFF8636998427BD3F7F7AAF800F5FA70A7 :109F300060613046FDF714FBD5F8D43280465B698A :109F400030469847D5F8D4320790DB6930469847B9 :109F5000D5F8D43207461B6A30469847002306904E :109F60000FFA88F239462846FAF739F93A4B804613 :109F7000B3F80090B9455DD994F84930F3B1079B27 :109F8000DB1B1033202B19D8D5F8D4323046DB6ACE :109F90009847C82812D8069B012B0FD994F848304F :109FA00063B9A06800F22C60F9F7A0FC58460FFADC :109FB00088F1FCF702FE012384F84830B4F84C1015 :109FC000B94247D864234A4600933846002301F03B :109FD000FFF8C6B22846F9F7BFFD94F8242005968D :109FE00094F848300132049394F8493001460393C1 :109FF000069BD2B2029395F8533005F1A40003F00A :10A000000103CDE900A34346FBF7F4FE08E0534605 :10A0100044E7082384F8243066E784F84930636114 :10A0200020460DB0BDE8F08F002B7FF478AF0228FA :10A030007FF475AF2046FFF79DFE227905F13401CC :10A0400009A8FAF700F809A905F5367000F041FDF6 :10A05000246AE5E70026BDE752DD00081549D088EF :10A06000098830B5884288BFD180032B14D802EB11 :10A070004300032B11D1D3888B4288BFD180911D1F :10A080000B8831F8020D181AC728DEBFC83B23EA37 :10A09000E3730B808A42F3D130BD054630F8024BA2 :10A0A0006D8801332D1BC72DDCBFC8340480DBB2A3 :10A0B000DFE700BF52DD0008F0B5054685B00C466D :10A0C00017463431027901A81E46F9F7BCFF2D79F5 :10A0D00001A925B1381D00F0FCFC05B0F0BD301D14 :10A0E00000F0F7FC294604F17400F9F7DBFFF4E710 :10A0F0002DE9F04F85680446B5F8748405F58B6B3F :10A100000FFA88F38DB058460993FCF7F7FCB4F9C1 :10A1100034301FFA88FA9A45814605F5357605F5FB :10A12000946717D094F82F30A4F8348083B1237942 :10A1300043B351463046D5F8D4329B699847002343 :10A1400084F82E30F6F79CFF00F59C500830206311 :10A15000002363613046FDF703FA0790BDF91C3018 :10A1600008932379A3B195F8E983B8F1000F19D1C9 :10A170003B46324629462046FFF79EFF40460DB03B :10A18000BDE8F08FD5F8A034514638469B69D5E735 :10A19000236B3BB1F6F774FF236B984202D995F815 :10A1A000B585E2E7B9F1010F40F0F38094F82F3064 :10A1B000002B00F0B380D5F8D432002130461B6963 :10A1C0009847D5F8A03400211B693846984794F881 :10A1D0002E304BB3002384F82E302379002B00F06F :10A1E00098803046D5F8D432DB69984794F824300B :10A1F0009DF91C8004EB4302D084E28C4146ADF80B :10A200002820228D2046ADF82A20628DADF82C2022 :10A21000A28DADF82E200AAAFFF720FF42460AA918 :10A2200005F17400FAF782F801230022CDE9013329 :10A2300000935846032394F8241084F82F2094F8B0 :10A2400024A0FCF7C7FC002363615FFA8AF309933B :10A2500094F82F30002B00F0C58094F824B0F6F766 :10A260000FFF6369A046984288D3F6F709FF237968 :10A2700000F5FA706061002B00F0B780D5F8D43299 :10A2800030465B699847D5F8D4328146DB69304661 :10A290009847D5F8D43282461B6A30469847D5F89D :10A2A000D4320790DB6A30469847C82294F82F30A2 :10A2B00005F17406002B40F0B18000220999304668 :10A2C000F9F706FF089A01462846F9F797FF8146F5 :10A2D000A3682846A4330893F9F73EFC594607467D :10A2E00000223046F9F7F4FE94F82E30024604932B :10A2F00094F82F3039460393079B0898029395F8FA :10A30000533003F00103CDE900935346FBF76AFE97 :10A3100034E7D5F8A0343846DB6966E79DF82410A9 :10A320001A4684F8241084F82F9005F174000793DE :10A33000F9F7CEFE089A01462846F9F75FFF079B1A :10A340000A2202930523CDE90032494B01B2B3F949 :10A350000030804664225846FCF73CFC237963B108 :10A36000D5F8D432414630469B6998474946304635 :10A37000D5F8D4321B69984765E7D5F8A034414633 :10A3800038469B699847D5F8A034494638461B693A :10A39000F1E7B9F1020F7FF458AF2846F9F7E9FA6F :10A3A0008146334BA28D1B889DF91C809A4204F193 :10A3B000260A88BFA3854246514605F17400F9F785 :10A3C000B5FF0323524649462846CDF80080FAF7E8 :10A3D0007BF83B46324629462046FFF76DFED4F80F :10A3E0002080CBE6DDF824B039E7D5F8A034384634 :10A3F0005B699847D5F8A0348146DB6938469847B1 :10A40000D5F8A03482461B6A38469847D5F8A03460 :10A410000790DB6A38469847282247E7A9EB0A03EA :10A420001033202B3FF654AF90423FF651AF079BBD :10A43000012B7FF64DAF94F82E70002F7FF448AFBC :10A44000236B002B3FF444AFF6F71AFE236B9842C0 :10A4500008D9A06800F22C60F9F748FA01232763B5 :10A4600084F82E3094F82F30002B7FF431AF24E79E :10A4700052DD0008F0B51F46012303710023C0E937 :10A480000433C0E90633838103620A4B0446036048 :10A4900005239446084E00F13405816080F8303081 :10A4A0000FCE0FC5336820462B60059BC4E909C752 :10A4B000E362F0BD08DD000888D400082DE9F84308 :10A4C0004FF00008012604468568314605F594677B :10A4D000C0F83C800687C0F8408005F17400F9F7A9 :10A4E000E1FD05F1A409E98F384685F83A8185F840 :10A4F0003281FEF7EDFF4846FAF7ECFEA06800F562 :10A500003570FDF72DF8A98F02B22846F9F776FECF :10A51000D5F8A03401469B69384698473846FCF781 :10A5200083FC01464846FAF711FFD5F8A0343146BE :10A530001B69384698474846FAF7D2FE94F84930E6 :10A540002BB1A068314600F53570FCF769FE002399 :10A55000012263636361E263626484F8483095F8C2 :10A560004F3004F1240084F82830BDE8F843FAF7AE :10A570003DBA2DE9F04F8568044689B005F5357080 :10A58000FCF7EEFFE36B064605F5946A05F58B686C :10A59000ABB3F6F775FDE36B984230D395F85330C3 :10A5A000B5F83C90DB07B5F888B0B5F88A7009D4E7 :10A5B0000FFA8BF000F043FE1FFA80FB38B200F078 :10A5C0003EFE87B295F953100FFA8BF200293BB289 :10A5D00033DA05200027B9FBF0F1CDE9010701EBE3 :10A5E00081011FFA81F9009009B24046FCF7F2FAA6 :10A5F000012384F838300023C4F83490E3634046E4 :10A60000B5F87474FCF77AFAE26A03468146BFB281 :10A61000DAB9002B37D004F1240B5846FAF7F5F9D4 :10A62000A0B3B4F934104046FCF7C7FA5846FAF71D :10A63000DDF900239946636128E0012100200091A3 :10A64000CDE901100FFA89F1CFE7079001215046BB :10A6500000F019FE079B83460028DAD12846F9F757 :10A6600094FC594605F17400F9F71CFD94F8493043 :10A670003BB1276B2FB184F849B0384609B0BDE82B :10A68000F08FE76AF9E7636B9F42C4D195F85330C6 :10A690005B0702D5B9F1020F36D0B9F1000F51D1E5 :10A6A000636B05F1A4089F4236B200F08280D5F8B2 :10A6B000A03450465B696763984794F83830814608 :10A6C000B5F8D4B5002B62D0394632462846F9F7A2 :10A6D00095FDD5F8A034014681469B6950469847C0 :10A6E0005F460023324649462846F9F778FD3A4648 :10A6F000014605F13400F9F73BFC0023636104F1E6 :10A700002400FAF773F957E0A06894F8493000F58F :10A71000357073B10021FCF783FDA06800F22C6056 :10A72000F9F701F994F8493083F0010384F84930CE :10A73000B6E70121FCF774FDA06800F22C60F9F780 :10A74000D5F8EFE7002294F838306261D3B14FF0CA :10A750000A0C0520B5F90A36B5F8D4B5B5F9D41503 :10A76000CDE9000C02924046FCF734FA0022C4F80E :10A7700034B084F83820F6F783FCB4F84A30034448 :10A78000E3638DE7F6F77CFC2746E06375E739461F :10A790005046FEF79DFE5046FCF746FB01464046FC :10A7A000FAF7D4FDF6F76CFCB4F84A300344E363DF :10A7B00097E7B9F1000FA2D1636CBBB1F6F760FC6B :10A7C000636C984212D395F8B5357BB1404694F846 :10A7D0004810FAF7C3FD94F84830013303F003033F :10A7E00084F84830F6F74CFC64306064F6F748FCB7 :10A7F000636927469842FFF440AFF6F741FCD5F86D :10A80000A03400F5FA705B69606150469847D5F84E :10A81000A0348346DB6950469847D5F8A03481467A :10A82000DB6A50469847D5F8A0240790126A504634 :10A83000904794F839208246FAB90FFA8BFB0FFA49 :10A8400089F2ABEB020B0BF1310BBBF1620F14D8A9 :10A85000079B072B11D880B1012384F83930F6F714 :10A860000FFC00F59C5008302064A06800F22C60BA :10A87000F9F73CF84046FAF73FFD236C4BB1F6F789 :10A88000FFFB236C984204D34046FAF729FD0023CE :10A8900023644946002332462846B5F83CB0F9F710 :10A8A0009EFC8146A06800F53570FCF7A3FD0146CB :10A8B00028B1012332462846F9F791FC014604F1FC :10A8C00024000791FAF7A1F8079930B10B464A46E0 :10A8D00003214046FAF7C6FECFE694F848300590CB :10A8E0000133DBB2CDE9031395F87C304A46C3F35C :10A8F0004003029395F85330594603F00103CDE924 :10A9000000A340463346FAF741FDB6E67FB58568B9 :10A91000044605F1A4063046FBF762F830461849B4 :10A92000FBF764F8002201231146CDE901330093BF :10A9300005F58B600223FCF74DF9A0684FF4966192 :10A9400000F53570FCF786FC0E4B00211A884FF499 :10A950009660A56800F06AFCA5F8D205A06840F2F0 :10A96000DC5100F59460FEF7B3FD0323238600233A :10A97000C4E90933A38584F82E30636104B070BD47 :10A980006EDA000852DD00084A29104608B50FD0DB :10A9900005D8282908D0292907D0012008BD4B292E :10A9A000FBD14FF4806105E00120F6F76FFBF4E77F :10A9B0004FF400610148F7F74BF9EEE7000C014056 :10A9C00070B51546A1F1140204461E460C2A3BD868 :10A9D000DFE802F02C3A3A071E2E3A3A3A3A3A3A6F :10A9E00015001A48F8F726FB01280446F9D164231C :10A9F0002A4631461548F8F769FA204670BD2A1EE6 :10AA000018BF01224FF400611148F7F721F90DE05A :10AA100003684FF480611A780E48F7F719F9226835 :10AA200000232C21204665699278A8470124E4E799 :10AA3000026800232C21D2784569A84723684FF487 :10AA400080615A780348E0E70024D6E7340E0020FE :10AA5000000C01400008014030B5143914461D4671 :10AA600085B00C292AD8DFE801F01F2929071C1C12 :10AA700029292929292926001148F7F711FE20281C :10AA8000FAD1104B78211A784FF0FF33003A18BFF3 :10AA90000122CDE901430A48012300959201F7F70D :10AAA00081FB012005B030BD026800232C214469E0 :10AAB0009278A047F5E7034B1A70F2E70020F1E720 :10AAC000E00D0020640F002010B5C0E90012836083 :10AAD00010BD4B680A68312BC26002EB82028968A4 :10AAE0008261C8BF0A220361CCBF93FBF2F3052346 :10AAF0004161C361704730B501600A24002505211A :10AB0000C0E9034445618461C161028480F8223058 :10AB100030BD002309B28180C18083607047022963 :10AB200008D003290BD001290ED1002AA8BFC2608A :10AB3000C0687047002AA8BF026100697047002AF8 :10AB4000A8BF42614069704700207047F0B590F897 :10AB50002260B0F90440B0F906508B1ADEB102F160 :10AB600064068E4217DAD0E9066159436CB903FBDB :10AB70000613C280012283608580B0F92000411E47 :10AB80008A40134443FA00F0F0BDAB1A06FB0311F0 :10AB900083680B44EDE7D0E903615943002CE6D00C :10ABA000AF1A06FB071143691444A4EB450403FBE9 :10ABB0000411EDE790F8D43070B503F0FF020446BD :10ABC0000D460EB2002B60D090F8DD306BB1B0F8BE :10ABD000D0309BB2B34208DA002380F8DD30B0F801 :10ABE000E010883089B200F09AF8B4F8D030B4F8A8 :10ABF000D2209BB292B21344B34220DA002384F8ED :10AC0000D430D4F8D830002B3AD0F6F739FA0646CB :10AC1000D4F8D810411A204600F081F8C4F8D86062 :10AC2000B4F8E23001339BB2A4F8E230002384F898 :10AC3000DD30012384F8DC30ABB2A4F8DE3094F8C8 :10AC4000DC303BB1B4F8DE309BB2AB423CBFABB2C0 :10AC5000A4F8DE3094F8DD303BB1B4F8E0309BB2BC :10AC6000AB4284BFADB2A4F8E050B4F8CC0094F885 :10AC7000D43080B273B3B4F8CE30184480B270BD13 :10AC8000F6F7FEF9C4F8D800D0E790F8DC3063B1ED :10AC9000B0F8D0309BB2B34207DD80F8DC20B0F8CA :10ACA000DE10443089B200F03AF8B4F8D030B4F88D :10ACB000D2209BB292B29B1AB342C0DD0123002284 :10ACC00084F8D43084F8DC2084F8DD30ABB2A4F80A :10ACD000E030B4E7B4F8CE30C01ACFE730B504782E :10ACE0004368027803EB5403B3FBF2F3456829444D :10ACF000C91A416030BD38B50578FFF7EFFF4368EA :10AD0000EDB2007803EB5503B3FBF0F038BD0278E9 :10AD10004368007803EB5203B3FBF0F0704790F800 :10AD2000402090F841309A4209D290F84030DAB28F :10AD30000133DBB280F8403040F82210704790F8C1 :10AD40004230DBB240F8231090F842300133DBB2DE :10AD500080F8423090F84120934224BF002380F8CD :10AD6000423070479342017038BF1346002143813F :10AD700041608281417270470346007A08B1002227 :10AD80001A72704710B504460846B4F90A20B4F99F :10AD90000C1002EB6202A1EB610192B289B200F0E9 :10ADA00045FA81B22046FFF7A6FF637A80B233B13D :10ADB000B4F90C30834201DD0123238110BDB4F9C5 :10ADC0000A308342FADA40F20113F6E70E4B82B002 :10ADD0009A6942F001029A619A6902F001020092B6 :10ADE000009ADA6942F08052DA61DB69074A03F0BF :10ADF00080530193019B536823F0E06343F0007399 :10AE0000536002B0704700BF0010024000000140D4 :10AE1000102230B5054689B00DEB0200002101F08B :10AE2000D1FE2B682B4A934235D12B4B7C219A695A :10AE30002A4842F400729A619A69294C02F400721D :10AE40000092009A9A6942F004029A619B6903F0A9 :10AE500004030193019B0323CDE9041304A9F6F72E :10AE600017FE4FF400724FF0800C0023C4E903C2B8 :10AE70004FF400621B48C4E90523C4E900032046DF :10AE8000A360E361F6F7E0FC08B1FCF747FE2C6233 :10AE9000656209B030BD144A9342FAD10E4B0F4897 :10AEA0009A6904A942F480629A619A6902F4806204 :10AEB0000292029A9A6942F004029A619B697C228A :10AEC00003F004030393039B0323CDE90423F6F764 :10AED000DFFDDEE7002401400010024000080140D1 :10AEE0009C0D0020080002400028014010B50446D7 :10AEF00086B01022002102A801F064FE2268114BE6 :10AF00009A421CD1104CC022A369104843F0080398 :10AF1000A361A36902A903F008030093009B122315 :10AF2000CDE9022303230593F6F7B2FDE36943F469 :10AF30000013E361E36903F400130193019B06B07E :10AF400010BD00BF0054004000100240000C014042 :10AF500010B5044686B01022002102A801F032FE8E :10AF60002268124B9A421ED103F5EC33DA6910487D :10AF700042F48042DA61DA6902A902F48042009266 :10AF8000009A9A6942F008029A619B694FF4204244 :10AF900003F008030193019B0223CDE9022303235D :10AFA0000593F6F775FD06B010BD00BF00380040F0 :10AFB000000C0140102210B5044688B00DEB0200D1 :10AFC000002101F0FFFD2368254A934225D1254B3E :10AFD00025489A6904A942F400629A619A6902F4C8 :10AFE00000620092009A9A6942F004029A619B6999 :10AFF00003F004030193019B4FF480530493012356 :10B000000693F6F745FD00221B201146F6F7CAFB12 :10B010001B20F6F7F7FB08B010BDB3F1804F11D13C :10B0200003F50433DA691C2042F00102DA610022E0 :10B03000DB69114603F001030293029BF6F7B2FBB2 :10B040001C20E6E7094A9342E5D1064BDA6942F053 :10B050000402DA61DB6903F004030393039BDAE77C :10B06000002C014000100240000801400008004090 :10B07000102210B5044688B00DEB0200002101F04B :10B08000A1FD23681F4A934215D11F4B9A6942F0D4 :10B0900004029A619B6903F004030193019B4FF43E :10B0A00000630493022319480593079304A9F6F754 :10B0B000EFFC08B010BDB3F1804F0CD103F50433A1 :10B0C0009A6942F004029A619B6903F004030293B7 :10B0D000029B0323E5E70E4A9342EAD10A4B0D484F :10B0E0009A6904A942F008029A619B694FF40072C0 :10B0F00003F008030393039B0223CDE90423079382 :10B10000D5E700BF002C01400010024000080140BC :10B1100000080040000C01407047FEE7FEE7FEE734 :10B12000FEE7704770477047F5F79EBF0148F6F796 :10B130001BBC00BF9C0D00200148F7F7F9BF00BF02 :10B140008C0E00200148F7F7F3BF00BFD40E00209B :10B150000A4A08B51168034609B9094911606946E8 :10B16000106803448B4206D901F06AFD0C2303608A :10B170004FF0FF3008BD1360FCE700BF680F0020F0 :10B18000001500200F4B1A6842F001021A6059683E :10B190000D4A0A405A601A6822F0847222F4803202 :10B1A0001A601A6822F480221A605A6822F4FE0299 :10B1B0005A604FF41F029A604FF00062034B9A608E :10B1C000704700BF001002400000FFF800ED00E0F3 :10B1D000914210B50446184609D0029B521A641ACF :10B1E000191A531001FB043393FBF2F3184410BDFA :10B1F000642807B528BF6420462928BF46210A2AAB :10B2000038BF0A2281424FEA520309D30093002338 :10B210000A461946FFF7DCFFC0B203B05DF804FB35 :10B220000131009201336422C9B2F3E703468B4235 :10B23000084603DB9342A8BF134618467047052310 :10B2400000EBC000A23090FBF3F000B2704709237E :10B250009B3890FBF3F000B270472DE9F0410446B3 :10B260009DF81850BDF81C60BDF8207000F5867080 :10B27000FFF778FD3B463246294604F58E70BDE85F :10B28000F041FFF76FBD19B900F58E70FFF774BD7F :10B2900090F8250170470000FFF774FF0B480C4938 :10B2A0000C4A002302E0D458C4500433C4188C4222 :10B2B000F9D3094A094C002301E013600432A24289 :10B2C000FBD301F0C3FCFCF71FFA7047000000201D :10B2D0004002002048E20008400200200015002043 :10B2E000FEE72DE9F74FCE18531CDBB2F6B290F80B :10B2F00086900093334605460C46904600F027FDA5 :10B3000050B1B9FA89FA80274FF0000B4FEA5A1A68 :10B31000A64204D185F8869003B0BDE8F08F0C9B5F :10B320001B781F4215D085F88690CDF800B0012318 :10B3300042462146284600F06DFC7F0808BF0C9B62 :10B3400004F1010404BF01338027E4B208BF0C9369 :10B35000DEE795F88530002BEFD185F886A00093C5 :10B36000E5E72DE9F3479DF82850DE00F6B21544D5 :10B370009846EDB273180095DBB281460F4614462D :10B38000DDF82CA000F0E3FC68B902B0BDE8F0875E :10B390002246CDF800A0334639464846FFF7A1FFC4 :10B3A0000134C244E4B2A542F2D1EEE72DE9F743FD :10B3B0009DF828501F461544EDB2CB180095DBB21E :10B3C00080460E46144600F0C2FC18B14FF000094A :10B3D000A54202D103B0BDE8F08322463B46314688 :10B3E0004046CDF80090013400F014FCE4B2EFE7E1 :10B3F0002DE9F74304460026036890F83C9090F846 :10B400003D7093F811802368A06B1B7CF5B203FBA1 :10B4100006F1C90089B208447A190135009000216B :10B420002046D2B2EDB201F0D8F8A94504D90136D0 :10B43000BB19DBB29845E6D803B0BDE8F0830368DA :10B4400000211A7C90F83C30806B5A43D20001F006 :10B45000B9BB10B50446FFF7CBFF2046BDE810404E :10B4600001F0E3B810B50446436B80F83D101B684B :10B470009847636B2046BDE810405B68184710B5DD :10B4800090F8873004460BB1FFF7D9FF2046BDE89E :10B4900010400021FFF7E6BF38B50446FFF7A8FFCC :10B4A00094F83C3094F83D501D442368EDB25B7C29 :10B4B000AB4204D8204601F0B8F8002038BD94F81B :10B4C000873013B12046FFF7BAFF20462946FFF721 :10B4D000C9FF0120F2E72DE9F0479DF824900746C7 :10B4E00019F0010F0C4616461D469DF8208012D01B :10B4F000531C6918A8EB0202DBB2D2B2C9B200F049 :10B50000F8FB631CA8EB0402A9193846DBB2D2B2DF :10B51000C9B200F0EEFB19F0020F13D0731CA8EBB8 :10B520000602291B3846DBB2D2B2C9B200F0E1FBF9 :10B53000631CA8EB0402A91B3846DBB2D2B2C9B225 :10B5400000F0D7FB19F0080F0FD0731C29194246E1 :10B550003846DBB2C9B200F0CCFB631CA9194246E5 :10B560003846DBB2C9B200F0C4FB19F0040F11D0A9 :10B57000291B731C42463846DBB2C9B200F0B9FB46 :10B580000134A91B42463846E3B2C9B2BDE8F047D0 :10B5900000F0AFBBBDE8F0872DE9F74F91461C46A0 :10B5A00009F10105013325440B448846121B091B90 :10B5B000EDB20095DBB2D2B2C9B282469DF830B08E :10B5C00000F0C5FB88B14346224600215046CDE934 :10B5D000009BFFF780FF0026C4EBC417C4F10105F0 :10B5E0007F006DB27FB2B44202D803B0BDE8F08FE5 :10B5F000002D05DBBB1C013C5FB22B44E4B25DB205 :10B600000136F6B205EB4605434622463146504622 :10B61000CDE9009B01356DB2FFF75DFFE3E710B5A3 :10B620000446FFF72CFF2046FFF736FF01460028AF :10B63000F9D12046BDE81040FFF714BF082303707E :10B64000004870476C0F002030B585B00D46009360 :10B6500009491346094A044601F00CF80DF10F00A0 :10B66000FFF7ECFF064B01469DF80F2020460095A2 :10B6700000F035FE05B030BD09C500081DC4000846 :10B6800047BE00084218435C507800EB032080B2AC :10B690007047012B05D0022B05D033B91044C0B23E :10B6A00070470844FBE7801AF9E7401AF7E7012BD7 :10B6B00005D0022B05D033B90844C0B27047801AB8 :10B6C000FBE7401AF9E71044F7E70020704738B568 :10B6D0000B780D4603704B78044643708B7883706B :10B6E000CB78C3700B7903714B7943718B7983717C :10B6F000CB79C3710B7A03724B7A43728B7A837264 :10B70000CB7AC3720B7B03734B7B43738B7B83734B :10B71000CB7BC3730B7C112103742846FFF7B2FF68 :10B72000132160822846FFF7ADFF1521A08228462D :10B73000FFF7A8FFE08238BD70B5847A036862180D :10B740001D78D2B2072A45FA04F507D8EBB2827207 :10B750004FF0FF30884023EA000070BD5E1C066099 :10B760005B78C4F10804E4B2A3402B43083ADBB28F :10B77000D2B2ECE738B5002300F15805044680F852 :10B780006230816590F86C102846FFF7D5FF94F879 :10B790006D1084F860002846FFF7CEFF94F88630DD :10B7A00084F8610084F86430B3FA83F35B0984F8A9 :10B7B000653038BD10B5FFF7BFFF01234C1EE4B262 :10B7C000A340C01A40B210BD2DE9F04F04460E460A :10B7D00087B090F85E5090F85F70059294F860B072 :10B7E0004FFA87F9ABEB0503DBB2B3429A460393FA :10B7F00094F85D304A4669B2049394F85C0094F87A :10B80000663028BFB246FFF752FF80460498FFF724 :10B8100040FF05990246A9B194F8641084F8861097 :10B82000009341465346204600F0F4F9039B35440B :10B830009E42EDB20DD3A5EB0B050137EEB2FFB280 :10B840000025CBE794F863100029EFD194F8651038 :10B85000E4E784F85E5084F85F9007B0BDE8F08FAD :10B860002DE9F74F044600F15807FFF783FF94F8DE :10B870006E10384694F96190FFF79CFF94F86F10B2 :10B8800083463846FFF796FF94F870100646384610 :10B89000FFF790FF94F960A08046BAF1000F4DDDEC :10B8A0005FFA89F5AA19524252B2594694F86630A5 :10B8B00094F85C00FFF7FBFE84F85C00064694F801 :10B8C0005D00FFF7E6FE024684F85D00032B5BD8BF :10B8D000DFE803F00238425006EB0A032918DBB216 :10B8E000C9B200912046314600F031FA30B300234E :10B8F000A4F85E3094F86A103846FFF71DFF94F8FC :10B900006B1006463846FFF717FF05460022314602 :10B910002046FFF759FF294620460122FFF754FF32 :10B9200001213846FFF708FF0028EFD194F95F3076 :10B930004B45DFDB94F8643084F88630404603B032 :10B94000BDE8F08FC5F10105731C354400EB0A0119 :10B95000DBB2C9B2EEB2C4E7CAF1010AC5F1010512 :10B96000731CB2440544411CDBB2C9B2EAB25FFAAF :10B970008AF6B6E7CAF1010A35448244411CEBB2AB :10B98000C9B25FFA8AF2ACE701463346A9E7036D14 :10B99000FF2970B503F117030D4612D8602909D9A4 :10B9A000B0F87C201344587818B11A78AA4206D10E :10B9B000981C70BD4029F6D9B0F87A20F2E703440C :10B9C000F1E7B0F87E209C18264600213046FFF7AC :10B9D00059FE022104443046FFF754FE854206F129 :10B9E0000406F2D8208840BA80B20028E1D085420F :10B9F00001D1E01CDDE7A3781C44F3E738B5044629 :10BA0000FFF7C5FF0146B8B104F158052046FFF71E :10BA1000B1FE94F86E102846FFF7CCFE94F86F1034 :10BA200084F884002846FFF7C5FE284694F8701075 :10BA3000BDE83840FFF7BEBE38BD2DE9F84300240D :10BA40000F4680F860400546264600F06FFC4FF632 :10BA5000FF784FF6FE79013F17F8011F28466B6803 :10BA600098474045014608D04845F5D02846FFF79D :10BA7000C5FFC4B22644F6B2EEE795F9602032B1B4 :10BA800095F88430134433441B1B03F0FF06304603 :10BA9000BDE8F883F8B51F4690F8663004460E46B8 :10BAA0001546032B07D8DFE803F002151A1E436D75 :10BAB00098472844C5B23946204684F85C6084F82B :10BAC0005D50FFF764FF014618B12046FFF7C8FE3E :10BAD000C0B2F8BD436D9847301AC6B2EBE7436D6C :10BAE0009847281AE6E7436D98473044F5E72DE973 :10BAF000F0471E4607460C4615464FF0000A00F078 :10BB000015FC4FF6FF784FF6FE79013E7B6838460C :10BB100016F8011F9847404503461BD04845F5D00D :10BB20002A4621463846FFF7B5FF97F86630032BC3 :10BB300005D8DFE803F002080B0D0444E4B25044DA :10BB40005FFA80FAE2E70544EDB2F8E7241AF5E778 :10BB50002D1AF9E75046BDE8F087000010B4024CFA :10BB6000446010BCFFF7C3BF1DC30008036D10B5D0 :10BB7000CBB190F9754090F9761090F8813080F84B :10BB8000824080F8831073B1012B0DD190F977308A :10BB9000A342B8BF234680F8823090F978309942AA :10BBA00001DD80F8833010BD90F9742090F9723077 :10BBB00013449C42B8BF80F882309142C8BF80F8DD :10BBC0008320F0E7014B4365704700BFCBB6000808 :10BBD000026D10B58A42044608D001656830FFF74F :10BBE00076FD2046BDE81040FFF7C0BF10BD000045 :10BBF000014B4360FFF721BF1DC3000870B490F8EC :10BC000040609DF80C50046B921BA4460395D2B281 :10BC100070BC6047F0B490F880409DF81050002C44 :10BC20003AD0002B38D0012B04D0022D2BD101317A :10BC3000C91AC9B215F0010530D190F847409442B5 :10BC40002AD890F84840944226D90B44DCB28C4262 :10BC500090F8457090F846601CD28E4219D9741E37 :10BC6000E4B2A74218D2B94238BF3946A64294BFBF :10BC7000C1EB0603C1EB0403446B0495A468DBB27B :10BC8000A446F0BC6047032D02BF0132D21AD2B2E3 :10BC9000D0E739468E42E4D8F0BC704790F8454072 :10BCA0008C42F9D890F846408C42F5D91344DCB266 :10BCB000944290F8477090F8486010D296420DD99F :10BCC000741EE4B2A742E7D2BA4238BF3A46A6424F :10BCD00094BFC2EB0603C2EB0403CDE73A4696429B :10BCE000F0D8D9E713B500240094FFF793FF02B012 :10BCF00010BD13B501240094FFF78CFF02B010BDF6 :10BD000073B590F84760964210D890F84860964214 :10BD10000CD990F845508D4208D890F846308B42A7 :10BD200004D9002300930123FFF774FF02B070BD14 :10BD30008A4206D2834208D89A4294BF002001204A :10BD400070478342F8D8002070470120704770B5D3 :10BD500004460D461E4690F848109DF8103090F8A5 :10BD60004700FFF7E5FF48B133462A4694F84610EE :10BD700094F84500BDE87040FFF7DABF70BD2DE9CB :10BD8000F74F9DF8309099428CBFA1EB0308A3EBCD :10BD900001084A450C4615461E465FFA88F812D936 :10BDA000A2EB0907FFB2B84517D33B46B44247465A :10BDB000984605D92B464D469946234634461E469D :10BDC0004FF0000B0FE0A9EB0207FFB2B845ECD231 :10BDD0004E46144699460D4603E04C461D4616460F :10BDE00089464FF0010B4D4534BF4FF001094FF02C :10BDF000FF39FE2E28BFFE2647F3470AF6B2B442AB :10BE000002D903B0BDE8F08FBBF1000F18D12A466C :10BE10002146AAEB080A0190FFF772FF5FFA8AF346 :10BE20004FFA8AFABAF1000FBCBF4D44DB1904F196 :10BE300001040198BCBFEDB24FFA83FAE4B2DEE729 :10BE400022462946E5E7F0B5012490F8865002F035 :10BE50000706B440012D9DF81470E4B216D82546AB :10BE600016D0D0F800C002F0F8029CF810E00EFBEB :10BE70000211826B11446FB90A78013B2A43624078 :10BE800013F0FF0301F8012BF6D1F0BD0025E8E720 :10BE90000024E6E70A7801362A436240013B16F0A7 :10BEA00007060A70DBB20CD190F83E20114490F8DE :10BEB0008620012A0AD80BD001242546002BE9D17F :10BEC000E3E76D006400EDB2E4B2F7E70124F5E7C3 :10BED0001546F3E7B0F90810B0F90A3010B58B42F7 :10BEE00016DD83898288C4881344C2899BB22244A8 :10BEF00094B212B2002A8381C28105DD0288134404 :10BF000083814388E31AC38101310181012010BD7F :10BF10000020FCE7037E0131C9B28B428CBF08468A :10BF200000207047037E0139C9B28B429CBF03F1E8 :10BF3000FF33D9B20846704718232DE9F04703FBB9 :10BF400000F5DFF88C9009F11C067419217D484634 :10BF500009EB8103B3F90280236939F9217098470D :10BF600039F820A009EB8002BBB2B2F80290AAEB2C :10BF70000301B2F902C009B21FFA88F2A9EB020E5E :10BF800000290FFA8EFE1DDA0132A2EB09024FF0F2 :10BF9000FF39A3EB0A031BB212B22075A4F802E02A :10BFA000A4F80AC0A4F80880A78126F80590E281C9 :10BFB00093FBFEF291FBFEF10EFB1233A180E380B6 :10BFC000BDE8F0870B464FF001090022E5E700BF0E :10BFD0006C130020182370B50546094E03FB01645D :10BFE00094F83010E36A3046984706EB8003B3F9C3 :10BFF00002300146AB4202D184F83000F2E770BD56 :10C000006C13002000222DE9F041524B524C0546A2 :10C010006364524B0121E362B4F9023094461E4638 :10C0200094F818E084F83020CFB2BE4563D8BCF154 :10C03000000F01D084F830209B1B1BB26383002BC0 :10C0400070D094F830300121304684F84830FFF742 :10C05000C1FF00213046FFF7BDFF012394F83020D7 :10C06000637694F8483034F9222034F923309A4228 :10C0700052D0002363760020B4F91A60FFF75CFF0A :10C080000120FFF759FF637E2BB13548FFF722FFF0 :10C090003448FFF71FFF324F07F11808B4F93C206E :10C0A000002A1BDB95F844309A4217DAB4F928309D :10C0B000B4F94000834237DA00280FDB95F84310CB :10C0C0008B420BDA23EAE3738142D8BF08B2D9B2BC :10C0D000431A2846DBB2D2B2FFF704FE3846FFF718 :10C0E000F9FE80B34046FFF7F5FE78B3013E36B265 :10C0F000002ED3DC16E004EB8100B0F90200013120 :10C100008342B8BF0346B042A6BF174630464FF041 :10C11000010C3A46064687E7638B013B1BB26383FB :10C12000002BA8D1BDE8F081002BD7DB95F8431098 :10C130008842D3DA0028B8BF00239942D8BF0BB297 :10C14000C1B25B1AC5E7FFF7F7FEC7E70120FFF7AB :10C15000F3FEC7E715BF00086C13002025BF0008D9 :10C1600088130020A0130020F0B4094CBDF9107012 :10C17000A3800323BDF91460BDF9185021806280AB :10C18000E780268165812376F0BCFFF73BBF00BFC7 :10C190006C13002070B590F83C100268CB0080F85A :10C1A0003F30137C90F83D501F2B28BF1F23DB002E :10C1B00080F83E30EB00DBB280F84030547C4E1902 :10C1C000A642C4BF641BE1B280F8413003EBC10357 :10C1D00080F84230F02380F84330918A994298BF2A :10C1E0000B4680F84330D38A80F8443070BD30B4B9 :10C1F00090F844409DF80850A21A90F84340D2B2FB :10C20000611AC9B23DB9013AC91AD2B2C9B202958E :10C2100030BCFFF7F3BC012D01BF01F1FF31D21A91 :10C22000C9B2D2B2F3E713B590F84C30044600938C :10C2300090F84A3090F84B2090F84910FFF787FDAE :10C2400018B984F8800002B010BD012394F845208D :10C2500084F8803094F849309A4238BF84F84530E9 :10C2600094F8462094F84A309A4288BF84F84630C1 :10C2700094F8472094F84B309A4238BF84F84730FE :10C2800094F8482094F84C309A4288BF84F848309B :10C29000D9E7002390F8432080F8473080F84530F4 :10C2A00080F8462090F8443090F84220934224BF12 :10C2B0009A1A80F8472090F841209B1A80F848305D :10C2C000FFF7B1BFFFF766BF002280F84920FF22C9 :10C2D000436BA0F84A2080F84C205B68184770B583 :10C2E0000025036340F201130446049E80F83C20BD :10C2F00080F83D5080F8635080F88550A0F8863073 :10C30000816333680565466398472046FFF7DCFF85 :10C310002046FFF757FC84F8665070BD19B10A2912 :10C3200001D088B270474FF6FF707047002380F845 :10C330002730704710B404690A46A4460023202120 :10C3400010BC604710B404691346A4460A4610BCEA :10C350001721604707B58DF807100DF1070201217D :10C36000FFF7F0FF03B05DF804FB10B4C4680A46A1 :10C37000A4460023152110BC604710B4C4680A46C7 :10C38000A4460023162110BC604710B4C4681346AD :10C39000A4460A4610BC17216047002310B4C468A5 :10C3A0001A46A446182110BC6047002310B4C46884 :10C3B0001A46A446192110BC604773B505460C46C1 :10C3C000217819290DD8172919D80ED014290AD97E :10C3D000627800232846EE688DF80720B0470234C3 :10C3E000EEE7FE2912D002B070BD63780121284625 :10C3F0000DF107028DF80730FFF7C7FFEFE70023C5 :10C4000028461A46EE680134B047D9E762782921F8 :10C4100028468DF8072000F010F9E0E72DE9F041FB :10C420001F46A1F1140304460D461646052B1BD8E2 :10C43000DFE803F01003030D10100021FFF77AFF6F :10C4400031462046FFF786FF0120BDE8F08101213B :10C45000FFF770FFD4F810E03B46324629462046ED :10C46000F446BDE8F04160470020EEE70E29F8B53C :10C47000044615461E4638D00F2903D00B292CD070 :10C480000020F8BDFFF789FF737994F82210204649 :10C4900001EBC30101F0FF07C1F3031141F01001EB :10C4A000FFF763FF07F00F012046FFF75EFFB1794A :10C4B000204641F0B001FFF758FF31792046C9000E :10C4C000326801F0F801013DFFF75FFF15F0FF054D :10C4D000F3D12046FFF769FF03E022B90849FFF7CF :10C4E0006CFF0120CDE70749F9E7FFF756FF8121EF :10C4F0002046FFF73AFF29462046FFF73EFFE8E7D0 :10C50000E3E10008E8E1000870B504460D46164670 :10C51000FFF7ACFF98B90A2D1AD00D2D06D0092DC2 :10C520000ED120460E4900F023F808E04EB920460F :10C530000C49FFF742FF23689B7C84F822300120DE :10C5400070BD20460849FFF738FF2368DB7CF4E71D :10C55000204600F012F820460449FFF72EFFEEE7D0 :10C56000F0E10008ACE10008B3E10008BAE100081E :10C5700001608B7C80F82230704738B50023282179 :10C580001A4645690446A847002314211A46204646 :10C59000E568A847204601224B2100F04EF82368A9 :10C5A00020461A79292100F048F8204600224B2124 :10C5B00000F043F8236820461A79292100F03DF85D :10C5C000204601224B2100F038F8236820465A7992 :10C5D0002921BDE8384000F030B813B58DF804309B :10C5E000049B8DF805108DF80620009301226B4600 :10C5F0000F218468A04702B010BD002310B48468E6 :10C600001A46A446092110BC6047002310B4846870 :10C610001A46A4460A2110BC604710B484680A4632 :10C62000A44600230B2110BC6047002310B484688B :10C630001A46A446102110BC604710B44469002378 :10C64000A44610BC60470020704700000023036030 :10C6500080F82330C3848361FF23054A80F82430A7 :10C66000C0E90222C0E9042280F82930704700BFE7 :10C6700047C60008F8B516461D46069FFFF7E6FFB9 :10C68000C0E90216C0E90457BDE8F840FFF7B5BF9E :10C6900000F000B800F0C2B938B5044600F092F8D6 :10C6A000214605462046F4F76DFC70B9002120466E :10C6B000F4F75EFC48B900212046F4F731FC30B1B4 :10C6C00000F0BEFA2223064D0360284638BD00F074 :10C6D000B7FA212303600348BDE8384000F004B8EE :10C6E000000080FF0DE20008004870470000C07F96 :10C6F000F8B5C1F30A57A7F2FF32132A0B460546D5 :10C700000C4618DC002A09DA013201F0004303D19B :10C7100043F07F5343F44013002229E016481041B0 :10C720000140294311D04FF4002141FA02F2134491 :10C7300023EA0003F0E7332A0ADDB2F5806F04D163 :10C740000246F3F713FD05460C4628462146F8BD80 :10C750004FF0FF30A7F21347F8402842F5D0C2F15E :10C76000330101228A40521928BF013322EA000214 :10C7700019461046E7E700BFFFFF0F00C0F3C7539D :10C780007F3B162B014610B514DC002B07DA013372 :10C7900000F0004101D141F07E51084610BD084A29 :10C7A0001A411042F9D04FF480011941014421EAA5 :10C7B0000201F2E7802BF0D1F4F716F90146ECE71D :10C7C000FFFF7F0030F000422DE9F84F014603469D :10C7D00006D100214FF04C40F4F7C2FABDE8F88FC3 :10C7E000002803DAF4F7FEF80021F5E7B0F1FF4F77 :10C7F00002DBF4F7F9F8F1E7B0F5000F35DA4FF0A6 :10C800009841F4F7F9F96FF018020346C3F31604E0 :10C81000DE15714B7F3E234403F4000080F07E5010 :10C8200016444FF07E51204306EBD356F4F7DAF866 :10C830006A4B04F10F0213400546002B3AD1002148 :10C84000F4F76EFB98B1002E00F0C4803046F4F788 :10C850007FF963490546F4F7CFF962490446284653 :10C86000F4F7CAF901462046C3E70022CEE75E4945 :10C870002846F4F7C1F901464FF07C50F4F7B2F8BE :10C88000294604462846F4F7B7F901462046F4F74E :10C89000B3F904460EB921466FE03046F4F758F973 :10C8A0004F490746F4F7A8F9064638464D49F4F7CC :10C8B000A3F972E04FF08041F4F796F8014628465C :10C8C000F4F74EFA81463046F4F742F9494680467D :10C8D0004846F4F791F901468346F4F78DF9074687 :10C8E0004249F4F789F94249F4F77EF83946F4F7FA :10C8F00083F94049F4F778F83946F4F77DF93E4971 :10C90000F4F772F85946F4F777F93C49834638460C :10C91000F4F772F93A49F4F767F83946F4F76CF925 :10C920003849F4F761F83946F4F766F90146584694 :10C93000F4F75AF8DFF8D0A0C4F55713A24403F572 :10C94000227343EA0A03002B074630DD4FF07C5187 :10C950002846F4F751F92946F4F74EF90146044602 :10C960003846F4F741F84946F4F746F9074646B920 :10C9700001462046F4F736F801462846F4F732F827 :10C980002CE717494046F4F737F916490646404662 :10C99000F4F732F93946F4F727F801462046F4F760 :10C9A00021F82946F4F71EF801463046E6E701462D :10C9B0002846F4F717F84946F4F71EF90446002E06 :10C9C0003FF469AF06494046F4F716F905490646B3 :10C9D00040466CE7002001E720FB4A00F0FF7F00A3 :10C9E0008071313FD1F71737ABAAAA3E9788173E1F :10C9F00025333A3E2549923EABAA2A3F4FD01C3EF2 :10CA0000298E633ECDCCCC3E305CCFFF024B01463D :10CA1000186800F02BB800BF3C020020024B014612 :10CA2000186800F04FB900BF3C02002070B50E4EF0 :10CA30000C463168054611B900F0F2F83060214625 :10CA4000284600F0EDF8431C0AD0C41C24F003046F :10CA5000A04207D0211A284600F0E2F8013001D1A7 :10CA60004FF0FF34204670BDBC1300202DE9F84381 :10CA7000CD1C25F0030508350C2D38BF0C25002DE5 :10CA8000074601DBA94205D90C2300263B6030464E :10CA9000BDE8F883DFF8D08000F068F8D8F80030FF :10CAA0001C465CBB29463846FFF7C0FF431C0446C2 :10CAB00055D1D8F800402646002E45D1002C48D04C :10CAC00023683146384604EB030900F0A9F8814594 :10CAD0003FD1216838466D1A2946FFF7A7FF01307C :10CAE00037D023682B442360D8F80030002B38D08F :10CAF0005A68A2422BD100225A600FE02268521BD2 :10CB00001FD40B2A17D96119A342256018BF596099 :10CB1000636808BFC8F8001062514B60384604F1E2 :10CB20000B0600F029F826F00706231DF21AAED0F6 :10CB30009B1BA350ABE7A3426268DDD1C8F800207D :10CB4000ECE723466468ACE734467668B4E71346FE :10CB5000CCE70C2338463B6000F00EF897E72560E1 :10CB6000DCE75B60FFDE00BFB8130020014800F087 :10CB700091B800BFFC140020014800F08CB800BF41 :10CB8000FC1400200EB46FF0004100B59CB01DAB4A :10CB900002900690079104910848094953F8042B24 :10CBA0000591006802A9019300F02EF90022029B72 :10CBB0001A701CB05DF804EB03B070473C02002013 :10CBC0000802FFFF03460244934200D1704703F876 :10CBD000011BF9E710B56AB10139841810F8012B6F :10CBE00011F8013F9A4203D1A04201D0002AF5D1A9 :10CBF000D01A10BD1046FCE7034610B5013932B11A :10CC000011F8014F013A03F8014B002CF7D1002134 :10CC10001A44934200D110BD03F8011BF9E700004C :10CC200038B50023054D044608462B60FEF790FA00 :10CC3000431C02D12B6803B1236038BDF8140020D7 :10CC4000014B1868704700BF3C02002070B50026F9 :10CC50000C4D0D4C641BA410A64209D100F0C6FB7C :10CC600000260A4D0A4C641BA410A64205D170BDD3 :10CC700055F8043B98470136EEE755F8043B9847D2 :10CC80000136F2E73CE200083CE200083CE2000822 :10CC900044E2000870477047034611F8012B03F87F :10CCA000012B002AF9D170470A44914200F1FF3369 :10CCB00000D1704710B511F8014B914203F8014FB4 :10CCC000F9D110BD38B50546002940D051F8043CD3 :10CCD0000C1F002BB8BFE418FFF748FF1C4A13686D :10CCE00033B9636014602846BDE83840FFF744BF9D :10CCF000A34208D9206821188B4201BF19685B68DC :10CD000009182160EDE71A465B680BB1A342FAD916 :10CD100011685018A0420BD120680144501883427A :10CD20001160E0D118685B68084410605360DAE76E :10CD300002D90C232B60D6E7206821188B4201BF53 :10CD400019685B680918216063605460CBE738BDDF :10CD5000B81300202DE9F0471F468E688246BE4278 :10CD60000C4690460B682CD88A8912F4906F26D016 :10CD70006569096905EB4505A3EB010905EBD57567 :10CD80007B1C4B446D109D4238BF1D46530527D573 :10CD90002946FFF76BFE064660B34A462169FFF756 :10CDA00083FFA38923F4906343F08003A38126616A :10CDB0004E4426603E466561A5EB0905A560BE426E :10CDC00000D93E4632464146206800F0AFFA0020C6 :10CDD000A3689B1BA360236833442360BDE8F087EE :10CDE0002A4600F0CBFA06460028E0D150462169D9 :10CDF000FFF768FF0C23CAF80030A3894FF0FF301B :10CE000043F04003A381E9E72DE9F04F98468B8971 :10CE100007461B060D4614469DB00ED50B6963B937 :10CE20004021FFF723FE2860286120B90C233B60D6 :10CE30004FF0FF30D0E040236B61002309932023A3 :10CE40008DF8293030234FF00109CDF80C80DFF840 :10CE5000A0818DF82A3023469A4613F8012B0AB197 :10CE6000252AF9D1BAEB040B0BD05B4622462946A2 :10CE70003846FFF76FFF013000F0A980099A5A4445 :10CE800009929AF80030002B00F0A18000234FF0A7 :10CE9000FF32CDE905230AF1010A049307938DF8C7 :10CEA00053301A935446052214F8011B504800F0E1 :10CEB00057FA049AD8B9D00644BF20238DF85330CE :10CEC000110744BF2B238DF853309AF800302A2BDA :10CED00015D0544600204FF00A0C079A214611F84D :10CEE000013B303B092B4DD9B0B1079214E0A0EBC8 :10CEF000080309FA03F31343A2460493D2E7039B02 :10CF0000191D1B680391002BBBBF5B4242F002025C :10CF100007930793B8BF049223782E2B0CD1637824 :10CF20002A2B34D1039B02341A1D1B680392002B59 :10CF3000B8BF4FF0FF330593DFF8B8A00322504687 :10CF4000217800F00DFA38B14022049BA0EB0A00D2 :10CF5000824013430134049314F8011B062226482F :10CF60008DF8281000F0FCF9002838D0234B1BBBAB :10CF7000039B073323F0070308330393099B3344D0 :10CF8000099368E70C4601200CFB0232A6E7002358 :10CF90004FF00A0C194601340593204610F8012B76 :10CFA000303A092A03D9002BC6D00591C4E70446BC :10CFB00001230CFB0121F0E703AB00932A4638461E :10CFC0000F4B04A9AFF30080421C0646D6D1AB89B3 :10CFD0005B063FF52DAF09981DB0BDE8F08F03ABA0 :10CFE00000932A463846064B04A900F07DF8EBE78B :10CFF00008E200080EE2000812E20008000000004B :10D0000055CD00082DE9F047164699468A680B6908 :10D0100007469342B8BF1346336091F843200C464D :10D02000DDF820800AB1013333602368990642BFDE :10D03000336802333360256815F0060506D104F124 :10D04000190AE36832689B1AAB422BDC94F8432040 :10D05000131E226818BF0123920630D44946384671 :10D0600004F14302C047013023D02368226903F052 :10D070000603042B14BF002533684FF0000608BFD9 :10D08000E56804F11A0408BFED1A54F8123C08BF11 :10D0900025EAE5759342C4BF9B1AED18B5421AD133 :10D0A000002008E00123524649463846C047013077 :10D0B00003D14FF0FF30BDE8F0870135C1E73020E4 :10D0C000E11881F843005A1C94F8451022440233B9 :10D0D00082F84310C2E70123224649463846C0473A :10D0E0000130E6D00136D9E72DE9FF470F7E9146A2 :10D0F000782F80460C469A460C9D01F1430207D8D2 :10D10000622F0AD8002F00F0D580582F00F0C18080 :10D1100004F1420584F842703AE0A7F16303152B4D :10D12000F6D801A151F823F081D1000895D100086B :10D1300011D1000811D1000811D1000811D1000847 :10D1400095D1000811D1000811D1000811D10008B3 :10D1500011D100089BD20008C1D1000855D20008A7 :10D1600011D1000811D10008BDD2000811D100086A :10D17000C1D1000811D1000811D100085DD200080A :10D180002B681A1D1B682A6004F1420584F842309E :10D190000123A0E020682B68070603F10401296041 :10D1A00001D51E6803E04606FBD5B3F90060002EEA :10D1B00003DA2D23764284F843300A23594812E0DB :10D1C0002B682068191D2960050601D51E6802E03C :10D1D0004106FBD51E886F2F0CBF08230A23514838 :10D1E000002184F843106568002DA8BF2168A56060 :10D1F000A4BF21F0040121600EB9002D4BD01546CB :10D20000B6FBF3F103FB1167C75D05F8017D3746F7 :10D21000BB420E46F4D9082B0BD12368DE0708D594 :10D22000236961689942DEBF302305F8013C05F1AE :10D23000FF35521B22614B4621464046CDF800A0E7 :10D2400003AAFFF7DFFE01304AD14FF0FF3004B0F0 :10D25000BDE8F087236843F0200323607827324835 :10D2600084F84570236829681F0651F8046B02D4BE :10D270005F0648BFB6B2DF0748BF43F0200329600E :10D2800048BF23601EB9236823F0200323601023C6 :10D29000A6E72448E4E71546BDE72B682668181D75 :10D2A0006169286035061B6801D5196002E07006C7 :10D2B000FBD51980002315462361BCE72B680021AC :10D2C0001A1D2A601D686268284600F049F808B1F6 :10D2D000401B606063682361002384F84330AAE741 :10D2E0002A46494640462369D0470130ADD02368DD :10D2F0009B0713D4E068039B9842B8BF1846A6E783 :10D300000123324649464046D04701309DD0013581 :10D31000E36803995B1AAB42F2DCEBE7002504F10A :10D320001906F5E719E200082AE20008884210B55C :10D3300001EB020402D98442234607D8431EA142CE :10D3400008D011F8012B03F8012FF8E70146024439 :10D350008A4200D110BD13F8014D02F8014DF7E7E4 :10D36000034610B5C9B202449342184601D10020C9 :10D3700003E0047801338C42F6D110BD2DE9F04171 :10D38000804614460E4621B91146BDE8F041FFF72C :10D390006DBB2AB9FFF796FC25462846BDE8F0810B :10D3A00000F01BF88442074602D8B4EB500F12D8A5 :10D3B00021464046FFF75AFB05460028EDD0BC4207 :10D3C0002246314628BF3A46FFF76EFC31464046BA :10D3D000FFF778FCE1E73546DFE751F8043C181F1A :10D3E000002BBCBF0B58C01870470000F8B500BF39 :10D3F000F8BC08BC9E467047F8B500BFF8BC08BC36 :04D400009E4670478D :10D40400C80004014A019001C8002C019001F401F4 :10D414004000200001010000DFD40008EBD4000824 :10D42400F4D40008ADDA0008B9DA0008BFDA00085D :10D43400C6DA0008D0DA0008DCDA0008E7DA000807 :10D44400F2DA0008FBDA000808DB000815DB000844 :10D4540022DB000827DB00082EDB00083CDB000889 :10D464004ADB000854DB00085DDB00086ADB0008C7 :10D4740078DB00089CDA0008A6DA000891DA0008D4 :10D4840097DA000871DA00087BDA000884DA000809 :10D4940091DA000897DA0008020304050607080970 :10D4A4000A0B0C0D0E0F10100102020304050607EF :10D4B40008090A0B0C0D0E0F101001025431322D05 :10D4C400005431322D64656600454550524F4D0A73 :10D4D400726561640A6572726F720074656D70655D :10D4E400726174757265006475726174696F6E003F :10D4F4006261636B20746F206D656E7500000000BF :10D504000000000000000000000000000000000017 :10D514000000000000000000000000000000000007 :10D5240000000000000000000000000000000000F7 :10D5340000000000000000000000000000000000E7 :10D54400000000000000000077450008794500084D :10D554007D4500087F4500084F464600436F6C64D4 :10D564000052656164790049646C650053746279A2 :10D5740000426F6F7374002532640046616E3A2571 :10D58400336425630054756E650025326425630099 :10D5940054756E6520504944005265662320256405 :10D5A400005469703A005365743A20253364004F7F :10D5B4004B005B005D002825632D25632900416233 :10D5C4006F75740049524F4E202620486F742041D5 :10D5D40069722047756E00342E303800436F6E74C4 :10D5E400726F6C6C657220762E2573004E6F7620F8 :10D5F400203720323032330049524F4E00535442C8 :10D60400590047554E004B70203D20253564004B92 :10D6140069203D20253564004B64203D2025356478 :10D62400006070787C7870607E81A59999A5817E70 :10D634007E8181818181817E040044402E801B0093 :10D64400F1E01B002E80444004001028682868384C :10D654003878387CFEFEFE7C385A999999999981DC :10D66400995A3C7E7FFFFFFFFBF3623CFC02010101 :10D6740002FCFFFEFFFEFFFEFFFEFC00FC00FC00C0 :10D68400FC00FC00FFFCFFFCFFFCFFFCFC00FC00BA :10D69400FC00FC00FC00FC00FFFEFFFEFFFEFFFEA2 :10D6A40001FF8007FFE01FFFF03FFFF87FC3FC7F0F :10D6B40001FC7E00FEFE00FEFC007EFC007EFC0001 :10D6C4007EFC007EFC007EFC007EFC00FEFE00FE74 :10D6D400FE00FC7F01FC7F87F83FFFF81FFFF00F7F :10D6E400FFC003FF00FFF800FFFE00FFFF00FFFF85 :10D6F40080FC3F80FC1FC0FC1FC0FC1FC0FC1F80BF :10D70400FC3F80FFFF00FFFE00FFF800FFFC00FC71 :10D71400FE00FC7F00FC3F00FC3F80FC1F80FC1FE0 :10D72400C0FC1FC0FC0FE0FC0FE0070007000380F3 :10D73400038001800180018003C003C00F701C3B83 :10D74400381F380F70003800000000C000E000707F :10D754000070006000C001C02B807FC0F180E0C079 :10D7640000E0007000780038001800000000000697 :10D77400000E201E7838FD70D7E003C00180010040 :10D7840001800380038001C000E000002000F80055 :10D79400FC00DE000603038F01FF03FE0380060086 :10D7A4000E001C003C003E000E00E03CFF3CE0008C :10D7B4000AD6000813D600081CD60008384444448E :10D7C400380000005CD50008FCD5000801D600082C :10D7D40006D600080A000403050504010611170211 :10D7E40000170017000000000001713024F1EABAAC :10D7F4002E0FE4A688E66626472647262766FDB749 :10D804001393239323933373435473079257003131 :10D8140010EBF69AA68C8E6206F7FF8F0E1E04326A :10D8240021EFEE9AAE0E4AC828064D9B0ECFCE923B :10D8340052925292920E4B4A884A88D2D21E7C400F :10D844003326F0EA9AEE0E88A868E648244724476F :10D8540024A78767296BAFC9A7A96B6B4D272467DA :10D86400A68A0EE6AE003432F1EA5AA7A92384252B :10D87400644544654465248504A5E4A6E4C4D44908 :10D88400094A090A1D1C4C1C1CC8CA03C803C80346 :10D89400C803081F441E44003526EF6E1A5E1C5C44 :10D8A4004C4A4C4A0C6F2C63247120434532381285 :10D8B40049BC7169E5C4E00415CD01D91500362AC7 :10D8C400F1EADA0E0FA8C668064746454645C4D7AE :10D8D400584D1CCC5891504E50DE7A3B213B313987 :10D8E4003338434575407805371BEFEE1A7E40DA2E :10D8F400724270787678769676787678967678ED41 :10D90400F08600382CF1EABA0E0FA8D8D0914C8ECC :10D914004C8E4C8E4CCECC4DADA3989C88189B9BC2 :10D92400999C98F5F6926272A4AAE880F00A0039EC :10D934002BF06ABA0C0FA68868E6660627462546C9 :10D944003D3DA498AB2832399818B2999E16911C83 :10D95400911C999BA19A3A1834030000000000001E :10D964000000000000000000E16C0008796D000870 :10D97400416D0008B16C0008F1700008C16C00082A :10D984005D6D0008C76C0008E36C0008D56C0008E6 :10D99400336D0008256D0008A96D0008CF6C0008E0 :10D9A40000000000000000001F720008337300082C :10D9B400F7710008DF71000821720008EB7100089C :10D9C40055720008DB720008E972000899720008B9 :10D9D400CD720008BF72000803720008F1710008DC :10D9E40053656C6563742074697000454550524FEB :10D9F4004D0A77726974650A6572726F72004163C9 :10DA040074697661746520746970004B45455000F3 :10DA1400524545440054494C540025316420646502 :10DA2400672E00253264206D696E0025336420431F :10DA34000025336420460025326420736563002585 :10DA440032646D20253264730043616C69627261D3 :10DA5400746500486F742047756E002B253264206E :10DA640025630025336420732E0044700063616CC9 :10DA74006962726174650074756E652067756E0005 :10DA840074756E652067756E2050494400636C653B :10DA940061720065786974006175746F6D61746991 :10DAA40063006D616E75616C00626F6F73742073D7 :10DAB4006574757000756E6974730062757A7A6541 :10DAC40072006B6565702069726F6E00737769749C :10DAD400636820747970650074656D702E207374AA :10DAE4006570006175746F20737461727400617580 :10DAF400746F206F6666007374616E64627920745B :10DB0400656D70007374616E6462792074696D650B :10DB14000073637265656E2073617665720073616C :10DB240076650063616E63656C0063616C69627243 :10DB340061746520746970006163746976617465E9 :10DB440020746970730074756E652069726F6E005D :10DB540067756E206D656E750072657365742063FC :10DB64006F6E6669670074756E652069726F6E20EA :10DB74005049440061626F757400000000000000A9 :10DB8400000000001D9600081D7E00083D7B000873 :10DB9400FF8400080000000000000000537C00081F :10DBA40049920008417B00081B8500080000000022 :10DBB40000000000377D0008E99700083F7B00085B :10DBC4000D8500080000000000000000E994000832 :10DBD400F1A000082F7B00089D84000800000000CD :10DBE400000000003D9000086B900008237B0008B3 :10DBF400498400080000000000000000717F000854 :10DC0400398B00082D7B00088F8400080000000079 :10DC140000000000C57B000829850008357B00084A :10DC2400C784000800000000000000009B81000879 :10DC340021820008397B0008E3840008000000000A :10DC4400000000005583000891830008377B00081A :10DC5400D584000800000000000000000DA90008A1 :10DC6400F98D0008297B0008738400080000000077 :10DC74000000000067950008B98C00082B7B0008A1 :10DC84008184000800000000000000007F96000866 :10DC9400A1900008217B00083B84000800000000DC :10DCA40000000000B37F0008798000083B7B000877 :10DCB400F18400080000000000000000998A0008B8 :10DCC400219E0008317B0008AB840008000000009E :10DCD40000000000977B0008E19000081F7B00080B :10DCE4002D8400080000000000000000437B0008B1 :10DCF40069890008337B0008B9840008000000002B :10DD0400000000006D7B0008FD890008257B0008E9 :10DD1400578400080000000000000000BDA40008B3 :10DD240073A50008277B0008658400080000000034 :10DD340000000000010203040607080900000000B7 :10DD4400010203041019C800F40150000A00740E03 :10DD5400C201B400600003020304030504070F00BA :10DD6400FD09FD0BFE016E02DE0428200500C2073A :10DD74002107C9C3C721092207A4DE47E414230DE0 :10DD840036CE4F940C4BD4322C510224136DBA5717 :10DD9400982D15254AB22D8912A5B2851100251397 :10DDA4004FC2CF30249912256D492D694AB4444C91 :10DDB4000026104EC2CF94255125AC6451A2454B88 :10DDC400002706A1DFC7102809ECBA5FD4D6C7061E :10DDD400290AECBA47D8D6A736002A0B35CE57A560 :10DDE400322D4D11002B0A2DC657180D5218012C37 :10DDF40008ABB68F2929012D068CCEC7102E06122A :10DE0400C3C7102F0E66BA6F310DD3300DD3304D0A :10DE14000130104EC2CF9084DA9428D1268AC9905A :10DE240000310A4FC25F38F76D1802320B4EC2CF71 :10DE3400908469B1E330330E4EC2CF908469694E49 :10DE4400C5644800340E4EC267A82551254B86315F :10DE54000D07350E4EC2C7214D07394DC564480024 :10DE6400360E4EC2CF90A4E9A0848EC99000370923 :10DE74004EC2C7B5D8DA06380F4EC2CF9084C664F6 :10DE8400484263322400390D4EC2CF90848EC9A01B :10DE94005686043A083AC3C7100F013B0AD3B68F1B :10DEA4001D53A4A4043C08CDC267D6B5033D08267F :10DEB400CEC71D1D063E09CDC247DAAD23003F0C77 :10DEC4004EC2CF908469B11DCC00400F4EC2CF909A :10DED40084D290444A6449E341410D4EC297A84517 :10DEE4002DE13088C600420D4EC2C7A084C6610928 :10DEF4008DC302430C4EC2CF90846A8FC9900044F4 :10DF04000B4EC2C7A0847E1C1600450C4EC2C7210E :10DF1400AD0E4A5A1D06460B4EC2C721AD0E4ADA53 :10DF24000A470D4EC2CF90846A6D34264302480BD3 :10DF34004EC247E8380CA26300490B4FC2C7218B7D :10DF4400FB360C014A0B4EC26F57D1980C09004B9B :10DF5400104EC247A825512513932CAA2561004CC5 :10DF6400094EC247DAAFC3004D0D4FC247BA2D1553 :10DF7400299222D5354E0D4EC247B829919468A3F3 :10DF840063004F0B4EC2CF90847E4C8604500C4EDF :10DF9400C2C7A084C661495B01510E56BECF9084AE :10DFA400BE4452920C7100520C4EC2C7A084C6618A :10DFB400091D03530F4EC2CF90846A3CC4A9980C28 :10DFC400090054094FC2C7218BFB0D550A4EC247A5 :10DFD400E88FC99000560F4FC2476A4DB228AB84F0 :10DFE400491A6700570D4FC247EA299222A5B2ADDC :10DFF40001580E4EC247684CA24CD4A224140359B3 :10E004000C4FC2476A4DB24A1AB7015A0A4EC2C7E8 :10E0140035EC351D065B0963BFC710F54F035C0E75 :10E02400E6BA471AA7711AA7711AA7015D09E3BED8 :10E03400C7D43F0D015E089DDA5796D4025F060FE0 :10E04400BAC72160069BE24756610B36C2CF30DA6D :10E05400A6249102620C4EC2475A1D94D0715800F6 :10E06400630A36C2CF90846A7910640B4EC26FCBB8 :10E07400303A268300650C36C2CF9084C3A0C68391 :10E0840000660ACCC297924553D609670D4EB6CFA7 :10E09400303A26835A191200680B4EC2475A1D940F :10E0A400D0630069094BC34F0E485D066A0AE3B6A4 :10E0B400570E487D5A006B0E4EC247DA9644954C73 :10E0C40089B2240C6C084BC387D42F036D0D37C25F :10E0D400C7258AA4488AA4482A6E0A36C247A4944B :10E0E40036D1186F0B36C2CF90848EC99000700C55 :10E0F4004EB6C7A0848EC3925601710B4EB6CF3074 :10E104003A2683DA00720A36C247A494C6B40A7364 :10E114000B36C2CF300F713A2C00740ACCC24F5662 :10E124009AB24601750A36C247E836258914760B39 :10E1340036C2472826519B2801770E37C247144917 :10E144009114499154B100780C36C247984499A867 :10E15400454918790C4EB647E83119D4CA90007A6B :10E164000836C2C7B1E3307B0BFCB69792F5146650 :10E174003D0A7C07E9BBC787007D0CFCB68798F590 :10E184001865BD48007E0716D28F64017F0500C262 :10E194000700000004FFFF0000000000C5C20008E3 :10E1A40093C20008EFC100081815A115C819FF187B :10E1B40015A015C019FF1815AE15D516A0154015D4 :10E1C40020160215A115C815DA16121581166F1539 :10E1D400D916D315DB1620152E15A415A619FF186C :10E1E40015AF19FF1815AE19FF0000000001140A3D :10E1F4006464323200093D000004289610080202CB :10E2040080004000232D302B2000686C4C00656694 :10E214006745464700303132333435363738394173 :10E224004243444546003031323334353637383989 :08E2340061626364656600008D :08E23C0035010008D14F000874 :04E2440011010008BC :10E248000100000010000000010000006C03002025 :10E25800430043004300484F47554E42000000002A :10E268004231000000423200000042330000004208 :10E278003400000042325A00004243310000424359 :10E28800312E3542433200004243330000424331CD :10E298005A004243325A004243345A0042434631FC :10E2A800004243463200424346330042434634006C :10E2B800424346315A424346325A424346335A420F :10E2C800434D320042434D3300424C000000425A55 :10E2D80000000043310000004332000000433300D7 :10E2E800000043340000004430380000443132005C :10E2F8000044313600004432340000443332000018 :10E3080044353200004434000000444C31320044AB :10E318004C333200444C3532004431325A004432D6 :10E32800345A0044345A00004900000000494C00A7 :10E338000000494C5300004A303200004A4C303249 :10E34800004A533032004B000000004B46000000EA :10E358004B4C0000004B520000004B465A00004B4B :10E36800525A00004B5500000057423200005744F3 :10E37800303800574431320057443136005744355D :10E38800320057490000004E312D30364E312D30C5 :10E39800384E312D31304E312D31334E312D31360D :10E3A8004E312D32304E312D32334E312D4C3131EC :10E3B80030303100313030320031303033003130DC :10E3C80030340031303035003130303600313030C3 :10E3D80037003130303800313030390031303130A9 :10E3E80000313230310031323032003132303300D6 :10E3F800313230340031323035003132303600318C :10E40800323037003132303800313230390031346F :10E41800303100313430320031343033003134306F :10E428003400313430350031343036000024F40003 :10E4380000000000C01300202814002090140020C1 :10E4480000000000000000000000000000000000C4 :10E4580000000000000000000000000000000000B4 :10E4680000000000000000000000000000000000A4 :10E47800000000000000000000000000F001002083 :040000050800B299A4 :00000001FF ================================================ FILE: BINARY/README ================================================ Choose the binary version depending on your OLED screen controller ================================================ FILE: Drivers/u8g2/Inc/U8g2lib.h ================================================ /* U8g2lib.h C++ Arduino wrapper for the u8g2 struct and c functions for the u8g2 library Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Note: U8x8lib.h is included for the declaration of the helper functions in U8x8lib.cpp. U8g2 class is based on the u8g2 struct from u8g2.h, the U8x8 class from U8x8lib.h is not used. */ #ifndef _U8G2LIB_HH #define _U8G2LIB_HH #include #include #include "U8x8lib.h" #include "u8g2.h" class U8G2 : public Print { protected: u8g2_t u8g2; u8x8_char_cb cpp_next_cb; /* the cpp interface has its own decoding function for the Arduino print command */ public: u8g2_uint_t tx, ty; U8G2(void) { cpp_next_cb = u8x8_ascii_next; home(); } u8x8_t *getU8x8(void) { return u8g2_GetU8x8(&u8g2); } u8g2_t *getU8g2(void) { return &u8g2; } void sendF(const char *fmt, ...) { va_list va; va_start(va, fmt); u8x8_cad_vsendf(u8g2_GetU8x8(&u8g2), fmt, va); va_end(va); } uint32_t getBusClock(void) { return u8g2_GetU8x8(&u8g2)->bus_clock; } void setBusClock(uint32_t clock_speed) { u8g2_GetU8x8(&u8g2)->bus_clock = clock_speed; } void setI2CAddress(uint8_t adr) { u8g2_SetI2CAddress(&u8g2, adr); } void enableUTF8Print(void) { cpp_next_cb = u8x8_utf8_next; } void disableUTF8Print(void) { cpp_next_cb = u8x8_ascii_next; } /* u8x8 interface */ uint8_t getCols(void) { return u8x8_GetCols(u8g2_GetU8x8(&u8g2)); } uint8_t getRows(void) { return u8x8_GetRows(u8g2_GetU8x8(&u8g2)); } void drawTile(uint8_t x, uint8_t y, uint8_t cnt, uint8_t *tile_ptr) { u8x8_DrawTile(u8g2_GetU8x8(&u8g2), x, y, cnt, tile_ptr); } #ifdef U8X8_WITH_USER_PTR void *getUserPtr() { return u8g2_GetUserPtr(&u8g2); } void setUserPtr(void *p) { u8g2_SetUserPtr(&u8g2, p); } #endif #ifdef U8X8_USE_PINS /* set the menu pins before calling begin() or initDisplay() */ void setMenuSelectPin(uint8_t val) { u8g2_SetMenuSelectPin(&u8g2, val); } void setMenuPrevPin(uint8_t val) { u8g2_SetMenuPrevPin(&u8g2, val); } void setMenuNextPin(uint8_t val) { u8g2_SetMenuNextPin(&u8g2, val); } void setMenuUpPin(uint8_t val) { u8g2_SetMenuUpPin(&u8g2, val); } void setMenuDownPin(uint8_t val) { u8g2_SetMenuDownPin(&u8g2, val); } void setMenuHomePin(uint8_t val) { u8g2_SetMenuHomePin(&u8g2, val); } #endif /* return 0 for no event or U8X8_MSG_GPIO_MENU_SELECT, */ /* U8X8_MSG_GPIO_MENU_NEXT, U8X8_MSG_GPIO_MENU_PREV, */ /* U8X8_MSG_GPIO_MENU_HOME */ uint8_t getMenuEvent(void) { return u8x8_GetMenuEvent(u8g2_GetU8x8(&u8g2)); } void initDisplay(void) { u8g2_InitDisplay(&u8g2); } void clearDisplay(void) { u8g2_ClearDisplay(&u8g2); } void setPowerSave(uint8_t is_enable) { u8g2_SetPowerSave(&u8g2, is_enable); } void setFlipMode(uint8_t mode) { u8g2_SetFlipMode(&u8g2, mode); } void setContrast(uint8_t value) { u8g2_SetContrast(&u8g2, value); } void setDisplayRotation(const u8g2_cb_t *u8g2_cb) { u8g2_SetDisplayRotation(&u8g2, u8g2_cb); } bool begin(void) { /* note: call to u8x8_utf8_init is not required here, this is done in the setup procedures before */ #ifndef U8G2_USE_DYNAMIC_ALLOC initDisplay(); clearDisplay(); setPowerSave(0); return 1; #else return 0; #endif } void beginSimple(void) { /* does not clear the display and does not wake up the display */ /* user is responsible for calling clearDisplay() and setPowerSave(0) */ initDisplay(); } #ifdef U8X8_USE_PINS /* use U8X8_PIN_NONE if a pin is not required */ bool begin(uint8_t menu_select_pin, uint8_t menu_next_pin, uint8_t menu_prev_pin, uint8_t menu_up_pin = U8X8_PIN_NONE, uint8_t menu_down_pin = U8X8_PIN_NONE, uint8_t menu_home_pin = U8X8_PIN_NONE) { setMenuSelectPin(menu_select_pin); setMenuNextPin(menu_next_pin); setMenuPrevPin(menu_prev_pin); setMenuUpPin(menu_up_pin); setMenuDownPin(menu_down_pin); setMenuHomePin(menu_home_pin); return begin(); } #endif /* u8g2 */ #ifdef U8G2_WITH_CLIP_WINDOW_SUPPORT void setMaxClipWindow(void) { u8g2_SetMaxClipWindow(&u8g2); } void setClipWindow(u8g2_uint_t clip_x0, u8g2_uint_t clip_y0, u8g2_uint_t clip_x1, u8g2_uint_t clip_y1) { u8g2_SetClipWindow(&u8g2, clip_x0, clip_y0, clip_x1, clip_y1 ); } #endif /* U8G2_WITH_CLIP_WINDOW_SUPPORT */ u8g2_uint_t getDisplayHeight(void) { return u8g2_GetDisplayHeight(&u8g2); } u8g2_uint_t getDisplayWidth(void) { return u8g2_GetDisplayWidth(&u8g2); } /* u8g2_buffer.c */ void sendBuffer(void) { u8g2_SendBuffer(&u8g2); } void clearBuffer(void) { u8g2_ClearBuffer(&u8g2); } void firstPage(void) { u8g2_FirstPage(&u8g2); } uint8_t nextPage(void) { return u8g2_NextPage(&u8g2); } #ifdef U8G2_USE_DYNAMIC_ALLOC void setBufferPtr(uint8_t *buf) { u8g2_SetBufferPtr(&u8g2, buf); } uint16_t getBufferSize() { u8g2_GetBufferSize(&u8g2); } #endif uint8_t *getBufferPtr(void) { return u8g2_GetBufferPtr(&u8g2); } uint8_t getBufferTileHeight(void) { return u8g2_GetBufferTileHeight(&u8g2); } uint8_t getBufferTileWidth(void) { return u8g2_GetBufferTileWidth(&u8g2); } uint8_t getPageCurrTileRow(void) { return u8g2_GetBufferCurrTileRow(&u8g2); } // obsolete void setPageCurrTileRow(uint8_t row) { u8g2_SetBufferCurrTileRow(&u8g2, row); } // obsolete uint8_t getBufferCurrTileRow(void) { return u8g2_GetBufferCurrTileRow(&u8g2); } void setBufferCurrTileRow(uint8_t row) { u8g2_SetBufferCurrTileRow(&u8g2, row); } // this should be renamed to setBufferAutoClear void setAutoPageClear(uint8_t mode) { u8g2_SetAutoPageClear(&u8g2, mode); } void updateDisplayArea(uint8_t tx, uint8_t ty, uint8_t tw, uint8_t th) { u8g2_UpdateDisplayArea(&u8g2, tx, ty, tw, th); } void updateDisplay(void) { u8g2_UpdateDisplay(&u8g2); } void refreshDisplay(void) { u8x8_RefreshDisplay(u8g2_GetU8x8(&u8g2)); } /* u8g2_hvline.c */ void setDrawColor(uint8_t color_index) { u8g2_SetDrawColor(&u8g2, color_index); } uint8_t getDrawColor(void) { return u8g2_GetDrawColor(&u8g2); } void drawPixel(u8g2_uint_t x, u8g2_uint_t y) { u8g2_DrawPixel(&u8g2, x, y); } void drawHLine(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w) { u8g2_DrawHLine(&u8g2, x, y, w); } void drawVLine(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t h) { u8g2_DrawVLine(&u8g2, x, y, h); } void drawHVLine(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir) { u8g2_DrawHVLine(&u8g2, x, y, len, dir); } /* u8g2_box.c */ void drawFrame(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h) { u8g2_DrawFrame(&u8g2, x, y, w, h); } void drawRFrame(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, u8g2_uint_t r) { u8g2_DrawRFrame(&u8g2, x, y, w, h,r); } void drawBox(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h) { u8g2_DrawBox(&u8g2, x, y, w, h); } void drawRBox(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, u8g2_uint_t r) { u8g2_DrawRBox(&u8g2, x, y, w, h,r); } /* u8g2_circle.c */ void drawCircle(u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rad, uint8_t opt = U8G2_DRAW_ALL) { u8g2_DrawCircle(&u8g2, x0, y0, rad, opt); } void drawDisc(u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rad, uint8_t opt = U8G2_DRAW_ALL) { u8g2_DrawDisc(&u8g2, x0, y0, rad, opt); } void drawEllipse(u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rx, u8g2_uint_t ry, uint8_t opt = U8G2_DRAW_ALL) { u8g2_DrawEllipse(&u8g2, x0, y0, rx, ry, opt); } void drawFilledEllipse(u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rx, u8g2_uint_t ry, uint8_t opt = U8G2_DRAW_ALL) { u8g2_DrawFilledEllipse(&u8g2, x0, y0, rx, ry, opt); } /* u8g2_line.c */ void drawLine(u8g2_uint_t x1, u8g2_uint_t y1, u8g2_uint_t x2, u8g2_uint_t y2) { u8g2_DrawLine(&u8g2, x1, y1, x2, y2); } /* u8g2_bitmap.c */ void setBitmapMode(uint8_t is_transparent) { u8g2_SetBitmapMode(&u8g2, is_transparent); } void drawBitmap(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t cnt, u8g2_uint_t h, const uint8_t *bitmap) { u8g2_DrawBitmap(&u8g2, x, y, cnt, h, bitmap); } void drawXBM(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, const uint8_t *bitmap) { u8g2_DrawXBM(&u8g2, x, y, w, h, bitmap); } void drawXBMP(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, const uint8_t *bitmap) { u8g2_DrawXBMP(&u8g2, x, y, w, h, bitmap); } /* u8g2_polygon.c */ void drawTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2) { u8g2_DrawTriangle(&u8g2, x0, y0, x1, y1, x2, y2); } /* u8log_u8g2.c */ void drawLog(u8g2_uint_t x, u8g2_uint_t y, class U8G2LOG &u8g2log); /* u8g2_font.c */ void setFont(const uint8_t *font) {u8g2_SetFont(&u8g2, font); } void setFontMode(uint8_t is_transparent) {u8g2_SetFontMode(&u8g2, is_transparent); } void setFontDirection(uint8_t dir) {u8g2_SetFontDirection(&u8g2, dir); } int8_t getAscent(void) { return u8g2_GetAscent(&u8g2); } int8_t getDescent(void) { return u8g2_GetDescent(&u8g2); } void setFontPosBaseline(void) { u8g2_SetFontPosBaseline(&u8g2); } void setFontPosBottom(void) { u8g2_SetFontPosBottom(&u8g2); } void setFontPosTop(void) { u8g2_SetFontPosTop(&u8g2); } void setFontPosCenter(void) { u8g2_SetFontPosCenter(&u8g2); } void setFontRefHeightText(void) { u8g2_SetFontRefHeightText(&u8g2); } void setFontRefHeightExtendedText(void) { u8g2_SetFontRefHeightExtendedText(&u8g2); } void setFontRefHeightAll(void) { u8g2_SetFontRefHeightAll(&u8g2); } /* uint8_t u8g2_IsGlyph(u8g2_t *u8g2, uint16_t requested_encoding); int8_t u8g2_GetGlyphWidth(u8g2_t *u8g2, uint16_t requested_encoding); u8g2_uint_t u8g2_GetStrWidth(u8g2_t *u8g2, const char *s); u8g2_uint_t u8g2_GetUTF8Width(u8g2_t *u8g2, const char *str); */ u8g2_uint_t drawGlyph(u8g2_uint_t x, u8g2_uint_t y, uint16_t encoding) { return u8g2_DrawGlyph(&u8g2, x, y, encoding); } u8g2_uint_t drawStr(u8g2_uint_t x, u8g2_uint_t y, const char *s) { return u8g2_DrawStr(&u8g2, x, y, s); } u8g2_uint_t drawUTF8(u8g2_uint_t x, u8g2_uint_t y, const char *s) { return u8g2_DrawUTF8(&u8g2, x, y, s); } u8g2_uint_t drawExtUTF8(u8g2_uint_t x, u8g2_uint_t y, uint8_t to_left, const uint16_t *kerning_table, const char *s) { return u8g2_DrawExtUTF8(&u8g2, x, y, to_left, kerning_table, s); } u8g2_uint_t getStrWidth(const char *s) { return u8g2_GetStrWidth(&u8g2, s); } u8g2_uint_t getUTF8Width(const char *s) { return u8g2_GetUTF8Width(&u8g2, s); } // not required any more, enable UTF8 for print //void printUTF8(const char *s) { tx += u8g2_DrawUTF8(&u8g2, tx, ty, s); } /* virtual function for print base class */ size_t write(uint8_t v) { uint16_t e = cpp_next_cb(&(u8g2.u8x8), v); if ( e < 0x0fffe ) tx += u8g2_DrawGlyph(&u8g2, tx, ty, e); return 1; } size_t write(const uint8_t *buffer, size_t size) { size_t cnt = 0; while( size > 0 ) { cnt += write(*buffer++); size--; } return cnt; } /* user interface */ /* uint8_t u8g2_UserInterfaceSelectionList(u8g2_t *u8g2, const char *title, uint8_t start_pos, const char *sl); uint8_t u8g2_UserInterfaceMessage(u8g2_t *u8g2, const char *title1, const char *title2, const char *title3, const char *buttons); uint8_t u8g2_UserInterfaceInputValue(u8g2_t *u8g2, const char *title, const char *pre, uint8_t *value, uint8_t lo, uint8_t hi, uint8_t digits, const char *post); */ uint8_t userInterfaceSelectionList(const char *title, uint8_t start_pos, const char *sl) { return u8g2_UserInterfaceSelectionList(&u8g2, title, start_pos, sl); } uint8_t userInterfaceMessage(const char *title1, const char *title2, const char *title3, const char *buttons) { return u8g2_UserInterfaceMessage(&u8g2, title1, title2, title3, buttons); } uint8_t userInterfaceInputValue(const char *title, const char *pre, uint8_t *value, uint8_t lo, uint8_t hi, uint8_t digits, const char *post) { return u8g2_UserInterfaceInputValue(&u8g2, title, pre, value, lo, hi, digits, post); } /* LiquidCrystal compatible functions */ void home(void) { tx = 0; ty = 0; u8x8_utf8_init(u8g2_GetU8x8(&u8g2)); } void clear(void) { home(); clearDisplay(); clearBuffer(); } void noDisplay(void) { u8g2_SetPowerSave(&u8g2, 1); } void display(void) { u8g2_SetPowerSave(&u8g2, 0); } void setCursor(u8g2_uint_t x, u8g2_uint_t y) { tx = x; ty = y; } /* u8glib compatible functions */ void sleepOn(void) { u8g2_SetPowerSave(&u8g2, 1); } void sleepOff(void) { u8g2_SetPowerSave(&u8g2, 0); } void setColorIndex(uint8_t color_index) { u8g2_SetDrawColor(&u8g2, color_index); } uint8_t getColorIndex(void) { return u8g2_GetDrawColor(&u8g2); } int8_t getFontAscent(void) { return u8g2_GetAscent(&u8g2); } int8_t getFontDescent(void) { return u8g2_GetDescent(&u8g2); } int8_t getMaxCharHeight(void) { return u8g2_GetMaxCharHeight(&u8g2); } int8_t getMaxCharWidth(void) { return u8g2_GetMaxCharWidth(&u8g2); } u8g2_uint_t getHeight() { return u8g2_GetDisplayHeight(&u8g2); } u8g2_uint_t getWidth() { return u8g2_GetDisplayWidth(&u8g2); } }; class U8G2LOG : public Print { public: u8log_t u8log; /* the constructor does nothing, use begin() instead */ U8G2LOG(void) { } /* connect to u8g2, draw to u8g2 whenever required */ bool begin(class U8G2 &u8g2, uint8_t width, uint8_t height, uint8_t *buf) { u8log_Init(&u8log, width, height, buf); u8log_SetCallback(&u8log, u8log_u8g2_cb, u8g2.getU8g2()); return true; } /* disconnected version, manual redraw required */ bool begin(uint8_t width, uint8_t height, uint8_t *buf) { u8log_Init(&u8log, width, height, buf); return true; } void setLineHeightOffset(int8_t line_height_offset) { u8log_SetLineHeightOffset(&u8log, line_height_offset); } void setRedrawMode(uint8_t is_redraw_line_for_each_char) { u8log_SetRedrawMode(&u8log, is_redraw_line_for_each_char); } /* virtual function for print base class */ size_t write(uint8_t v) { u8log_WriteChar(&u8log, v); return 1; } size_t write(const uint8_t *buffer, size_t size) { size_t cnt = 0; while( size > 0 ) { cnt += write(*buffer++); size--; } return cnt; } void writeString(const char *s) { u8log_WriteString(&u8log, s); } void writeChar(uint8_t c) { u8log_WriteChar(&u8log, c); } void writeHex8(uint8_t b) { u8log_WriteHex8(&u8log, b); } void writeHex16(uint16_t v) { u8log_WriteHex16(&u8log, v); } void writeHex32(uint32_t v) { u8log_WriteHex32(&u8log, v); } void writeDec8(uint8_t v, uint8_t d) { u8log_WriteDec8(&u8log, v, d); } void writeDec16(uint8_t v, uint8_t d) { u8log_WriteDec16(&u8log, v, d); } }; /* u8log_u8g2.c */ inline void U8G2::drawLog(u8g2_uint_t x, u8g2_uint_t y, class U8G2LOG &u8g2log) { u8g2_DrawLog(&u8g2, x, y, &(u8g2log.u8log)); } /* U8G2____ memory "1" one page "2" two pages "f" full frame buffer communication "SW SPI" */ #ifdef U8X8_USE_PINS /* null device */ class U8G2_NULL : public U8G2 { public: U8G2_NULL(const u8g2_cb_t *rotation) : U8G2() { u8g2_Setup_null(&u8g2, rotation, u8x8_byte_empty, u8x8_dummy_cb); } }; /* Arduino constructor list start */ /* generated code (codebuild), u8g2 project */ class U8G2_SSD1305_128X32_NONAME_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_noname_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1305_128X32_NONAME_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_noname_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X32_NONAME_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_noname_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X32_NONAME_1_6800 : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_noname_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X32_NONAME_1_8080 : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_noname_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_adafruit_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_adafruit_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_adafruit_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_1_6800 : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_adafruit_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_1_8080 : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_adafruit_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X32_NONAME_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_noname_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1305_128X32_NONAME_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_noname_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X32_NONAME_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_noname_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X32_NONAME_2_6800 : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_noname_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X32_NONAME_2_8080 : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_noname_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_adafruit_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_adafruit_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_adafruit_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_2_6800 : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_adafruit_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_2_8080 : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_adafruit_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X32_NONAME_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_noname_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1305_128X32_NONAME_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_noname_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X32_NONAME_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_noname_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X32_NONAME_F_6800 : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_noname_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X32_NONAME_F_8080 : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_noname_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_adafruit_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_adafruit_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_adafruit_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_F_6800 : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_adafruit_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_F_8080 : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x32_adafruit_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X32_NONAME_1_SW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_noname_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1305_128X32_NONAME_1_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_noname_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1305_128X32_NONAME_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_noname_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_1_SW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_adafruit_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_1_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_adafruit_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1305_128X32_ADAFRUIT_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_adafruit_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1305_128X32_NONAME_2_SW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_noname_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1305_128X32_NONAME_2_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_noname_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1305_128X32_NONAME_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_noname_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_2_SW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_adafruit_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_2_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_adafruit_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1305_128X32_ADAFRUIT_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_adafruit_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1305_128X32_NONAME_F_SW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_noname_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1305_128X32_NONAME_F_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_noname_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1305_128X32_NONAME_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_NONAME_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_noname_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_F_SW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_adafruit_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1305_128X32_ADAFRUIT_F_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_adafruit_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1305_128X32_ADAFRUIT_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X32_ADAFRUIT_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x32_adafruit_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_adafruit_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_adafruit_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_adafruit_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_1_6800 : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_adafruit_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_1_8080 : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_adafruit_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_adafruit_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_adafruit_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_adafruit_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_2_6800 : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_adafruit_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_2_8080 : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_adafruit_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_adafruit_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_adafruit_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_adafruit_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_F_6800 : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_adafruit_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_F_8080 : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_128x64_adafruit_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_1_SW_I2C : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x64_adafruit_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_1_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x64_adafruit_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1305_128X64_ADAFRUIT_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x64_adafruit_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_2_SW_I2C : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x64_adafruit_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_2_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x64_adafruit_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1305_128X64_ADAFRUIT_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x64_adafruit_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_F_SW_I2C : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x64_adafruit_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1305_128X64_ADAFRUIT_F_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x64_adafruit_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1305_128X64_ADAFRUIT_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1305_128X64_ADAFRUIT_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1305_i2c_128x64_adafruit_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_128X64_NONAME_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_NONAME_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_NONAME_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_128X64_NONAME_1_6800 : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_NONAME_1_8080 : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_1_6800 : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_1_8080 : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_ALT0_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_128X64_ALT0_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_ALT0_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_ALT0_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_128X64_ALT0_1_6800 : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_ALT0_1_8080 : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_NONAME_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_128X64_NONAME_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_NONAME_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_NONAME_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_128X64_NONAME_2_6800 : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_NONAME_2_8080 : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_2_6800 : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_2_8080 : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_ALT0_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_128X64_ALT0_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_ALT0_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_ALT0_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_128X64_ALT0_2_6800 : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_ALT0_2_8080 : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_128X64_NONAME_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_NONAME_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_NONAME_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_128X64_NONAME_F_6800 : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_NONAME_F_8080 : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_F_6800 : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_F_8080 : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_ALT0_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_128X64_ALT0_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_ALT0_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X64_ALT0_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_128X64_ALT0_F_6800 : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_ALT0_F_8080 : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x64_alt0_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X64_NONAME_1_SW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_128X64_NONAME_1_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_128X64_NONAME_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_128X64_VCOMH0_1_SW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_1_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_128X64_VCOMH0_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_128X64_ALT0_1_SW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_alt0_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_128X64_ALT0_1_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_alt0_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_128X64_ALT0_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_alt0_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_128X64_NONAME_2_SW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_128X64_NONAME_2_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_128X64_NONAME_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_128X64_VCOMH0_2_SW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_2_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_128X64_VCOMH0_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_128X64_ALT0_2_SW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_alt0_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_128X64_ALT0_2_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_alt0_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_128X64_ALT0_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_alt0_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_128X64_NONAME_F_SW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_128X64_NONAME_F_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_128X64_NONAME_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_NONAME_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_128X64_VCOMH0_F_SW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_128X64_VCOMH0_F_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_128X64_VCOMH0_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_VCOMH0_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_128X64_ALT0_F_SW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_alt0_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_128X64_ALT0_F_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_alt0_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_128X64_ALT0_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X64_ALT0_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x64_alt0_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1106_128X64_NONAME_1_4W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_NONAME_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1106_128X64_NONAME_1_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_NONAME_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_NONAME_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_NONAME_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_NONAME_1_3W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_NONAME_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1106_128X64_NONAME_1_6800 : public U8G2 { public: U8G2_SH1106_128X64_NONAME_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_NONAME_1_8080 : public U8G2 { public: U8G2_SH1106_128X64_NONAME_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_VCOMH0_1_4W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1106_128X64_VCOMH0_1_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_VCOMH0_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_VCOMH0_1_3W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1106_128X64_VCOMH0_1_6800 : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_VCOMH0_1_8080 : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_WINSTAR_1_4W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1106_128X64_WINSTAR_1_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_WINSTAR_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_WINSTAR_1_3W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1106_128X64_WINSTAR_1_6800 : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_WINSTAR_1_8080 : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_NONAME_2_4W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_NONAME_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1106_128X64_NONAME_2_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_NONAME_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_NONAME_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_NONAME_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_NONAME_2_3W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_NONAME_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1106_128X64_NONAME_2_6800 : public U8G2 { public: U8G2_SH1106_128X64_NONAME_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_NONAME_2_8080 : public U8G2 { public: U8G2_SH1106_128X64_NONAME_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_VCOMH0_2_4W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1106_128X64_VCOMH0_2_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_VCOMH0_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_VCOMH0_2_3W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1106_128X64_VCOMH0_2_6800 : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_VCOMH0_2_8080 : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_WINSTAR_2_4W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1106_128X64_WINSTAR_2_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_WINSTAR_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_WINSTAR_2_3W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1106_128X64_WINSTAR_2_6800 : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_WINSTAR_2_8080 : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_NONAME_F_4W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_NONAME_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1106_128X64_NONAME_F_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_NONAME_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_NONAME_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_NONAME_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_NONAME_F_3W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_NONAME_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1106_128X64_NONAME_F_6800 : public U8G2 { public: U8G2_SH1106_128X64_NONAME_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_NONAME_F_8080 : public U8G2 { public: U8G2_SH1106_128X64_NONAME_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_VCOMH0_F_4W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1106_128X64_VCOMH0_F_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_VCOMH0_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_VCOMH0_F_3W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1106_128X64_VCOMH0_F_6800 : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_VCOMH0_F_8080 : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_WINSTAR_F_4W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1106_128X64_WINSTAR_F_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_WINSTAR_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_128X64_WINSTAR_F_3W_SW_SPI : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1106_128X64_WINSTAR_F_6800 : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_WINSTAR_F_8080 : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_128x64_winstar_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_128X64_NONAME_1_SW_I2C : public U8G2 { public: U8G2_SH1106_128X64_NONAME_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1106_128X64_NONAME_1_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_NONAME_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1106_128X64_NONAME_1_2ND_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_NONAME_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_noname_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1106_128X64_VCOMH0_1_SW_I2C : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1106_128X64_VCOMH0_1_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1106_128X64_VCOMH0_1_2ND_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_vcomh0_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1106_128X64_WINSTAR_1_SW_I2C : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_winstar_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1106_128X64_WINSTAR_1_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_winstar_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1106_128X64_WINSTAR_1_2ND_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_winstar_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1106_128X64_NONAME_2_SW_I2C : public U8G2 { public: U8G2_SH1106_128X64_NONAME_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1106_128X64_NONAME_2_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_NONAME_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1106_128X64_NONAME_2_2ND_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_NONAME_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_noname_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1106_128X64_VCOMH0_2_SW_I2C : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1106_128X64_VCOMH0_2_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1106_128X64_VCOMH0_2_2ND_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_vcomh0_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1106_128X64_WINSTAR_2_SW_I2C : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_winstar_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1106_128X64_WINSTAR_2_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_winstar_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1106_128X64_WINSTAR_2_2ND_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_winstar_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1106_128X64_NONAME_F_SW_I2C : public U8G2 { public: U8G2_SH1106_128X64_NONAME_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1106_128X64_NONAME_F_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_NONAME_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1106_128X64_NONAME_F_2ND_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_NONAME_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_noname_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1106_128X64_VCOMH0_F_SW_I2C : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1106_128X64_VCOMH0_F_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1106_128X64_VCOMH0_F_2ND_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_VCOMH0_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_vcomh0_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1106_128X64_WINSTAR_F_SW_I2C : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_winstar_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1106_128X64_WINSTAR_F_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_winstar_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1106_128X64_WINSTAR_F_2ND_HW_I2C : public U8G2 { public: U8G2_SH1106_128X64_WINSTAR_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_128x64_winstar_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1106_72X40_WISE_1_4W_SW_SPI : public U8G2 { public: U8G2_SH1106_72X40_WISE_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1106_72X40_WISE_1_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_72X40_WISE_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_72X40_WISE_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_72X40_WISE_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_72X40_WISE_1_3W_SW_SPI : public U8G2 { public: U8G2_SH1106_72X40_WISE_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1106_72X40_WISE_1_6800 : public U8G2 { public: U8G2_SH1106_72X40_WISE_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_72X40_WISE_1_8080 : public U8G2 { public: U8G2_SH1106_72X40_WISE_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_72X40_WISE_2_4W_SW_SPI : public U8G2 { public: U8G2_SH1106_72X40_WISE_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1106_72X40_WISE_2_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_72X40_WISE_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_72X40_WISE_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_72X40_WISE_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_72X40_WISE_2_3W_SW_SPI : public U8G2 { public: U8G2_SH1106_72X40_WISE_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1106_72X40_WISE_2_6800 : public U8G2 { public: U8G2_SH1106_72X40_WISE_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_72X40_WISE_2_8080 : public U8G2 { public: U8G2_SH1106_72X40_WISE_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_72X40_WISE_F_4W_SW_SPI : public U8G2 { public: U8G2_SH1106_72X40_WISE_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1106_72X40_WISE_F_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_72X40_WISE_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_72X40_WISE_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_72X40_WISE_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_72X40_WISE_F_3W_SW_SPI : public U8G2 { public: U8G2_SH1106_72X40_WISE_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1106_72X40_WISE_F_6800 : public U8G2 { public: U8G2_SH1106_72X40_WISE_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_72X40_WISE_F_8080 : public U8G2 { public: U8G2_SH1106_72X40_WISE_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_72x40_wise_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_72X40_WISE_1_SW_I2C : public U8G2 { public: U8G2_SH1106_72X40_WISE_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_72x40_wise_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1106_72X40_WISE_1_HW_I2C : public U8G2 { public: U8G2_SH1106_72X40_WISE_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_72x40_wise_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1106_72X40_WISE_1_2ND_HW_I2C : public U8G2 { public: U8G2_SH1106_72X40_WISE_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_72x40_wise_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1106_72X40_WISE_2_SW_I2C : public U8G2 { public: U8G2_SH1106_72X40_WISE_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_72x40_wise_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1106_72X40_WISE_2_HW_I2C : public U8G2 { public: U8G2_SH1106_72X40_WISE_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_72x40_wise_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1106_72X40_WISE_2_2ND_HW_I2C : public U8G2 { public: U8G2_SH1106_72X40_WISE_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_72x40_wise_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1106_72X40_WISE_F_SW_I2C : public U8G2 { public: U8G2_SH1106_72X40_WISE_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_72x40_wise_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1106_72X40_WISE_F_HW_I2C : public U8G2 { public: U8G2_SH1106_72X40_WISE_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_72x40_wise_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1106_72X40_WISE_F_2ND_HW_I2C : public U8G2 { public: U8G2_SH1106_72X40_WISE_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_72x40_wise_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1106_64X32_1_4W_SW_SPI : public U8G2 { public: U8G2_SH1106_64X32_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1106_64X32_1_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_64X32_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_64X32_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_64X32_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_64X32_1_3W_SW_SPI : public U8G2 { public: U8G2_SH1106_64X32_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1106_64X32_1_6800 : public U8G2 { public: U8G2_SH1106_64X32_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_64X32_1_8080 : public U8G2 { public: U8G2_SH1106_64X32_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_64X32_2_4W_SW_SPI : public U8G2 { public: U8G2_SH1106_64X32_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1106_64X32_2_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_64X32_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_64X32_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_64X32_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_64X32_2_3W_SW_SPI : public U8G2 { public: U8G2_SH1106_64X32_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1106_64X32_2_6800 : public U8G2 { public: U8G2_SH1106_64X32_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_64X32_2_8080 : public U8G2 { public: U8G2_SH1106_64X32_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_64X32_F_4W_SW_SPI : public U8G2 { public: U8G2_SH1106_64X32_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1106_64X32_F_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_64X32_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_64X32_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1106_64X32_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1106_64X32_F_3W_SW_SPI : public U8G2 { public: U8G2_SH1106_64X32_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1106_64X32_F_6800 : public U8G2 { public: U8G2_SH1106_64X32_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_64X32_F_8080 : public U8G2 { public: U8G2_SH1106_64X32_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_64x32_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1106_64X32_1_SW_I2C : public U8G2 { public: U8G2_SH1106_64X32_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_64x32_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1106_64X32_1_HW_I2C : public U8G2 { public: U8G2_SH1106_64X32_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_64x32_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1106_64X32_1_2ND_HW_I2C : public U8G2 { public: U8G2_SH1106_64X32_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_64x32_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1106_64X32_2_SW_I2C : public U8G2 { public: U8G2_SH1106_64X32_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_64x32_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1106_64X32_2_HW_I2C : public U8G2 { public: U8G2_SH1106_64X32_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_64x32_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1106_64X32_2_2ND_HW_I2C : public U8G2 { public: U8G2_SH1106_64X32_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_64x32_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1106_64X32_F_SW_I2C : public U8G2 { public: U8G2_SH1106_64X32_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_64x32_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1106_64X32_F_HW_I2C : public U8G2 { public: U8G2_SH1106_64X32_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_64x32_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1106_64X32_F_2ND_HW_I2C : public U8G2 { public: U8G2_SH1106_64X32_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1106_i2c_64x32_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_64X128_1_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_64X128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_64X128_1_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_64X128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_64X128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_64X128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_64X128_1_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_64X128_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_64X128_1_6800 : public U8G2 { public: U8G2_SH1107_64X128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_64X128_1_8080 : public U8G2 { public: U8G2_SH1107_64X128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_64X128_2_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_64X128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_64X128_2_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_64X128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_64X128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_64X128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_64X128_2_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_64X128_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_64X128_2_6800 : public U8G2 { public: U8G2_SH1107_64X128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_64X128_2_8080 : public U8G2 { public: U8G2_SH1107_64X128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_64X128_F_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_64X128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_64X128_F_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_64X128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_64X128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_64X128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_64X128_F_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_64X128_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_64X128_F_6800 : public U8G2 { public: U8G2_SH1107_64X128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_64X128_F_8080 : public U8G2 { public: U8G2_SH1107_64X128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_64x128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_64X128_1_SW_I2C : public U8G2 { public: U8G2_SH1107_64X128_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_64x128_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_64X128_1_HW_I2C : public U8G2 { public: U8G2_SH1107_64X128_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_64x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_64X128_1_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_64X128_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_64x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_64X128_2_SW_I2C : public U8G2 { public: U8G2_SH1107_64X128_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_64x128_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_64X128_2_HW_I2C : public U8G2 { public: U8G2_SH1107_64X128_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_64x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_64X128_2_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_64X128_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_64x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_64X128_F_SW_I2C : public U8G2 { public: U8G2_SH1107_64X128_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_64x128_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_64X128_F_HW_I2C : public U8G2 { public: U8G2_SH1107_64X128_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_64x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_64X128_F_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_64X128_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_64x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_SEEED_96X96_1_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_96X96_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_SEEED_96X96_1_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_96X96_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_SEEED_96X96_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_96X96_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_SEEED_96X96_1_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_96X96_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_SEEED_96X96_1_6800 : public U8G2 { public: U8G2_SH1107_SEEED_96X96_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_SEEED_96X96_1_8080 : public U8G2 { public: U8G2_SH1107_SEEED_96X96_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_SEEED_96X96_2_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_96X96_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_SEEED_96X96_2_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_96X96_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_SEEED_96X96_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_96X96_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_SEEED_96X96_2_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_96X96_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_SEEED_96X96_2_6800 : public U8G2 { public: U8G2_SH1107_SEEED_96X96_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_SEEED_96X96_2_8080 : public U8G2 { public: U8G2_SH1107_SEEED_96X96_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_SEEED_96X96_F_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_96X96_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_SEEED_96X96_F_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_96X96_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_SEEED_96X96_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_96X96_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_SEEED_96X96_F_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_96X96_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_SEEED_96X96_F_6800 : public U8G2 { public: U8G2_SH1107_SEEED_96X96_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_SEEED_96X96_F_8080 : public U8G2 { public: U8G2_SH1107_SEEED_96X96_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_96x96_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_SEEED_96X96_1_SW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_96X96_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_96x96_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_SEEED_96X96_1_HW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_96X96_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_96x96_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_SEEED_96X96_1_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_96X96_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_96x96_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_SEEED_96X96_2_SW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_96X96_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_96x96_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_SEEED_96X96_2_HW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_96X96_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_96x96_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_SEEED_96X96_2_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_96X96_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_96x96_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_SEEED_96X96_F_SW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_96X96_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_96x96_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_SEEED_96X96_F_HW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_96X96_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_96x96_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_SEEED_96X96_F_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_96X96_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_96x96_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_128X128_1_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_128X128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_128X128_1_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_128X128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_128X128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_128X128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_128X128_1_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_128X128_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_128X128_1_6800 : public U8G2 { public: U8G2_SH1107_128X128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_128X128_1_8080 : public U8G2 { public: U8G2_SH1107_128X128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_PIMORONI_128X128_1_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_PIMORONI_128X128_1_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_PIMORONI_128X128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_PIMORONI_128X128_1_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_PIMORONI_128X128_1_6800 : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_PIMORONI_128X128_1_8080 : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_SEEED_128X128_1_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_128X128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_SEEED_128X128_1_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_128X128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_SEEED_128X128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_128X128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_SEEED_128X128_1_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_128X128_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_SEEED_128X128_1_6800 : public U8G2 { public: U8G2_SH1107_SEEED_128X128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_SEEED_128X128_1_8080 : public U8G2 { public: U8G2_SH1107_SEEED_128X128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_128X128_2_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_128X128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_128X128_2_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_128X128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_128X128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_128X128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_128X128_2_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_128X128_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_128X128_2_6800 : public U8G2 { public: U8G2_SH1107_128X128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_128X128_2_8080 : public U8G2 { public: U8G2_SH1107_128X128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_PIMORONI_128X128_2_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_PIMORONI_128X128_2_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_PIMORONI_128X128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_PIMORONI_128X128_2_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_PIMORONI_128X128_2_6800 : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_PIMORONI_128X128_2_8080 : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_SEEED_128X128_2_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_128X128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_SEEED_128X128_2_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_128X128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_SEEED_128X128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_128X128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_SEEED_128X128_2_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_128X128_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_SEEED_128X128_2_6800 : public U8G2 { public: U8G2_SH1107_SEEED_128X128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_SEEED_128X128_2_8080 : public U8G2 { public: U8G2_SH1107_SEEED_128X128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_128X128_F_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_128X128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_128X128_F_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_128X128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_128X128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_128X128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_128X128_F_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_128X128_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_128X128_F_6800 : public U8G2 { public: U8G2_SH1107_128X128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_128X128_F_8080 : public U8G2 { public: U8G2_SH1107_128X128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_128x128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_PIMORONI_128X128_F_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_PIMORONI_128X128_F_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_PIMORONI_128X128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_PIMORONI_128X128_F_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_PIMORONI_128X128_F_6800 : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_PIMORONI_128X128_F_8080 : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_pimoroni_128x128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_SEEED_128X128_F_4W_SW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_128X128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1107_SEEED_128X128_F_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_128X128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_SEEED_128X128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_128X128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1107_SEEED_128X128_F_3W_SW_SPI : public U8G2 { public: U8G2_SH1107_SEEED_128X128_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1107_SEEED_128X128_F_6800 : public U8G2 { public: U8G2_SH1107_SEEED_128X128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_SEEED_128X128_F_8080 : public U8G2 { public: U8G2_SH1107_SEEED_128X128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_seeed_128x128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1107_128X128_1_SW_I2C : public U8G2 { public: U8G2_SH1107_128X128_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_128x128_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_128X128_1_HW_I2C : public U8G2 { public: U8G2_SH1107_128X128_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_128x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_128X128_1_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_128X128_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_128x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_PIMORONI_128X128_1_SW_I2C : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_pimoroni_128x128_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_PIMORONI_128X128_1_HW_I2C : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_pimoroni_128x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_PIMORONI_128X128_1_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_pimoroni_128x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_SEEED_128X128_1_SW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_128X128_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_128x128_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_SEEED_128X128_1_HW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_128X128_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_128x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_SEEED_128X128_1_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_128X128_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_128x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_128X128_2_SW_I2C : public U8G2 { public: U8G2_SH1107_128X128_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_128x128_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_128X128_2_HW_I2C : public U8G2 { public: U8G2_SH1107_128X128_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_128x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_128X128_2_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_128X128_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_128x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_PIMORONI_128X128_2_SW_I2C : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_pimoroni_128x128_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_PIMORONI_128X128_2_HW_I2C : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_pimoroni_128x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_PIMORONI_128X128_2_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_pimoroni_128x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_SEEED_128X128_2_SW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_128X128_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_128x128_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_SEEED_128X128_2_HW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_128X128_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_128x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_SEEED_128X128_2_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_128X128_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_128x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_128X128_F_SW_I2C : public U8G2 { public: U8G2_SH1107_128X128_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_128x128_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_128X128_F_HW_I2C : public U8G2 { public: U8G2_SH1107_128X128_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_128x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_128X128_F_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_128X128_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_128x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_PIMORONI_128X128_F_SW_I2C : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_pimoroni_128x128_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_PIMORONI_128X128_F_HW_I2C : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_pimoroni_128x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_PIMORONI_128X128_F_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_PIMORONI_128X128_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_pimoroni_128x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1107_SEEED_128X128_F_SW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_128X128_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_128x128_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1107_SEEED_128X128_F_HW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_128X128_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_128x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1107_SEEED_128X128_F_2ND_HW_I2C : public U8G2 { public: U8G2_SH1107_SEEED_128X128_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1107_i2c_seeed_128x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1108_160X160_1_4W_SW_SPI : public U8G2 { public: U8G2_SH1108_160X160_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1108_160X160_1_4W_HW_SPI : public U8G2 { public: U8G2_SH1108_160X160_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1108_160X160_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1108_160X160_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1108_160X160_1_3W_SW_SPI : public U8G2 { public: U8G2_SH1108_160X160_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1108_160X160_1_6800 : public U8G2 { public: U8G2_SH1108_160X160_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1108_160X160_1_8080 : public U8G2 { public: U8G2_SH1108_160X160_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1108_160X160_2_4W_SW_SPI : public U8G2 { public: U8G2_SH1108_160X160_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1108_160X160_2_4W_HW_SPI : public U8G2 { public: U8G2_SH1108_160X160_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1108_160X160_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1108_160X160_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1108_160X160_2_3W_SW_SPI : public U8G2 { public: U8G2_SH1108_160X160_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1108_160X160_2_6800 : public U8G2 { public: U8G2_SH1108_160X160_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1108_160X160_2_8080 : public U8G2 { public: U8G2_SH1108_160X160_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1108_160X160_F_4W_SW_SPI : public U8G2 { public: U8G2_SH1108_160X160_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1108_160X160_F_4W_HW_SPI : public U8G2 { public: U8G2_SH1108_160X160_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1108_160X160_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1108_160X160_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1108_160X160_F_3W_SW_SPI : public U8G2 { public: U8G2_SH1108_160X160_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1108_160X160_F_6800 : public U8G2 { public: U8G2_SH1108_160X160_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1108_160X160_F_8080 : public U8G2 { public: U8G2_SH1108_160X160_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_160x160_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1108_160X160_1_SW_I2C : public U8G2 { public: U8G2_SH1108_160X160_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_i2c_160x160_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1108_160X160_1_HW_I2C : public U8G2 { public: U8G2_SH1108_160X160_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_i2c_160x160_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1108_160X160_1_2ND_HW_I2C : public U8G2 { public: U8G2_SH1108_160X160_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_i2c_160x160_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1108_160X160_2_SW_I2C : public U8G2 { public: U8G2_SH1108_160X160_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_i2c_160x160_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1108_160X160_2_HW_I2C : public U8G2 { public: U8G2_SH1108_160X160_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_i2c_160x160_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1108_160X160_2_2ND_HW_I2C : public U8G2 { public: U8G2_SH1108_160X160_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_i2c_160x160_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1108_160X160_F_SW_I2C : public U8G2 { public: U8G2_SH1108_160X160_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_i2c_160x160_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1108_160X160_F_HW_I2C : public U8G2 { public: U8G2_SH1108_160X160_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_i2c_160x160_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1108_160X160_F_2ND_HW_I2C : public U8G2 { public: U8G2_SH1108_160X160_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1108_i2c_160x160_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1122_256X64_1_4W_SW_SPI : public U8G2 { public: U8G2_SH1122_256X64_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1122_256X64_1_4W_HW_SPI : public U8G2 { public: U8G2_SH1122_256X64_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1122_256X64_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1122_256X64_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1122_256X64_1_3W_SW_SPI : public U8G2 { public: U8G2_SH1122_256X64_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1122_256X64_1_6800 : public U8G2 { public: U8G2_SH1122_256X64_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1122_256X64_1_8080 : public U8G2 { public: U8G2_SH1122_256X64_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1122_256X64_2_4W_SW_SPI : public U8G2 { public: U8G2_SH1122_256X64_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1122_256X64_2_4W_HW_SPI : public U8G2 { public: U8G2_SH1122_256X64_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1122_256X64_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1122_256X64_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1122_256X64_2_3W_SW_SPI : public U8G2 { public: U8G2_SH1122_256X64_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1122_256X64_2_6800 : public U8G2 { public: U8G2_SH1122_256X64_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1122_256X64_2_8080 : public U8G2 { public: U8G2_SH1122_256X64_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1122_256X64_F_4W_SW_SPI : public U8G2 { public: U8G2_SH1122_256X64_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SH1122_256X64_F_4W_HW_SPI : public U8G2 { public: U8G2_SH1122_256X64_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1122_256X64_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SH1122_256X64_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SH1122_256X64_F_3W_SW_SPI : public U8G2 { public: U8G2_SH1122_256X64_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SH1122_256X64_F_6800 : public U8G2 { public: U8G2_SH1122_256X64_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1122_256X64_F_8080 : public U8G2 { public: U8G2_SH1122_256X64_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_256x64_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SH1122_256X64_1_SW_I2C : public U8G2 { public: U8G2_SH1122_256X64_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_i2c_256x64_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1122_256X64_1_HW_I2C : public U8G2 { public: U8G2_SH1122_256X64_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_i2c_256x64_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1122_256X64_1_2ND_HW_I2C : public U8G2 { public: U8G2_SH1122_256X64_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_i2c_256x64_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1122_256X64_2_SW_I2C : public U8G2 { public: U8G2_SH1122_256X64_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_i2c_256x64_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1122_256X64_2_HW_I2C : public U8G2 { public: U8G2_SH1122_256X64_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_i2c_256x64_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1122_256X64_2_2ND_HW_I2C : public U8G2 { public: U8G2_SH1122_256X64_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_i2c_256x64_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SH1122_256X64_F_SW_I2C : public U8G2 { public: U8G2_SH1122_256X64_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_i2c_256x64_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SH1122_256X64_F_HW_I2C : public U8G2 { public: U8G2_SH1122_256X64_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_i2c_256x64_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SH1122_256X64_F_2ND_HW_I2C : public U8G2 { public: U8G2_SH1122_256X64_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sh1122_i2c_256x64_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_128X32_UNIVISION_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_1_6800 : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_1_8080 : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_1_6800 : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_1_8080 : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_2_6800 : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_2_8080 : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_2_6800 : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_2_8080 : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_F_6800 : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_F_8080 : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_univision_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_F_6800 : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_F_8080 : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_128x32_winstar_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_1_SW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_univision_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_1_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_univision_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_128X32_UNIVISION_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_univision_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_128X32_WINSTAR_1_SW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_winstar_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_1_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_winstar_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_128X32_WINSTAR_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_winstar_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_128X32_UNIVISION_2_SW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_univision_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_2_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_univision_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_128X32_UNIVISION_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_univision_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_128X32_WINSTAR_2_SW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_winstar_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_2_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_winstar_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_128X32_WINSTAR_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_winstar_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_128X32_UNIVISION_F_SW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_univision_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_univision_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_128X32_UNIVISION_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_UNIVISION_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_univision_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_128X32_WINSTAR_F_SW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_winstar_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_128X32_WINSTAR_F_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_winstar_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_128X32_WINSTAR_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_128X32_WINSTAR_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_128x32_winstar_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_64X48_ER_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X48_ER_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_64X48_ER_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X48_ER_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X48_ER_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X48_ER_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X48_ER_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X48_ER_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_64X48_ER_1_6800 : public U8G2 { public: U8G2_SSD1306_64X48_ER_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X48_ER_1_8080 : public U8G2 { public: U8G2_SSD1306_64X48_ER_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X48_ER_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X48_ER_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_64X48_ER_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X48_ER_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X48_ER_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X48_ER_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X48_ER_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X48_ER_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_64X48_ER_2_6800 : public U8G2 { public: U8G2_SSD1306_64X48_ER_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X48_ER_2_8080 : public U8G2 { public: U8G2_SSD1306_64X48_ER_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X48_ER_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X48_ER_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_64X48_ER_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X48_ER_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X48_ER_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X48_ER_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X48_ER_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X48_ER_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_64X48_ER_F_6800 : public U8G2 { public: U8G2_SSD1306_64X48_ER_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X48_ER_F_8080 : public U8G2 { public: U8G2_SSD1306_64X48_ER_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x48_er_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X48_ER_1_SW_I2C : public U8G2 { public: U8G2_SSD1306_64X48_ER_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x48_er_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_64X48_ER_1_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X48_ER_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x48_er_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_64X48_ER_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X48_ER_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x48_er_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_64X48_ER_2_SW_I2C : public U8G2 { public: U8G2_SSD1306_64X48_ER_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x48_er_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_64X48_ER_2_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X48_ER_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x48_er_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_64X48_ER_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X48_ER_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x48_er_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_64X48_ER_F_SW_I2C : public U8G2 { public: U8G2_SSD1306_64X48_ER_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x48_er_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_64X48_ER_F_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X48_ER_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x48_er_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_64X48_ER_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X48_ER_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x48_er_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_48X64_WINSTAR_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_1_6800 : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_1_8080 : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_2_6800 : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_2_8080 : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_F_6800 : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_F_8080 : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_48x64_winstar_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_1_SW_I2C : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_48x64_winstar_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_1_HW_I2C : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_48x64_winstar_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_48X64_WINSTAR_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_48x64_winstar_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_48X64_WINSTAR_2_SW_I2C : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_48x64_winstar_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_2_HW_I2C : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_48x64_winstar_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_48X64_WINSTAR_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_48x64_winstar_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_48X64_WINSTAR_F_SW_I2C : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_48x64_winstar_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_48X64_WINSTAR_F_HW_I2C : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_48x64_winstar_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_48X64_WINSTAR_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_48X64_WINSTAR_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_48x64_winstar_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_64X32_NONAME_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_64X32_NONAME_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X32_NONAME_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X32_NONAME_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_64X32_NONAME_1_6800 : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X32_NONAME_1_8080 : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X32_1F_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_1F_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_64X32_1F_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_1F_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X32_1F_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_1F_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X32_1F_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_1F_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_64X32_1F_1_6800 : public U8G2 { public: U8G2_SSD1306_64X32_1F_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X32_1F_1_8080 : public U8G2 { public: U8G2_SSD1306_64X32_1F_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X32_NONAME_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_64X32_NONAME_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X32_NONAME_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X32_NONAME_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_64X32_NONAME_2_6800 : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X32_NONAME_2_8080 : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X32_1F_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_1F_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_64X32_1F_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_1F_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X32_1F_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_1F_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X32_1F_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_1F_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_64X32_1F_2_6800 : public U8G2 { public: U8G2_SSD1306_64X32_1F_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X32_1F_2_8080 : public U8G2 { public: U8G2_SSD1306_64X32_1F_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X32_NONAME_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_64X32_NONAME_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X32_NONAME_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X32_NONAME_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_64X32_NONAME_F_6800 : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X32_NONAME_F_8080 : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_noname_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X32_1F_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_1F_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_64X32_1F_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_1F_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X32_1F_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_1F_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_64X32_1F_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_64X32_1F_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_64X32_1F_F_6800 : public U8G2 { public: U8G2_SSD1306_64X32_1F_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X32_1F_F_8080 : public U8G2 { public: U8G2_SSD1306_64X32_1F_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_64x32_1f_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_64X32_NONAME_1_SW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_noname_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_64X32_NONAME_1_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_noname_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_64X32_NONAME_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_noname_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_64X32_1F_1_SW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_1F_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_1f_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_64X32_1F_1_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_1F_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_1f_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_64X32_1F_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_1F_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_1f_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_64X32_NONAME_2_SW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_noname_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_64X32_NONAME_2_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_noname_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_64X32_NONAME_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_noname_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_64X32_1F_2_SW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_1F_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_1f_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_64X32_1F_2_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_1F_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_1f_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_64X32_1F_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_1F_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_1f_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_64X32_NONAME_F_SW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_noname_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_64X32_NONAME_F_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_noname_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_64X32_NONAME_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_NONAME_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_noname_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_64X32_1F_F_SW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_1F_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_1f_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_64X32_1F_F_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_1F_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_1f_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_64X32_1F_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_64X32_1F_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_64x32_1f_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_96X16_ER_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_96X16_ER_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_96X16_ER_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_96X16_ER_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_96X16_ER_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_96X16_ER_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_96X16_ER_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_96X16_ER_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_96X16_ER_1_6800 : public U8G2 { public: U8G2_SSD1306_96X16_ER_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_96X16_ER_1_8080 : public U8G2 { public: U8G2_SSD1306_96X16_ER_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_96X16_ER_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_96X16_ER_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_96X16_ER_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_96X16_ER_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_96X16_ER_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_96X16_ER_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_96X16_ER_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_96X16_ER_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_96X16_ER_2_6800 : public U8G2 { public: U8G2_SSD1306_96X16_ER_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_96X16_ER_2_8080 : public U8G2 { public: U8G2_SSD1306_96X16_ER_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_96X16_ER_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1306_96X16_ER_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1306_96X16_ER_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_96X16_ER_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_96X16_ER_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1306_96X16_ER_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1306_96X16_ER_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1306_96X16_ER_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1306_96X16_ER_F_6800 : public U8G2 { public: U8G2_SSD1306_96X16_ER_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_96X16_ER_F_8080 : public U8G2 { public: U8G2_SSD1306_96X16_ER_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_96x16_er_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1306_96X16_ER_1_SW_I2C : public U8G2 { public: U8G2_SSD1306_96X16_ER_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x16_er_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_96X16_ER_1_HW_I2C : public U8G2 { public: U8G2_SSD1306_96X16_ER_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x16_er_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_96X16_ER_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_96X16_ER_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x16_er_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_96X16_ER_2_SW_I2C : public U8G2 { public: U8G2_SSD1306_96X16_ER_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x16_er_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_96X16_ER_2_HW_I2C : public U8G2 { public: U8G2_SSD1306_96X16_ER_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x16_er_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_96X16_ER_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_96X16_ER_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x16_er_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1306_96X16_ER_F_SW_I2C : public U8G2 { public: U8G2_SSD1306_96X16_ER_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x16_er_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1306_96X16_ER_F_HW_I2C : public U8G2 { public: U8G2_SSD1306_96X16_ER_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x16_er_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1306_96X16_ER_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1306_96X16_ER_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1306_i2c_96x16_er_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1309_128X64_NONAME2_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname2_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME2_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname2_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME2_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname2_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME2_1_6800 : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname2_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME2_1_8080 : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname2_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME2_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname2_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME2_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname2_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME2_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname2_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME2_2_6800 : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname2_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME2_2_8080 : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname2_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME2_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname2_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME2_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname2_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME2_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname2_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME2_F_6800 : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname2_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME2_F_8080 : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname2_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME2_1_SW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname2_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1309_128X64_NONAME2_1_HW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname2_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1309_128X64_NONAME2_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname2_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1309_128X64_NONAME2_2_SW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname2_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1309_128X64_NONAME2_2_HW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname2_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1309_128X64_NONAME2_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname2_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1309_128X64_NONAME2_F_SW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname2_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1309_128X64_NONAME2_F_HW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname2_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1309_128X64_NONAME2_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME2_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname2_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1309_128X64_NONAME0_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname0_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME0_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname0_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME0_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname0_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME0_1_6800 : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname0_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME0_1_8080 : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname0_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME0_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname0_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME0_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname0_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME0_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname0_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME0_2_6800 : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname0_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME0_2_8080 : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname0_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME0_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname0_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME0_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname0_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME0_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname0_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME0_F_6800 : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname0_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME0_F_8080 : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_128x64_noname0_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1309_128X64_NONAME0_1_SW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname0_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1309_128X64_NONAME0_1_HW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname0_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1309_128X64_NONAME0_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname0_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1309_128X64_NONAME0_2_SW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname0_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1309_128X64_NONAME0_2_HW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname0_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1309_128X64_NONAME0_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname0_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1309_128X64_NONAME0_F_SW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname0_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1309_128X64_NONAME0_F_HW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname0_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1309_128X64_NONAME0_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1309_128X64_NONAME0_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1309_i2c_128x64_noname0_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1316_128X32_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1316_128X32_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_128x32_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1316_128X32_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1316_128X32_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_128x32_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1316_128X32_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1316_128X32_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_128x32_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1316_128X32_1_6800 : public U8G2 { public: U8G2_SSD1316_128X32_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_128x32_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1316_128X32_1_8080 : public U8G2 { public: U8G2_SSD1316_128X32_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_128x32_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1316_128X32_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1316_128X32_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_128x32_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1316_128X32_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1316_128X32_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_128x32_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1316_128X32_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1316_128X32_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_128x32_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1316_128X32_2_6800 : public U8G2 { public: U8G2_SSD1316_128X32_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_128x32_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1316_128X32_2_8080 : public U8G2 { public: U8G2_SSD1316_128X32_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_128x32_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1316_128X32_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1316_128X32_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_128x32_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1316_128X32_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1316_128X32_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_128x32_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1316_128X32_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1316_128X32_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_128x32_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1316_128X32_F_6800 : public U8G2 { public: U8G2_SSD1316_128X32_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_128x32_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1316_128X32_F_8080 : public U8G2 { public: U8G2_SSD1316_128X32_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_128x32_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1316_128X32_1_SW_I2C : public U8G2 { public: U8G2_SSD1316_128X32_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_i2c_128x32_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1316_128X32_1_HW_I2C : public U8G2 { public: U8G2_SSD1316_128X32_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_i2c_128x32_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1316_128X32_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1316_128X32_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_i2c_128x32_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1316_128X32_2_SW_I2C : public U8G2 { public: U8G2_SSD1316_128X32_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_i2c_128x32_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1316_128X32_2_HW_I2C : public U8G2 { public: U8G2_SSD1316_128X32_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_i2c_128x32_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1316_128X32_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1316_128X32_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_i2c_128x32_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1316_128X32_F_SW_I2C : public U8G2 { public: U8G2_SSD1316_128X32_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_i2c_128x32_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1316_128X32_F_HW_I2C : public U8G2 { public: U8G2_SSD1316_128X32_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_i2c_128x32_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1316_128X32_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1316_128X32_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1316_i2c_128x32_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1317_96X96_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1317_96X96_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_96x96_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1317_96X96_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1317_96X96_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_96x96_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1317_96X96_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1317_96X96_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_96x96_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1317_96X96_1_6800 : public U8G2 { public: U8G2_SSD1317_96X96_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_96x96_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1317_96X96_1_8080 : public U8G2 { public: U8G2_SSD1317_96X96_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_96x96_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1317_96X96_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1317_96X96_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_96x96_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1317_96X96_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1317_96X96_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_96x96_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1317_96X96_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1317_96X96_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_96x96_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1317_96X96_2_6800 : public U8G2 { public: U8G2_SSD1317_96X96_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_96x96_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1317_96X96_2_8080 : public U8G2 { public: U8G2_SSD1317_96X96_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_96x96_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1317_96X96_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1317_96X96_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_96x96_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1317_96X96_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1317_96X96_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_96x96_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1317_96X96_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1317_96X96_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_96x96_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1317_96X96_F_6800 : public U8G2 { public: U8G2_SSD1317_96X96_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_96x96_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1317_96X96_F_8080 : public U8G2 { public: U8G2_SSD1317_96X96_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_96x96_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1317_96X96_1_SW_I2C : public U8G2 { public: U8G2_SSD1317_96X96_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_i2c_96x96_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1317_96X96_1_HW_I2C : public U8G2 { public: U8G2_SSD1317_96X96_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_i2c_96x96_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1317_96X96_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1317_96X96_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_i2c_96x96_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1317_96X96_2_SW_I2C : public U8G2 { public: U8G2_SSD1317_96X96_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_i2c_96x96_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1317_96X96_2_HW_I2C : public U8G2 { public: U8G2_SSD1317_96X96_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_i2c_96x96_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1317_96X96_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1317_96X96_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_i2c_96x96_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1317_96X96_F_SW_I2C : public U8G2 { public: U8G2_SSD1317_96X96_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_i2c_96x96_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1317_96X96_F_HW_I2C : public U8G2 { public: U8G2_SSD1317_96X96_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_i2c_96x96_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1317_96X96_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1317_96X96_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1317_i2c_96x96_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1318_128X96_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1318_128X96_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1318_128X96_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1318_128X96_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1318_128X96_1_6800 : public U8G2 { public: U8G2_SSD1318_128X96_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1318_128X96_1_8080 : public U8G2 { public: U8G2_SSD1318_128X96_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1318_128X96_XCP_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_XCP_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1318_128X96_XCP_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_XCP_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1318_128X96_XCP_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_XCP_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1318_128X96_XCP_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_XCP_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1318_128X96_XCP_1_6800 : public U8G2 { public: U8G2_SSD1318_128X96_XCP_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1318_128X96_XCP_1_8080 : public U8G2 { public: U8G2_SSD1318_128X96_XCP_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1318_128X96_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1318_128X96_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1318_128X96_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1318_128X96_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1318_128X96_2_6800 : public U8G2 { public: U8G2_SSD1318_128X96_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1318_128X96_2_8080 : public U8G2 { public: U8G2_SSD1318_128X96_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1318_128X96_XCP_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_XCP_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1318_128X96_XCP_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_XCP_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1318_128X96_XCP_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_XCP_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1318_128X96_XCP_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_XCP_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1318_128X96_XCP_2_6800 : public U8G2 { public: U8G2_SSD1318_128X96_XCP_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1318_128X96_XCP_2_8080 : public U8G2 { public: U8G2_SSD1318_128X96_XCP_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1318_128X96_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1318_128X96_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1318_128X96_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1318_128X96_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1318_128X96_F_6800 : public U8G2 { public: U8G2_SSD1318_128X96_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1318_128X96_F_8080 : public U8G2 { public: U8G2_SSD1318_128X96_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1318_128X96_XCP_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_XCP_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1318_128X96_XCP_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_XCP_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1318_128X96_XCP_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_XCP_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1318_128X96_XCP_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1318_128X96_XCP_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1318_128X96_XCP_F_6800 : public U8G2 { public: U8G2_SSD1318_128X96_XCP_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1318_128X96_XCP_F_8080 : public U8G2 { public: U8G2_SSD1318_128X96_XCP_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_128x96_xcp_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1318_128X96_1_SW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1318_128X96_1_HW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1318_128X96_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1318_128X96_XCP_1_SW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_XCP_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_xcp_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1318_128X96_XCP_1_HW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_XCP_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_xcp_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1318_128X96_XCP_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_XCP_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_xcp_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1318_128X96_2_SW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1318_128X96_2_HW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1318_128X96_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1318_128X96_XCP_2_SW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_XCP_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_xcp_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1318_128X96_XCP_2_HW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_XCP_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_xcp_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1318_128X96_XCP_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_XCP_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_xcp_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1318_128X96_F_SW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1318_128X96_F_HW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1318_128X96_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1318_128X96_XCP_F_SW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_XCP_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_xcp_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1318_128X96_XCP_F_HW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_XCP_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_xcp_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1318_128X96_XCP_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1318_128X96_XCP_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1318_i2c_128x96_xcp_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1325_NHD_128X64_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1325_NHD_128X64_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1325_NHD_128X64_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1325_NHD_128X64_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1325_NHD_128X64_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1325_NHD_128X64_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1325_NHD_128X64_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1325_NHD_128X64_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1325_NHD_128X64_1_6800 : public U8G2 { public: U8G2_SSD1325_NHD_128X64_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1325_NHD_128X64_1_8080 : public U8G2 { public: U8G2_SSD1325_NHD_128X64_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1325_NHD_128X64_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1325_NHD_128X64_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1325_NHD_128X64_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1325_NHD_128X64_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1325_NHD_128X64_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1325_NHD_128X64_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1325_NHD_128X64_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1325_NHD_128X64_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1325_NHD_128X64_2_6800 : public U8G2 { public: U8G2_SSD1325_NHD_128X64_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1325_NHD_128X64_2_8080 : public U8G2 { public: U8G2_SSD1325_NHD_128X64_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1325_NHD_128X64_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1325_NHD_128X64_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1325_NHD_128X64_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1325_NHD_128X64_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1325_NHD_128X64_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1325_NHD_128X64_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1325_NHD_128X64_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1325_NHD_128X64_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1325_NHD_128X64_F_6800 : public U8G2 { public: U8G2_SSD1325_NHD_128X64_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1325_NHD_128X64_F_8080 : public U8G2 { public: U8G2_SSD1325_NHD_128X64_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_nhd_128x64_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1325_NHD_128X64_1_SW_I2C : public U8G2 { public: U8G2_SSD1325_NHD_128X64_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_i2c_nhd_128x64_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1325_NHD_128X64_1_HW_I2C : public U8G2 { public: U8G2_SSD1325_NHD_128X64_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_i2c_nhd_128x64_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1325_NHD_128X64_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1325_NHD_128X64_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_i2c_nhd_128x64_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1325_NHD_128X64_2_SW_I2C : public U8G2 { public: U8G2_SSD1325_NHD_128X64_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_i2c_nhd_128x64_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1325_NHD_128X64_2_HW_I2C : public U8G2 { public: U8G2_SSD1325_NHD_128X64_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_i2c_nhd_128x64_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1325_NHD_128X64_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1325_NHD_128X64_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_i2c_nhd_128x64_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1325_NHD_128X64_F_SW_I2C : public U8G2 { public: U8G2_SSD1325_NHD_128X64_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_i2c_nhd_128x64_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1325_NHD_128X64_F_HW_I2C : public U8G2 { public: U8G2_SSD1325_NHD_128X64_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_i2c_nhd_128x64_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1325_NHD_128X64_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1325_NHD_128X64_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1325_i2c_nhd_128x64_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD0323_OS128064_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD0323_OS128064_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD0323_OS128064_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD0323_OS128064_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD0323_OS128064_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD0323_OS128064_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD0323_OS128064_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD0323_OS128064_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD0323_OS128064_1_6800 : public U8G2 { public: U8G2_SSD0323_OS128064_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD0323_OS128064_1_8080 : public U8G2 { public: U8G2_SSD0323_OS128064_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD0323_OS128064_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD0323_OS128064_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD0323_OS128064_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD0323_OS128064_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD0323_OS128064_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD0323_OS128064_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD0323_OS128064_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD0323_OS128064_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD0323_OS128064_2_6800 : public U8G2 { public: U8G2_SSD0323_OS128064_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD0323_OS128064_2_8080 : public U8G2 { public: U8G2_SSD0323_OS128064_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD0323_OS128064_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD0323_OS128064_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD0323_OS128064_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD0323_OS128064_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD0323_OS128064_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD0323_OS128064_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD0323_OS128064_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD0323_OS128064_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD0323_OS128064_F_6800 : public U8G2 { public: U8G2_SSD0323_OS128064_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD0323_OS128064_F_8080 : public U8G2 { public: U8G2_SSD0323_OS128064_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_os128064_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD0323_OS128064_1_SW_I2C : public U8G2 { public: U8G2_SSD0323_OS128064_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_i2c_os128064_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD0323_OS128064_1_HW_I2C : public U8G2 { public: U8G2_SSD0323_OS128064_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_i2c_os128064_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD0323_OS128064_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD0323_OS128064_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_i2c_os128064_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD0323_OS128064_2_SW_I2C : public U8G2 { public: U8G2_SSD0323_OS128064_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_i2c_os128064_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD0323_OS128064_2_HW_I2C : public U8G2 { public: U8G2_SSD0323_OS128064_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_i2c_os128064_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD0323_OS128064_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD0323_OS128064_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_i2c_os128064_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD0323_OS128064_F_SW_I2C : public U8G2 { public: U8G2_SSD0323_OS128064_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_i2c_os128064_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD0323_OS128064_F_HW_I2C : public U8G2 { public: U8G2_SSD0323_OS128064_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_i2c_os128064_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD0323_OS128064_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD0323_OS128064_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd0323_i2c_os128064_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1326_ER_256X32_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1326_ER_256X32_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1326_ER_256X32_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1326_ER_256X32_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1326_ER_256X32_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1326_ER_256X32_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1326_ER_256X32_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1326_ER_256X32_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1326_ER_256X32_1_6800 : public U8G2 { public: U8G2_SSD1326_ER_256X32_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1326_ER_256X32_1_8080 : public U8G2 { public: U8G2_SSD1326_ER_256X32_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1326_ER_256X32_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1326_ER_256X32_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1326_ER_256X32_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1326_ER_256X32_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1326_ER_256X32_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1326_ER_256X32_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1326_ER_256X32_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1326_ER_256X32_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1326_ER_256X32_2_6800 : public U8G2 { public: U8G2_SSD1326_ER_256X32_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1326_ER_256X32_2_8080 : public U8G2 { public: U8G2_SSD1326_ER_256X32_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1326_ER_256X32_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1326_ER_256X32_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1326_ER_256X32_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1326_ER_256X32_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1326_ER_256X32_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1326_ER_256X32_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1326_ER_256X32_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1326_ER_256X32_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1326_ER_256X32_F_6800 : public U8G2 { public: U8G2_SSD1326_ER_256X32_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1326_ER_256X32_F_8080 : public U8G2 { public: U8G2_SSD1326_ER_256X32_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_er_256x32_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1326_ER_256X32_1_SW_I2C : public U8G2 { public: U8G2_SSD1326_ER_256X32_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_i2c_er_256x32_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1326_ER_256X32_1_HW_I2C : public U8G2 { public: U8G2_SSD1326_ER_256X32_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_i2c_er_256x32_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1326_ER_256X32_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1326_ER_256X32_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_i2c_er_256x32_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1326_ER_256X32_2_SW_I2C : public U8G2 { public: U8G2_SSD1326_ER_256X32_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_i2c_er_256x32_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1326_ER_256X32_2_HW_I2C : public U8G2 { public: U8G2_SSD1326_ER_256X32_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_i2c_er_256x32_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1326_ER_256X32_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1326_ER_256X32_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_i2c_er_256x32_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1326_ER_256X32_F_SW_I2C : public U8G2 { public: U8G2_SSD1326_ER_256X32_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_i2c_er_256x32_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1326_ER_256X32_F_HW_I2C : public U8G2 { public: U8G2_SSD1326_ER_256X32_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_i2c_er_256x32_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1326_ER_256X32_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1326_ER_256X32_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1326_i2c_er_256x32_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1327_SEEED_96X96_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1327_SEEED_96X96_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_SEEED_96X96_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_SEEED_96X96_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1327_SEEED_96X96_1_6800 : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_SEEED_96X96_1_8080 : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_SEEED_96X96_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1327_SEEED_96X96_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_SEEED_96X96_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_SEEED_96X96_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1327_SEEED_96X96_2_6800 : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_SEEED_96X96_2_8080 : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_SEEED_96X96_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1327_SEEED_96X96_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_SEEED_96X96_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_SEEED_96X96_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1327_SEEED_96X96_F_6800 : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_SEEED_96X96_F_8080 : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_seeed_96x96_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_SEEED_96X96_1_SW_I2C : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_seeed_96x96_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1327_SEEED_96X96_1_HW_I2C : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_seeed_96x96_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1327_SEEED_96X96_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_seeed_96x96_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1327_SEEED_96X96_2_SW_I2C : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_seeed_96x96_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1327_SEEED_96X96_2_HW_I2C : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_seeed_96x96_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1327_SEEED_96X96_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_seeed_96x96_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1327_SEEED_96X96_F_SW_I2C : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_seeed_96x96_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1327_SEEED_96X96_F_HW_I2C : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_seeed_96x96_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1327_SEEED_96X96_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1327_SEEED_96X96_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_seeed_96x96_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1327_EA_W128128_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1327_EA_W128128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1327_EA_W128128_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_EA_W128128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_EA_W128128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_EA_W128128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_EA_W128128_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1327_EA_W128128_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1327_EA_W128128_1_6800 : public U8G2 { public: U8G2_SSD1327_EA_W128128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_EA_W128128_1_8080 : public U8G2 { public: U8G2_SSD1327_EA_W128128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_MIDAS_128X128_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1327_MIDAS_128X128_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_MIDAS_128X128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_MIDAS_128X128_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1327_MIDAS_128X128_1_6800 : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_MIDAS_128X128_1_8080 : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_WS_128X128_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1327_WS_128X128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1327_WS_128X128_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_WS_128X128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_WS_128X128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_WS_128X128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_WS_128X128_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1327_WS_128X128_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1327_WS_128X128_1_6800 : public U8G2 { public: U8G2_SSD1327_WS_128X128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_WS_128X128_1_8080 : public U8G2 { public: U8G2_SSD1327_WS_128X128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_EA_W128128_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1327_EA_W128128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1327_EA_W128128_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_EA_W128128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_EA_W128128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_EA_W128128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_EA_W128128_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1327_EA_W128128_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1327_EA_W128128_2_6800 : public U8G2 { public: U8G2_SSD1327_EA_W128128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_EA_W128128_2_8080 : public U8G2 { public: U8G2_SSD1327_EA_W128128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_MIDAS_128X128_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1327_MIDAS_128X128_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_MIDAS_128X128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_MIDAS_128X128_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1327_MIDAS_128X128_2_6800 : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_MIDAS_128X128_2_8080 : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_WS_128X128_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1327_WS_128X128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1327_WS_128X128_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_WS_128X128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_WS_128X128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_WS_128X128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_WS_128X128_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1327_WS_128X128_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1327_WS_128X128_2_6800 : public U8G2 { public: U8G2_SSD1327_WS_128X128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_WS_128X128_2_8080 : public U8G2 { public: U8G2_SSD1327_WS_128X128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_EA_W128128_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1327_EA_W128128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1327_EA_W128128_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_EA_W128128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_EA_W128128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_EA_W128128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_EA_W128128_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1327_EA_W128128_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1327_EA_W128128_F_6800 : public U8G2 { public: U8G2_SSD1327_EA_W128128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_EA_W128128_F_8080 : public U8G2 { public: U8G2_SSD1327_EA_W128128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ea_w128128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_MIDAS_128X128_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1327_MIDAS_128X128_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_MIDAS_128X128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_MIDAS_128X128_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1327_MIDAS_128X128_F_6800 : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_MIDAS_128X128_F_8080 : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_midas_128x128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_WS_128X128_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1327_WS_128X128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1327_WS_128X128_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_WS_128X128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_WS_128X128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1327_WS_128X128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1327_WS_128X128_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1327_WS_128X128_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1327_WS_128X128_F_6800 : public U8G2 { public: U8G2_SSD1327_WS_128X128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_WS_128X128_F_8080 : public U8G2 { public: U8G2_SSD1327_WS_128X128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_ws_128x128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1327_EA_W128128_1_SW_I2C : public U8G2 { public: U8G2_SSD1327_EA_W128128_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ea_w128128_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1327_EA_W128128_1_HW_I2C : public U8G2 { public: U8G2_SSD1327_EA_W128128_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ea_w128128_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1327_EA_W128128_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1327_EA_W128128_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ea_w128128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1327_MIDAS_128X128_1_SW_I2C : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_midas_128x128_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1327_MIDAS_128X128_1_HW_I2C : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_midas_128x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1327_MIDAS_128X128_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_midas_128x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1327_WS_128X128_1_SW_I2C : public U8G2 { public: U8G2_SSD1327_WS_128X128_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ws_128x128_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1327_WS_128X128_1_HW_I2C : public U8G2 { public: U8G2_SSD1327_WS_128X128_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ws_128x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1327_WS_128X128_1_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1327_WS_128X128_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ws_128x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1327_EA_W128128_2_SW_I2C : public U8G2 { public: U8G2_SSD1327_EA_W128128_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ea_w128128_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1327_EA_W128128_2_HW_I2C : public U8G2 { public: U8G2_SSD1327_EA_W128128_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ea_w128128_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1327_EA_W128128_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1327_EA_W128128_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ea_w128128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1327_MIDAS_128X128_2_SW_I2C : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_midas_128x128_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1327_MIDAS_128X128_2_HW_I2C : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_midas_128x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1327_MIDAS_128X128_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_midas_128x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1327_WS_128X128_2_SW_I2C : public U8G2 { public: U8G2_SSD1327_WS_128X128_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ws_128x128_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1327_WS_128X128_2_HW_I2C : public U8G2 { public: U8G2_SSD1327_WS_128X128_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ws_128x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1327_WS_128X128_2_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1327_WS_128X128_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ws_128x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1327_EA_W128128_F_SW_I2C : public U8G2 { public: U8G2_SSD1327_EA_W128128_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ea_w128128_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1327_EA_W128128_F_HW_I2C : public U8G2 { public: U8G2_SSD1327_EA_W128128_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ea_w128128_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1327_EA_W128128_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1327_EA_W128128_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ea_w128128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1327_MIDAS_128X128_F_SW_I2C : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_midas_128x128_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1327_MIDAS_128X128_F_HW_I2C : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_midas_128x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1327_MIDAS_128X128_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1327_MIDAS_128X128_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_midas_128x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1327_WS_128X128_F_SW_I2C : public U8G2 { public: U8G2_SSD1327_WS_128X128_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ws_128x128_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_SSD1327_WS_128X128_F_HW_I2C : public U8G2 { public: U8G2_SSD1327_WS_128X128_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ws_128x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_SSD1327_WS_128X128_F_2ND_HW_I2C : public U8G2 { public: U8G2_SSD1327_WS_128X128_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1327_i2c_ws_128x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_SSD1329_128X96_NONAME_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1329_128X96_NONAME_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_128x96_noname_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1329_128X96_NONAME_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1329_128X96_NONAME_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_128x96_noname_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1329_128X96_NONAME_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1329_128X96_NONAME_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_128x96_noname_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1329_128X96_NONAME_1_6800 : public U8G2 { public: U8G2_SSD1329_128X96_NONAME_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_128x96_noname_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1329_128X96_NONAME_1_8080 : public U8G2 { public: U8G2_SSD1329_128X96_NONAME_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_128x96_noname_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1329_128X96_NONAME_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1329_128X96_NONAME_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_128x96_noname_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1329_128X96_NONAME_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1329_128X96_NONAME_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_128x96_noname_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1329_128X96_NONAME_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1329_128X96_NONAME_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_128x96_noname_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1329_128X96_NONAME_2_6800 : public U8G2 { public: U8G2_SSD1329_128X96_NONAME_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_128x96_noname_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1329_128X96_NONAME_2_8080 : public U8G2 { public: U8G2_SSD1329_128X96_NONAME_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_128x96_noname_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1329_128X96_NONAME_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1329_128X96_NONAME_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_128x96_noname_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1329_128X96_NONAME_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1329_128X96_NONAME_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_128x96_noname_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1329_128X96_NONAME_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1329_128X96_NONAME_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_128x96_noname_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1329_128X96_NONAME_F_6800 : public U8G2 { public: U8G2_SSD1329_128X96_NONAME_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_128x96_noname_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1329_128X96_NONAME_F_8080 : public U8G2 { public: U8G2_SSD1329_128X96_NONAME_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1329_128x96_noname_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_LD7032_60X32_1_4W_SW_SPI : public U8G2 { public: U8G2_LD7032_60X32_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_60x32_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_LD7032_60X32_1_4W_HW_SPI : public U8G2 { public: U8G2_LD7032_60X32_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_60x32_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LD7032_60X32_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_LD7032_60X32_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_60x32_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LD7032_60X32_2_4W_SW_SPI : public U8G2 { public: U8G2_LD7032_60X32_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_60x32_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_LD7032_60X32_2_4W_HW_SPI : public U8G2 { public: U8G2_LD7032_60X32_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_60x32_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LD7032_60X32_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_LD7032_60X32_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_60x32_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LD7032_60X32_F_4W_SW_SPI : public U8G2 { public: U8G2_LD7032_60X32_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_60x32_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_LD7032_60X32_F_4W_HW_SPI : public U8G2 { public: U8G2_LD7032_60X32_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_60x32_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LD7032_60X32_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_LD7032_60X32_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_60x32_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LD7032_60X32_1_SW_I2C : public U8G2 { public: U8G2_LD7032_60X32_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_60x32_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_LD7032_60X32_1_HW_I2C : public U8G2 { public: U8G2_LD7032_60X32_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_60x32_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_LD7032_60X32_1_2ND_HW_I2C : public U8G2 { public: U8G2_LD7032_60X32_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_60x32_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_LD7032_60X32_2_SW_I2C : public U8G2 { public: U8G2_LD7032_60X32_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_60x32_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_LD7032_60X32_2_HW_I2C : public U8G2 { public: U8G2_LD7032_60X32_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_60x32_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_LD7032_60X32_2_2ND_HW_I2C : public U8G2 { public: U8G2_LD7032_60X32_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_60x32_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_LD7032_60X32_F_SW_I2C : public U8G2 { public: U8G2_LD7032_60X32_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_60x32_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_LD7032_60X32_F_HW_I2C : public U8G2 { public: U8G2_LD7032_60X32_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_60x32_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_LD7032_60X32_F_2ND_HW_I2C : public U8G2 { public: U8G2_LD7032_60X32_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ld7032_i2c_60x32_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7920_192X32_1_8080 : public U8G2 { public: U8G2_ST7920_192X32_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_p_192x32_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_192X32_2_8080 : public U8G2 { public: U8G2_ST7920_192X32_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_p_192x32_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_192X32_F_8080 : public U8G2 { public: U8G2_ST7920_192X32_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_p_192x32_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_192X32_1_6800 : public U8G2 { public: U8G2_ST7920_192X32_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_192x32_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_192X32_2_6800 : public U8G2 { public: U8G2_ST7920_192X32_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_192x32_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_192X32_F_6800 : public U8G2 { public: U8G2_ST7920_192X32_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_192x32_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_192X32_1_SW_SPI : public U8G2 { public: U8G2_ST7920_192X32_1_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_192x32_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7920_192X32_1_HW_SPI : public U8G2 { public: U8G2_ST7920_192X32_1_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_192x32_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_192X32_1_2ND_HW_SPI : public U8G2 { public: U8G2_ST7920_192X32_1_2ND_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_192x32_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_192X32_2_SW_SPI : public U8G2 { public: U8G2_ST7920_192X32_2_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_192x32_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7920_192X32_2_HW_SPI : public U8G2 { public: U8G2_ST7920_192X32_2_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_192x32_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_192X32_2_2ND_HW_SPI : public U8G2 { public: U8G2_ST7920_192X32_2_2ND_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_192x32_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_192X32_F_SW_SPI : public U8G2 { public: U8G2_ST7920_192X32_F_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_192x32_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7920_192X32_F_HW_SPI : public U8G2 { public: U8G2_ST7920_192X32_F_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_192x32_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_192X32_F_2ND_HW_SPI : public U8G2 { public: U8G2_ST7920_192X32_F_2ND_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_192x32_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_128X64_1_8080 : public U8G2 { public: U8G2_ST7920_128X64_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_p_128x64_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_128X64_2_8080 : public U8G2 { public: U8G2_ST7920_128X64_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_p_128x64_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_128X64_F_8080 : public U8G2 { public: U8G2_ST7920_128X64_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_p_128x64_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_128X64_1_6800 : public U8G2 { public: U8G2_ST7920_128X64_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_128x64_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_128X64_2_6800 : public U8G2 { public: U8G2_ST7920_128X64_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_128x64_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_128X64_F_6800 : public U8G2 { public: U8G2_ST7920_128X64_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_128x64_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7920_128X64_1_SW_SPI : public U8G2 { public: U8G2_ST7920_128X64_1_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_128x64_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7920_128X64_1_HW_SPI : public U8G2 { public: U8G2_ST7920_128X64_1_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_128x64_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_128X64_1_2ND_HW_SPI : public U8G2 { public: U8G2_ST7920_128X64_1_2ND_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_128x64_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_128X64_2_SW_SPI : public U8G2 { public: U8G2_ST7920_128X64_2_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_128x64_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7920_128X64_2_HW_SPI : public U8G2 { public: U8G2_ST7920_128X64_2_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_128x64_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_128X64_2_2ND_HW_SPI : public U8G2 { public: U8G2_ST7920_128X64_2_2ND_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_128x64_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_128X64_F_SW_SPI : public U8G2 { public: U8G2_ST7920_128X64_F_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_128x64_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7920_128X64_F_HW_SPI : public U8G2 { public: U8G2_ST7920_128X64_F_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_128x64_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_ST7920_128X64_F_2ND_HW_SPI : public U8G2 { public: U8G2_ST7920_128X64_F_2ND_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7920_s_128x64_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8G2_LS013B7DH03_128X128_1_4W_SW_SPI : public U8G2 { public: U8G2_LS013B7DH03_128X128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh03_128x128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_LS013B7DH03_128X128_1_4W_HW_SPI : public U8G2 { public: U8G2_LS013B7DH03_128X128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh03_128x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS013B7DH03_128X128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_LS013B7DH03_128X128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh03_128x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS013B7DH03_128X128_2_4W_SW_SPI : public U8G2 { public: U8G2_LS013B7DH03_128X128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh03_128x128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_LS013B7DH03_128X128_2_4W_HW_SPI : public U8G2 { public: U8G2_LS013B7DH03_128X128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh03_128x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS013B7DH03_128X128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_LS013B7DH03_128X128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh03_128x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS013B7DH03_128X128_F_4W_SW_SPI : public U8G2 { public: U8G2_LS013B7DH03_128X128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh03_128x128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_LS013B7DH03_128X128_F_4W_HW_SPI : public U8G2 { public: U8G2_LS013B7DH03_128X128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh03_128x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS013B7DH03_128X128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_LS013B7DH03_128X128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh03_128x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS027B7DH01_400X240_1_4W_SW_SPI : public U8G2 { public: U8G2_LS027B7DH01_400X240_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls027b7dh01_400x240_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_LS027B7DH01_400X240_1_4W_HW_SPI : public U8G2 { public: U8G2_LS027B7DH01_400X240_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls027b7dh01_400x240_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS027B7DH01_400X240_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_LS027B7DH01_400X240_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls027b7dh01_400x240_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS027B7DH01_400X240_2_4W_SW_SPI : public U8G2 { public: U8G2_LS027B7DH01_400X240_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls027b7dh01_400x240_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_LS027B7DH01_400X240_2_4W_HW_SPI : public U8G2 { public: U8G2_LS027B7DH01_400X240_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls027b7dh01_400x240_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS027B7DH01_400X240_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_LS027B7DH01_400X240_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls027b7dh01_400x240_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS027B7DH01_400X240_F_4W_SW_SPI : public U8G2 { public: U8G2_LS027B7DH01_400X240_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls027b7dh01_400x240_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_LS027B7DH01_400X240_F_4W_HW_SPI : public U8G2 { public: U8G2_LS027B7DH01_400X240_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls027b7dh01_400x240_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS027B7DH01_400X240_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_LS027B7DH01_400X240_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls027b7dh01_400x240_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS013B7DH05_144X168_1_4W_SW_SPI : public U8G2 { public: U8G2_LS013B7DH05_144X168_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh05_144x168_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_LS013B7DH05_144X168_1_4W_HW_SPI : public U8G2 { public: U8G2_LS013B7DH05_144X168_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh05_144x168_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS013B7DH05_144X168_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_LS013B7DH05_144X168_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh05_144x168_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS013B7DH05_144X168_2_4W_SW_SPI : public U8G2 { public: U8G2_LS013B7DH05_144X168_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh05_144x168_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_LS013B7DH05_144X168_2_4W_HW_SPI : public U8G2 { public: U8G2_LS013B7DH05_144X168_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh05_144x168_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS013B7DH05_144X168_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_LS013B7DH05_144X168_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh05_144x168_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS013B7DH05_144X168_F_4W_SW_SPI : public U8G2 { public: U8G2_LS013B7DH05_144X168_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh05_144x168_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_LS013B7DH05_144X168_F_4W_HW_SPI : public U8G2 { public: U8G2_LS013B7DH05_144X168_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh05_144x168_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_LS013B7DH05_144X168_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_LS013B7DH05_144X168_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ls013b7dh05_144x168_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1701_EA_DOGS102_1_4W_SW_SPI : public U8G2 { public: U8G2_UC1701_EA_DOGS102_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1701_EA_DOGS102_1_4W_HW_SPI : public U8G2 { public: U8G2_UC1701_EA_DOGS102_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1701_EA_DOGS102_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1701_EA_DOGS102_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1701_EA_DOGS102_1_3W_SW_SPI : public U8G2 { public: U8G2_UC1701_EA_DOGS102_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1701_EA_DOGS102_1_6800 : public U8G2 { public: U8G2_UC1701_EA_DOGS102_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1701_EA_DOGS102_1_8080 : public U8G2 { public: U8G2_UC1701_EA_DOGS102_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1701_EA_DOGS102_2_4W_SW_SPI : public U8G2 { public: U8G2_UC1701_EA_DOGS102_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1701_EA_DOGS102_2_4W_HW_SPI : public U8G2 { public: U8G2_UC1701_EA_DOGS102_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1701_EA_DOGS102_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1701_EA_DOGS102_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1701_EA_DOGS102_2_3W_SW_SPI : public U8G2 { public: U8G2_UC1701_EA_DOGS102_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1701_EA_DOGS102_2_6800 : public U8G2 { public: U8G2_UC1701_EA_DOGS102_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1701_EA_DOGS102_2_8080 : public U8G2 { public: U8G2_UC1701_EA_DOGS102_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1701_EA_DOGS102_F_4W_SW_SPI : public U8G2 { public: U8G2_UC1701_EA_DOGS102_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1701_EA_DOGS102_F_4W_HW_SPI : public U8G2 { public: U8G2_UC1701_EA_DOGS102_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1701_EA_DOGS102_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1701_EA_DOGS102_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1701_EA_DOGS102_F_3W_SW_SPI : public U8G2 { public: U8G2_UC1701_EA_DOGS102_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1701_EA_DOGS102_F_6800 : public U8G2 { public: U8G2_UC1701_EA_DOGS102_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1701_EA_DOGS102_F_8080 : public U8G2 { public: U8G2_UC1701_EA_DOGS102_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_ea_dogs102_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1701_MINI12864_1_4W_SW_SPI : public U8G2 { public: U8G2_UC1701_MINI12864_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1701_MINI12864_1_4W_HW_SPI : public U8G2 { public: U8G2_UC1701_MINI12864_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1701_MINI12864_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1701_MINI12864_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1701_MINI12864_1_3W_SW_SPI : public U8G2 { public: U8G2_UC1701_MINI12864_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1701_MINI12864_1_6800 : public U8G2 { public: U8G2_UC1701_MINI12864_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1701_MINI12864_1_8080 : public U8G2 { public: U8G2_UC1701_MINI12864_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1701_MINI12864_2_4W_SW_SPI : public U8G2 { public: U8G2_UC1701_MINI12864_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1701_MINI12864_2_4W_HW_SPI : public U8G2 { public: U8G2_UC1701_MINI12864_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1701_MINI12864_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1701_MINI12864_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1701_MINI12864_2_3W_SW_SPI : public U8G2 { public: U8G2_UC1701_MINI12864_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1701_MINI12864_2_6800 : public U8G2 { public: U8G2_UC1701_MINI12864_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1701_MINI12864_2_8080 : public U8G2 { public: U8G2_UC1701_MINI12864_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1701_MINI12864_F_4W_SW_SPI : public U8G2 { public: U8G2_UC1701_MINI12864_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1701_MINI12864_F_4W_HW_SPI : public U8G2 { public: U8G2_UC1701_MINI12864_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1701_MINI12864_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1701_MINI12864_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1701_MINI12864_F_3W_SW_SPI : public U8G2 { public: U8G2_UC1701_MINI12864_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1701_MINI12864_F_6800 : public U8G2 { public: U8G2_UC1701_MINI12864_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1701_MINI12864_F_8080 : public U8G2 { public: U8G2_UC1701_MINI12864_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1701_mini12864_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_PCD8544_84X48_1_4W_SW_SPI : public U8G2 { public: U8G2_PCD8544_84X48_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcd8544_84x48_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_PCD8544_84X48_1_4W_HW_SPI : public U8G2 { public: U8G2_PCD8544_84X48_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcd8544_84x48_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_PCD8544_84X48_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_PCD8544_84X48_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcd8544_84x48_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_PCD8544_84X48_1_3W_SW_SPI : public U8G2 { public: U8G2_PCD8544_84X48_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcd8544_84x48_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_PCD8544_84X48_2_4W_SW_SPI : public U8G2 { public: U8G2_PCD8544_84X48_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcd8544_84x48_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_PCD8544_84X48_2_4W_HW_SPI : public U8G2 { public: U8G2_PCD8544_84X48_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcd8544_84x48_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_PCD8544_84X48_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_PCD8544_84X48_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcd8544_84x48_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_PCD8544_84X48_2_3W_SW_SPI : public U8G2 { public: U8G2_PCD8544_84X48_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcd8544_84x48_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_PCD8544_84X48_F_4W_SW_SPI : public U8G2 { public: U8G2_PCD8544_84X48_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcd8544_84x48_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_PCD8544_84X48_F_4W_HW_SPI : public U8G2 { public: U8G2_PCD8544_84X48_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcd8544_84x48_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_PCD8544_84X48_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_PCD8544_84X48_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcd8544_84x48_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_PCD8544_84X48_F_3W_SW_SPI : public U8G2 { public: U8G2_PCD8544_84X48_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcd8544_84x48_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_PCF8812_96X65_1_4W_SW_SPI : public U8G2 { public: U8G2_PCF8812_96X65_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcf8812_96x65_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_PCF8812_96X65_1_4W_HW_SPI : public U8G2 { public: U8G2_PCF8812_96X65_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcf8812_96x65_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_PCF8812_96X65_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_PCF8812_96X65_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcf8812_96x65_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_PCF8812_96X65_1_3W_SW_SPI : public U8G2 { public: U8G2_PCF8812_96X65_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcf8812_96x65_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_PCF8812_96X65_2_4W_SW_SPI : public U8G2 { public: U8G2_PCF8812_96X65_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcf8812_96x65_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_PCF8812_96X65_2_4W_HW_SPI : public U8G2 { public: U8G2_PCF8812_96X65_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcf8812_96x65_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_PCF8812_96X65_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_PCF8812_96X65_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcf8812_96x65_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_PCF8812_96X65_2_3W_SW_SPI : public U8G2 { public: U8G2_PCF8812_96X65_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcf8812_96x65_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_PCF8812_96X65_F_4W_SW_SPI : public U8G2 { public: U8G2_PCF8812_96X65_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcf8812_96x65_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_PCF8812_96X65_F_4W_HW_SPI : public U8G2 { public: U8G2_PCF8812_96X65_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcf8812_96x65_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_PCF8812_96X65_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_PCF8812_96X65_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcf8812_96x65_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_PCF8812_96X65_F_3W_SW_SPI : public U8G2 { public: U8G2_PCF8812_96X65_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_pcf8812_96x65_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_HX1230_96X68_1_4W_SW_SPI : public U8G2 { public: U8G2_HX1230_96X68_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_hx1230_96x68_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_HX1230_96X68_1_4W_HW_SPI : public U8G2 { public: U8G2_HX1230_96X68_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_hx1230_96x68_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_HX1230_96X68_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_HX1230_96X68_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_hx1230_96x68_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_HX1230_96X68_1_3W_SW_SPI : public U8G2 { public: U8G2_HX1230_96X68_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_hx1230_96x68_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_HX1230_96X68_2_4W_SW_SPI : public U8G2 { public: U8G2_HX1230_96X68_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_hx1230_96x68_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_HX1230_96X68_2_4W_HW_SPI : public U8G2 { public: U8G2_HX1230_96X68_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_hx1230_96x68_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_HX1230_96X68_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_HX1230_96X68_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_hx1230_96x68_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_HX1230_96X68_2_3W_SW_SPI : public U8G2 { public: U8G2_HX1230_96X68_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_hx1230_96x68_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_HX1230_96X68_F_4W_SW_SPI : public U8G2 { public: U8G2_HX1230_96X68_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_hx1230_96x68_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_HX1230_96X68_F_4W_HW_SPI : public U8G2 { public: U8G2_HX1230_96X68_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_hx1230_96x68_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_HX1230_96X68_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_HX1230_96X68_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_hx1230_96x68_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_HX1230_96X68_F_3W_SW_SPI : public U8G2 { public: U8G2_HX1230_96X68_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_hx1230_96x68_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1604_JLX19264_1_4W_SW_SPI : public U8G2 { public: U8G2_UC1604_JLX19264_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1604_JLX19264_1_4W_HW_SPI : public U8G2 { public: U8G2_UC1604_JLX19264_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1604_JLX19264_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1604_JLX19264_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1604_JLX19264_1_3W_SW_SPI : public U8G2 { public: U8G2_UC1604_JLX19264_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1604_JLX19264_1_6800 : public U8G2 { public: U8G2_UC1604_JLX19264_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1604_JLX19264_1_8080 : public U8G2 { public: U8G2_UC1604_JLX19264_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1604_JLX19264_2_4W_SW_SPI : public U8G2 { public: U8G2_UC1604_JLX19264_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1604_JLX19264_2_4W_HW_SPI : public U8G2 { public: U8G2_UC1604_JLX19264_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1604_JLX19264_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1604_JLX19264_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1604_JLX19264_2_3W_SW_SPI : public U8G2 { public: U8G2_UC1604_JLX19264_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1604_JLX19264_2_6800 : public U8G2 { public: U8G2_UC1604_JLX19264_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1604_JLX19264_2_8080 : public U8G2 { public: U8G2_UC1604_JLX19264_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1604_JLX19264_F_4W_SW_SPI : public U8G2 { public: U8G2_UC1604_JLX19264_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1604_JLX19264_F_4W_HW_SPI : public U8G2 { public: U8G2_UC1604_JLX19264_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1604_JLX19264_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1604_JLX19264_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1604_JLX19264_F_3W_SW_SPI : public U8G2 { public: U8G2_UC1604_JLX19264_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1604_JLX19264_F_6800 : public U8G2 { public: U8G2_UC1604_JLX19264_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1604_JLX19264_F_8080 : public U8G2 { public: U8G2_UC1604_JLX19264_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_jlx19264_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1604_JLX19264_1_SW_I2C : public U8G2 { public: U8G2_UC1604_JLX19264_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_i2c_jlx19264_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1604_JLX19264_1_HW_I2C : public U8G2 { public: U8G2_UC1604_JLX19264_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_i2c_jlx19264_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1604_JLX19264_1_2ND_HW_I2C : public U8G2 { public: U8G2_UC1604_JLX19264_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_i2c_jlx19264_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1604_JLX19264_2_SW_I2C : public U8G2 { public: U8G2_UC1604_JLX19264_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_i2c_jlx19264_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1604_JLX19264_2_HW_I2C : public U8G2 { public: U8G2_UC1604_JLX19264_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_i2c_jlx19264_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1604_JLX19264_2_2ND_HW_I2C : public U8G2 { public: U8G2_UC1604_JLX19264_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_i2c_jlx19264_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1604_JLX19264_F_SW_I2C : public U8G2 { public: U8G2_UC1604_JLX19264_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_i2c_jlx19264_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1604_JLX19264_F_HW_I2C : public U8G2 { public: U8G2_UC1604_JLX19264_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_i2c_jlx19264_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1604_JLX19264_F_2ND_HW_I2C : public U8G2 { public: U8G2_UC1604_JLX19264_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1604_i2c_jlx19264_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1608_ERC24064_1_4W_SW_SPI : public U8G2 { public: U8G2_UC1608_ERC24064_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1608_ERC24064_1_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_ERC24064_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_ERC24064_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_ERC24064_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_ERC24064_1_3W_SW_SPI : public U8G2 { public: U8G2_UC1608_ERC24064_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1608_ERC24064_1_6800 : public U8G2 { public: U8G2_UC1608_ERC24064_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_ERC24064_1_8080 : public U8G2 { public: U8G2_UC1608_ERC24064_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_ERC24064_2_4W_SW_SPI : public U8G2 { public: U8G2_UC1608_ERC24064_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1608_ERC24064_2_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_ERC24064_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_ERC24064_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_ERC24064_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_ERC24064_2_3W_SW_SPI : public U8G2 { public: U8G2_UC1608_ERC24064_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1608_ERC24064_2_6800 : public U8G2 { public: U8G2_UC1608_ERC24064_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_ERC24064_2_8080 : public U8G2 { public: U8G2_UC1608_ERC24064_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_ERC24064_F_4W_SW_SPI : public U8G2 { public: U8G2_UC1608_ERC24064_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1608_ERC24064_F_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_ERC24064_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_ERC24064_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_ERC24064_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_ERC24064_F_3W_SW_SPI : public U8G2 { public: U8G2_UC1608_ERC24064_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1608_ERC24064_F_6800 : public U8G2 { public: U8G2_UC1608_ERC24064_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_ERC24064_F_8080 : public U8G2 { public: U8G2_UC1608_ERC24064_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc24064_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_ERC24064_1_SW_I2C : public U8G2 { public: U8G2_UC1608_ERC24064_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc24064_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1608_ERC24064_1_HW_I2C : public U8G2 { public: U8G2_UC1608_ERC24064_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc24064_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1608_ERC24064_1_2ND_HW_I2C : public U8G2 { public: U8G2_UC1608_ERC24064_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc24064_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1608_ERC24064_2_SW_I2C : public U8G2 { public: U8G2_UC1608_ERC24064_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc24064_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1608_ERC24064_2_HW_I2C : public U8G2 { public: U8G2_UC1608_ERC24064_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc24064_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1608_ERC24064_2_2ND_HW_I2C : public U8G2 { public: U8G2_UC1608_ERC24064_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc24064_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1608_ERC24064_F_SW_I2C : public U8G2 { public: U8G2_UC1608_ERC24064_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc24064_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1608_ERC24064_F_HW_I2C : public U8G2 { public: U8G2_UC1608_ERC24064_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc24064_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1608_ERC24064_F_2ND_HW_I2C : public U8G2 { public: U8G2_UC1608_ERC24064_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc24064_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1608_ERC240120_1_4W_SW_SPI : public U8G2 { public: U8G2_UC1608_ERC240120_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1608_ERC240120_1_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_ERC240120_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_ERC240120_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_ERC240120_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_ERC240120_1_3W_SW_SPI : public U8G2 { public: U8G2_UC1608_ERC240120_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1608_ERC240120_1_6800 : public U8G2 { public: U8G2_UC1608_ERC240120_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_ERC240120_1_8080 : public U8G2 { public: U8G2_UC1608_ERC240120_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_ERC240120_2_4W_SW_SPI : public U8G2 { public: U8G2_UC1608_ERC240120_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1608_ERC240120_2_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_ERC240120_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_ERC240120_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_ERC240120_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_ERC240120_2_3W_SW_SPI : public U8G2 { public: U8G2_UC1608_ERC240120_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1608_ERC240120_2_6800 : public U8G2 { public: U8G2_UC1608_ERC240120_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_ERC240120_2_8080 : public U8G2 { public: U8G2_UC1608_ERC240120_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_ERC240120_F_4W_SW_SPI : public U8G2 { public: U8G2_UC1608_ERC240120_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1608_ERC240120_F_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_ERC240120_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_ERC240120_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_ERC240120_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_ERC240120_F_3W_SW_SPI : public U8G2 { public: U8G2_UC1608_ERC240120_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1608_ERC240120_F_6800 : public U8G2 { public: U8G2_UC1608_ERC240120_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_ERC240120_F_8080 : public U8G2 { public: U8G2_UC1608_ERC240120_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_erc240120_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_ERC240120_1_SW_I2C : public U8G2 { public: U8G2_UC1608_ERC240120_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc240120_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1608_ERC240120_1_HW_I2C : public U8G2 { public: U8G2_UC1608_ERC240120_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc240120_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1608_ERC240120_1_2ND_HW_I2C : public U8G2 { public: U8G2_UC1608_ERC240120_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc240120_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1608_ERC240120_2_SW_I2C : public U8G2 { public: U8G2_UC1608_ERC240120_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc240120_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1608_ERC240120_2_HW_I2C : public U8G2 { public: U8G2_UC1608_ERC240120_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc240120_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1608_ERC240120_2_2ND_HW_I2C : public U8G2 { public: U8G2_UC1608_ERC240120_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc240120_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1608_ERC240120_F_SW_I2C : public U8G2 { public: U8G2_UC1608_ERC240120_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc240120_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1608_ERC240120_F_HW_I2C : public U8G2 { public: U8G2_UC1608_ERC240120_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc240120_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1608_ERC240120_F_2ND_HW_I2C : public U8G2 { public: U8G2_UC1608_ERC240120_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_erc240120_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1608_240X128_1_4W_SW_SPI : public U8G2 { public: U8G2_UC1608_240X128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1608_240X128_1_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_240X128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_240X128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_240X128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_240X128_1_3W_SW_SPI : public U8G2 { public: U8G2_UC1608_240X128_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1608_240X128_1_6800 : public U8G2 { public: U8G2_UC1608_240X128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_240X128_1_8080 : public U8G2 { public: U8G2_UC1608_240X128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_240X128_2_4W_SW_SPI : public U8G2 { public: U8G2_UC1608_240X128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1608_240X128_2_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_240X128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_240X128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_240X128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_240X128_2_3W_SW_SPI : public U8G2 { public: U8G2_UC1608_240X128_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1608_240X128_2_6800 : public U8G2 { public: U8G2_UC1608_240X128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_240X128_2_8080 : public U8G2 { public: U8G2_UC1608_240X128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_240X128_F_4W_SW_SPI : public U8G2 { public: U8G2_UC1608_240X128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1608_240X128_F_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_240X128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_240X128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1608_240X128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1608_240X128_F_3W_SW_SPI : public U8G2 { public: U8G2_UC1608_240X128_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1608_240X128_F_6800 : public U8G2 { public: U8G2_UC1608_240X128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_240X128_F_8080 : public U8G2 { public: U8G2_UC1608_240X128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_240x128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1608_240X128_1_SW_I2C : public U8G2 { public: U8G2_UC1608_240X128_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_240x128_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1608_240X128_1_HW_I2C : public U8G2 { public: U8G2_UC1608_240X128_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_240x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1608_240X128_1_2ND_HW_I2C : public U8G2 { public: U8G2_UC1608_240X128_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_240x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1608_240X128_2_SW_I2C : public U8G2 { public: U8G2_UC1608_240X128_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_240x128_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1608_240X128_2_HW_I2C : public U8G2 { public: U8G2_UC1608_240X128_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_240x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1608_240X128_2_2ND_HW_I2C : public U8G2 { public: U8G2_UC1608_240X128_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_240x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1608_240X128_F_SW_I2C : public U8G2 { public: U8G2_UC1608_240X128_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_240x128_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1608_240X128_F_HW_I2C : public U8G2 { public: U8G2_UC1608_240X128_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_240x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1608_240X128_F_2ND_HW_I2C : public U8G2 { public: U8G2_UC1608_240X128_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1608_i2c_240x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1638_160X128_1_4W_SW_SPI : public U8G2 { public: U8G2_UC1638_160X128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1638_160X128_1_4W_HW_SPI : public U8G2 { public: U8G2_UC1638_160X128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1638_160X128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1638_160X128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1638_160X128_1_3W_SW_SPI : public U8G2 { public: U8G2_UC1638_160X128_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1638_160X128_1_6800 : public U8G2 { public: U8G2_UC1638_160X128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1638_160X128_1_8080 : public U8G2 { public: U8G2_UC1638_160X128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1638_160X128_2_4W_SW_SPI : public U8G2 { public: U8G2_UC1638_160X128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1638_160X128_2_4W_HW_SPI : public U8G2 { public: U8G2_UC1638_160X128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1638_160X128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1638_160X128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1638_160X128_2_3W_SW_SPI : public U8G2 { public: U8G2_UC1638_160X128_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1638_160X128_2_6800 : public U8G2 { public: U8G2_UC1638_160X128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1638_160X128_2_8080 : public U8G2 { public: U8G2_UC1638_160X128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1638_160X128_F_4W_SW_SPI : public U8G2 { public: U8G2_UC1638_160X128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1638_160X128_F_4W_HW_SPI : public U8G2 { public: U8G2_UC1638_160X128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1638_160X128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1638_160X128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1638_160X128_F_3W_SW_SPI : public U8G2 { public: U8G2_UC1638_160X128_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1638_160X128_F_6800 : public U8G2 { public: U8G2_UC1638_160X128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1638_160X128_F_8080 : public U8G2 { public: U8G2_UC1638_160X128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1638_160x128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1610_EA_DOGXL160_1_4W_SW_SPI : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1610_EA_DOGXL160_1_4W_HW_SPI : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1610_EA_DOGXL160_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1610_EA_DOGXL160_1_3W_SW_SPI : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1610_EA_DOGXL160_1_6800 : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1610_EA_DOGXL160_1_8080 : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1610_EA_DOGXL160_2_4W_SW_SPI : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1610_EA_DOGXL160_2_4W_HW_SPI : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1610_EA_DOGXL160_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1610_EA_DOGXL160_2_3W_SW_SPI : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1610_EA_DOGXL160_2_6800 : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1610_EA_DOGXL160_2_8080 : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1610_EA_DOGXL160_F_4W_SW_SPI : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1610_EA_DOGXL160_F_4W_HW_SPI : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1610_EA_DOGXL160_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1610_EA_DOGXL160_F_3W_SW_SPI : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1610_EA_DOGXL160_F_6800 : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1610_EA_DOGXL160_F_8080 : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_ea_dogxl160_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1610_EA_DOGXL160_1_SW_I2C : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_i2c_ea_dogxl160_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1610_EA_DOGXL160_1_HW_I2C : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_i2c_ea_dogxl160_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1610_EA_DOGXL160_1_2ND_HW_I2C : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_i2c_ea_dogxl160_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1610_EA_DOGXL160_2_SW_I2C : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_i2c_ea_dogxl160_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1610_EA_DOGXL160_2_HW_I2C : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_i2c_ea_dogxl160_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1610_EA_DOGXL160_2_2ND_HW_I2C : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_i2c_ea_dogxl160_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1610_EA_DOGXL160_F_SW_I2C : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_i2c_ea_dogxl160_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1610_EA_DOGXL160_F_HW_I2C : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_i2c_ea_dogxl160_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1610_EA_DOGXL160_F_2ND_HW_I2C : public U8G2 { public: U8G2_UC1610_EA_DOGXL160_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1610_i2c_ea_dogxl160_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1611_EA_DOGM240_1_4W_SW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGM240_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGM240_1_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGM240_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EA_DOGM240_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGM240_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EA_DOGM240_1_3W_SW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGM240_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1611_EA_DOGM240_1_6800 : public U8G2 { public: U8G2_UC1611_EA_DOGM240_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGM240_1_8080 : public U8G2 { public: U8G2_UC1611_EA_DOGM240_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGM240_2_4W_SW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGM240_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGM240_2_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGM240_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EA_DOGM240_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGM240_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EA_DOGM240_2_3W_SW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGM240_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1611_EA_DOGM240_2_6800 : public U8G2 { public: U8G2_UC1611_EA_DOGM240_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGM240_2_8080 : public U8G2 { public: U8G2_UC1611_EA_DOGM240_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGM240_F_4W_SW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGM240_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGM240_F_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGM240_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EA_DOGM240_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGM240_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EA_DOGM240_F_3W_SW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGM240_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1611_EA_DOGM240_F_6800 : public U8G2 { public: U8G2_UC1611_EA_DOGM240_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGM240_F_8080 : public U8G2 { public: U8G2_UC1611_EA_DOGM240_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogm240_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGM240_1_SW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGM240_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogm240_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1611_EA_DOGM240_1_HW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGM240_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogm240_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1611_EA_DOGM240_1_2ND_HW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGM240_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogm240_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1611_EA_DOGM240_2_SW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGM240_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogm240_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1611_EA_DOGM240_2_HW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGM240_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogm240_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1611_EA_DOGM240_2_2ND_HW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGM240_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogm240_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1611_EA_DOGM240_F_SW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGM240_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogm240_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1611_EA_DOGM240_F_HW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGM240_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogm240_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1611_EA_DOGM240_F_2ND_HW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGM240_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogm240_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1611_EA_DOGXL240_1_4W_SW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGXL240_1_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EA_DOGXL240_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EA_DOGXL240_1_3W_SW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1611_EA_DOGXL240_1_6800 : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGXL240_1_8080 : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGXL240_2_4W_SW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGXL240_2_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EA_DOGXL240_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EA_DOGXL240_2_3W_SW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1611_EA_DOGXL240_2_6800 : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGXL240_2_8080 : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGXL240_F_4W_SW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGXL240_F_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EA_DOGXL240_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EA_DOGXL240_F_3W_SW_SPI : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1611_EA_DOGXL240_F_6800 : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGXL240_F_8080 : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ea_dogxl240_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EA_DOGXL240_1_SW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogxl240_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1611_EA_DOGXL240_1_HW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogxl240_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1611_EA_DOGXL240_1_2ND_HW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogxl240_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1611_EA_DOGXL240_2_SW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogxl240_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1611_EA_DOGXL240_2_HW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogxl240_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1611_EA_DOGXL240_2_2ND_HW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogxl240_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1611_EA_DOGXL240_F_SW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogxl240_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1611_EA_DOGXL240_F_HW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogxl240_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1611_EA_DOGXL240_F_2ND_HW_I2C : public U8G2 { public: U8G2_UC1611_EA_DOGXL240_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ea_dogxl240_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1611_EW50850_1_4W_SW_SPI : public U8G2 { public: U8G2_UC1611_EW50850_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1611_EW50850_1_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EW50850_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EW50850_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EW50850_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EW50850_1_3W_SW_SPI : public U8G2 { public: U8G2_UC1611_EW50850_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1611_EW50850_1_6800 : public U8G2 { public: U8G2_UC1611_EW50850_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EW50850_1_8080 : public U8G2 { public: U8G2_UC1611_EW50850_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EW50850_2_4W_SW_SPI : public U8G2 { public: U8G2_UC1611_EW50850_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1611_EW50850_2_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EW50850_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EW50850_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EW50850_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EW50850_2_3W_SW_SPI : public U8G2 { public: U8G2_UC1611_EW50850_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1611_EW50850_2_6800 : public U8G2 { public: U8G2_UC1611_EW50850_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EW50850_2_8080 : public U8G2 { public: U8G2_UC1611_EW50850_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EW50850_F_4W_SW_SPI : public U8G2 { public: U8G2_UC1611_EW50850_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1611_EW50850_F_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EW50850_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EW50850_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_EW50850_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_EW50850_F_3W_SW_SPI : public U8G2 { public: U8G2_UC1611_EW50850_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1611_EW50850_F_6800 : public U8G2 { public: U8G2_UC1611_EW50850_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EW50850_F_8080 : public U8G2 { public: U8G2_UC1611_EW50850_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_ew50850_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_EW50850_1_SW_I2C : public U8G2 { public: U8G2_UC1611_EW50850_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ew50850_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1611_EW50850_1_HW_I2C : public U8G2 { public: U8G2_UC1611_EW50850_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ew50850_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1611_EW50850_1_2ND_HW_I2C : public U8G2 { public: U8G2_UC1611_EW50850_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ew50850_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1611_EW50850_2_SW_I2C : public U8G2 { public: U8G2_UC1611_EW50850_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ew50850_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1611_EW50850_2_HW_I2C : public U8G2 { public: U8G2_UC1611_EW50850_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ew50850_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1611_EW50850_2_2ND_HW_I2C : public U8G2 { public: U8G2_UC1611_EW50850_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ew50850_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1611_EW50850_F_SW_I2C : public U8G2 { public: U8G2_UC1611_EW50850_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ew50850_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1611_EW50850_F_HW_I2C : public U8G2 { public: U8G2_UC1611_EW50850_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ew50850_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1611_EW50850_F_2ND_HW_I2C : public U8G2 { public: U8G2_UC1611_EW50850_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_ew50850_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1611_CG160160_1_4W_SW_SPI : public U8G2 { public: U8G2_UC1611_CG160160_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1611_CG160160_1_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_CG160160_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_CG160160_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_CG160160_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_CG160160_1_3W_SW_SPI : public U8G2 { public: U8G2_UC1611_CG160160_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1611_CG160160_1_6800 : public U8G2 { public: U8G2_UC1611_CG160160_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_CG160160_1_8080 : public U8G2 { public: U8G2_UC1611_CG160160_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_CG160160_2_4W_SW_SPI : public U8G2 { public: U8G2_UC1611_CG160160_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1611_CG160160_2_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_CG160160_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_CG160160_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_CG160160_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_CG160160_2_3W_SW_SPI : public U8G2 { public: U8G2_UC1611_CG160160_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1611_CG160160_2_6800 : public U8G2 { public: U8G2_UC1611_CG160160_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_CG160160_2_8080 : public U8G2 { public: U8G2_UC1611_CG160160_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_CG160160_F_4W_SW_SPI : public U8G2 { public: U8G2_UC1611_CG160160_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1611_CG160160_F_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_CG160160_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_CG160160_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1611_CG160160_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1611_CG160160_F_3W_SW_SPI : public U8G2 { public: U8G2_UC1611_CG160160_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1611_CG160160_F_6800 : public U8G2 { public: U8G2_UC1611_CG160160_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_CG160160_F_8080 : public U8G2 { public: U8G2_UC1611_CG160160_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_cg160160_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1611_CG160160_1_SW_I2C : public U8G2 { public: U8G2_UC1611_CG160160_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_cg160160_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1611_CG160160_1_HW_I2C : public U8G2 { public: U8G2_UC1611_CG160160_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_cg160160_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1611_CG160160_1_2ND_HW_I2C : public U8G2 { public: U8G2_UC1611_CG160160_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_cg160160_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1611_CG160160_2_SW_I2C : public U8G2 { public: U8G2_UC1611_CG160160_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_cg160160_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1611_CG160160_2_HW_I2C : public U8G2 { public: U8G2_UC1611_CG160160_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_cg160160_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1611_CG160160_2_2ND_HW_I2C : public U8G2 { public: U8G2_UC1611_CG160160_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_cg160160_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1611_CG160160_F_SW_I2C : public U8G2 { public: U8G2_UC1611_CG160160_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_cg160160_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1611_CG160160_F_HW_I2C : public U8G2 { public: U8G2_UC1611_CG160160_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_cg160160_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1611_CG160160_F_2ND_HW_I2C : public U8G2 { public: U8G2_UC1611_CG160160_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1611_i2c_cg160160_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7511_AVD_320X240_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7511_AVD_320X240_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7511_AVD_320X240_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7511_AVD_320X240_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7511_AVD_320X240_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7511_AVD_320X240_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7511_AVD_320X240_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7511_AVD_320X240_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7511_AVD_320X240_1_6800 : public U8G2 { public: U8G2_ST7511_AVD_320X240_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7511_AVD_320X240_1_8080 : public U8G2 { public: U8G2_ST7511_AVD_320X240_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7511_AVD_320X240_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7511_AVD_320X240_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7511_AVD_320X240_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7511_AVD_320X240_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7511_AVD_320X240_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7511_AVD_320X240_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7511_AVD_320X240_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7511_AVD_320X240_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7511_AVD_320X240_2_6800 : public U8G2 { public: U8G2_ST7511_AVD_320X240_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7511_AVD_320X240_2_8080 : public U8G2 { public: U8G2_ST7511_AVD_320X240_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7511_AVD_320X240_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7511_AVD_320X240_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7511_AVD_320X240_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7511_AVD_320X240_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7511_AVD_320X240_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7511_AVD_320X240_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7511_AVD_320X240_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7511_AVD_320X240_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7511_AVD_320X240_F_6800 : public U8G2 { public: U8G2_ST7511_AVD_320X240_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7511_AVD_320X240_F_8080 : public U8G2 { public: U8G2_ST7511_AVD_320X240_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7511_avd_320x240_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM128_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM128_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM128_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM128_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_EA_DOGM128_1_6800 : public U8G2 { public: U8G2_ST7565_EA_DOGM128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM128_1_8080 : public U8G2 { public: U8G2_ST7565_EA_DOGM128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LM6063_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_LM6063_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_LM6063_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LM6063_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LM6063_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LM6063_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LM6063_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_LM6063_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_LM6063_1_6800 : public U8G2 { public: U8G2_ST7565_LM6063_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LM6063_1_8080 : public U8G2 { public: U8G2_ST7565_LM6063_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_64128N_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_64128N_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_64128N_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_64128N_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_64128N_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_64128N_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_64128N_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_64128N_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_64128N_1_6800 : public U8G2 { public: U8G2_ST7565_64128N_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_64128N_1_8080 : public U8G2 { public: U8G2_ST7565_64128N_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ZOLEN_128X64_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_ZOLEN_128X64_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ZOLEN_128X64_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ZOLEN_128X64_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_ZOLEN_128X64_1_6800 : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ZOLEN_128X64_1_8080 : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LM6059_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_LM6059_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_LM6059_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LM6059_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LM6059_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LM6059_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LM6059_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_LM6059_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_LM6059_1_6800 : public U8G2 { public: U8G2_ST7565_LM6059_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LM6059_1_8080 : public U8G2 { public: U8G2_ST7565_LM6059_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LX12864_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_LX12864_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_LX12864_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LX12864_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LX12864_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LX12864_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LX12864_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_LX12864_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_LX12864_1_6800 : public U8G2 { public: U8G2_ST7565_LX12864_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LX12864_1_8080 : public U8G2 { public: U8G2_ST7565_LX12864_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ERC12864_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ERC12864_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_ERC12864_1_6800 : public U8G2 { public: U8G2_ST7565_ERC12864_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_1_8080 : public U8G2 { public: U8G2_ST7565_ERC12864_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_ALT_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_ALT_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ERC12864_ALT_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ERC12864_ALT_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_ERC12864_ALT_1_6800 : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_ALT_1_8080 : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12864_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12864_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12864_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12864_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_NHD_C12864_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12864_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_NHD_C12864_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12864_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_NHD_C12864_1_6800 : public U8G2 { public: U8G2_ST7565_NHD_C12864_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12864_1_8080 : public U8G2 { public: U8G2_ST7565_NHD_C12864_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_JLX12864_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_JLX12864_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_JLX12864_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_JLX12864_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_JLX12864_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_JLX12864_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_JLX12864_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_JLX12864_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_JLX12864_1_6800 : public U8G2 { public: U8G2_ST7565_JLX12864_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_JLX12864_1_8080 : public U8G2 { public: U8G2_ST7565_JLX12864_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM128_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM128_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM128_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM128_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_EA_DOGM128_2_6800 : public U8G2 { public: U8G2_ST7565_EA_DOGM128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM128_2_8080 : public U8G2 { public: U8G2_ST7565_EA_DOGM128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LM6063_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_LM6063_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_LM6063_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LM6063_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LM6063_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LM6063_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LM6063_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_LM6063_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_LM6063_2_6800 : public U8G2 { public: U8G2_ST7565_LM6063_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LM6063_2_8080 : public U8G2 { public: U8G2_ST7565_LM6063_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_64128N_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_64128N_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_64128N_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_64128N_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_64128N_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_64128N_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_64128N_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_64128N_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_64128N_2_6800 : public U8G2 { public: U8G2_ST7565_64128N_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_64128N_2_8080 : public U8G2 { public: U8G2_ST7565_64128N_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ZOLEN_128X64_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_ZOLEN_128X64_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ZOLEN_128X64_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ZOLEN_128X64_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_ZOLEN_128X64_2_6800 : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ZOLEN_128X64_2_8080 : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LM6059_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_LM6059_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_LM6059_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LM6059_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LM6059_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LM6059_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LM6059_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_LM6059_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_LM6059_2_6800 : public U8G2 { public: U8G2_ST7565_LM6059_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LM6059_2_8080 : public U8G2 { public: U8G2_ST7565_LM6059_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LX12864_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_LX12864_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_LX12864_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LX12864_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LX12864_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LX12864_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LX12864_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_LX12864_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_LX12864_2_6800 : public U8G2 { public: U8G2_ST7565_LX12864_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LX12864_2_8080 : public U8G2 { public: U8G2_ST7565_LX12864_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ERC12864_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ERC12864_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_ERC12864_2_6800 : public U8G2 { public: U8G2_ST7565_ERC12864_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_2_8080 : public U8G2 { public: U8G2_ST7565_ERC12864_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_ALT_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_ALT_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ERC12864_ALT_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ERC12864_ALT_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_ERC12864_ALT_2_6800 : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_ALT_2_8080 : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12864_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12864_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12864_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12864_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_NHD_C12864_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12864_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_NHD_C12864_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12864_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_NHD_C12864_2_6800 : public U8G2 { public: U8G2_ST7565_NHD_C12864_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12864_2_8080 : public U8G2 { public: U8G2_ST7565_NHD_C12864_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_JLX12864_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_JLX12864_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_JLX12864_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_JLX12864_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_JLX12864_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_JLX12864_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_JLX12864_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_JLX12864_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_JLX12864_2_6800 : public U8G2 { public: U8G2_ST7565_JLX12864_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_JLX12864_2_8080 : public U8G2 { public: U8G2_ST7565_JLX12864_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM128_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM128_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM128_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM128_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_EA_DOGM128_F_6800 : public U8G2 { public: U8G2_ST7565_EA_DOGM128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM128_F_8080 : public U8G2 { public: U8G2_ST7565_EA_DOGM128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LM6063_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_LM6063_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_LM6063_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LM6063_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LM6063_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LM6063_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LM6063_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_LM6063_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_LM6063_F_6800 : public U8G2 { public: U8G2_ST7565_LM6063_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LM6063_F_8080 : public U8G2 { public: U8G2_ST7565_LM6063_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6063_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_64128N_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_64128N_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_64128N_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_64128N_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_64128N_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_64128N_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_64128N_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_64128N_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_64128N_F_6800 : public U8G2 { public: U8G2_ST7565_64128N_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_64128N_F_8080 : public U8G2 { public: U8G2_ST7565_64128N_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_64128n_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ZOLEN_128X64_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_ZOLEN_128X64_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ZOLEN_128X64_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ZOLEN_128X64_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_ZOLEN_128X64_F_6800 : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ZOLEN_128X64_F_8080 : public U8G2 { public: U8G2_ST7565_ZOLEN_128X64_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_zolen_128x64_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LM6059_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_LM6059_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_LM6059_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LM6059_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LM6059_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LM6059_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LM6059_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_LM6059_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_LM6059_F_6800 : public U8G2 { public: U8G2_ST7565_LM6059_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LM6059_F_8080 : public U8G2 { public: U8G2_ST7565_LM6059_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lm6059_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LX12864_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_LX12864_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_LX12864_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LX12864_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LX12864_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_LX12864_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_LX12864_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_LX12864_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_LX12864_F_6800 : public U8G2 { public: U8G2_ST7565_LX12864_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_LX12864_F_8080 : public U8G2 { public: U8G2_ST7565_LX12864_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_lx12864_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ERC12864_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ERC12864_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_ERC12864_F_6800 : public U8G2 { public: U8G2_ST7565_ERC12864_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_F_8080 : public U8G2 { public: U8G2_ST7565_ERC12864_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_ALT_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_ALT_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ERC12864_ALT_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_ERC12864_ALT_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_ERC12864_ALT_F_6800 : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_ERC12864_ALT_F_8080 : public U8G2 { public: U8G2_ST7565_ERC12864_ALT_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_erc12864_alt_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12864_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12864_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12864_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12864_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_NHD_C12864_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12864_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_NHD_C12864_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12864_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_NHD_C12864_F_6800 : public U8G2 { public: U8G2_ST7565_NHD_C12864_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12864_F_8080 : public U8G2 { public: U8G2_ST7565_NHD_C12864_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12864_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_JLX12864_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_JLX12864_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_JLX12864_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_JLX12864_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_JLX12864_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_JLX12864_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_JLX12864_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_JLX12864_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_JLX12864_F_6800 : public U8G2 { public: U8G2_ST7565_JLX12864_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_JLX12864_F_8080 : public U8G2 { public: U8G2_ST7565_JLX12864_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12832_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12832_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12832_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12832_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_NHD_C12832_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12832_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_NHD_C12832_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12832_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_NHD_C12832_1_6800 : public U8G2 { public: U8G2_ST7565_NHD_C12832_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12832_1_8080 : public U8G2 { public: U8G2_ST7565_NHD_C12832_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12832_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12832_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12832_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12832_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_NHD_C12832_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12832_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_NHD_C12832_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12832_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_NHD_C12832_2_6800 : public U8G2 { public: U8G2_ST7565_NHD_C12832_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12832_2_8080 : public U8G2 { public: U8G2_ST7565_NHD_C12832_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12832_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12832_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12832_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12832_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_NHD_C12832_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12832_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_NHD_C12832_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_NHD_C12832_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_NHD_C12832_F_6800 : public U8G2 { public: U8G2_ST7565_NHD_C12832_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_NHD_C12832_F_8080 : public U8G2 { public: U8G2_ST7565_NHD_C12832_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_nhd_c12832_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1601_128X32_1_4W_SW_SPI : public U8G2 { public: U8G2_UC1601_128X32_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1601_128X32_1_4W_HW_SPI : public U8G2 { public: U8G2_UC1601_128X32_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1601_128X32_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1601_128X32_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1601_128X32_1_3W_SW_SPI : public U8G2 { public: U8G2_UC1601_128X32_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1601_128X32_1_6800 : public U8G2 { public: U8G2_UC1601_128X32_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1601_128X32_1_8080 : public U8G2 { public: U8G2_UC1601_128X32_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1601_128X32_2_4W_SW_SPI : public U8G2 { public: U8G2_UC1601_128X32_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1601_128X32_2_4W_HW_SPI : public U8G2 { public: U8G2_UC1601_128X32_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1601_128X32_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1601_128X32_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1601_128X32_2_3W_SW_SPI : public U8G2 { public: U8G2_UC1601_128X32_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1601_128X32_2_6800 : public U8G2 { public: U8G2_UC1601_128X32_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1601_128X32_2_8080 : public U8G2 { public: U8G2_UC1601_128X32_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1601_128X32_F_4W_SW_SPI : public U8G2 { public: U8G2_UC1601_128X32_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_UC1601_128X32_F_4W_HW_SPI : public U8G2 { public: U8G2_UC1601_128X32_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1601_128X32_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_UC1601_128X32_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_UC1601_128X32_F_3W_SW_SPI : public U8G2 { public: U8G2_UC1601_128X32_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_UC1601_128X32_F_6800 : public U8G2 { public: U8G2_UC1601_128X32_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1601_128X32_F_8080 : public U8G2 { public: U8G2_UC1601_128X32_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_128x32_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_UC1601_128X32_1_SW_I2C : public U8G2 { public: U8G2_UC1601_128X32_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_i2c_128x32_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1601_128X32_1_HW_I2C : public U8G2 { public: U8G2_UC1601_128X32_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_i2c_128x32_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1601_128X32_1_2ND_HW_I2C : public U8G2 { public: U8G2_UC1601_128X32_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_i2c_128x32_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1601_128X32_2_SW_I2C : public U8G2 { public: U8G2_UC1601_128X32_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_i2c_128x32_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1601_128X32_2_HW_I2C : public U8G2 { public: U8G2_UC1601_128X32_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_i2c_128x32_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1601_128X32_2_2ND_HW_I2C : public U8G2 { public: U8G2_UC1601_128X32_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_i2c_128x32_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_UC1601_128X32_F_SW_I2C : public U8G2 { public: U8G2_UC1601_128X32_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_i2c_128x32_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_UC1601_128X32_F_HW_I2C : public U8G2 { public: U8G2_UC1601_128X32_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_i2c_128x32_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_UC1601_128X32_F_2ND_HW_I2C : public U8G2 { public: U8G2_UC1601_128X32_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_uc1601_i2c_128x32_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7565_EA_DOGM132_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM132_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM132_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM132_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM132_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM132_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM132_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM132_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_EA_DOGM132_1_6800 : public U8G2 { public: U8G2_ST7565_EA_DOGM132_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM132_1_8080 : public U8G2 { public: U8G2_ST7565_EA_DOGM132_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM132_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM132_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM132_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM132_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM132_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM132_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM132_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM132_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_EA_DOGM132_2_6800 : public U8G2 { public: U8G2_ST7565_EA_DOGM132_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM132_2_8080 : public U8G2 { public: U8G2_ST7565_EA_DOGM132_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM132_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM132_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM132_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM132_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM132_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM132_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM132_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7565_EA_DOGM132_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7565_EA_DOGM132_F_6800 : public U8G2 { public: U8G2_ST7565_EA_DOGM132_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7565_EA_DOGM132_F_8080 : public U8G2 { public: U8G2_ST7565_EA_DOGM132_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7565_ea_dogm132_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_PI_132X64_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_PI_132X64_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_PI_132X64_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_PI_132X64_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_PI_132X64_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_PI_132X64_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_PI_132X64_1_6800 : public U8G2 { public: U8G2_ST7567_PI_132X64_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_PI_132X64_1_8080 : public U8G2 { public: U8G2_ST7567_PI_132X64_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_PI_132X64_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_PI_132X64_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_PI_132X64_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_PI_132X64_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_PI_132X64_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_PI_132X64_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_PI_132X64_2_6800 : public U8G2 { public: U8G2_ST7567_PI_132X64_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_PI_132X64_2_8080 : public U8G2 { public: U8G2_ST7567_PI_132X64_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_PI_132X64_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_PI_132X64_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_PI_132X64_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_PI_132X64_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_PI_132X64_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_PI_132X64_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_PI_132X64_F_6800 : public U8G2 { public: U8G2_ST7567_PI_132X64_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_PI_132X64_F_8080 : public U8G2 { public: U8G2_ST7567_PI_132X64_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_pi_132x64_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_JLX12864_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_JLX12864_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_JLX12864_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_JLX12864_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_JLX12864_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_JLX12864_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_JLX12864_1_6800 : public U8G2 { public: U8G2_ST7567_JLX12864_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_JLX12864_1_8080 : public U8G2 { public: U8G2_ST7567_JLX12864_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064_1_6800 : public U8G2 { public: U8G2_ST7567_ENH_DG128064_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064_1_8080 : public U8G2 { public: U8G2_ST7567_ENH_DG128064_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064I_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064I_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064I_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064I_1_6800 : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064I_1_8080 : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_JLX12864_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_JLX12864_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_JLX12864_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_JLX12864_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_JLX12864_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_JLX12864_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_JLX12864_2_6800 : public U8G2 { public: U8G2_ST7567_JLX12864_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_JLX12864_2_8080 : public U8G2 { public: U8G2_ST7567_JLX12864_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064_2_6800 : public U8G2 { public: U8G2_ST7567_ENH_DG128064_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064_2_8080 : public U8G2 { public: U8G2_ST7567_ENH_DG128064_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064I_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064I_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064I_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064I_2_6800 : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064I_2_8080 : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_JLX12864_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_JLX12864_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_JLX12864_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_JLX12864_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_JLX12864_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_JLX12864_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_JLX12864_F_6800 : public U8G2 { public: U8G2_ST7567_JLX12864_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_JLX12864_F_8080 : public U8G2 { public: U8G2_ST7567_JLX12864_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064_F_6800 : public U8G2 { public: U8G2_ST7567_ENH_DG128064_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064_F_8080 : public U8G2 { public: U8G2_ST7567_ENH_DG128064_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064I_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064I_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064I_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064I_F_6800 : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_ENH_DG128064I_F_8080 : public U8G2 { public: U8G2_ST7567_ENH_DG128064I_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_enh_dg128064i_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_64X32_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_64X32_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_64X32_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_64X32_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_64X32_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_64X32_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_64X32_1_6800 : public U8G2 { public: U8G2_ST7567_64X32_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_64X32_1_8080 : public U8G2 { public: U8G2_ST7567_64X32_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_64X32_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_64X32_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_64X32_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_64X32_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_64X32_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_64X32_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_64X32_2_6800 : public U8G2 { public: U8G2_ST7567_64X32_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_64X32_2_8080 : public U8G2 { public: U8G2_ST7567_64X32_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_64X32_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7567_64X32_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7567_64X32_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_64X32_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_64X32_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7567_64X32_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7567_64X32_F_6800 : public U8G2 { public: U8G2_ST7567_64X32_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_64X32_F_8080 : public U8G2 { public: U8G2_ST7567_64X32_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_64x32_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7567_64X32_1_SW_I2C : public U8G2 { public: U8G2_ST7567_64X32_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_64x32_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7567_64X32_1_HW_I2C : public U8G2 { public: U8G2_ST7567_64X32_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_64x32_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7567_64X32_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST7567_64X32_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_64x32_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7567_64X32_2_SW_I2C : public U8G2 { public: U8G2_ST7567_64X32_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_64x32_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7567_64X32_2_HW_I2C : public U8G2 { public: U8G2_ST7567_64X32_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_64x32_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7567_64X32_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST7567_64X32_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_64x32_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7567_64X32_F_SW_I2C : public U8G2 { public: U8G2_ST7567_64X32_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_64x32_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7567_64X32_F_HW_I2C : public U8G2 { public: U8G2_ST7567_64X32_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_64x32_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7567_64X32_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST7567_64X32_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7567_i2c_64x32_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7586S_S028HN118A_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7586S_S028HN118A_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_s028hn118a_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7586S_S028HN118A_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_S028HN118A_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_s028hn118a_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_S028HN118A_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_S028HN118A_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_s028hn118a_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_S028HN118A_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7586S_S028HN118A_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_s028hn118a_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7586S_S028HN118A_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_S028HN118A_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_s028hn118a_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_S028HN118A_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_S028HN118A_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_s028hn118a_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_S028HN118A_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7586S_S028HN118A_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_s028hn118a_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7586S_S028HN118A_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_S028HN118A_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_s028hn118a_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_S028HN118A_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_S028HN118A_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_s028hn118a_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_ERC240160_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7586S_ERC240160_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7586S_ERC240160_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_ERC240160_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_ERC240160_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_ERC240160_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_ERC240160_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7586S_ERC240160_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7586S_ERC240160_1_6800 : public U8G2 { public: U8G2_ST7586S_ERC240160_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7586S_ERC240160_1_8080 : public U8G2 { public: U8G2_ST7586S_ERC240160_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7586S_ERC240160_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7586S_ERC240160_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7586S_ERC240160_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_ERC240160_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_ERC240160_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_ERC240160_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_ERC240160_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7586S_ERC240160_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7586S_ERC240160_2_6800 : public U8G2 { public: U8G2_ST7586S_ERC240160_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7586S_ERC240160_2_8080 : public U8G2 { public: U8G2_ST7586S_ERC240160_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7586S_ERC240160_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7586S_ERC240160_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7586S_ERC240160_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_ERC240160_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_ERC240160_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7586S_ERC240160_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7586S_ERC240160_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7586S_ERC240160_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7586S_ERC240160_F_6800 : public U8G2 { public: U8G2_ST7586S_ERC240160_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7586S_ERC240160_F_8080 : public U8G2 { public: U8G2_ST7586S_ERC240160_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7586s_erc240160_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7588_JLX12864_1_4W_SW_SPI : public U8G2 { public: U8G2_ST7588_JLX12864_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7588_JLX12864_1_4W_HW_SPI : public U8G2 { public: U8G2_ST7588_JLX12864_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7588_JLX12864_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7588_JLX12864_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7588_JLX12864_1_3W_SW_SPI : public U8G2 { public: U8G2_ST7588_JLX12864_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7588_JLX12864_1_6800 : public U8G2 { public: U8G2_ST7588_JLX12864_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7588_JLX12864_1_8080 : public U8G2 { public: U8G2_ST7588_JLX12864_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7588_JLX12864_2_4W_SW_SPI : public U8G2 { public: U8G2_ST7588_JLX12864_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7588_JLX12864_2_4W_HW_SPI : public U8G2 { public: U8G2_ST7588_JLX12864_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7588_JLX12864_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7588_JLX12864_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7588_JLX12864_2_3W_SW_SPI : public U8G2 { public: U8G2_ST7588_JLX12864_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7588_JLX12864_2_6800 : public U8G2 { public: U8G2_ST7588_JLX12864_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7588_JLX12864_2_8080 : public U8G2 { public: U8G2_ST7588_JLX12864_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7588_JLX12864_F_4W_SW_SPI : public U8G2 { public: U8G2_ST7588_JLX12864_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST7588_JLX12864_F_4W_HW_SPI : public U8G2 { public: U8G2_ST7588_JLX12864_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7588_JLX12864_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST7588_JLX12864_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST7588_JLX12864_F_3W_SW_SPI : public U8G2 { public: U8G2_ST7588_JLX12864_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST7588_JLX12864_F_6800 : public U8G2 { public: U8G2_ST7588_JLX12864_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7588_JLX12864_F_8080 : public U8G2 { public: U8G2_ST7588_JLX12864_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST7588_JLX12864_1_SW_I2C : public U8G2 { public: U8G2_ST7588_JLX12864_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_i2c_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7588_JLX12864_1_HW_I2C : public U8G2 { public: U8G2_ST7588_JLX12864_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_i2c_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7588_JLX12864_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST7588_JLX12864_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_i2c_jlx12864_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7588_JLX12864_2_SW_I2C : public U8G2 { public: U8G2_ST7588_JLX12864_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_i2c_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7588_JLX12864_2_HW_I2C : public U8G2 { public: U8G2_ST7588_JLX12864_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_i2c_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7588_JLX12864_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST7588_JLX12864_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_i2c_jlx12864_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST7588_JLX12864_F_SW_I2C : public U8G2 { public: U8G2_ST7588_JLX12864_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_i2c_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST7588_JLX12864_F_HW_I2C : public U8G2 { public: U8G2_ST7588_JLX12864_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_i2c_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST7588_JLX12864_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST7588_JLX12864_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st7588_i2c_jlx12864_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX256128_1_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX256128_1_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256128_1_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256128_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX256128_1_6800 : public U8G2 { public: U8G2_ST75256_JLX256128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256128_1_8080 : public U8G2 { public: U8G2_ST75256_JLX256128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_WO256X128_1_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_WO256X128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_WO256X128_1_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_WO256X128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_WO256X128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_WO256X128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_WO256X128_1_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_WO256X128_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_WO256X128_1_6800 : public U8G2 { public: U8G2_ST75256_WO256X128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_WO256X128_1_8080 : public U8G2 { public: U8G2_ST75256_WO256X128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256128_2_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX256128_2_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256128_2_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256128_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX256128_2_6800 : public U8G2 { public: U8G2_ST75256_JLX256128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256128_2_8080 : public U8G2 { public: U8G2_ST75256_JLX256128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_WO256X128_2_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_WO256X128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_WO256X128_2_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_WO256X128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_WO256X128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_WO256X128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_WO256X128_2_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_WO256X128_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_WO256X128_2_6800 : public U8G2 { public: U8G2_ST75256_WO256X128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_WO256X128_2_8080 : public U8G2 { public: U8G2_ST75256_WO256X128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256128_F_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX256128_F_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256128_F_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256128_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX256128_F_6800 : public U8G2 { public: U8G2_ST75256_JLX256128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256128_F_8080 : public U8G2 { public: U8G2_ST75256_JLX256128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_WO256X128_F_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_WO256X128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_WO256X128_F_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_WO256X128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_WO256X128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_WO256X128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_WO256X128_F_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_WO256X128_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_WO256X128_F_6800 : public U8G2 { public: U8G2_ST75256_WO256X128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_WO256X128_F_8080 : public U8G2 { public: U8G2_ST75256_WO256X128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_wo256x128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256128_1_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX256128_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256128_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX256128_1_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256128_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256128_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX256128_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256128_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_WO256X128_1_SW_I2C : public U8G2 { public: U8G2_ST75256_WO256X128_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_wo256x128_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_WO256X128_1_HW_I2C : public U8G2 { public: U8G2_ST75256_WO256X128_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_wo256x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_WO256X128_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_WO256X128_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_wo256x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX256128_2_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX256128_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256128_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX256128_2_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256128_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256128_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX256128_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256128_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_WO256X128_2_SW_I2C : public U8G2 { public: U8G2_ST75256_WO256X128_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_wo256x128_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_WO256X128_2_HW_I2C : public U8G2 { public: U8G2_ST75256_WO256X128_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_wo256x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_WO256X128_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_WO256X128_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_wo256x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX256128_F_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX256128_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256128_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX256128_F_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256128_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256128_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX256128_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256128_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_WO256X128_F_SW_I2C : public U8G2 { public: U8G2_ST75256_WO256X128_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_wo256x128_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_WO256X128_F_HW_I2C : public U8G2 { public: U8G2_ST75256_WO256X128_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_wo256x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_WO256X128_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_WO256X128_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_wo256x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX256160_1_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_1_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160_1_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX256160_1_6800 : public U8G2 { public: U8G2_ST75256_JLX256160_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_1_8080 : public U8G2 { public: U8G2_ST75256_JLX256160_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160M_1_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160M_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX256160M_1_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160M_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160M_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160M_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160M_1_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160M_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX256160M_1_6800 : public U8G2 { public: U8G2_ST75256_JLX256160M_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160M_1_8080 : public U8G2 { public: U8G2_ST75256_JLX256160M_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_ALT_1_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_ALT_1_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160_ALT_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160_ALT_1_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX256160_ALT_1_6800 : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_ALT_1_8080 : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_2_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_2_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160_2_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX256160_2_6800 : public U8G2 { public: U8G2_ST75256_JLX256160_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_2_8080 : public U8G2 { public: U8G2_ST75256_JLX256160_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160M_2_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160M_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX256160M_2_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160M_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160M_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160M_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160M_2_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160M_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX256160M_2_6800 : public U8G2 { public: U8G2_ST75256_JLX256160M_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160M_2_8080 : public U8G2 { public: U8G2_ST75256_JLX256160M_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_ALT_2_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_ALT_2_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160_ALT_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160_ALT_2_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX256160_ALT_2_6800 : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_ALT_2_8080 : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_F_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_F_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160_F_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX256160_F_6800 : public U8G2 { public: U8G2_ST75256_JLX256160_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_F_8080 : public U8G2 { public: U8G2_ST75256_JLX256160_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160M_F_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160M_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX256160M_F_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160M_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160M_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160M_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160M_F_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160M_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX256160M_F_6800 : public U8G2 { public: U8G2_ST75256_JLX256160M_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160M_F_8080 : public U8G2 { public: U8G2_ST75256_JLX256160M_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160m_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_ALT_F_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_ALT_F_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160_ALT_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX256160_ALT_F_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX256160_ALT_F_6800 : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_ALT_F_8080 : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx256160_alt_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX256160_1_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX256160_1_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX256160_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX256160M_1_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160M_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160m_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX256160M_1_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160M_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160m_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX256160M_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160M_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160m_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX256160_ALT_1_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_alt_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX256160_ALT_1_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_alt_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX256160_ALT_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_alt_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX256160_2_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX256160_2_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX256160_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX256160M_2_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160M_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160m_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX256160M_2_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160M_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160m_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX256160M_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160M_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160m_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX256160_ALT_2_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_alt_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX256160_ALT_2_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_alt_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX256160_ALT_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_alt_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX256160_F_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX256160_F_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX256160_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX256160M_F_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160M_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160m_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX256160M_F_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160M_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160m_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX256160M_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160M_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160m_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX256160_ALT_F_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_alt_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX256160_ALT_F_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_alt_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX256160_ALT_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX256160_ALT_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx256160_alt_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX240160_1_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX240160_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX240160_1_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX240160_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX240160_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX240160_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX240160_1_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX240160_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX240160_1_6800 : public U8G2 { public: U8G2_ST75256_JLX240160_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX240160_1_8080 : public U8G2 { public: U8G2_ST75256_JLX240160_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX240160_2_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX240160_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX240160_2_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX240160_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX240160_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX240160_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX240160_2_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX240160_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX240160_2_6800 : public U8G2 { public: U8G2_ST75256_JLX240160_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX240160_2_8080 : public U8G2 { public: U8G2_ST75256_JLX240160_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX240160_F_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX240160_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX240160_F_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX240160_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX240160_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX240160_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX240160_F_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX240160_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX240160_F_6800 : public U8G2 { public: U8G2_ST75256_JLX240160_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX240160_F_8080 : public U8G2 { public: U8G2_ST75256_JLX240160_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx240160_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX240160_1_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX240160_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx240160_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX240160_1_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX240160_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx240160_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX240160_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX240160_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx240160_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX240160_2_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX240160_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx240160_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX240160_2_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX240160_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx240160_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX240160_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX240160_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx240160_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX240160_F_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX240160_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx240160_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX240160_F_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX240160_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx240160_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX240160_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX240160_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx240160_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX25664_1_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX25664_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX25664_1_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX25664_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX25664_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX25664_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX25664_1_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX25664_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX25664_1_6800 : public U8G2 { public: U8G2_ST75256_JLX25664_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX25664_1_8080 : public U8G2 { public: U8G2_ST75256_JLX25664_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX25664_2_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX25664_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX25664_2_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX25664_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX25664_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX25664_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX25664_2_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX25664_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX25664_2_6800 : public U8G2 { public: U8G2_ST75256_JLX25664_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX25664_2_8080 : public U8G2 { public: U8G2_ST75256_JLX25664_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX25664_F_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX25664_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX25664_F_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX25664_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX25664_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX25664_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX25664_F_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX25664_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX25664_F_6800 : public U8G2 { public: U8G2_ST75256_JLX25664_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX25664_F_8080 : public U8G2 { public: U8G2_ST75256_JLX25664_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx25664_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX25664_1_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX25664_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx25664_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX25664_1_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX25664_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx25664_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX25664_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX25664_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx25664_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX25664_2_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX25664_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx25664_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX25664_2_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX25664_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx25664_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX25664_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX25664_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx25664_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX25664_F_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX25664_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx25664_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX25664_F_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX25664_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx25664_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX25664_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX25664_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx25664_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX172104_1_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX172104_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX172104_1_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX172104_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX172104_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX172104_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX172104_1_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX172104_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX172104_1_6800 : public U8G2 { public: U8G2_ST75256_JLX172104_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX172104_1_8080 : public U8G2 { public: U8G2_ST75256_JLX172104_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX172104_2_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX172104_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX172104_2_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX172104_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX172104_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX172104_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX172104_2_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX172104_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX172104_2_6800 : public U8G2 { public: U8G2_ST75256_JLX172104_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX172104_2_8080 : public U8G2 { public: U8G2_ST75256_JLX172104_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX172104_F_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX172104_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX172104_F_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX172104_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX172104_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX172104_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX172104_F_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX172104_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX172104_F_6800 : public U8G2 { public: U8G2_ST75256_JLX172104_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX172104_F_8080 : public U8G2 { public: U8G2_ST75256_JLX172104_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx172104_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX172104_1_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX172104_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx172104_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX172104_1_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX172104_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx172104_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX172104_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX172104_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx172104_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX172104_2_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX172104_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx172104_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX172104_2_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX172104_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx172104_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX172104_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX172104_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx172104_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX172104_F_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX172104_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx172104_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX172104_F_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX172104_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx172104_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX172104_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX172104_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx172104_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX19296_1_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX19296_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX19296_1_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX19296_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX19296_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX19296_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX19296_1_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX19296_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX19296_1_6800 : public U8G2 { public: U8G2_ST75256_JLX19296_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX19296_1_8080 : public U8G2 { public: U8G2_ST75256_JLX19296_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX19296_2_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX19296_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX19296_2_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX19296_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX19296_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX19296_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX19296_2_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX19296_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX19296_2_6800 : public U8G2 { public: U8G2_ST75256_JLX19296_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX19296_2_8080 : public U8G2 { public: U8G2_ST75256_JLX19296_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX19296_F_4W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX19296_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75256_JLX19296_F_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX19296_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX19296_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75256_JLX19296_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75256_JLX19296_F_3W_SW_SPI : public U8G2 { public: U8G2_ST75256_JLX19296_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75256_JLX19296_F_6800 : public U8G2 { public: U8G2_ST75256_JLX19296_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX19296_F_8080 : public U8G2 { public: U8G2_ST75256_JLX19296_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_jlx19296_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75256_JLX19296_1_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX19296_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx19296_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX19296_1_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX19296_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx19296_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX19296_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX19296_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx19296_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX19296_2_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX19296_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx19296_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX19296_2_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX19296_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx19296_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX19296_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX19296_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx19296_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75256_JLX19296_F_SW_I2C : public U8G2 { public: U8G2_ST75256_JLX19296_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx19296_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75256_JLX19296_F_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX19296_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx19296_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75256_JLX19296_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST75256_JLX19296_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75256_i2c_jlx19296_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75320_JLX320240_1_4W_SW_SPI : public U8G2 { public: U8G2_ST75320_JLX320240_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75320_JLX320240_1_4W_HW_SPI : public U8G2 { public: U8G2_ST75320_JLX320240_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75320_JLX320240_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75320_JLX320240_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75320_JLX320240_1_3W_SW_SPI : public U8G2 { public: U8G2_ST75320_JLX320240_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75320_JLX320240_1_6800 : public U8G2 { public: U8G2_ST75320_JLX320240_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75320_JLX320240_1_8080 : public U8G2 { public: U8G2_ST75320_JLX320240_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75320_JLX320240_2_4W_SW_SPI : public U8G2 { public: U8G2_ST75320_JLX320240_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75320_JLX320240_2_4W_HW_SPI : public U8G2 { public: U8G2_ST75320_JLX320240_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75320_JLX320240_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75320_JLX320240_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75320_JLX320240_2_3W_SW_SPI : public U8G2 { public: U8G2_ST75320_JLX320240_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75320_JLX320240_2_6800 : public U8G2 { public: U8G2_ST75320_JLX320240_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75320_JLX320240_2_8080 : public U8G2 { public: U8G2_ST75320_JLX320240_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75320_JLX320240_F_4W_SW_SPI : public U8G2 { public: U8G2_ST75320_JLX320240_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_ST75320_JLX320240_F_4W_HW_SPI : public U8G2 { public: U8G2_ST75320_JLX320240_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75320_JLX320240_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_ST75320_JLX320240_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_ST75320_JLX320240_F_3W_SW_SPI : public U8G2 { public: U8G2_ST75320_JLX320240_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_ST75320_JLX320240_F_6800 : public U8G2 { public: U8G2_ST75320_JLX320240_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75320_JLX320240_F_8080 : public U8G2 { public: U8G2_ST75320_JLX320240_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_jlx320240_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_ST75320_JLX320240_1_SW_I2C : public U8G2 { public: U8G2_ST75320_JLX320240_1_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_i2c_jlx320240_1(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75320_JLX320240_1_HW_I2C : public U8G2 { public: U8G2_ST75320_JLX320240_1_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_i2c_jlx320240_1(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75320_JLX320240_1_2ND_HW_I2C : public U8G2 { public: U8G2_ST75320_JLX320240_1_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_i2c_jlx320240_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75320_JLX320240_2_SW_I2C : public U8G2 { public: U8G2_ST75320_JLX320240_2_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_i2c_jlx320240_2(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75320_JLX320240_2_HW_I2C : public U8G2 { public: U8G2_ST75320_JLX320240_2_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_i2c_jlx320240_2(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75320_JLX320240_2_2ND_HW_I2C : public U8G2 { public: U8G2_ST75320_JLX320240_2_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_i2c_jlx320240_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_ST75320_JLX320240_F_SW_I2C : public U8G2 { public: U8G2_ST75320_JLX320240_F_SW_I2C(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_i2c_jlx320240_f(&u8g2, rotation, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8G2_ST75320_JLX320240_F_HW_I2C : public U8G2 { public: U8G2_ST75320_JLX320240_F_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_i2c_jlx320240_f(&u8g2, rotation, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8G2_ST75320_JLX320240_F_2ND_HW_I2C : public U8G2 { public: U8G2_ST75320_JLX320240_F_2ND_HW_I2C(const u8g2_cb_t *rotation, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_st75320_i2c_jlx320240_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8G2_NT7534_TG12864R_1_4W_SW_SPI : public U8G2 { public: U8G2_NT7534_TG12864R_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_nt7534_tg12864r_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_NT7534_TG12864R_1_4W_HW_SPI : public U8G2 { public: U8G2_NT7534_TG12864R_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_nt7534_tg12864r_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_NT7534_TG12864R_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_NT7534_TG12864R_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_nt7534_tg12864r_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_NT7534_TG12864R_1_6800 : public U8G2 { public: U8G2_NT7534_TG12864R_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_nt7534_tg12864r_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_NT7534_TG12864R_1_8080 : public U8G2 { public: U8G2_NT7534_TG12864R_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_nt7534_tg12864r_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_NT7534_TG12864R_2_4W_SW_SPI : public U8G2 { public: U8G2_NT7534_TG12864R_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_nt7534_tg12864r_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_NT7534_TG12864R_2_4W_HW_SPI : public U8G2 { public: U8G2_NT7534_TG12864R_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_nt7534_tg12864r_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_NT7534_TG12864R_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_NT7534_TG12864R_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_nt7534_tg12864r_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_NT7534_TG12864R_2_6800 : public U8G2 { public: U8G2_NT7534_TG12864R_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_nt7534_tg12864r_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_NT7534_TG12864R_2_8080 : public U8G2 { public: U8G2_NT7534_TG12864R_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_nt7534_tg12864r_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_NT7534_TG12864R_F_4W_SW_SPI : public U8G2 { public: U8G2_NT7534_TG12864R_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_nt7534_tg12864r_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_NT7534_TG12864R_F_4W_HW_SPI : public U8G2 { public: U8G2_NT7534_TG12864R_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_nt7534_tg12864r_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_NT7534_TG12864R_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_NT7534_TG12864R_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_nt7534_tg12864r_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_NT7534_TG12864R_F_6800 : public U8G2 { public: U8G2_NT7534_TG12864R_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_nt7534_tg12864r_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_NT7534_TG12864R_F_8080 : public U8G2 { public: U8G2_NT7534_TG12864R_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_nt7534_tg12864r_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_IST3020_ERC19264_1_4W_SW_SPI : public U8G2 { public: U8G2_IST3020_ERC19264_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3020_erc19264_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_IST3020_ERC19264_1_4W_HW_SPI : public U8G2 { public: U8G2_IST3020_ERC19264_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3020_erc19264_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IST3020_ERC19264_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_IST3020_ERC19264_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3020_erc19264_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IST3020_ERC19264_1_6800 : public U8G2 { public: U8G2_IST3020_ERC19264_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3020_erc19264_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_IST3020_ERC19264_1_8080 : public U8G2 { public: U8G2_IST3020_ERC19264_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3020_erc19264_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_IST3020_ERC19264_2_4W_SW_SPI : public U8G2 { public: U8G2_IST3020_ERC19264_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3020_erc19264_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_IST3020_ERC19264_2_4W_HW_SPI : public U8G2 { public: U8G2_IST3020_ERC19264_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3020_erc19264_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IST3020_ERC19264_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_IST3020_ERC19264_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3020_erc19264_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IST3020_ERC19264_2_6800 : public U8G2 { public: U8G2_IST3020_ERC19264_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3020_erc19264_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_IST3020_ERC19264_2_8080 : public U8G2 { public: U8G2_IST3020_ERC19264_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3020_erc19264_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_IST3020_ERC19264_F_4W_SW_SPI : public U8G2 { public: U8G2_IST3020_ERC19264_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3020_erc19264_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_IST3020_ERC19264_F_4W_HW_SPI : public U8G2 { public: U8G2_IST3020_ERC19264_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3020_erc19264_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IST3020_ERC19264_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_IST3020_ERC19264_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3020_erc19264_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IST3020_ERC19264_F_6800 : public U8G2 { public: U8G2_IST3020_ERC19264_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3020_erc19264_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_IST3020_ERC19264_F_8080 : public U8G2 { public: U8G2_IST3020_ERC19264_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ist3020_erc19264_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SBN1661_122X32_1 : public U8G2 { public: U8G2_SBN1661_122X32_1(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t dc, uint8_t e1, uint8_t e2, uint8_t reset) : U8G2() { u8g2_Setup_sbn1661_122x32_1(&u8g2, rotation, u8x8_byte_sed1520, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SED1520(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, dc, e1, e2, reset); } }; class U8G2_SBN1661_122X32_2 : public U8G2 { public: U8G2_SBN1661_122X32_2(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t dc, uint8_t e1, uint8_t e2, uint8_t reset) : U8G2() { u8g2_Setup_sbn1661_122x32_2(&u8g2, rotation, u8x8_byte_sed1520, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SED1520(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, dc, e1, e2, reset); } }; class U8G2_SBN1661_122X32_F : public U8G2 { public: U8G2_SBN1661_122X32_F(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t dc, uint8_t e1, uint8_t e2, uint8_t reset) : U8G2() { u8g2_Setup_sbn1661_122x32_f(&u8g2, rotation, u8x8_byte_sed1520, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SED1520(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, dc, e1, e2, reset); } }; class U8G2_SED1520_122X32_1 : public U8G2 { public: U8G2_SED1520_122X32_1(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t dc, uint8_t e1, uint8_t e2, uint8_t reset) : U8G2() { u8g2_Setup_sed1520_122x32_1(&u8g2, rotation, u8x8_byte_sed1520, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SED1520(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, dc, e1, e2, reset); } }; class U8G2_SED1520_122X32_2 : public U8G2 { public: U8G2_SED1520_122X32_2(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t dc, uint8_t e1, uint8_t e2, uint8_t reset) : U8G2() { u8g2_Setup_sed1520_122x32_2(&u8g2, rotation, u8x8_byte_sed1520, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SED1520(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, dc, e1, e2, reset); } }; class U8G2_SED1520_122X32_F : public U8G2 { public: U8G2_SED1520_122X32_F(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t dc, uint8_t e1, uint8_t e2, uint8_t reset) : U8G2() { u8g2_Setup_sed1520_122x32_f(&u8g2, rotation, u8x8_byte_sed1520, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SED1520(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, dc, e1, e2, reset); } }; class U8G2_KS0108_128X64_1 : public U8G2 { public: U8G2_KS0108_128X64_1(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t dc, uint8_t cs0, uint8_t cs1, uint8_t cs2, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ks0108_128x64_1(&u8g2, rotation, u8x8_byte_arduino_ks0108, u8x8_gpio_and_delay_arduino); u8x8_SetPin_KS0108(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, dc, cs0, cs1, cs2, reset); } }; class U8G2_KS0108_128X64_2 : public U8G2 { public: U8G2_KS0108_128X64_2(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t dc, uint8_t cs0, uint8_t cs1, uint8_t cs2, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ks0108_128x64_2(&u8g2, rotation, u8x8_byte_arduino_ks0108, u8x8_gpio_and_delay_arduino); u8x8_SetPin_KS0108(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, dc, cs0, cs1, cs2, reset); } }; class U8G2_KS0108_128X64_F : public U8G2 { public: U8G2_KS0108_128X64_F(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t dc, uint8_t cs0, uint8_t cs1, uint8_t cs2, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ks0108_128x64_f(&u8g2, rotation, u8x8_byte_arduino_ks0108, u8x8_gpio_and_delay_arduino); u8x8_SetPin_KS0108(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, dc, cs0, cs1, cs2, reset); } }; class U8G2_KS0108_ERM19264_1 : public U8G2 { public: U8G2_KS0108_ERM19264_1(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t dc, uint8_t cs0, uint8_t cs1, uint8_t cs2, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ks0108_erm19264_1(&u8g2, rotation, u8x8_byte_arduino_ks0108, u8x8_gpio_and_delay_arduino); u8x8_SetPin_KS0108(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, dc, cs0, cs1, cs2, reset); } }; class U8G2_KS0108_ERM19264_2 : public U8G2 { public: U8G2_KS0108_ERM19264_2(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t dc, uint8_t cs0, uint8_t cs1, uint8_t cs2, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ks0108_erm19264_2(&u8g2, rotation, u8x8_byte_arduino_ks0108, u8x8_gpio_and_delay_arduino); u8x8_SetPin_KS0108(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, dc, cs0, cs1, cs2, reset); } }; class U8G2_KS0108_ERM19264_F : public U8G2 { public: U8G2_KS0108_ERM19264_F(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t dc, uint8_t cs0, uint8_t cs1, uint8_t cs2, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ks0108_erm19264_f(&u8g2, rotation, u8x8_byte_arduino_ks0108, u8x8_gpio_and_delay_arduino); u8x8_SetPin_KS0108(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, dc, cs0, cs1, cs2, reset); } }; class U8G2_LC7981_160X80_1_6800 : public U8G2 { public: U8G2_LC7981_160X80_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_lc7981_160x80_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_LC7981_160X80_2_6800 : public U8G2 { public: U8G2_LC7981_160X80_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_lc7981_160x80_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_LC7981_160X80_F_6800 : public U8G2 { public: U8G2_LC7981_160X80_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_lc7981_160x80_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_LC7981_160X160_1_6800 : public U8G2 { public: U8G2_LC7981_160X160_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_lc7981_160x160_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_LC7981_160X160_2_6800 : public U8G2 { public: U8G2_LC7981_160X160_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_lc7981_160x160_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_LC7981_160X160_F_6800 : public U8G2 { public: U8G2_LC7981_160X160_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_lc7981_160x160_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_LC7981_240X128_1_6800 : public U8G2 { public: U8G2_LC7981_240X128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_lc7981_240x128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_LC7981_240X128_2_6800 : public U8G2 { public: U8G2_LC7981_240X128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_lc7981_240x128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_LC7981_240X128_F_6800 : public U8G2 { public: U8G2_LC7981_240X128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_lc7981_240x128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_LC7981_240X64_1_6800 : public U8G2 { public: U8G2_LC7981_240X64_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_lc7981_240x64_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_LC7981_240X64_2_6800 : public U8G2 { public: U8G2_LC7981_240X64_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_lc7981_240x64_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_LC7981_240X64_F_6800 : public U8G2 { public: U8G2_LC7981_240X64_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_lc7981_240x64_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_240X128_1_8080 : public U8G2 { public: U8G2_T6963_240X128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_240x128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_240X128_2_8080 : public U8G2 { public: U8G2_T6963_240X128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_240x128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_240X128_F_8080 : public U8G2 { public: U8G2_T6963_240X128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_240x128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_240X64_1_8080 : public U8G2 { public: U8G2_T6963_240X64_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_240x64_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_240X64_2_8080 : public U8G2 { public: U8G2_T6963_240X64_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_240x64_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_240X64_F_8080 : public U8G2 { public: U8G2_T6963_240X64_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_240x64_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_256X64_1_8080 : public U8G2 { public: U8G2_T6963_256X64_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_256x64_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_256X64_2_8080 : public U8G2 { public: U8G2_T6963_256X64_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_256x64_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_256X64_F_8080 : public U8G2 { public: U8G2_T6963_256X64_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_256x64_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_128X64_1_8080 : public U8G2 { public: U8G2_T6963_128X64_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_128x64_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_128X64_ALT_1_8080 : public U8G2 { public: U8G2_T6963_128X64_ALT_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_128x64_alt_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_128X64_2_8080 : public U8G2 { public: U8G2_T6963_128X64_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_128x64_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_128X64_ALT_2_8080 : public U8G2 { public: U8G2_T6963_128X64_ALT_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_128x64_alt_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_128X64_F_8080 : public U8G2 { public: U8G2_T6963_128X64_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_128x64_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_128X64_ALT_F_8080 : public U8G2 { public: U8G2_T6963_128X64_ALT_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_128x64_alt_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_160X80_1_8080 : public U8G2 { public: U8G2_T6963_160X80_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_160x80_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_160X80_2_8080 : public U8G2 { public: U8G2_T6963_160X80_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_160x80_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_T6963_160X80_F_8080 : public U8G2 { public: U8G2_T6963_160X80_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_t6963_160x80_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1322_NHD_256X64_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_256X64_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1322_NHD_256X64_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_256X64_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1322_NHD_256X64_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_256X64_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1322_NHD_256X64_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_256X64_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1322_NHD_256X64_1_6800 : public U8G2 { public: U8G2_SSD1322_NHD_256X64_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1322_NHD_256X64_1_8080 : public U8G2 { public: U8G2_SSD1322_NHD_256X64_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1322_NHD_256X64_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_256X64_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1322_NHD_256X64_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_256X64_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1322_NHD_256X64_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_256X64_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1322_NHD_256X64_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_256X64_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1322_NHD_256X64_2_6800 : public U8G2 { public: U8G2_SSD1322_NHD_256X64_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1322_NHD_256X64_2_8080 : public U8G2 { public: U8G2_SSD1322_NHD_256X64_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1322_NHD_256X64_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_256X64_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1322_NHD_256X64_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_256X64_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1322_NHD_256X64_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_256X64_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1322_NHD_256X64_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_256X64_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1322_NHD_256X64_F_6800 : public U8G2 { public: U8G2_SSD1322_NHD_256X64_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1322_NHD_256X64_F_8080 : public U8G2 { public: U8G2_SSD1322_NHD_256X64_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_256x64_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1322_NHD_128X64_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_128X64_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1322_NHD_128X64_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_128X64_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1322_NHD_128X64_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_128X64_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1322_NHD_128X64_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_128X64_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1322_NHD_128X64_1_6800 : public U8G2 { public: U8G2_SSD1322_NHD_128X64_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1322_NHD_128X64_1_8080 : public U8G2 { public: U8G2_SSD1322_NHD_128X64_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1322_NHD_128X64_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_128X64_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1322_NHD_128X64_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_128X64_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1322_NHD_128X64_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_128X64_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1322_NHD_128X64_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_128X64_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1322_NHD_128X64_2_6800 : public U8G2 { public: U8G2_SSD1322_NHD_128X64_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1322_NHD_128X64_2_8080 : public U8G2 { public: U8G2_SSD1322_NHD_128X64_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1322_NHD_128X64_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_128X64_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1322_NHD_128X64_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_128X64_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1322_NHD_128X64_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_128X64_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1322_NHD_128X64_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1322_NHD_128X64_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1322_NHD_128X64_F_6800 : public U8G2 { public: U8G2_SSD1322_NHD_128X64_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1322_NHD_128X64_F_8080 : public U8G2 { public: U8G2_SSD1322_NHD_128X64_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1322_nhd_128x64_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SSD1606_172X72_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1606_172X72_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1606_172x72_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1606_172X72_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1606_172X72_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1606_172x72_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1606_172X72_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1606_172X72_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1606_172x72_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1606_172X72_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1606_172X72_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1606_172x72_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1606_172X72_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1606_172X72_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1606_172x72_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1606_172X72_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1606_172X72_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1606_172x72_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1606_172X72_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1606_172X72_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1606_172x72_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1606_172X72_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1606_172X72_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1606_172x72_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1606_172X72_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1606_172X72_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1606_172x72_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1606_172X72_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1606_172X72_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1606_172x72_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1606_172X72_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1606_172X72_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1606_172x72_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1606_172X72_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1606_172X72_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1606_172x72_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1607_200X200_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1607_200X200_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_200x200_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1607_200X200_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_200X200_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_200x200_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_200X200_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_200X200_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_200x200_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_200X200_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1607_200X200_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_200x200_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1607_GD_200X200_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1607_GD_200X200_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_gd_200x200_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1607_GD_200X200_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_GD_200X200_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_gd_200x200_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_GD_200X200_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_GD_200X200_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_gd_200x200_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_GD_200X200_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1607_GD_200X200_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_gd_200x200_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1607_WS_200X200_1_4W_SW_SPI : public U8G2 { public: U8G2_SSD1607_WS_200X200_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_ws_200x200_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1607_WS_200X200_1_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_WS_200X200_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_ws_200x200_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_WS_200X200_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_WS_200X200_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_ws_200x200_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_WS_200X200_1_3W_SW_SPI : public U8G2 { public: U8G2_SSD1607_WS_200X200_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_ws_200x200_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1607_200X200_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1607_200X200_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_200x200_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1607_200X200_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_200X200_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_200x200_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_200X200_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_200X200_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_200x200_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_200X200_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1607_200X200_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_200x200_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1607_GD_200X200_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1607_GD_200X200_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_gd_200x200_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1607_GD_200X200_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_GD_200X200_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_gd_200x200_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_GD_200X200_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_GD_200X200_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_gd_200x200_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_GD_200X200_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1607_GD_200X200_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_gd_200x200_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1607_WS_200X200_2_4W_SW_SPI : public U8G2 { public: U8G2_SSD1607_WS_200X200_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_ws_200x200_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1607_WS_200X200_2_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_WS_200X200_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_ws_200x200_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_WS_200X200_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_WS_200X200_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_ws_200x200_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_WS_200X200_2_3W_SW_SPI : public U8G2 { public: U8G2_SSD1607_WS_200X200_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_ws_200x200_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1607_200X200_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1607_200X200_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_200x200_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1607_200X200_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_200X200_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_200x200_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_200X200_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_200X200_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_200x200_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_200X200_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1607_200X200_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_200x200_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1607_GD_200X200_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1607_GD_200X200_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_gd_200x200_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1607_GD_200X200_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_GD_200X200_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_gd_200x200_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_GD_200X200_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_GD_200X200_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_gd_200x200_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_GD_200X200_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1607_GD_200X200_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_gd_200x200_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SSD1607_WS_200X200_F_4W_SW_SPI : public U8G2 { public: U8G2_SSD1607_WS_200X200_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_ws_200x200_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_SSD1607_WS_200X200_F_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_WS_200X200_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_ws_200x200_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_WS_200X200_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_SSD1607_WS_200X200_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_ws_200x200_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_SSD1607_WS_200X200_F_3W_SW_SPI : public U8G2 { public: U8G2_SSD1607_WS_200X200_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ssd1607_ws_200x200_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_IL3820_296X128_1_4W_SW_SPI : public U8G2 { public: U8G2_IL3820_296X128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_296x128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_IL3820_296X128_1_4W_HW_SPI : public U8G2 { public: U8G2_IL3820_296X128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_296x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IL3820_296X128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_IL3820_296X128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_296x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IL3820_296X128_1_3W_SW_SPI : public U8G2 { public: U8G2_IL3820_296X128_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_296x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_IL3820_V2_296X128_1_4W_SW_SPI : public U8G2 { public: U8G2_IL3820_V2_296X128_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_v2_296x128_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_IL3820_V2_296X128_1_4W_HW_SPI : public U8G2 { public: U8G2_IL3820_V2_296X128_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_v2_296x128_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IL3820_V2_296X128_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_IL3820_V2_296X128_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_v2_296x128_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IL3820_V2_296X128_1_3W_SW_SPI : public U8G2 { public: U8G2_IL3820_V2_296X128_1_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_v2_296x128_1(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_IL3820_296X128_2_4W_SW_SPI : public U8G2 { public: U8G2_IL3820_296X128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_296x128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_IL3820_296X128_2_4W_HW_SPI : public U8G2 { public: U8G2_IL3820_296X128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_296x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IL3820_296X128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_IL3820_296X128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_296x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IL3820_296X128_2_3W_SW_SPI : public U8G2 { public: U8G2_IL3820_296X128_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_296x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_IL3820_V2_296X128_2_4W_SW_SPI : public U8G2 { public: U8G2_IL3820_V2_296X128_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_v2_296x128_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_IL3820_V2_296X128_2_4W_HW_SPI : public U8G2 { public: U8G2_IL3820_V2_296X128_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_v2_296x128_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IL3820_V2_296X128_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_IL3820_V2_296X128_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_v2_296x128_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IL3820_V2_296X128_2_3W_SW_SPI : public U8G2 { public: U8G2_IL3820_V2_296X128_2_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_v2_296x128_2(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_IL3820_296X128_F_4W_SW_SPI : public U8G2 { public: U8G2_IL3820_296X128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_296x128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_IL3820_296X128_F_4W_HW_SPI : public U8G2 { public: U8G2_IL3820_296X128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_296x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IL3820_296X128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_IL3820_296X128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_296x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IL3820_296X128_F_3W_SW_SPI : public U8G2 { public: U8G2_IL3820_296X128_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_296x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_IL3820_V2_296X128_F_4W_SW_SPI : public U8G2 { public: U8G2_IL3820_V2_296X128_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_v2_296x128_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_IL3820_V2_296X128_F_4W_HW_SPI : public U8G2 { public: U8G2_IL3820_V2_296X128_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_v2_296x128_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IL3820_V2_296X128_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_IL3820_V2_296X128_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_v2_296x128_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_IL3820_V2_296X128_F_3W_SW_SPI : public U8G2 { public: U8G2_IL3820_V2_296X128_F_3W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_il3820_v2_296x128_f(&u8g2, rotation, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8G2_SED1330_240X128_1_6800 : public U8G2 { public: U8G2_SED1330_240X128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sed1330_240x128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SED1330_240X128_1_8080 : public U8G2 { public: U8G2_SED1330_240X128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sed1330_240x128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SED1330_240X128_2_6800 : public U8G2 { public: U8G2_SED1330_240X128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sed1330_240x128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SED1330_240X128_2_8080 : public U8G2 { public: U8G2_SED1330_240X128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sed1330_240x128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SED1330_240X128_F_6800 : public U8G2 { public: U8G2_SED1330_240X128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sed1330_240x128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_SED1330_240X128_F_8080 : public U8G2 { public: U8G2_SED1330_240X128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_sed1330_240x128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_RA8835_NHD_240X128_1_6800 : public U8G2 { public: U8G2_RA8835_NHD_240X128_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ra8835_nhd_240x128_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_RA8835_NHD_240X128_1_8080 : public U8G2 { public: U8G2_RA8835_NHD_240X128_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ra8835_nhd_240x128_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_RA8835_NHD_240X128_2_6800 : public U8G2 { public: U8G2_RA8835_NHD_240X128_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ra8835_nhd_240x128_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_RA8835_NHD_240X128_2_8080 : public U8G2 { public: U8G2_RA8835_NHD_240X128_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ra8835_nhd_240x128_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_RA8835_NHD_240X128_F_6800 : public U8G2 { public: U8G2_RA8835_NHD_240X128_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ra8835_nhd_240x128_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_RA8835_NHD_240X128_F_8080 : public U8G2 { public: U8G2_RA8835_NHD_240X128_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ra8835_nhd_240x128_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_RA8835_320X240_1_6800 : public U8G2 { public: U8G2_RA8835_320X240_1_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ra8835_320x240_1(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_RA8835_320X240_1_8080 : public U8G2 { public: U8G2_RA8835_320X240_1_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ra8835_320x240_1(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_RA8835_320X240_2_6800 : public U8G2 { public: U8G2_RA8835_320X240_2_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ra8835_320x240_2(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_RA8835_320X240_2_8080 : public U8G2 { public: U8G2_RA8835_320X240_2_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ra8835_320x240_2(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_RA8835_320X240_F_6800 : public U8G2 { public: U8G2_RA8835_320X240_F_6800(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ra8835_320x240_f(&u8g2, rotation, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_RA8835_320X240_F_8080 : public U8G2 { public: U8G2_RA8835_320X240_F_8080(const u8g2_cb_t *rotation, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_ra8835_320x240_f(&u8g2, rotation, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8G2_MAX7219_64X8_1_4W_SW_SPI : public U8G2 { public: U8G2_MAX7219_64X8_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_64x8_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_MAX7219_64X8_1_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_64X8_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_64x8_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_MAX7219_64X8_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_64X8_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_64x8_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_MAX7219_64X8_2_4W_SW_SPI : public U8G2 { public: U8G2_MAX7219_64X8_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_64x8_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_MAX7219_64X8_2_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_64X8_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_64x8_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_MAX7219_64X8_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_64X8_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_64x8_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_MAX7219_64X8_F_4W_SW_SPI : public U8G2 { public: U8G2_MAX7219_64X8_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_64x8_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_MAX7219_64X8_F_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_64X8_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_64x8_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_MAX7219_64X8_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_64X8_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_64x8_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_MAX7219_32X8_1_4W_SW_SPI : public U8G2 { public: U8G2_MAX7219_32X8_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_32x8_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_MAX7219_32X8_1_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_32X8_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_32x8_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_MAX7219_32X8_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_32X8_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_32x8_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_MAX7219_32X8_2_4W_SW_SPI : public U8G2 { public: U8G2_MAX7219_32X8_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_32x8_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_MAX7219_32X8_2_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_32X8_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_32x8_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_MAX7219_32X8_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_32X8_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_32x8_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_MAX7219_32X8_F_4W_SW_SPI : public U8G2 { public: U8G2_MAX7219_32X8_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_32x8_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_MAX7219_32X8_F_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_32X8_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_32x8_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_MAX7219_32X8_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_32X8_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_32x8_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_MAX7219_8X8_1_4W_SW_SPI : public U8G2 { public: U8G2_MAX7219_8X8_1_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_8x8_1(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_MAX7219_8X8_1_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_8X8_1_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_8x8_1(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_MAX7219_8X8_1_2ND_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_8X8_1_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_8x8_1(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_MAX7219_8X8_2_4W_SW_SPI : public U8G2 { public: U8G2_MAX7219_8X8_2_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_8x8_2(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_MAX7219_8X8_2_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_8X8_2_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_8x8_2(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_MAX7219_8X8_2_2ND_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_8X8_2_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_8x8_2(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_MAX7219_8X8_F_4W_SW_SPI : public U8G2 { public: U8G2_MAX7219_8X8_F_4W_SW_SPI(const u8g2_cb_t *rotation, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_8x8_f(&u8g2, rotation, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8G2_MAX7219_8X8_F_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_8X8_F_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_8x8_f(&u8g2, rotation, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8G2_MAX7219_8X8_F_2ND_4W_HW_SPI : public U8G2 { public: U8G2_MAX7219_8X8_F_2ND_4W_HW_SPI(const u8g2_cb_t *rotation, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8G2() { u8g2_Setup_max7219_8x8_f(&u8g2, rotation, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; /* Arduino constructor list end */ #endif // U8X8_USE_PINS class U8G2_BITMAP : public U8G2 { public: U8G2_BITMAP(uint16_t pixel_width, uint16_t pixel_height, const u8g2_cb_t *rotation) { u8g2_SetupBitmap(getU8g2(), rotation, pixel_width, pixel_height); } // This completely resets various settings, such as the // font, so be sure to re-initialize things void changeSize(uint16_t pixel_width, uint16_t pixel_height) { u8g2_SetupBitmap(getU8g2(), getU8g2()->cb, pixel_width, pixel_height); } }; #endif /* _U8G2LIB_HH */ ================================================ FILE: Drivers/u8g2/Inc/U8x8lib.h ================================================ /* U8x8lib.h C++ Arduino wrapper for the u8x8 struct and c functions. Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef _U8X8LIB_HH #define _U8X8LIB_HH #include #include #include "u8x8.h" /* Uncomment this to enable AVR optimization for I2C This is disabled by default, because it will not correctly set the pullups. Instead the SW will always drive the I2C bus. */ //#define U8X8_USE_ARDUINO_AVR_SW_I2C_OPTIMIZATION /* Assumption: All Arduino Boards have "SPI.h" */ #define U8X8_HAVE_HW_SPI /* Assumption: All Arduino Boards have "Wire.h" */ #define U8X8_HAVE_HW_I2C /* Undefine U8X8_HAVE_HW_SPI for those Boards without SPI.h */ #ifdef ARDUINO_AVR_DIGISPARK #ifdef KENDRYTE_K210 #ifdef U8X8_HAVE_HW_SPI #undef U8X8_HAVE_HW_SPI #endif #endif #ifdef U8X8_HAVE_HW_SPI #undef U8X8_HAVE_HW_SPI #endif #ifdef U8X8_HAVE_HW_I2C #undef U8X8_HAVE_HW_I2C #endif #endif #ifdef __AVR_ATtiny85__ #ifdef U8X8_HAVE_HW_SPI #undef U8X8_HAVE_HW_SPI #endif #ifdef U8X8_HAVE_HW_I2C #undef U8X8_HAVE_HW_I2C #endif #endif /* ATmegaXXM1 do not have I2C */ #if defined(__AVR_ATmega16M1__) || defined(__AVR_ATmega32M1__) || defined(__AVR_ATmega64M1__) #ifdef U8X8_HAVE_HW_I2C #undef U8X8_HAVE_HW_I2C #endif #endif /* ATmegaXXC1 do not have I2C */ #if defined(__AVR_ATmega16C1__) || defined(__AVR_ATmega32C1__) || defined(__AVR_ATmega64C1__) #ifdef U8X8_HAVE_HW_I2C #undef U8X8_HAVE_HW_I2C #endif #endif /* define U8X8_HAVE_2ND_HW_I2C if the board has a second wire interface*/ #ifdef U8X8_HAVE_HW_I2C #ifdef WIRE_INTERFACES_COUNT #if WIRE_INTERFACES_COUNT > 1 #define U8X8_HAVE_2ND_HW_I2C #endif #endif #endif /* U8X8_HAVE_HW_I2C */ /* define U8X8_HAVE_2ND_HW_SPI if the board has a second wire interface*/ /* As of writing this, I did not found any official board which supports this */ /* so this is not tested (May 2017), issue #224 */ /* fixed ifdef, #410, #377 */ /* meanwhile it is defined e.g. here: https://github.com/arduino/ArduinoCore-samd/blob/master/variants/mkrzero/variant.h#L91 */ /* so it should be available for mkrzero */ #ifdef SPI_INTERFACES_COUNT #if SPI_INTERFACES_COUNT > 1 #define U8X8_HAVE_2ND_HW_SPI #endif #endif extern "C" uint8_t u8x8_gpio_and_delay_arduino(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); extern "C" uint8_t u8x8_byte_arduino_8bit_8080mode(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); extern "C" uint8_t u8x8_byte_arduino_4wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); extern "C" uint8_t u8x8_byte_arduino_3wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); extern "C" uint8_t u8x8_byte_arduino_hw_spi(u8x8_t *u8g2, uint8_t msg, uint8_t arg_int, void *arg_ptr); extern "C" uint8_t u8x8_byte_arduino_2nd_hw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /* #244 */ extern "C" uint8_t u8x8_byte_arduino_sw_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); extern "C" uint8_t u8x8_byte_arduino_hw_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); extern "C" uint8_t u8x8_byte_arduino_2nd_hw_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); extern "C" uint8_t u8x8_byte_arduino_ks0108(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); #ifdef U8X8_USE_PINS void u8x8_SetPin_4Wire_SW_SPI(u8x8_t *u8x8, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset); void u8x8_SetPin_3Wire_SW_SPI(u8x8_t *u8x8, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset); void u8x8_SetPin_4Wire_HW_SPI(u8x8_t *u8x8, uint8_t cs, uint8_t dc, uint8_t reset); void u8x8_SetPin_ST7920_HW_SPI(u8x8_t *u8x8, uint8_t cs, uint8_t reset); void u8x8_SetPin_SW_I2C(u8x8_t *u8x8, uint8_t clock, uint8_t data, uint8_t reset); void u8x8_SetPin_HW_I2C(u8x8_t *u8x8, uint8_t reset, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE); void u8x8_SetPin_8Bit_6800(u8x8_t *u8x8, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset); void u8x8_SetPin_8Bit_8080(u8x8_t *u8x8, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t wr, uint8_t cs, uint8_t dc, uint8_t reset); void u8x8_SetPin_KS0108(u8x8_t *u8x8, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t dc, uint8_t cs0, uint8_t cs1, uint8_t cs2, uint8_t reset); void u8x8_SetPin_SED1520(u8x8_t *u8x8, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t dc, uint8_t e1, uint8_t e2, uint8_t reset); #endif //void u8x8_Setup_4Wire_SW_SPI(u8x8_t *u8x8, u8x8_msg_cb display_cb, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset); //void u8x8_Setup_3Wire_SW_SPI(u8x8_t *u8x8, u8x8_msg_cb display_cb, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset); //void u8x8_Setup_4Wire_HW_SPI(u8x8_t *u8x8, u8x8_msg_cb display_cb, uint8_t cs, uint8_t dc, uint8_t reset); //void u8x8_Setup_SSD13xx_SW_I2C(u8x8_t *u8x8, u8x8_msg_cb display_cb, uint8_t clock, uint8_t data, uint8_t reset); //void u8x8_Setup_8Bit_6800(u8x8_t *u8x8, u8x8_msg_cb display_cb, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset); //void u8x8_Setup_8Bit_8080(u8x8_t *u8x8, u8x8_msg_cb display_cb, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t wr, uint8_t cs, uint8_t dc, uint8_t reset); class U8X8 : public Print { protected: u8x8_t u8x8; public: uint8_t tx, ty; U8X8(void) { home(); } u8x8_t *getU8x8(void) { return &u8x8; } void sendF(const char *fmt, ...) { va_list va; va_start(va, fmt); u8x8_cad_vsendf(&u8x8, fmt, va); va_end(va); } uint32_t getBusClock(void) { return u8x8.bus_clock; } void setBusClock(uint32_t clock_speed) { u8x8.bus_clock = clock_speed; } void setI2CAddress(uint8_t adr) { u8x8_SetI2CAddress(&u8x8, adr); } uint8_t getCols(void) { return u8x8_GetCols(&u8x8); } uint8_t getRows(void) { return u8x8_GetRows(&u8x8); } void drawTile(uint8_t x, uint8_t y, uint8_t cnt, uint8_t *tile_ptr) { u8x8_DrawTile(&u8x8, x, y, cnt, tile_ptr); } #ifdef U8X8_WITH_USER_PTR void *getUserPtr() { return u8x8_GetUserPtr(&u8x8); } void setUserPtr(void *p) { u8x8_SetUserPtr(&u8x8, p); } #endif #ifdef U8X8_USE_PINS /* set the menu pins before calling begin() or initDisplay() */ void setMenuSelectPin(uint8_t val) { u8x8_SetMenuSelectPin(&u8x8, val); } void setMenuPrevPin(uint8_t val) { u8x8_SetMenuPrevPin(&u8x8, val); } void setMenuNextPin(uint8_t val) { u8x8_SetMenuNextPin(&u8x8, val); } void setMenuUpPin(uint8_t val) { u8x8_SetMenuUpPin(&u8x8, val); } void setMenuDownPin(uint8_t val) { u8x8_SetMenuDownPin(&u8x8, val); } void setMenuHomePin(uint8_t val) { u8x8_SetMenuHomePin(&u8x8, val); } #endif void initDisplay(void) { u8x8_InitDisplay(&u8x8); } void clearDisplay(void) { u8x8_ClearDisplay(&u8x8); } void fillDisplay(void) { u8x8_FillDisplay(&u8x8); } void setPowerSave(uint8_t is_enable) { u8x8_SetPowerSave(&u8x8, is_enable); } bool begin(void) { initDisplay(); clearDisplay(); setPowerSave(0); return 1; } #ifdef U8X8_USE_PINS /* use U8X8_PIN_NONE if a pin is not required */ bool begin(uint8_t menu_select_pin, uint8_t menu_next_pin, uint8_t menu_prev_pin, uint8_t menu_up_pin = U8X8_PIN_NONE, uint8_t menu_down_pin = U8X8_PIN_NONE, uint8_t menu_home_pin = U8X8_PIN_NONE) { setMenuSelectPin(menu_select_pin); setMenuNextPin(menu_next_pin); setMenuPrevPin(menu_prev_pin); setMenuUpPin(menu_up_pin); setMenuDownPin(menu_down_pin); setMenuHomePin(menu_home_pin); return begin(); } #endif void setFlipMode(uint8_t mode) { u8x8_SetFlipMode(&u8x8, mode); } void refreshDisplay(void) { // Dec 16: Only required for SSD1606 u8x8_RefreshDisplay(&u8x8); } void clearLine(uint8_t line) { u8x8_ClearLine(&u8x8, line); } void setContrast(uint8_t value) { u8x8_SetContrast(&u8x8, value); } void setInverseFont(uint8_t value) { u8x8_SetInverseFont(&u8x8, value); } void setFont(const uint8_t *font_8x8) { u8x8_SetFont(&u8x8, font_8x8); } void drawGlyph(uint8_t x, uint8_t y, uint8_t encoding) { u8x8_DrawGlyph(&u8x8, x, y, encoding); } void draw2x2Glyph(uint8_t x, uint8_t y, uint8_t encoding) { u8x8_Draw2x2Glyph(&u8x8, x, y, encoding); } void draw1x2Glyph(uint8_t x, uint8_t y, uint8_t encoding) { u8x8_Draw1x2Glyph(&u8x8, x, y, encoding); } void drawString(uint8_t x, uint8_t y, const char *s) { u8x8_DrawString(&u8x8, x, y, s); } void drawUTF8(uint8_t x, uint8_t y, const char *s) { u8x8_DrawUTF8(&u8x8, x, y, s); } void draw2x2String(uint8_t x, uint8_t y, const char *s) { u8x8_Draw2x2String(&u8x8, x, y, s); } void draw1x2String(uint8_t x, uint8_t y, const char *s) { u8x8_Draw1x2String(&u8x8, x, y, s); } void draw2x2UTF8(uint8_t x, uint8_t y, const char *s) { u8x8_Draw2x2UTF8(&u8x8, x, y, s); } void draw1x2UTF8(uint8_t x, uint8_t y, const char *s) { u8x8_Draw1x2UTF8(&u8x8, x, y, s); } uint8_t getUTF8Len(const char *s) { return u8x8_GetUTF8Len(&u8x8, s); } size_t write(uint8_t v); /* code extended and moved to .cpp file, issue 74 size_t write(uint8_t v) { u8x8_DrawGlyph(&u8x8, tx, ty, v); tx++; return 1; } */ size_t write(const uint8_t *buffer, size_t size) { size_t cnt = 0; while( size > 0 ) { cnt += write(*buffer++); size--; } return cnt; } void inverse(void) { setInverseFont(1); } void noInverse(void) { setInverseFont(0); } /* return 0 for no event or U8X8_MSG_GPIO_MENU_SELECT, */ /* U8X8_MSG_GPIO_MENU_NEXT, U8X8_MSG_GPIO_MENU_PREV, */ /* U8X8_MSG_GPIO_MENU_HOME */ uint8_t getMenuEvent(void) { return u8x8_GetMenuEvent(&u8x8); } uint8_t userInterfaceSelectionList(const char *title, uint8_t start_pos, const char *sl) { return u8x8_UserInterfaceSelectionList(&u8x8, title, start_pos, sl); } uint8_t userInterfaceMessage(const char *title1, const char *title2, const char *title3, const char *buttons) { return u8x8_UserInterfaceMessage(&u8x8, title1, title2, title3, buttons); } uint8_t userInterfaceInputValue(const char *title, const char *pre, uint8_t *value, uint8_t lo, uint8_t hi, uint8_t digits, const char *post) { return u8x8_UserInterfaceInputValue(&u8x8, title, pre, value, lo, hi, digits, post); } /* LiquidCrystal compatible functions */ void home(void) { tx = 0; ty = 0; } void clear(void) { clearDisplay(); home(); } void noDisplay(void) { u8x8_SetPowerSave(&u8x8, 1); } void display(void) { u8x8_SetPowerSave(&u8x8, 0); } void setCursor(uint8_t x, uint8_t y) { tx = x; ty = y; } void drawLog(uint8_t x, uint8_t y, class U8X8LOG &u8x8log); }; class U8X8LOG : public Print { public: u8log_t u8log; /* the constructor does nothing, use begin() instead */ U8X8LOG(void) { } /* connect to u8g2, draw to u8g2 whenever required */ bool begin(class U8X8 &u8x8, uint8_t width, uint8_t height, uint8_t *buf) { u8log_Init(&u8log, width, height, buf); u8log_SetCallback(&u8log, u8log_u8x8_cb, u8x8.getU8x8()); return true; } /* disconnected version, manual redraw required */ bool begin(uint8_t width, uint8_t height, uint8_t *buf) { u8log_Init(&u8log, width, height, buf); return true; } void setLineHeightOffset(int8_t line_height_offset) { u8log_SetLineHeightOffset(&u8log, line_height_offset); } void setRedrawMode(uint8_t is_redraw_line_for_each_char) { u8log_SetRedrawMode(&u8log, is_redraw_line_for_each_char); } /* virtual function for print base class */ size_t write(uint8_t v) { u8log_WriteChar(&u8log, v); return 1; } size_t write(const uint8_t *buffer, size_t size) { size_t cnt = 0; while( size > 0 ) { cnt += write(*buffer++); size--; } return cnt; } void writeString(const char *s) { u8log_WriteString(&u8log, s); } void writeChar(uint8_t c) { u8log_WriteChar(&u8log, c); } void writeHex8(uint8_t b) { u8log_WriteHex8(&u8log, b); } void writeHex16(uint16_t v) { u8log_WriteHex16(&u8log, v); } void writeHex32(uint32_t v) { u8log_WriteHex32(&u8log, v); } void writeDec8(uint8_t v, uint8_t d) { u8log_WriteDec8(&u8log, v, d); } void writeDec16(uint8_t v, uint8_t d) { u8log_WriteDec16(&u8log, v, d); } }; /* u8log_u8x8.c */ inline void U8X8::drawLog(uint8_t x, uint8_t y, class U8X8LOG &u8x8log) { u8x8_DrawLog(&u8x8, x, y, &(u8x8log.u8log)); } #ifdef U8X8_USE_PINS class U8X8_NULL : public U8X8 { public: U8X8_NULL(void) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_null_cb, u8x8_cad_empty, u8x8_byte_empty, u8x8_dummy_cb); } }; // constructor list start /* generated code (codebuild), u8g2 project */ class U8X8_SSD1305_128X32_NONAME_4W_SW_SPI : public U8X8 { public: U8X8_SSD1305_128X32_NONAME_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x32_noname, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1305_128X32_NONAME_4W_HW_SPI : public U8X8 { public: U8X8_SSD1305_128X32_NONAME_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x32_noname, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1305_128X32_NONAME_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1305_128X32_NONAME_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x32_noname, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1305_128X32_NONAME_6800 : public U8X8 { public: U8X8_SSD1305_128X32_NONAME_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x32_noname, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1305_128X32_NONAME_8080 : public U8X8 { public: U8X8_SSD1305_128X32_NONAME_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x32_noname, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1305_128X32_ADAFRUIT_4W_SW_SPI : public U8X8 { public: U8X8_SSD1305_128X32_ADAFRUIT_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x32_adafruit, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1305_128X32_ADAFRUIT_4W_HW_SPI : public U8X8 { public: U8X8_SSD1305_128X32_ADAFRUIT_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x32_adafruit, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1305_128X32_ADAFRUIT_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1305_128X32_ADAFRUIT_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x32_adafruit, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1305_128X32_ADAFRUIT_6800 : public U8X8 { public: U8X8_SSD1305_128X32_ADAFRUIT_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x32_adafruit, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1305_128X32_ADAFRUIT_8080 : public U8X8 { public: U8X8_SSD1305_128X32_ADAFRUIT_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x32_adafruit, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1305_128X32_NONAME_SW_I2C : public U8X8 { public: U8X8_SSD1305_128X32_NONAME_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x32_noname, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1305_128X32_NONAME_HW_I2C : public U8X8 { public: U8X8_SSD1305_128X32_NONAME_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x32_noname, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1305_128X32_NONAME_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1305_128X32_NONAME_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x32_noname, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1305_128X32_ADAFRUIT_SW_I2C : public U8X8 { public: U8X8_SSD1305_128X32_ADAFRUIT_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x32_adafruit, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1305_128X32_ADAFRUIT_HW_I2C : public U8X8 { public: U8X8_SSD1305_128X32_ADAFRUIT_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x32_adafruit, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1305_128X32_ADAFRUIT_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1305_128X32_ADAFRUIT_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x32_adafruit, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1305_128X64_ADAFRUIT_4W_SW_SPI : public U8X8 { public: U8X8_SSD1305_128X64_ADAFRUIT_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x64_adafruit, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1305_128X64_ADAFRUIT_4W_HW_SPI : public U8X8 { public: U8X8_SSD1305_128X64_ADAFRUIT_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x64_adafruit, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1305_128X64_ADAFRUIT_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1305_128X64_ADAFRUIT_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x64_adafruit, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1305_128X64_ADAFRUIT_6800 : public U8X8 { public: U8X8_SSD1305_128X64_ADAFRUIT_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x64_adafruit, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1305_128X64_ADAFRUIT_8080 : public U8X8 { public: U8X8_SSD1305_128X64_ADAFRUIT_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x64_adafruit, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1305_128X64_ADAFRUIT_SW_I2C : public U8X8 { public: U8X8_SSD1305_128X64_ADAFRUIT_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x64_adafruit, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1305_128X64_ADAFRUIT_HW_I2C : public U8X8 { public: U8X8_SSD1305_128X64_ADAFRUIT_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x64_adafruit, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1305_128X64_ADAFRUIT_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1305_128X64_ADAFRUIT_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1305_128x64_adafruit, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1306_128X64_NONAME_4W_SW_SPI : public U8X8 { public: U8X8_SSD1306_128X64_NONAME_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_noname, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1306_128X64_NONAME_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_128X64_NONAME_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_noname, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_128X64_NONAME_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_128X64_NONAME_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_noname, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_128X64_NONAME_3W_SW_SPI : public U8X8 { public: U8X8_SSD1306_128X64_NONAME_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_noname, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1306_128X64_NONAME_6800 : public U8X8 { public: U8X8_SSD1306_128X64_NONAME_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_noname, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_128X64_NONAME_8080 : public U8X8 { public: U8X8_SSD1306_128X64_NONAME_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_noname, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_128X64_VCOMH0_4W_SW_SPI : public U8X8 { public: U8X8_SSD1306_128X64_VCOMH0_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_vcomh0, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1306_128X64_VCOMH0_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_128X64_VCOMH0_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_vcomh0, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_128X64_VCOMH0_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_128X64_VCOMH0_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_vcomh0, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_128X64_VCOMH0_3W_SW_SPI : public U8X8 { public: U8X8_SSD1306_128X64_VCOMH0_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_vcomh0, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1306_128X64_VCOMH0_6800 : public U8X8 { public: U8X8_SSD1306_128X64_VCOMH0_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_vcomh0, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_128X64_VCOMH0_8080 : public U8X8 { public: U8X8_SSD1306_128X64_VCOMH0_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_vcomh0, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_128X64_ALT0_4W_SW_SPI : public U8X8 { public: U8X8_SSD1306_128X64_ALT0_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_alt0, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1306_128X64_ALT0_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_128X64_ALT0_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_alt0, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_128X64_ALT0_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_128X64_ALT0_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_alt0, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_128X64_ALT0_3W_SW_SPI : public U8X8 { public: U8X8_SSD1306_128X64_ALT0_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_alt0, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1306_128X64_ALT0_6800 : public U8X8 { public: U8X8_SSD1306_128X64_ALT0_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_alt0, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_128X64_ALT0_8080 : public U8X8 { public: U8X8_SSD1306_128X64_ALT0_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_alt0, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_128X64_NONAME_SW_I2C : public U8X8 { public: U8X8_SSD1306_128X64_NONAME_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_noname, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1306_128X64_NONAME_HW_I2C : public U8X8 { public: U8X8_SSD1306_128X64_NONAME_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_noname, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1306_128X64_NONAME_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1306_128X64_NONAME_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_noname, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1306_128X64_VCOMH0_SW_I2C : public U8X8 { public: U8X8_SSD1306_128X64_VCOMH0_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_vcomh0, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1306_128X64_VCOMH0_HW_I2C : public U8X8 { public: U8X8_SSD1306_128X64_VCOMH0_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_vcomh0, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1306_128X64_VCOMH0_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1306_128X64_VCOMH0_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_vcomh0, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1306_128X64_ALT0_SW_I2C : public U8X8 { public: U8X8_SSD1306_128X64_ALT0_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_alt0, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1306_128X64_ALT0_HW_I2C : public U8X8 { public: U8X8_SSD1306_128X64_ALT0_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_alt0, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1306_128X64_ALT0_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1306_128X64_ALT0_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x64_alt0, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SH1106_128X64_NONAME_4W_SW_SPI : public U8X8 { public: U8X8_SH1106_128X64_NONAME_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_noname, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SH1106_128X64_NONAME_4W_HW_SPI : public U8X8 { public: U8X8_SH1106_128X64_NONAME_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_noname, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1106_128X64_NONAME_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SH1106_128X64_NONAME_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_noname, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1106_128X64_NONAME_3W_SW_SPI : public U8X8 { public: U8X8_SH1106_128X64_NONAME_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_noname, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SH1106_128X64_NONAME_6800 : public U8X8 { public: U8X8_SH1106_128X64_NONAME_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_noname, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1106_128X64_NONAME_8080 : public U8X8 { public: U8X8_SH1106_128X64_NONAME_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_noname, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1106_128X64_VCOMH0_4W_SW_SPI : public U8X8 { public: U8X8_SH1106_128X64_VCOMH0_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_vcomh0, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SH1106_128X64_VCOMH0_4W_HW_SPI : public U8X8 { public: U8X8_SH1106_128X64_VCOMH0_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_vcomh0, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1106_128X64_VCOMH0_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SH1106_128X64_VCOMH0_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_vcomh0, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1106_128X64_VCOMH0_3W_SW_SPI : public U8X8 { public: U8X8_SH1106_128X64_VCOMH0_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_vcomh0, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SH1106_128X64_VCOMH0_6800 : public U8X8 { public: U8X8_SH1106_128X64_VCOMH0_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_vcomh0, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1106_128X64_VCOMH0_8080 : public U8X8 { public: U8X8_SH1106_128X64_VCOMH0_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_vcomh0, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1106_128X64_WINSTAR_4W_SW_SPI : public U8X8 { public: U8X8_SH1106_128X64_WINSTAR_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_winstar, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SH1106_128X64_WINSTAR_4W_HW_SPI : public U8X8 { public: U8X8_SH1106_128X64_WINSTAR_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_winstar, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1106_128X64_WINSTAR_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SH1106_128X64_WINSTAR_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_winstar, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1106_128X64_WINSTAR_3W_SW_SPI : public U8X8 { public: U8X8_SH1106_128X64_WINSTAR_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_winstar, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SH1106_128X64_WINSTAR_6800 : public U8X8 { public: U8X8_SH1106_128X64_WINSTAR_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_winstar, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1106_128X64_WINSTAR_8080 : public U8X8 { public: U8X8_SH1106_128X64_WINSTAR_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_winstar, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1106_128X64_NONAME_SW_I2C : public U8X8 { public: U8X8_SH1106_128X64_NONAME_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_noname, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SH1106_128X64_NONAME_HW_I2C : public U8X8 { public: U8X8_SH1106_128X64_NONAME_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_noname, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SH1106_128X64_NONAME_2ND_HW_I2C : public U8X8 { public: U8X8_SH1106_128X64_NONAME_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_noname, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SH1106_128X64_VCOMH0_SW_I2C : public U8X8 { public: U8X8_SH1106_128X64_VCOMH0_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_vcomh0, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SH1106_128X64_VCOMH0_HW_I2C : public U8X8 { public: U8X8_SH1106_128X64_VCOMH0_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_vcomh0, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SH1106_128X64_VCOMH0_2ND_HW_I2C : public U8X8 { public: U8X8_SH1106_128X64_VCOMH0_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_vcomh0, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SH1106_128X64_WINSTAR_SW_I2C : public U8X8 { public: U8X8_SH1106_128X64_WINSTAR_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_winstar, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SH1106_128X64_WINSTAR_HW_I2C : public U8X8 { public: U8X8_SH1106_128X64_WINSTAR_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_winstar, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SH1106_128X64_WINSTAR_2ND_HW_I2C : public U8X8 { public: U8X8_SH1106_128X64_WINSTAR_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_128x64_winstar, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SH1106_72X40_WISE_4W_SW_SPI : public U8X8 { public: U8X8_SH1106_72X40_WISE_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_72x40_wise, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SH1106_72X40_WISE_4W_HW_SPI : public U8X8 { public: U8X8_SH1106_72X40_WISE_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_72x40_wise, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1106_72X40_WISE_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SH1106_72X40_WISE_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_72x40_wise, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1106_72X40_WISE_3W_SW_SPI : public U8X8 { public: U8X8_SH1106_72X40_WISE_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_72x40_wise, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SH1106_72X40_WISE_6800 : public U8X8 { public: U8X8_SH1106_72X40_WISE_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_72x40_wise, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1106_72X40_WISE_8080 : public U8X8 { public: U8X8_SH1106_72X40_WISE_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_72x40_wise, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1106_72X40_WISE_SW_I2C : public U8X8 { public: U8X8_SH1106_72X40_WISE_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_72x40_wise, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SH1106_72X40_WISE_HW_I2C : public U8X8 { public: U8X8_SH1106_72X40_WISE_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_72x40_wise, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SH1106_72X40_WISE_2ND_HW_I2C : public U8X8 { public: U8X8_SH1106_72X40_WISE_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_72x40_wise, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SH1106_64X32_4W_SW_SPI : public U8X8 { public: U8X8_SH1106_64X32_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_64x32, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SH1106_64X32_4W_HW_SPI : public U8X8 { public: U8X8_SH1106_64X32_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_64x32, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1106_64X32_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SH1106_64X32_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_64x32, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1106_64X32_3W_SW_SPI : public U8X8 { public: U8X8_SH1106_64X32_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_64x32, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SH1106_64X32_6800 : public U8X8 { public: U8X8_SH1106_64X32_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_64x32, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1106_64X32_8080 : public U8X8 { public: U8X8_SH1106_64X32_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_64x32, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1106_64X32_SW_I2C : public U8X8 { public: U8X8_SH1106_64X32_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_64x32, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SH1106_64X32_HW_I2C : public U8X8 { public: U8X8_SH1106_64X32_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_64x32, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SH1106_64X32_2ND_HW_I2C : public U8X8 { public: U8X8_SH1106_64X32_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1106_64x32, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SH1107_64X128_4W_SW_SPI : public U8X8 { public: U8X8_SH1107_64X128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_64x128, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SH1107_64X128_4W_HW_SPI : public U8X8 { public: U8X8_SH1107_64X128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_64x128, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1107_64X128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SH1107_64X128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_64x128, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1107_64X128_3W_SW_SPI : public U8X8 { public: U8X8_SH1107_64X128_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_64x128, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SH1107_64X128_6800 : public U8X8 { public: U8X8_SH1107_64X128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_64x128, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1107_64X128_8080 : public U8X8 { public: U8X8_SH1107_64X128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_64x128, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1107_64X128_SW_I2C : public U8X8 { public: U8X8_SH1107_64X128_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_64x128, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SH1107_64X128_HW_I2C : public U8X8 { public: U8X8_SH1107_64X128_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_64x128, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SH1107_64X128_2ND_HW_I2C : public U8X8 { public: U8X8_SH1107_64X128_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_64x128, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SH1107_SEEED_96X96_4W_SW_SPI : public U8X8 { public: U8X8_SH1107_SEEED_96X96_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_96x96, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SH1107_SEEED_96X96_4W_HW_SPI : public U8X8 { public: U8X8_SH1107_SEEED_96X96_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_96x96, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1107_SEEED_96X96_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SH1107_SEEED_96X96_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_96x96, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1107_SEEED_96X96_3W_SW_SPI : public U8X8 { public: U8X8_SH1107_SEEED_96X96_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_96x96, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SH1107_SEEED_96X96_6800 : public U8X8 { public: U8X8_SH1107_SEEED_96X96_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_96x96, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1107_SEEED_96X96_8080 : public U8X8 { public: U8X8_SH1107_SEEED_96X96_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_96x96, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1107_SEEED_96X96_SW_I2C : public U8X8 { public: U8X8_SH1107_SEEED_96X96_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_96x96, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SH1107_SEEED_96X96_HW_I2C : public U8X8 { public: U8X8_SH1107_SEEED_96X96_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_96x96, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SH1107_SEEED_96X96_2ND_HW_I2C : public U8X8 { public: U8X8_SH1107_SEEED_96X96_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_96x96, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SH1107_128X128_4W_SW_SPI : public U8X8 { public: U8X8_SH1107_128X128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_128x128, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SH1107_128X128_4W_HW_SPI : public U8X8 { public: U8X8_SH1107_128X128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_128x128, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1107_128X128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SH1107_128X128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_128x128, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1107_128X128_3W_SW_SPI : public U8X8 { public: U8X8_SH1107_128X128_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_128x128, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SH1107_128X128_6800 : public U8X8 { public: U8X8_SH1107_128X128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_128x128, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1107_128X128_8080 : public U8X8 { public: U8X8_SH1107_128X128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_128x128, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1107_PIMORONI_128X128_4W_SW_SPI : public U8X8 { public: U8X8_SH1107_PIMORONI_128X128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_pimoroni_128x128, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SH1107_PIMORONI_128X128_4W_HW_SPI : public U8X8 { public: U8X8_SH1107_PIMORONI_128X128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_pimoroni_128x128, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1107_PIMORONI_128X128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SH1107_PIMORONI_128X128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_pimoroni_128x128, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1107_PIMORONI_128X128_3W_SW_SPI : public U8X8 { public: U8X8_SH1107_PIMORONI_128X128_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_pimoroni_128x128, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SH1107_PIMORONI_128X128_6800 : public U8X8 { public: U8X8_SH1107_PIMORONI_128X128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_pimoroni_128x128, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1107_PIMORONI_128X128_8080 : public U8X8 { public: U8X8_SH1107_PIMORONI_128X128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_pimoroni_128x128, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1107_SEEED_128X128_4W_SW_SPI : public U8X8 { public: U8X8_SH1107_SEEED_128X128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_128x128, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SH1107_SEEED_128X128_4W_HW_SPI : public U8X8 { public: U8X8_SH1107_SEEED_128X128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_128x128, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1107_SEEED_128X128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SH1107_SEEED_128X128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_128x128, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1107_SEEED_128X128_3W_SW_SPI : public U8X8 { public: U8X8_SH1107_SEEED_128X128_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_128x128, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SH1107_SEEED_128X128_6800 : public U8X8 { public: U8X8_SH1107_SEEED_128X128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_128x128, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1107_SEEED_128X128_8080 : public U8X8 { public: U8X8_SH1107_SEEED_128X128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_128x128, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1107_128X128_SW_I2C : public U8X8 { public: U8X8_SH1107_128X128_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_128x128, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SH1107_128X128_HW_I2C : public U8X8 { public: U8X8_SH1107_128X128_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_128x128, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SH1107_128X128_2ND_HW_I2C : public U8X8 { public: U8X8_SH1107_128X128_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_128x128, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SH1107_PIMORONI_128X128_SW_I2C : public U8X8 { public: U8X8_SH1107_PIMORONI_128X128_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_pimoroni_128x128, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SH1107_PIMORONI_128X128_HW_I2C : public U8X8 { public: U8X8_SH1107_PIMORONI_128X128_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_pimoroni_128x128, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SH1107_PIMORONI_128X128_2ND_HW_I2C : public U8X8 { public: U8X8_SH1107_PIMORONI_128X128_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_pimoroni_128x128, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SH1107_SEEED_128X128_SW_I2C : public U8X8 { public: U8X8_SH1107_SEEED_128X128_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_128x128, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SH1107_SEEED_128X128_HW_I2C : public U8X8 { public: U8X8_SH1107_SEEED_128X128_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_128x128, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SH1107_SEEED_128X128_2ND_HW_I2C : public U8X8 { public: U8X8_SH1107_SEEED_128X128_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1107_seeed_128x128, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SH1108_160X160_4W_SW_SPI : public U8X8 { public: U8X8_SH1108_160X160_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1108_160x160, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SH1108_160X160_4W_HW_SPI : public U8X8 { public: U8X8_SH1108_160X160_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1108_160x160, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1108_160X160_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SH1108_160X160_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1108_160x160, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1108_160X160_3W_SW_SPI : public U8X8 { public: U8X8_SH1108_160X160_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1108_160x160, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SH1108_160X160_6800 : public U8X8 { public: U8X8_SH1108_160X160_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1108_160x160, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1108_160X160_8080 : public U8X8 { public: U8X8_SH1108_160X160_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1108_160x160, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1108_160X160_SW_I2C : public U8X8 { public: U8X8_SH1108_160X160_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1108_160x160, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SH1108_160X160_HW_I2C : public U8X8 { public: U8X8_SH1108_160X160_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1108_160x160, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SH1108_160X160_2ND_HW_I2C : public U8X8 { public: U8X8_SH1108_160X160_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1108_160x160, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SH1122_256X64_4W_SW_SPI : public U8X8 { public: U8X8_SH1122_256X64_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1122_256x64, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SH1122_256X64_4W_HW_SPI : public U8X8 { public: U8X8_SH1122_256X64_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1122_256x64, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1122_256X64_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SH1122_256X64_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1122_256x64, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SH1122_256X64_3W_SW_SPI : public U8X8 { public: U8X8_SH1122_256X64_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1122_256x64, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SH1122_256X64_6800 : public U8X8 { public: U8X8_SH1122_256X64_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1122_256x64, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1122_256X64_8080 : public U8X8 { public: U8X8_SH1122_256X64_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1122_256x64, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SH1122_256X64_SW_I2C : public U8X8 { public: U8X8_SH1122_256X64_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1122_256x64, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SH1122_256X64_HW_I2C : public U8X8 { public: U8X8_SH1122_256X64_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1122_256x64, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SH1122_256X64_2ND_HW_I2C : public U8X8 { public: U8X8_SH1122_256X64_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sh1122_256x64, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1306_128X32_UNIVISION_4W_SW_SPI : public U8X8 { public: U8X8_SSD1306_128X32_UNIVISION_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_univision, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1306_128X32_UNIVISION_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_128X32_UNIVISION_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_univision, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_128X32_UNIVISION_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_128X32_UNIVISION_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_univision, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_128X32_UNIVISION_3W_SW_SPI : public U8X8 { public: U8X8_SSD1306_128X32_UNIVISION_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_univision, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1306_128X32_UNIVISION_6800 : public U8X8 { public: U8X8_SSD1306_128X32_UNIVISION_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_univision, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_128X32_UNIVISION_8080 : public U8X8 { public: U8X8_SSD1306_128X32_UNIVISION_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_univision, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_128X32_WINSTAR_4W_SW_SPI : public U8X8 { public: U8X8_SSD1306_128X32_WINSTAR_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_winstar, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1306_128X32_WINSTAR_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_128X32_WINSTAR_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_winstar, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_128X32_WINSTAR_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_128X32_WINSTAR_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_winstar, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_128X32_WINSTAR_3W_SW_SPI : public U8X8 { public: U8X8_SSD1306_128X32_WINSTAR_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_winstar, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1306_128X32_WINSTAR_6800 : public U8X8 { public: U8X8_SSD1306_128X32_WINSTAR_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_winstar, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_128X32_WINSTAR_8080 : public U8X8 { public: U8X8_SSD1306_128X32_WINSTAR_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_winstar, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_128X32_UNIVISION_SW_I2C : public U8X8 { public: U8X8_SSD1306_128X32_UNIVISION_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_univision, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1306_128X32_UNIVISION_HW_I2C : public U8X8 { public: U8X8_SSD1306_128X32_UNIVISION_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_univision, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1306_128X32_UNIVISION_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1306_128X32_UNIVISION_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_univision, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1306_128X32_WINSTAR_SW_I2C : public U8X8 { public: U8X8_SSD1306_128X32_WINSTAR_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_winstar, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1306_128X32_WINSTAR_HW_I2C : public U8X8 { public: U8X8_SSD1306_128X32_WINSTAR_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_winstar, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1306_128X32_WINSTAR_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1306_128X32_WINSTAR_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_128x32_winstar, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1306_64X48_ER_4W_SW_SPI : public U8X8 { public: U8X8_SSD1306_64X48_ER_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x48_er, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1306_64X48_ER_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_64X48_ER_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x48_er, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_64X48_ER_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_64X48_ER_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x48_er, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_64X48_ER_3W_SW_SPI : public U8X8 { public: U8X8_SSD1306_64X48_ER_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x48_er, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1306_64X48_ER_6800 : public U8X8 { public: U8X8_SSD1306_64X48_ER_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x48_er, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_64X48_ER_8080 : public U8X8 { public: U8X8_SSD1306_64X48_ER_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x48_er, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_64X48_ER_SW_I2C : public U8X8 { public: U8X8_SSD1306_64X48_ER_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x48_er, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1306_64X48_ER_HW_I2C : public U8X8 { public: U8X8_SSD1306_64X48_ER_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x48_er, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1306_64X48_ER_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1306_64X48_ER_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x48_er, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1306_48X64_WINSTAR_4W_SW_SPI : public U8X8 { public: U8X8_SSD1306_48X64_WINSTAR_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_48x64_winstar, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1306_48X64_WINSTAR_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_48X64_WINSTAR_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_48x64_winstar, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_48X64_WINSTAR_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_48X64_WINSTAR_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_48x64_winstar, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_48X64_WINSTAR_3W_SW_SPI : public U8X8 { public: U8X8_SSD1306_48X64_WINSTAR_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_48x64_winstar, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1306_48X64_WINSTAR_6800 : public U8X8 { public: U8X8_SSD1306_48X64_WINSTAR_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_48x64_winstar, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_48X64_WINSTAR_8080 : public U8X8 { public: U8X8_SSD1306_48X64_WINSTAR_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_48x64_winstar, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_48X64_WINSTAR_SW_I2C : public U8X8 { public: U8X8_SSD1306_48X64_WINSTAR_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_48x64_winstar, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1306_48X64_WINSTAR_HW_I2C : public U8X8 { public: U8X8_SSD1306_48X64_WINSTAR_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_48x64_winstar, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1306_48X64_WINSTAR_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1306_48X64_WINSTAR_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_48x64_winstar, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1306_64X32_NONAME_4W_SW_SPI : public U8X8 { public: U8X8_SSD1306_64X32_NONAME_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_noname, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1306_64X32_NONAME_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_64X32_NONAME_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_noname, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_64X32_NONAME_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_64X32_NONAME_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_noname, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_64X32_NONAME_3W_SW_SPI : public U8X8 { public: U8X8_SSD1306_64X32_NONAME_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_noname, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1306_64X32_NONAME_6800 : public U8X8 { public: U8X8_SSD1306_64X32_NONAME_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_noname, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_64X32_NONAME_8080 : public U8X8 { public: U8X8_SSD1306_64X32_NONAME_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_noname, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_64X32_1F_4W_SW_SPI : public U8X8 { public: U8X8_SSD1306_64X32_1F_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_1f, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1306_64X32_1F_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_64X32_1F_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_1f, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_64X32_1F_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_64X32_1F_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_1f, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_64X32_1F_3W_SW_SPI : public U8X8 { public: U8X8_SSD1306_64X32_1F_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_1f, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1306_64X32_1F_6800 : public U8X8 { public: U8X8_SSD1306_64X32_1F_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_1f, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_64X32_1F_8080 : public U8X8 { public: U8X8_SSD1306_64X32_1F_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_1f, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_64X32_NONAME_SW_I2C : public U8X8 { public: U8X8_SSD1306_64X32_NONAME_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_noname, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1306_64X32_NONAME_HW_I2C : public U8X8 { public: U8X8_SSD1306_64X32_NONAME_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_noname, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1306_64X32_NONAME_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1306_64X32_NONAME_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_noname, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1306_64X32_1F_SW_I2C : public U8X8 { public: U8X8_SSD1306_64X32_1F_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_1f, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1306_64X32_1F_HW_I2C : public U8X8 { public: U8X8_SSD1306_64X32_1F_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_1f, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1306_64X32_1F_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1306_64X32_1F_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_64x32_1f, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1306_96X16_ER_4W_SW_SPI : public U8X8 { public: U8X8_SSD1306_96X16_ER_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x16_er, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1306_96X16_ER_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_96X16_ER_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x16_er, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_96X16_ER_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1306_96X16_ER_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x16_er, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1306_96X16_ER_3W_SW_SPI : public U8X8 { public: U8X8_SSD1306_96X16_ER_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x16_er, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1306_96X16_ER_6800 : public U8X8 { public: U8X8_SSD1306_96X16_ER_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x16_er, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_96X16_ER_8080 : public U8X8 { public: U8X8_SSD1306_96X16_ER_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x16_er, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1306_96X16_ER_SW_I2C : public U8X8 { public: U8X8_SSD1306_96X16_ER_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x16_er, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1306_96X16_ER_HW_I2C : public U8X8 { public: U8X8_SSD1306_96X16_ER_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x16_er, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1306_96X16_ER_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1306_96X16_ER_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1306_96x16_er, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1309_128X64_NONAME2_4W_SW_SPI : public U8X8 { public: U8X8_SSD1309_128X64_NONAME2_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1309_128x64_noname2, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1309_128X64_NONAME2_4W_HW_SPI : public U8X8 { public: U8X8_SSD1309_128X64_NONAME2_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1309_128x64_noname2, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1309_128X64_NONAME2_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1309_128X64_NONAME2_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1309_128x64_noname2, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1309_128X64_NONAME2_6800 : public U8X8 { public: U8X8_SSD1309_128X64_NONAME2_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1309_128x64_noname2, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1309_128X64_NONAME2_8080 : public U8X8 { public: U8X8_SSD1309_128X64_NONAME2_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1309_128x64_noname2, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1309_128X64_NONAME2_SW_I2C : public U8X8 { public: U8X8_SSD1309_128X64_NONAME2_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1309_128x64_noname2, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1309_128X64_NONAME2_HW_I2C : public U8X8 { public: U8X8_SSD1309_128X64_NONAME2_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1309_128x64_noname2, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1309_128X64_NONAME2_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1309_128X64_NONAME2_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1309_128x64_noname2, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1309_128X64_NONAME0_4W_SW_SPI : public U8X8 { public: U8X8_SSD1309_128X64_NONAME0_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1309_128x64_noname0, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1309_128X64_NONAME0_4W_HW_SPI : public U8X8 { public: U8X8_SSD1309_128X64_NONAME0_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1309_128x64_noname0, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1309_128X64_NONAME0_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1309_128X64_NONAME0_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1309_128x64_noname0, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1309_128X64_NONAME0_6800 : public U8X8 { public: U8X8_SSD1309_128X64_NONAME0_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1309_128x64_noname0, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1309_128X64_NONAME0_8080 : public U8X8 { public: U8X8_SSD1309_128X64_NONAME0_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1309_128x64_noname0, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1309_128X64_NONAME0_SW_I2C : public U8X8 { public: U8X8_SSD1309_128X64_NONAME0_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1309_128x64_noname0, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1309_128X64_NONAME0_HW_I2C : public U8X8 { public: U8X8_SSD1309_128X64_NONAME0_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1309_128x64_noname0, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1309_128X64_NONAME0_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1309_128X64_NONAME0_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1309_128x64_noname0, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1316_128X32_4W_SW_SPI : public U8X8 { public: U8X8_SSD1316_128X32_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1316_128x32, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1316_128X32_4W_HW_SPI : public U8X8 { public: U8X8_SSD1316_128X32_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1316_128x32, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1316_128X32_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1316_128X32_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1316_128x32, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1316_128X32_6800 : public U8X8 { public: U8X8_SSD1316_128X32_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1316_128x32, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1316_128X32_8080 : public U8X8 { public: U8X8_SSD1316_128X32_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1316_128x32, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1316_128X32_SW_I2C : public U8X8 { public: U8X8_SSD1316_128X32_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1316_128x32, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1316_128X32_HW_I2C : public U8X8 { public: U8X8_SSD1316_128X32_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1316_128x32, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1316_128X32_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1316_128X32_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1316_128x32, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1317_96X96_4W_SW_SPI : public U8X8 { public: U8X8_SSD1317_96X96_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1317_96x96, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1317_96X96_4W_HW_SPI : public U8X8 { public: U8X8_SSD1317_96X96_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1317_96x96, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1317_96X96_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1317_96X96_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1317_96x96, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1317_96X96_6800 : public U8X8 { public: U8X8_SSD1317_96X96_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1317_96x96, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1317_96X96_8080 : public U8X8 { public: U8X8_SSD1317_96X96_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1317_96x96, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1317_96X96_SW_I2C : public U8X8 { public: U8X8_SSD1317_96X96_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1317_96x96, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1317_96X96_HW_I2C : public U8X8 { public: U8X8_SSD1317_96X96_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1317_96x96, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1317_96X96_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1317_96X96_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1317_96x96, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1318_128X96_4W_SW_SPI : public U8X8 { public: U8X8_SSD1318_128X96_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1318_128X96_4W_HW_SPI : public U8X8 { public: U8X8_SSD1318_128X96_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1318_128X96_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1318_128X96_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1318_128X96_3W_SW_SPI : public U8X8 { public: U8X8_SSD1318_128X96_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1318_128X96_6800 : public U8X8 { public: U8X8_SSD1318_128X96_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1318_128X96_8080 : public U8X8 { public: U8X8_SSD1318_128X96_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1318_128X96_XCP_4W_SW_SPI : public U8X8 { public: U8X8_SSD1318_128X96_XCP_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96_xcp, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1318_128X96_XCP_4W_HW_SPI : public U8X8 { public: U8X8_SSD1318_128X96_XCP_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96_xcp, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1318_128X96_XCP_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1318_128X96_XCP_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96_xcp, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1318_128X96_XCP_3W_SW_SPI : public U8X8 { public: U8X8_SSD1318_128X96_XCP_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96_xcp, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1318_128X96_XCP_6800 : public U8X8 { public: U8X8_SSD1318_128X96_XCP_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96_xcp, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1318_128X96_XCP_8080 : public U8X8 { public: U8X8_SSD1318_128X96_XCP_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96_xcp, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1318_128X96_SW_I2C : public U8X8 { public: U8X8_SSD1318_128X96_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1318_128X96_HW_I2C : public U8X8 { public: U8X8_SSD1318_128X96_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1318_128X96_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1318_128X96_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1318_128X96_XCP_SW_I2C : public U8X8 { public: U8X8_SSD1318_128X96_XCP_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96_xcp, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1318_128X96_XCP_HW_I2C : public U8X8 { public: U8X8_SSD1318_128X96_XCP_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96_xcp, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1318_128X96_XCP_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1318_128X96_XCP_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1318_128x96_xcp, u8x8_cad_ssd13xx_fast_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1325_NHD_128X64_4W_SW_SPI : public U8X8 { public: U8X8_SSD1325_NHD_128X64_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1325_nhd_128x64, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1325_NHD_128X64_4W_HW_SPI : public U8X8 { public: U8X8_SSD1325_NHD_128X64_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1325_nhd_128x64, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1325_NHD_128X64_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1325_NHD_128X64_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1325_nhd_128x64, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1325_NHD_128X64_3W_SW_SPI : public U8X8 { public: U8X8_SSD1325_NHD_128X64_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1325_nhd_128x64, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1325_NHD_128X64_6800 : public U8X8 { public: U8X8_SSD1325_NHD_128X64_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1325_nhd_128x64, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1325_NHD_128X64_8080 : public U8X8 { public: U8X8_SSD1325_NHD_128X64_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1325_nhd_128x64, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1325_NHD_128X64_SW_I2C : public U8X8 { public: U8X8_SSD1325_NHD_128X64_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1325_nhd_128x64, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1325_NHD_128X64_HW_I2C : public U8X8 { public: U8X8_SSD1325_NHD_128X64_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1325_nhd_128x64, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1325_NHD_128X64_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1325_NHD_128X64_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1325_nhd_128x64, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD0323_OS128064_4W_SW_SPI : public U8X8 { public: U8X8_SSD0323_OS128064_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd0323_os128064, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD0323_OS128064_4W_HW_SPI : public U8X8 { public: U8X8_SSD0323_OS128064_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd0323_os128064, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD0323_OS128064_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD0323_OS128064_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd0323_os128064, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD0323_OS128064_3W_SW_SPI : public U8X8 { public: U8X8_SSD0323_OS128064_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd0323_os128064, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD0323_OS128064_6800 : public U8X8 { public: U8X8_SSD0323_OS128064_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd0323_os128064, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD0323_OS128064_8080 : public U8X8 { public: U8X8_SSD0323_OS128064_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd0323_os128064, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD0323_OS128064_SW_I2C : public U8X8 { public: U8X8_SSD0323_OS128064_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd0323_os128064, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD0323_OS128064_HW_I2C : public U8X8 { public: U8X8_SSD0323_OS128064_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd0323_os128064, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD0323_OS128064_2ND_HW_I2C : public U8X8 { public: U8X8_SSD0323_OS128064_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd0323_os128064, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1326_ER_256X32_4W_SW_SPI : public U8X8 { public: U8X8_SSD1326_ER_256X32_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1326_er_256x32, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1326_ER_256X32_4W_HW_SPI : public U8X8 { public: U8X8_SSD1326_ER_256X32_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1326_er_256x32, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1326_ER_256X32_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1326_ER_256X32_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1326_er_256x32, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1326_ER_256X32_3W_SW_SPI : public U8X8 { public: U8X8_SSD1326_ER_256X32_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1326_er_256x32, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1326_ER_256X32_6800 : public U8X8 { public: U8X8_SSD1326_ER_256X32_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1326_er_256x32, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1326_ER_256X32_8080 : public U8X8 { public: U8X8_SSD1326_ER_256X32_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1326_er_256x32, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1326_ER_256X32_SW_I2C : public U8X8 { public: U8X8_SSD1326_ER_256X32_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1326_er_256x32, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1326_ER_256X32_HW_I2C : public U8X8 { public: U8X8_SSD1326_ER_256X32_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1326_er_256x32, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1326_ER_256X32_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1326_ER_256X32_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1326_er_256x32, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1327_SEEED_96X96_4W_SW_SPI : public U8X8 { public: U8X8_SSD1327_SEEED_96X96_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_seeed_96x96, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1327_SEEED_96X96_4W_HW_SPI : public U8X8 { public: U8X8_SSD1327_SEEED_96X96_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_seeed_96x96, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1327_SEEED_96X96_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1327_SEEED_96X96_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_seeed_96x96, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1327_SEEED_96X96_3W_SW_SPI : public U8X8 { public: U8X8_SSD1327_SEEED_96X96_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_seeed_96x96, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1327_SEEED_96X96_6800 : public U8X8 { public: U8X8_SSD1327_SEEED_96X96_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_seeed_96x96, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1327_SEEED_96X96_8080 : public U8X8 { public: U8X8_SSD1327_SEEED_96X96_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_seeed_96x96, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1327_SEEED_96X96_SW_I2C : public U8X8 { public: U8X8_SSD1327_SEEED_96X96_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_seeed_96x96, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1327_SEEED_96X96_HW_I2C : public U8X8 { public: U8X8_SSD1327_SEEED_96X96_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_seeed_96x96, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1327_SEEED_96X96_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1327_SEEED_96X96_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_seeed_96x96, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1327_EA_W128128_4W_SW_SPI : public U8X8 { public: U8X8_SSD1327_EA_W128128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ea_w128128, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1327_EA_W128128_4W_HW_SPI : public U8X8 { public: U8X8_SSD1327_EA_W128128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ea_w128128, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1327_EA_W128128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1327_EA_W128128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ea_w128128, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1327_EA_W128128_3W_SW_SPI : public U8X8 { public: U8X8_SSD1327_EA_W128128_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ea_w128128, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1327_EA_W128128_6800 : public U8X8 { public: U8X8_SSD1327_EA_W128128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ea_w128128, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1327_EA_W128128_8080 : public U8X8 { public: U8X8_SSD1327_EA_W128128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ea_w128128, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1327_MIDAS_128X128_4W_SW_SPI : public U8X8 { public: U8X8_SSD1327_MIDAS_128X128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_midas_128x128, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1327_MIDAS_128X128_4W_HW_SPI : public U8X8 { public: U8X8_SSD1327_MIDAS_128X128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_midas_128x128, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1327_MIDAS_128X128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1327_MIDAS_128X128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_midas_128x128, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1327_MIDAS_128X128_3W_SW_SPI : public U8X8 { public: U8X8_SSD1327_MIDAS_128X128_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_midas_128x128, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1327_MIDAS_128X128_6800 : public U8X8 { public: U8X8_SSD1327_MIDAS_128X128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_midas_128x128, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1327_MIDAS_128X128_8080 : public U8X8 { public: U8X8_SSD1327_MIDAS_128X128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_midas_128x128, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1327_WS_128X128_4W_SW_SPI : public U8X8 { public: U8X8_SSD1327_WS_128X128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ws_128x128, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1327_WS_128X128_4W_HW_SPI : public U8X8 { public: U8X8_SSD1327_WS_128X128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ws_128x128, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1327_WS_128X128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1327_WS_128X128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ws_128x128, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1327_WS_128X128_3W_SW_SPI : public U8X8 { public: U8X8_SSD1327_WS_128X128_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ws_128x128, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1327_WS_128X128_6800 : public U8X8 { public: U8X8_SSD1327_WS_128X128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ws_128x128, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1327_WS_128X128_8080 : public U8X8 { public: U8X8_SSD1327_WS_128X128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ws_128x128, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1327_EA_W128128_SW_I2C : public U8X8 { public: U8X8_SSD1327_EA_W128128_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ea_w128128, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1327_EA_W128128_HW_I2C : public U8X8 { public: U8X8_SSD1327_EA_W128128_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ea_w128128, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1327_EA_W128128_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1327_EA_W128128_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ea_w128128, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1327_MIDAS_128X128_SW_I2C : public U8X8 { public: U8X8_SSD1327_MIDAS_128X128_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_midas_128x128, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1327_MIDAS_128X128_HW_I2C : public U8X8 { public: U8X8_SSD1327_MIDAS_128X128_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_midas_128x128, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1327_MIDAS_128X128_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1327_MIDAS_128X128_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_midas_128x128, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1327_WS_128X128_SW_I2C : public U8X8 { public: U8X8_SSD1327_WS_128X128_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ws_128x128, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_SSD1327_WS_128X128_HW_I2C : public U8X8 { public: U8X8_SSD1327_WS_128X128_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ws_128x128, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_SSD1327_WS_128X128_2ND_HW_I2C : public U8X8 { public: U8X8_SSD1327_WS_128X128_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1327_ws_128x128, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_SSD1329_128X96_NONAME_4W_SW_SPI : public U8X8 { public: U8X8_SSD1329_128X96_NONAME_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1329_128x96_noname, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1329_128X96_NONAME_4W_HW_SPI : public U8X8 { public: U8X8_SSD1329_128X96_NONAME_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1329_128x96_noname, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1329_128X96_NONAME_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1329_128X96_NONAME_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1329_128x96_noname, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1329_128X96_NONAME_6800 : public U8X8 { public: U8X8_SSD1329_128X96_NONAME_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1329_128x96_noname, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1329_128X96_NONAME_8080 : public U8X8 { public: U8X8_SSD1329_128X96_NONAME_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1329_128x96_noname, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_LD7032_60X32_4W_SW_SPI : public U8X8 { public: U8X8_LD7032_60X32_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ld7032_60x32, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_LD7032_60X32_4W_HW_SPI : public U8X8 { public: U8X8_LD7032_60X32_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ld7032_60x32, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_LD7032_60X32_2ND_4W_HW_SPI : public U8X8 { public: U8X8_LD7032_60X32_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ld7032_60x32, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_LD7032_60X32_SW_I2C : public U8X8 { public: U8X8_LD7032_60X32_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ld7032_60x32, u8x8_cad_ld7032_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_LD7032_60X32_HW_I2C : public U8X8 { public: U8X8_LD7032_60X32_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ld7032_60x32, u8x8_cad_ld7032_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_LD7032_60X32_2ND_HW_I2C : public U8X8 { public: U8X8_LD7032_60X32_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ld7032_60x32, u8x8_cad_ld7032_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST7920_192X32_8080 : public U8X8 { public: U8X8_ST7920_192X32_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7920_192x32, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7920_192X32_6800 : public U8X8 { public: U8X8_ST7920_192X32_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7920_192x32, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7920_192X32_SW_SPI : public U8X8 { public: U8X8_ST7920_192X32_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7920_192x32, u8x8_cad_st7920_spi, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7920_192X32_HW_SPI : public U8X8 { public: U8X8_ST7920_192X32_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7920_192x32, u8x8_cad_st7920_spi, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7920_192X32_2ND_HW_SPI : public U8X8 { public: U8X8_ST7920_192X32_2ND_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7920_192x32, u8x8_cad_st7920_spi, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7920_128X64_8080 : public U8X8 { public: U8X8_ST7920_128X64_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7920_128x64, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7920_128X64_6800 : public U8X8 { public: U8X8_ST7920_128X64_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7920_128x64, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7920_128X64_SW_SPI : public U8X8 { public: U8X8_ST7920_128X64_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7920_128x64, u8x8_cad_st7920_spi, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7920_128X64_HW_SPI : public U8X8 { public: U8X8_ST7920_128X64_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7920_128x64, u8x8_cad_st7920_spi, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_ST7920_128X64_2ND_HW_SPI : public U8X8 { public: U8X8_ST7920_128X64_2ND_HW_SPI(uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7920_128x64, u8x8_cad_st7920_spi, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_ST7920_HW_SPI(getU8x8(), cs, reset); } }; class U8X8_LS013B7DH03_128X128_4W_SW_SPI : public U8X8 { public: U8X8_LS013B7DH03_128X128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ls013b7dh03_128x128, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_LS013B7DH03_128X128_4W_HW_SPI : public U8X8 { public: U8X8_LS013B7DH03_128X128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ls013b7dh03_128x128, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_LS013B7DH03_128X128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_LS013B7DH03_128X128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ls013b7dh03_128x128, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_LS027B7DH01_400X240_4W_SW_SPI : public U8X8 { public: U8X8_LS027B7DH01_400X240_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ls027b7dh01_400x240, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_LS027B7DH01_400X240_4W_HW_SPI : public U8X8 { public: U8X8_LS027B7DH01_400X240_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ls027b7dh01_400x240, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_LS027B7DH01_400X240_2ND_4W_HW_SPI : public U8X8 { public: U8X8_LS027B7DH01_400X240_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ls027b7dh01_400x240, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_LS013B7DH05_144X168_4W_SW_SPI : public U8X8 { public: U8X8_LS013B7DH05_144X168_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ls013b7dh05_144x168, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_LS013B7DH05_144X168_4W_HW_SPI : public U8X8 { public: U8X8_LS013B7DH05_144X168_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ls013b7dh05_144x168, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_LS013B7DH05_144X168_2ND_4W_HW_SPI : public U8X8 { public: U8X8_LS013B7DH05_144X168_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ls013b7dh05_144x168, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1701_EA_DOGS102_4W_SW_SPI : public U8X8 { public: U8X8_UC1701_EA_DOGS102_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1701_ea_dogs102, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_UC1701_EA_DOGS102_4W_HW_SPI : public U8X8 { public: U8X8_UC1701_EA_DOGS102_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1701_ea_dogs102, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1701_EA_DOGS102_2ND_4W_HW_SPI : public U8X8 { public: U8X8_UC1701_EA_DOGS102_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1701_ea_dogs102, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1701_EA_DOGS102_3W_SW_SPI : public U8X8 { public: U8X8_UC1701_EA_DOGS102_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1701_ea_dogs102, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_UC1701_EA_DOGS102_6800 : public U8X8 { public: U8X8_UC1701_EA_DOGS102_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1701_ea_dogs102, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1701_EA_DOGS102_8080 : public U8X8 { public: U8X8_UC1701_EA_DOGS102_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1701_ea_dogs102, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1701_MINI12864_4W_SW_SPI : public U8X8 { public: U8X8_UC1701_MINI12864_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1701_mini12864, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_UC1701_MINI12864_4W_HW_SPI : public U8X8 { public: U8X8_UC1701_MINI12864_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1701_mini12864, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1701_MINI12864_2ND_4W_HW_SPI : public U8X8 { public: U8X8_UC1701_MINI12864_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1701_mini12864, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1701_MINI12864_3W_SW_SPI : public U8X8 { public: U8X8_UC1701_MINI12864_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1701_mini12864, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_UC1701_MINI12864_6800 : public U8X8 { public: U8X8_UC1701_MINI12864_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1701_mini12864, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1701_MINI12864_8080 : public U8X8 { public: U8X8_UC1701_MINI12864_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1701_mini12864, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_PCD8544_84X48_4W_SW_SPI : public U8X8 { public: U8X8_PCD8544_84X48_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_pcd8544_84x48, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_PCD8544_84X48_4W_HW_SPI : public U8X8 { public: U8X8_PCD8544_84X48_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_pcd8544_84x48, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_PCD8544_84X48_2ND_4W_HW_SPI : public U8X8 { public: U8X8_PCD8544_84X48_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_pcd8544_84x48, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_PCD8544_84X48_3W_SW_SPI : public U8X8 { public: U8X8_PCD8544_84X48_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_pcd8544_84x48, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_PCF8812_96X65_4W_SW_SPI : public U8X8 { public: U8X8_PCF8812_96X65_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_pcf8812_96x65, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_PCF8812_96X65_4W_HW_SPI : public U8X8 { public: U8X8_PCF8812_96X65_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_pcf8812_96x65, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_PCF8812_96X65_2ND_4W_HW_SPI : public U8X8 { public: U8X8_PCF8812_96X65_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_pcf8812_96x65, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_PCF8812_96X65_3W_SW_SPI : public U8X8 { public: U8X8_PCF8812_96X65_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_pcf8812_96x65, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_HX1230_96X68_4W_SW_SPI : public U8X8 { public: U8X8_HX1230_96X68_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_hx1230_96x68, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_HX1230_96X68_4W_HW_SPI : public U8X8 { public: U8X8_HX1230_96X68_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_hx1230_96x68, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_HX1230_96X68_2ND_4W_HW_SPI : public U8X8 { public: U8X8_HX1230_96X68_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_hx1230_96x68, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_HX1230_96X68_3W_SW_SPI : public U8X8 { public: U8X8_HX1230_96X68_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_hx1230_96x68, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_UC1604_JLX19264_4W_SW_SPI : public U8X8 { public: U8X8_UC1604_JLX19264_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1604_jlx19264, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_UC1604_JLX19264_4W_HW_SPI : public U8X8 { public: U8X8_UC1604_JLX19264_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1604_jlx19264, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1604_JLX19264_2ND_4W_HW_SPI : public U8X8 { public: U8X8_UC1604_JLX19264_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1604_jlx19264, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1604_JLX19264_3W_SW_SPI : public U8X8 { public: U8X8_UC1604_JLX19264_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1604_jlx19264, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_UC1604_JLX19264_6800 : public U8X8 { public: U8X8_UC1604_JLX19264_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1604_jlx19264, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1604_JLX19264_8080 : public U8X8 { public: U8X8_UC1604_JLX19264_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1604_jlx19264, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1604_JLX19264_SW_I2C : public U8X8 { public: U8X8_UC1604_JLX19264_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1604_jlx19264, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_UC1604_JLX19264_HW_I2C : public U8X8 { public: U8X8_UC1604_JLX19264_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1604_jlx19264, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_UC1604_JLX19264_2ND_HW_I2C : public U8X8 { public: U8X8_UC1604_JLX19264_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1604_jlx19264, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_UC1608_ERC24064_4W_SW_SPI : public U8X8 { public: U8X8_UC1608_ERC24064_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc24064, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_UC1608_ERC24064_4W_HW_SPI : public U8X8 { public: U8X8_UC1608_ERC24064_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc24064, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1608_ERC24064_2ND_4W_HW_SPI : public U8X8 { public: U8X8_UC1608_ERC24064_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc24064, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1608_ERC24064_3W_SW_SPI : public U8X8 { public: U8X8_UC1608_ERC24064_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc24064, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_UC1608_ERC24064_6800 : public U8X8 { public: U8X8_UC1608_ERC24064_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc24064, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1608_ERC24064_8080 : public U8X8 { public: U8X8_UC1608_ERC24064_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc24064, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1608_ERC24064_SW_I2C : public U8X8 { public: U8X8_UC1608_ERC24064_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc24064, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_UC1608_ERC24064_HW_I2C : public U8X8 { public: U8X8_UC1608_ERC24064_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc24064, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_UC1608_ERC24064_2ND_HW_I2C : public U8X8 { public: U8X8_UC1608_ERC24064_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc24064, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_UC1608_ERC240120_4W_SW_SPI : public U8X8 { public: U8X8_UC1608_ERC240120_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc240120, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_UC1608_ERC240120_4W_HW_SPI : public U8X8 { public: U8X8_UC1608_ERC240120_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc240120, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1608_ERC240120_2ND_4W_HW_SPI : public U8X8 { public: U8X8_UC1608_ERC240120_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc240120, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1608_ERC240120_3W_SW_SPI : public U8X8 { public: U8X8_UC1608_ERC240120_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc240120, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_UC1608_ERC240120_6800 : public U8X8 { public: U8X8_UC1608_ERC240120_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc240120, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1608_ERC240120_8080 : public U8X8 { public: U8X8_UC1608_ERC240120_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc240120, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1608_ERC240120_SW_I2C : public U8X8 { public: U8X8_UC1608_ERC240120_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc240120, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_UC1608_ERC240120_HW_I2C : public U8X8 { public: U8X8_UC1608_ERC240120_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc240120, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_UC1608_ERC240120_2ND_HW_I2C : public U8X8 { public: U8X8_UC1608_ERC240120_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_erc240120, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_UC1608_240X128_4W_SW_SPI : public U8X8 { public: U8X8_UC1608_240X128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_240x128, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_UC1608_240X128_4W_HW_SPI : public U8X8 { public: U8X8_UC1608_240X128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_240x128, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1608_240X128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_UC1608_240X128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_240x128, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1608_240X128_3W_SW_SPI : public U8X8 { public: U8X8_UC1608_240X128_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_240x128, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_UC1608_240X128_6800 : public U8X8 { public: U8X8_UC1608_240X128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_240x128, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1608_240X128_8080 : public U8X8 { public: U8X8_UC1608_240X128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_240x128, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1608_240X128_SW_I2C : public U8X8 { public: U8X8_UC1608_240X128_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_240x128, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_UC1608_240X128_HW_I2C : public U8X8 { public: U8X8_UC1608_240X128_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_240x128, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_UC1608_240X128_2ND_HW_I2C : public U8X8 { public: U8X8_UC1608_240X128_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1608_240x128, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_UC1638_160X128_4W_SW_SPI : public U8X8 { public: U8X8_UC1638_160X128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1638_160x128, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_UC1638_160X128_4W_HW_SPI : public U8X8 { public: U8X8_UC1638_160X128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1638_160x128, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1638_160X128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_UC1638_160X128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1638_160x128, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1638_160X128_3W_SW_SPI : public U8X8 { public: U8X8_UC1638_160X128_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1638_160x128, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_UC1638_160X128_6800 : public U8X8 { public: U8X8_UC1638_160X128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1638_160x128, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1638_160X128_8080 : public U8X8 { public: U8X8_UC1638_160X128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1638_160x128, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1610_EA_DOGXL160_4W_SW_SPI : public U8X8 { public: U8X8_UC1610_EA_DOGXL160_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1610_ea_dogxl160, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_UC1610_EA_DOGXL160_4W_HW_SPI : public U8X8 { public: U8X8_UC1610_EA_DOGXL160_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1610_ea_dogxl160, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1610_EA_DOGXL160_2ND_4W_HW_SPI : public U8X8 { public: U8X8_UC1610_EA_DOGXL160_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1610_ea_dogxl160, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1610_EA_DOGXL160_3W_SW_SPI : public U8X8 { public: U8X8_UC1610_EA_DOGXL160_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1610_ea_dogxl160, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_UC1610_EA_DOGXL160_6800 : public U8X8 { public: U8X8_UC1610_EA_DOGXL160_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1610_ea_dogxl160, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1610_EA_DOGXL160_8080 : public U8X8 { public: U8X8_UC1610_EA_DOGXL160_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1610_ea_dogxl160, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1610_EA_DOGXL160_SW_I2C : public U8X8 { public: U8X8_UC1610_EA_DOGXL160_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1610_ea_dogxl160, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_UC1610_EA_DOGXL160_HW_I2C : public U8X8 { public: U8X8_UC1610_EA_DOGXL160_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1610_ea_dogxl160, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_UC1610_EA_DOGXL160_2ND_HW_I2C : public U8X8 { public: U8X8_UC1610_EA_DOGXL160_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1610_ea_dogxl160, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_UC1611_EA_DOGM240_4W_SW_SPI : public U8X8 { public: U8X8_UC1611_EA_DOGM240_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogm240, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_UC1611_EA_DOGM240_4W_HW_SPI : public U8X8 { public: U8X8_UC1611_EA_DOGM240_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogm240, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1611_EA_DOGM240_2ND_4W_HW_SPI : public U8X8 { public: U8X8_UC1611_EA_DOGM240_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogm240, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1611_EA_DOGM240_3W_SW_SPI : public U8X8 { public: U8X8_UC1611_EA_DOGM240_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogm240, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_UC1611_EA_DOGM240_6800 : public U8X8 { public: U8X8_UC1611_EA_DOGM240_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogm240, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1611_EA_DOGM240_8080 : public U8X8 { public: U8X8_UC1611_EA_DOGM240_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogm240, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1611_EA_DOGM240_SW_I2C : public U8X8 { public: U8X8_UC1611_EA_DOGM240_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogm240, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_UC1611_EA_DOGM240_HW_I2C : public U8X8 { public: U8X8_UC1611_EA_DOGM240_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogm240, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_UC1611_EA_DOGM240_2ND_HW_I2C : public U8X8 { public: U8X8_UC1611_EA_DOGM240_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogm240, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_UC1611_EA_DOGXL240_4W_SW_SPI : public U8X8 { public: U8X8_UC1611_EA_DOGXL240_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogxl240, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_UC1611_EA_DOGXL240_4W_HW_SPI : public U8X8 { public: U8X8_UC1611_EA_DOGXL240_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogxl240, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1611_EA_DOGXL240_2ND_4W_HW_SPI : public U8X8 { public: U8X8_UC1611_EA_DOGXL240_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogxl240, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1611_EA_DOGXL240_3W_SW_SPI : public U8X8 { public: U8X8_UC1611_EA_DOGXL240_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogxl240, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_UC1611_EA_DOGXL240_6800 : public U8X8 { public: U8X8_UC1611_EA_DOGXL240_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogxl240, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1611_EA_DOGXL240_8080 : public U8X8 { public: U8X8_UC1611_EA_DOGXL240_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogxl240, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1611_EA_DOGXL240_SW_I2C : public U8X8 { public: U8X8_UC1611_EA_DOGXL240_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogxl240, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_UC1611_EA_DOGXL240_HW_I2C : public U8X8 { public: U8X8_UC1611_EA_DOGXL240_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogxl240, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_UC1611_EA_DOGXL240_2ND_HW_I2C : public U8X8 { public: U8X8_UC1611_EA_DOGXL240_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ea_dogxl240, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_UC1611_EW50850_4W_SW_SPI : public U8X8 { public: U8X8_UC1611_EW50850_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ew50850, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_UC1611_EW50850_4W_HW_SPI : public U8X8 { public: U8X8_UC1611_EW50850_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ew50850, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1611_EW50850_2ND_4W_HW_SPI : public U8X8 { public: U8X8_UC1611_EW50850_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ew50850, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1611_EW50850_3W_SW_SPI : public U8X8 { public: U8X8_UC1611_EW50850_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ew50850, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_UC1611_EW50850_6800 : public U8X8 { public: U8X8_UC1611_EW50850_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ew50850, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1611_EW50850_8080 : public U8X8 { public: U8X8_UC1611_EW50850_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ew50850, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1611_EW50850_SW_I2C : public U8X8 { public: U8X8_UC1611_EW50850_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ew50850, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_UC1611_EW50850_HW_I2C : public U8X8 { public: U8X8_UC1611_EW50850_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ew50850, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_UC1611_EW50850_2ND_HW_I2C : public U8X8 { public: U8X8_UC1611_EW50850_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_ew50850, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_UC1611_CG160160_4W_SW_SPI : public U8X8 { public: U8X8_UC1611_CG160160_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_cg160160, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_UC1611_CG160160_4W_HW_SPI : public U8X8 { public: U8X8_UC1611_CG160160_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_cg160160, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1611_CG160160_2ND_4W_HW_SPI : public U8X8 { public: U8X8_UC1611_CG160160_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_cg160160, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1611_CG160160_3W_SW_SPI : public U8X8 { public: U8X8_UC1611_CG160160_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_cg160160, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_UC1611_CG160160_6800 : public U8X8 { public: U8X8_UC1611_CG160160_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_cg160160, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1611_CG160160_8080 : public U8X8 { public: U8X8_UC1611_CG160160_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_cg160160, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1611_CG160160_SW_I2C : public U8X8 { public: U8X8_UC1611_CG160160_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_cg160160, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_UC1611_CG160160_HW_I2C : public U8X8 { public: U8X8_UC1611_CG160160_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_cg160160, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_UC1611_CG160160_2ND_HW_I2C : public U8X8 { public: U8X8_UC1611_CG160160_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1611_cg160160, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST7511_AVD_320X240_4W_SW_SPI : public U8X8 { public: U8X8_ST7511_AVD_320X240_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7511_avd_320x240, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7511_AVD_320X240_4W_HW_SPI : public U8X8 { public: U8X8_ST7511_AVD_320X240_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7511_avd_320x240, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7511_AVD_320X240_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7511_AVD_320X240_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7511_avd_320x240, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7511_AVD_320X240_3W_SW_SPI : public U8X8 { public: U8X8_ST7511_AVD_320X240_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7511_avd_320x240, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7511_AVD_320X240_6800 : public U8X8 { public: U8X8_ST7511_AVD_320X240_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7511_avd_320x240, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7511_AVD_320X240_8080 : public U8X8 { public: U8X8_ST7511_AVD_320X240_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7511_avd_320x240, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_EA_DOGM128_4W_SW_SPI : public U8X8 { public: U8X8_ST7565_EA_DOGM128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_ea_dogm128, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7565_EA_DOGM128_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_EA_DOGM128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_ea_dogm128, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_EA_DOGM128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_EA_DOGM128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_ea_dogm128, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_EA_DOGM128_3W_SW_SPI : public U8X8 { public: U8X8_ST7565_EA_DOGM128_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_ea_dogm128, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7565_EA_DOGM128_6800 : public U8X8 { public: U8X8_ST7565_EA_DOGM128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_ea_dogm128, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_EA_DOGM128_8080 : public U8X8 { public: U8X8_ST7565_EA_DOGM128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_ea_dogm128, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_LM6063_4W_SW_SPI : public U8X8 { public: U8X8_ST7565_LM6063_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lm6063, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7565_LM6063_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_LM6063_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lm6063, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_LM6063_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_LM6063_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lm6063, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_LM6063_3W_SW_SPI : public U8X8 { public: U8X8_ST7565_LM6063_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lm6063, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7565_LM6063_6800 : public U8X8 { public: U8X8_ST7565_LM6063_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lm6063, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_LM6063_8080 : public U8X8 { public: U8X8_ST7565_LM6063_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lm6063, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_64128N_4W_SW_SPI : public U8X8 { public: U8X8_ST7565_64128N_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_64128n, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7565_64128N_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_64128N_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_64128n, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_64128N_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_64128N_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_64128n, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_64128N_3W_SW_SPI : public U8X8 { public: U8X8_ST7565_64128N_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_64128n, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7565_64128N_6800 : public U8X8 { public: U8X8_ST7565_64128N_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_64128n, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_64128N_8080 : public U8X8 { public: U8X8_ST7565_64128N_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_64128n, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_ZOLEN_128X64_4W_SW_SPI : public U8X8 { public: U8X8_ST7565_ZOLEN_128X64_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_zolen_128x64, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7565_ZOLEN_128X64_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_ZOLEN_128X64_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_zolen_128x64, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_ZOLEN_128X64_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_ZOLEN_128X64_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_zolen_128x64, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_ZOLEN_128X64_3W_SW_SPI : public U8X8 { public: U8X8_ST7565_ZOLEN_128X64_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_zolen_128x64, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7565_ZOLEN_128X64_6800 : public U8X8 { public: U8X8_ST7565_ZOLEN_128X64_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_zolen_128x64, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_ZOLEN_128X64_8080 : public U8X8 { public: U8X8_ST7565_ZOLEN_128X64_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_zolen_128x64, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_LM6059_4W_SW_SPI : public U8X8 { public: U8X8_ST7565_LM6059_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lm6059, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7565_LM6059_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_LM6059_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lm6059, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_LM6059_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_LM6059_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lm6059, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_LM6059_3W_SW_SPI : public U8X8 { public: U8X8_ST7565_LM6059_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lm6059, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7565_LM6059_6800 : public U8X8 { public: U8X8_ST7565_LM6059_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lm6059, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_LM6059_8080 : public U8X8 { public: U8X8_ST7565_LM6059_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lm6059, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_LX12864_4W_SW_SPI : public U8X8 { public: U8X8_ST7565_LX12864_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lx12864, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7565_LX12864_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_LX12864_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lx12864, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_LX12864_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_LX12864_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lx12864, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_LX12864_3W_SW_SPI : public U8X8 { public: U8X8_ST7565_LX12864_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lx12864, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7565_LX12864_6800 : public U8X8 { public: U8X8_ST7565_LX12864_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lx12864, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_LX12864_8080 : public U8X8 { public: U8X8_ST7565_LX12864_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_lx12864, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_ERC12864_4W_SW_SPI : public U8X8 { public: U8X8_ST7565_ERC12864_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_erc12864, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7565_ERC12864_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_ERC12864_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_erc12864, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_ERC12864_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_ERC12864_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_erc12864, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_ERC12864_3W_SW_SPI : public U8X8 { public: U8X8_ST7565_ERC12864_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_erc12864, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7565_ERC12864_6800 : public U8X8 { public: U8X8_ST7565_ERC12864_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_erc12864, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_ERC12864_8080 : public U8X8 { public: U8X8_ST7565_ERC12864_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_erc12864, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_ERC12864_ALT_4W_SW_SPI : public U8X8 { public: U8X8_ST7565_ERC12864_ALT_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_erc12864_alt, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7565_ERC12864_ALT_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_ERC12864_ALT_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_erc12864_alt, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_ERC12864_ALT_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_ERC12864_ALT_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_erc12864_alt, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_ERC12864_ALT_3W_SW_SPI : public U8X8 { public: U8X8_ST7565_ERC12864_ALT_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_erc12864_alt, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7565_ERC12864_ALT_6800 : public U8X8 { public: U8X8_ST7565_ERC12864_ALT_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_erc12864_alt, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_ERC12864_ALT_8080 : public U8X8 { public: U8X8_ST7565_ERC12864_ALT_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_erc12864_alt, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_NHD_C12864_4W_SW_SPI : public U8X8 { public: U8X8_ST7565_NHD_C12864_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_nhd_c12864, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7565_NHD_C12864_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_NHD_C12864_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_nhd_c12864, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_NHD_C12864_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_NHD_C12864_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_nhd_c12864, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_NHD_C12864_3W_SW_SPI : public U8X8 { public: U8X8_ST7565_NHD_C12864_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_nhd_c12864, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7565_NHD_C12864_6800 : public U8X8 { public: U8X8_ST7565_NHD_C12864_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_nhd_c12864, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_NHD_C12864_8080 : public U8X8 { public: U8X8_ST7565_NHD_C12864_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_nhd_c12864, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_JLX12864_4W_SW_SPI : public U8X8 { public: U8X8_ST7565_JLX12864_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_jlx12864, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7565_JLX12864_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_JLX12864_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_jlx12864, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_JLX12864_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_JLX12864_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_jlx12864, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_JLX12864_3W_SW_SPI : public U8X8 { public: U8X8_ST7565_JLX12864_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_jlx12864, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7565_JLX12864_6800 : public U8X8 { public: U8X8_ST7565_JLX12864_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_jlx12864, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_JLX12864_8080 : public U8X8 { public: U8X8_ST7565_JLX12864_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_jlx12864, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_NHD_C12832_4W_SW_SPI : public U8X8 { public: U8X8_ST7565_NHD_C12832_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_nhd_c12832, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7565_NHD_C12832_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_NHD_C12832_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_nhd_c12832, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_NHD_C12832_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_NHD_C12832_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_nhd_c12832, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_NHD_C12832_3W_SW_SPI : public U8X8 { public: U8X8_ST7565_NHD_C12832_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_nhd_c12832, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7565_NHD_C12832_6800 : public U8X8 { public: U8X8_ST7565_NHD_C12832_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_nhd_c12832, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_NHD_C12832_8080 : public U8X8 { public: U8X8_ST7565_NHD_C12832_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_nhd_c12832, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1601_128X32_4W_SW_SPI : public U8X8 { public: U8X8_UC1601_128X32_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1601_128x32, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_UC1601_128X32_4W_HW_SPI : public U8X8 { public: U8X8_UC1601_128X32_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1601_128x32, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1601_128X32_2ND_4W_HW_SPI : public U8X8 { public: U8X8_UC1601_128X32_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1601_128x32, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_UC1601_128X32_3W_SW_SPI : public U8X8 { public: U8X8_UC1601_128X32_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1601_128x32, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_UC1601_128X32_6800 : public U8X8 { public: U8X8_UC1601_128X32_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1601_128x32, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1601_128X32_8080 : public U8X8 { public: U8X8_UC1601_128X32_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1601_128x32, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_UC1601_128X32_SW_I2C : public U8X8 { public: U8X8_UC1601_128X32_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1601_128x32, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_UC1601_128X32_HW_I2C : public U8X8 { public: U8X8_UC1601_128X32_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1601_128x32, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_UC1601_128X32_2ND_HW_I2C : public U8X8 { public: U8X8_UC1601_128X32_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_uc1601_128x32, u8x8_cad_uc16xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST7565_EA_DOGM132_4W_SW_SPI : public U8X8 { public: U8X8_ST7565_EA_DOGM132_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_ea_dogm132, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7565_EA_DOGM132_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_EA_DOGM132_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_ea_dogm132, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_EA_DOGM132_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7565_EA_DOGM132_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_ea_dogm132, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7565_EA_DOGM132_3W_SW_SPI : public U8X8 { public: U8X8_ST7565_EA_DOGM132_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_ea_dogm132, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7565_EA_DOGM132_6800 : public U8X8 { public: U8X8_ST7565_EA_DOGM132_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_ea_dogm132, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7565_EA_DOGM132_8080 : public U8X8 { public: U8X8_ST7565_EA_DOGM132_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7565_ea_dogm132, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7567_PI_132X64_4W_SW_SPI : public U8X8 { public: U8X8_ST7567_PI_132X64_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_pi_132x64, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7567_PI_132X64_4W_HW_SPI : public U8X8 { public: U8X8_ST7567_PI_132X64_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_pi_132x64, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7567_PI_132X64_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7567_PI_132X64_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_pi_132x64, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7567_PI_132X64_6800 : public U8X8 { public: U8X8_ST7567_PI_132X64_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_pi_132x64, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7567_PI_132X64_8080 : public U8X8 { public: U8X8_ST7567_PI_132X64_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_pi_132x64, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7567_JLX12864_4W_SW_SPI : public U8X8 { public: U8X8_ST7567_JLX12864_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_jlx12864, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7567_JLX12864_4W_HW_SPI : public U8X8 { public: U8X8_ST7567_JLX12864_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_jlx12864, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7567_JLX12864_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7567_JLX12864_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_jlx12864, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7567_JLX12864_6800 : public U8X8 { public: U8X8_ST7567_JLX12864_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_jlx12864, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7567_JLX12864_8080 : public U8X8 { public: U8X8_ST7567_JLX12864_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_jlx12864, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7567_ENH_DG128064_4W_SW_SPI : public U8X8 { public: U8X8_ST7567_ENH_DG128064_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_enh_dg128064, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7567_ENH_DG128064_4W_HW_SPI : public U8X8 { public: U8X8_ST7567_ENH_DG128064_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_enh_dg128064, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7567_ENH_DG128064_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7567_ENH_DG128064_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_enh_dg128064, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7567_ENH_DG128064_6800 : public U8X8 { public: U8X8_ST7567_ENH_DG128064_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_enh_dg128064, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7567_ENH_DG128064_8080 : public U8X8 { public: U8X8_ST7567_ENH_DG128064_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_enh_dg128064, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7567_ENH_DG128064I_4W_SW_SPI : public U8X8 { public: U8X8_ST7567_ENH_DG128064I_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_enh_dg128064i, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7567_ENH_DG128064I_4W_HW_SPI : public U8X8 { public: U8X8_ST7567_ENH_DG128064I_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_enh_dg128064i, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7567_ENH_DG128064I_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7567_ENH_DG128064I_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_enh_dg128064i, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7567_ENH_DG128064I_6800 : public U8X8 { public: U8X8_ST7567_ENH_DG128064I_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_enh_dg128064i, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7567_ENH_DG128064I_8080 : public U8X8 { public: U8X8_ST7567_ENH_DG128064I_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_enh_dg128064i, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7567_64X32_4W_SW_SPI : public U8X8 { public: U8X8_ST7567_64X32_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_64x32, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7567_64X32_4W_HW_SPI : public U8X8 { public: U8X8_ST7567_64X32_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_64x32, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7567_64X32_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7567_64X32_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_64x32, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7567_64X32_6800 : public U8X8 { public: U8X8_ST7567_64X32_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_64x32, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7567_64X32_8080 : public U8X8 { public: U8X8_ST7567_64X32_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_64x32, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7567_64X32_SW_I2C : public U8X8 { public: U8X8_ST7567_64X32_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_64x32, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST7567_64X32_HW_I2C : public U8X8 { public: U8X8_ST7567_64X32_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_64x32, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST7567_64X32_2ND_HW_I2C : public U8X8 { public: U8X8_ST7567_64X32_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7567_64x32, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST7586S_S028HN118A_4W_SW_SPI : public U8X8 { public: U8X8_ST7586S_S028HN118A_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7586s_s028hn118a, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7586S_S028HN118A_4W_HW_SPI : public U8X8 { public: U8X8_ST7586S_S028HN118A_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7586s_s028hn118a, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7586S_S028HN118A_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7586S_S028HN118A_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7586s_s028hn118a, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7586S_ERC240160_4W_SW_SPI : public U8X8 { public: U8X8_ST7586S_ERC240160_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7586s_erc240160, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7586S_ERC240160_4W_HW_SPI : public U8X8 { public: U8X8_ST7586S_ERC240160_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7586s_erc240160, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7586S_ERC240160_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7586S_ERC240160_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7586s_erc240160, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7586S_ERC240160_3W_SW_SPI : public U8X8 { public: U8X8_ST7586S_ERC240160_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7586s_erc240160, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7586S_ERC240160_6800 : public U8X8 { public: U8X8_ST7586S_ERC240160_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7586s_erc240160, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7586S_ERC240160_8080 : public U8X8 { public: U8X8_ST7586S_ERC240160_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7586s_erc240160, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7588_JLX12864_4W_SW_SPI : public U8X8 { public: U8X8_ST7588_JLX12864_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7588_jlx12864, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST7588_JLX12864_4W_HW_SPI : public U8X8 { public: U8X8_ST7588_JLX12864_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7588_jlx12864, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7588_JLX12864_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST7588_JLX12864_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7588_jlx12864, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST7588_JLX12864_3W_SW_SPI : public U8X8 { public: U8X8_ST7588_JLX12864_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7588_jlx12864, u8x8_cad_001, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST7588_JLX12864_6800 : public U8X8 { public: U8X8_ST7588_JLX12864_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7588_jlx12864, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7588_JLX12864_8080 : public U8X8 { public: U8X8_ST7588_JLX12864_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7588_jlx12864, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST7588_JLX12864_SW_I2C : public U8X8 { public: U8X8_ST7588_JLX12864_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7588_jlx12864, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST7588_JLX12864_HW_I2C : public U8X8 { public: U8X8_ST7588_JLX12864_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7588_jlx12864, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST7588_JLX12864_2ND_HW_I2C : public U8X8 { public: U8X8_ST7588_JLX12864_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st7588_jlx12864, u8x8_cad_ssd13xx_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST75256_JLX256128_4W_SW_SPI : public U8X8 { public: U8X8_ST75256_JLX256128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256128, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST75256_JLX256128_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX256128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256128, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_JLX256128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX256128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256128, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_JLX256128_3W_SW_SPI : public U8X8 { public: U8X8_ST75256_JLX256128_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256128, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST75256_JLX256128_6800 : public U8X8 { public: U8X8_ST75256_JLX256128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256128, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_JLX256128_8080 : public U8X8 { public: U8X8_ST75256_JLX256128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256128, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_WO256X128_4W_SW_SPI : public U8X8 { public: U8X8_ST75256_WO256X128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_wo256x128, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST75256_WO256X128_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_WO256X128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_wo256x128, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_WO256X128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_WO256X128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_wo256x128, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_WO256X128_3W_SW_SPI : public U8X8 { public: U8X8_ST75256_WO256X128_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_wo256x128, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST75256_WO256X128_6800 : public U8X8 { public: U8X8_ST75256_WO256X128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_wo256x128, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_WO256X128_8080 : public U8X8 { public: U8X8_ST75256_WO256X128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_wo256x128, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_JLX256128_SW_I2C : public U8X8 { public: U8X8_ST75256_JLX256128_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256128, u8x8_cad_st75256_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST75256_JLX256128_HW_I2C : public U8X8 { public: U8X8_ST75256_JLX256128_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256128, u8x8_cad_st75256_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST75256_JLX256128_2ND_HW_I2C : public U8X8 { public: U8X8_ST75256_JLX256128_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256128, u8x8_cad_st75256_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST75256_WO256X128_SW_I2C : public U8X8 { public: U8X8_ST75256_WO256X128_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_wo256x128, u8x8_cad_st75256_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST75256_WO256X128_HW_I2C : public U8X8 { public: U8X8_ST75256_WO256X128_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_wo256x128, u8x8_cad_st75256_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST75256_WO256X128_2ND_HW_I2C : public U8X8 { public: U8X8_ST75256_WO256X128_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_wo256x128, u8x8_cad_st75256_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST75256_JLX256160_4W_SW_SPI : public U8X8 { public: U8X8_ST75256_JLX256160_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST75256_JLX256160_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX256160_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_JLX256160_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX256160_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_JLX256160_3W_SW_SPI : public U8X8 { public: U8X8_ST75256_JLX256160_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST75256_JLX256160_6800 : public U8X8 { public: U8X8_ST75256_JLX256160_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_JLX256160_8080 : public U8X8 { public: U8X8_ST75256_JLX256160_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_JLX256160M_4W_SW_SPI : public U8X8 { public: U8X8_ST75256_JLX256160M_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160m, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST75256_JLX256160M_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX256160M_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160m, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_JLX256160M_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX256160M_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160m, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_JLX256160M_3W_SW_SPI : public U8X8 { public: U8X8_ST75256_JLX256160M_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160m, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST75256_JLX256160M_6800 : public U8X8 { public: U8X8_ST75256_JLX256160M_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160m, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_JLX256160M_8080 : public U8X8 { public: U8X8_ST75256_JLX256160M_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160m, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_JLX256160_ALT_4W_SW_SPI : public U8X8 { public: U8X8_ST75256_JLX256160_ALT_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160_alt, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST75256_JLX256160_ALT_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX256160_ALT_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160_alt, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_JLX256160_ALT_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX256160_ALT_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160_alt, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_JLX256160_ALT_3W_SW_SPI : public U8X8 { public: U8X8_ST75256_JLX256160_ALT_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160_alt, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST75256_JLX256160_ALT_6800 : public U8X8 { public: U8X8_ST75256_JLX256160_ALT_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160_alt, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_JLX256160_ALT_8080 : public U8X8 { public: U8X8_ST75256_JLX256160_ALT_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160_alt, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_JLX256160_SW_I2C : public U8X8 { public: U8X8_ST75256_JLX256160_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160, u8x8_cad_st75256_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST75256_JLX256160_HW_I2C : public U8X8 { public: U8X8_ST75256_JLX256160_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160, u8x8_cad_st75256_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST75256_JLX256160_2ND_HW_I2C : public U8X8 { public: U8X8_ST75256_JLX256160_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160, u8x8_cad_st75256_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST75256_JLX256160M_SW_I2C : public U8X8 { public: U8X8_ST75256_JLX256160M_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160m, u8x8_cad_st75256_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST75256_JLX256160M_HW_I2C : public U8X8 { public: U8X8_ST75256_JLX256160M_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160m, u8x8_cad_st75256_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST75256_JLX256160M_2ND_HW_I2C : public U8X8 { public: U8X8_ST75256_JLX256160M_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160m, u8x8_cad_st75256_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST75256_JLX256160_ALT_SW_I2C : public U8X8 { public: U8X8_ST75256_JLX256160_ALT_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160_alt, u8x8_cad_st75256_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST75256_JLX256160_ALT_HW_I2C : public U8X8 { public: U8X8_ST75256_JLX256160_ALT_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160_alt, u8x8_cad_st75256_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST75256_JLX256160_ALT_2ND_HW_I2C : public U8X8 { public: U8X8_ST75256_JLX256160_ALT_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx256160_alt, u8x8_cad_st75256_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST75256_JLX240160_4W_SW_SPI : public U8X8 { public: U8X8_ST75256_JLX240160_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx240160, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST75256_JLX240160_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX240160_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx240160, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_JLX240160_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX240160_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx240160, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_JLX240160_3W_SW_SPI : public U8X8 { public: U8X8_ST75256_JLX240160_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx240160, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST75256_JLX240160_6800 : public U8X8 { public: U8X8_ST75256_JLX240160_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx240160, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_JLX240160_8080 : public U8X8 { public: U8X8_ST75256_JLX240160_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx240160, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_JLX240160_SW_I2C : public U8X8 { public: U8X8_ST75256_JLX240160_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx240160, u8x8_cad_st75256_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST75256_JLX240160_HW_I2C : public U8X8 { public: U8X8_ST75256_JLX240160_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx240160, u8x8_cad_st75256_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST75256_JLX240160_2ND_HW_I2C : public U8X8 { public: U8X8_ST75256_JLX240160_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx240160, u8x8_cad_st75256_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST75256_JLX25664_4W_SW_SPI : public U8X8 { public: U8X8_ST75256_JLX25664_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx25664, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST75256_JLX25664_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX25664_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx25664, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_JLX25664_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX25664_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx25664, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_JLX25664_3W_SW_SPI : public U8X8 { public: U8X8_ST75256_JLX25664_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx25664, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST75256_JLX25664_6800 : public U8X8 { public: U8X8_ST75256_JLX25664_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx25664, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_JLX25664_8080 : public U8X8 { public: U8X8_ST75256_JLX25664_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx25664, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_JLX25664_SW_I2C : public U8X8 { public: U8X8_ST75256_JLX25664_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx25664, u8x8_cad_st75256_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST75256_JLX25664_HW_I2C : public U8X8 { public: U8X8_ST75256_JLX25664_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx25664, u8x8_cad_st75256_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST75256_JLX25664_2ND_HW_I2C : public U8X8 { public: U8X8_ST75256_JLX25664_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx25664, u8x8_cad_st75256_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST75256_JLX172104_4W_SW_SPI : public U8X8 { public: U8X8_ST75256_JLX172104_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx172104, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST75256_JLX172104_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX172104_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx172104, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_JLX172104_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX172104_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx172104, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_JLX172104_3W_SW_SPI : public U8X8 { public: U8X8_ST75256_JLX172104_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx172104, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST75256_JLX172104_6800 : public U8X8 { public: U8X8_ST75256_JLX172104_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx172104, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_JLX172104_8080 : public U8X8 { public: U8X8_ST75256_JLX172104_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx172104, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_JLX172104_SW_I2C : public U8X8 { public: U8X8_ST75256_JLX172104_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx172104, u8x8_cad_st75256_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST75256_JLX172104_HW_I2C : public U8X8 { public: U8X8_ST75256_JLX172104_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx172104, u8x8_cad_st75256_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST75256_JLX172104_2ND_HW_I2C : public U8X8 { public: U8X8_ST75256_JLX172104_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx172104, u8x8_cad_st75256_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST75256_JLX19296_4W_SW_SPI : public U8X8 { public: U8X8_ST75256_JLX19296_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx19296, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST75256_JLX19296_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX19296_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx19296, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_JLX19296_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST75256_JLX19296_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx19296, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75256_JLX19296_3W_SW_SPI : public U8X8 { public: U8X8_ST75256_JLX19296_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx19296, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST75256_JLX19296_6800 : public U8X8 { public: U8X8_ST75256_JLX19296_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx19296, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_JLX19296_8080 : public U8X8 { public: U8X8_ST75256_JLX19296_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx19296, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75256_JLX19296_SW_I2C : public U8X8 { public: U8X8_ST75256_JLX19296_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx19296, u8x8_cad_st75256_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST75256_JLX19296_HW_I2C : public U8X8 { public: U8X8_ST75256_JLX19296_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx19296, u8x8_cad_st75256_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST75256_JLX19296_2ND_HW_I2C : public U8X8 { public: U8X8_ST75256_JLX19296_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75256_jlx19296, u8x8_cad_st75256_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_ST75320_JLX320240_4W_SW_SPI : public U8X8 { public: U8X8_ST75320_JLX320240_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75320_jlx320240, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_ST75320_JLX320240_4W_HW_SPI : public U8X8 { public: U8X8_ST75320_JLX320240_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75320_jlx320240, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75320_JLX320240_2ND_4W_HW_SPI : public U8X8 { public: U8X8_ST75320_JLX320240_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75320_jlx320240, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_ST75320_JLX320240_3W_SW_SPI : public U8X8 { public: U8X8_ST75320_JLX320240_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75320_jlx320240, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_ST75320_JLX320240_6800 : public U8X8 { public: U8X8_ST75320_JLX320240_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75320_jlx320240, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75320_JLX320240_8080 : public U8X8 { public: U8X8_ST75320_JLX320240_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75320_jlx320240, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_ST75320_JLX320240_SW_I2C : public U8X8 { public: U8X8_ST75320_JLX320240_SW_I2C(uint8_t clock, uint8_t data, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75320_jlx320240, u8x8_cad_st75256_i2c, u8x8_byte_arduino_sw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SW_I2C(getU8x8(), clock, data, reset); } }; class U8X8_ST75320_JLX320240_HW_I2C : public U8X8 { public: U8X8_ST75320_JLX320240_HW_I2C(uint8_t reset = U8X8_PIN_NONE, uint8_t clock = U8X8_PIN_NONE, uint8_t data = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75320_jlx320240, u8x8_cad_st75256_i2c, u8x8_byte_arduino_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset, clock, data); } }; class U8X8_ST75320_JLX320240_2ND_HW_I2C : public U8X8 { public: U8X8_ST75320_JLX320240_2ND_HW_I2C(uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_st75320_jlx320240, u8x8_cad_st75256_i2c, u8x8_byte_arduino_2nd_hw_i2c, u8x8_gpio_and_delay_arduino); u8x8_SetPin_HW_I2C(getU8x8(), reset); } }; class U8X8_NT7534_TG12864R_4W_SW_SPI : public U8X8 { public: U8X8_NT7534_TG12864R_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_nt7534_tg12864r, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_NT7534_TG12864R_4W_HW_SPI : public U8X8 { public: U8X8_NT7534_TG12864R_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_nt7534_tg12864r, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_NT7534_TG12864R_2ND_4W_HW_SPI : public U8X8 { public: U8X8_NT7534_TG12864R_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_nt7534_tg12864r, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_NT7534_TG12864R_6800 : public U8X8 { public: U8X8_NT7534_TG12864R_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_nt7534_tg12864r, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_NT7534_TG12864R_8080 : public U8X8 { public: U8X8_NT7534_TG12864R_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_nt7534_tg12864r, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_IST3020_ERC19264_4W_SW_SPI : public U8X8 { public: U8X8_IST3020_ERC19264_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ist3020_erc19264, u8x8_cad_001, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_IST3020_ERC19264_4W_HW_SPI : public U8X8 { public: U8X8_IST3020_ERC19264_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ist3020_erc19264, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_IST3020_ERC19264_2ND_4W_HW_SPI : public U8X8 { public: U8X8_IST3020_ERC19264_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ist3020_erc19264, u8x8_cad_001, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_IST3020_ERC19264_6800 : public U8X8 { public: U8X8_IST3020_ERC19264_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ist3020_erc19264, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_IST3020_ERC19264_8080 : public U8X8 { public: U8X8_IST3020_ERC19264_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ist3020_erc19264, u8x8_cad_001, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SBN1661_122X32 : public U8X8 { public: U8X8_SBN1661_122X32(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t dc, uint8_t e1, uint8_t e2, uint8_t reset) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sbn1661_122x32, u8x8_cad_001, u8x8_byte_sed1520, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SED1520(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, dc, e1, e2, reset); } }; class U8X8_SED1520_122X32 : public U8X8 { public: U8X8_SED1520_122X32(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t dc, uint8_t e1, uint8_t e2, uint8_t reset) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sed1520_122x32, u8x8_cad_001, u8x8_byte_sed1520, u8x8_gpio_and_delay_arduino); u8x8_SetPin_SED1520(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, dc, e1, e2, reset); } }; class U8X8_KS0108_128X64 : public U8X8 { public: U8X8_KS0108_128X64(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t dc, uint8_t cs0, uint8_t cs1, uint8_t cs2, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ks0108_128x64, u8x8_cad_001, u8x8_byte_arduino_ks0108, u8x8_gpio_and_delay_arduino); u8x8_SetPin_KS0108(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, dc, cs0, cs1, cs2, reset); } }; class U8X8_KS0108_ERM19264 : public U8X8 { public: U8X8_KS0108_ERM19264(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t dc, uint8_t cs0, uint8_t cs1, uint8_t cs2, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ks0108_erm19264, u8x8_cad_001, u8x8_byte_arduino_ks0108, u8x8_gpio_and_delay_arduino); u8x8_SetPin_KS0108(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, dc, cs0, cs1, cs2, reset); } }; class U8X8_LC7981_160X80_6800 : public U8X8 { public: U8X8_LC7981_160X80_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_lc7981_160x80, u8x8_cad_100, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_LC7981_160X160_6800 : public U8X8 { public: U8X8_LC7981_160X160_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_lc7981_160x160, u8x8_cad_100, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_LC7981_240X128_6800 : public U8X8 { public: U8X8_LC7981_240X128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_lc7981_240x128, u8x8_cad_100, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_LC7981_240X64_6800 : public U8X8 { public: U8X8_LC7981_240X64_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_lc7981_240x64, u8x8_cad_100, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_T6963_240X128_8080 : public U8X8 { public: U8X8_T6963_240X128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_t6963_240x128, u8x8_cad_100, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_T6963_240X64_8080 : public U8X8 { public: U8X8_T6963_240X64_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_t6963_240x64, u8x8_cad_100, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_T6963_256X64_8080 : public U8X8 { public: U8X8_T6963_256X64_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_t6963_256x64, u8x8_cad_100, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_T6963_128X64_8080 : public U8X8 { public: U8X8_T6963_128X64_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_t6963_128x64, u8x8_cad_100, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_T6963_128X64_ALT_8080 : public U8X8 { public: U8X8_T6963_128X64_ALT_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_t6963_128x64_alt, u8x8_cad_100, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_T6963_160X80_8080 : public U8X8 { public: U8X8_T6963_160X80_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_t6963_160x80, u8x8_cad_100, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1322_NHD_256X64_4W_SW_SPI : public U8X8 { public: U8X8_SSD1322_NHD_256X64_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1322_nhd_256x64, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1322_NHD_256X64_4W_HW_SPI : public U8X8 { public: U8X8_SSD1322_NHD_256X64_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1322_nhd_256x64, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1322_NHD_256X64_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1322_NHD_256X64_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1322_nhd_256x64, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1322_NHD_256X64_3W_SW_SPI : public U8X8 { public: U8X8_SSD1322_NHD_256X64_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1322_nhd_256x64, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1322_NHD_256X64_6800 : public U8X8 { public: U8X8_SSD1322_NHD_256X64_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1322_nhd_256x64, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1322_NHD_256X64_8080 : public U8X8 { public: U8X8_SSD1322_NHD_256X64_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1322_nhd_256x64, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1322_NHD_128X64_4W_SW_SPI : public U8X8 { public: U8X8_SSD1322_NHD_128X64_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1322_nhd_128x64, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1322_NHD_128X64_4W_HW_SPI : public U8X8 { public: U8X8_SSD1322_NHD_128X64_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1322_nhd_128x64, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1322_NHD_128X64_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1322_NHD_128X64_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1322_nhd_128x64, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1322_NHD_128X64_3W_SW_SPI : public U8X8 { public: U8X8_SSD1322_NHD_128X64_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1322_nhd_128x64, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1322_NHD_128X64_6800 : public U8X8 { public: U8X8_SSD1322_NHD_128X64_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1322_nhd_128x64, u8x8_cad_011, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1322_NHD_128X64_8080 : public U8X8 { public: U8X8_SSD1322_NHD_128X64_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1322_nhd_128x64, u8x8_cad_011, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SSD1606_172X72_4W_SW_SPI : public U8X8 { public: U8X8_SSD1606_172X72_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1606_172x72, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1606_172X72_4W_HW_SPI : public U8X8 { public: U8X8_SSD1606_172X72_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1606_172x72, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1606_172X72_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1606_172X72_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1606_172x72, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1606_172X72_3W_SW_SPI : public U8X8 { public: U8X8_SSD1606_172X72_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1606_172x72, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1607_200X200_4W_SW_SPI : public U8X8 { public: U8X8_SSD1607_200X200_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1607_200x200, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1607_200X200_4W_HW_SPI : public U8X8 { public: U8X8_SSD1607_200X200_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1607_200x200, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1607_200X200_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1607_200X200_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1607_200x200, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1607_200X200_3W_SW_SPI : public U8X8 { public: U8X8_SSD1607_200X200_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1607_200x200, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1607_GD_200X200_4W_SW_SPI : public U8X8 { public: U8X8_SSD1607_GD_200X200_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1607_gd_200x200, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1607_GD_200X200_4W_HW_SPI : public U8X8 { public: U8X8_SSD1607_GD_200X200_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1607_gd_200x200, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1607_GD_200X200_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1607_GD_200X200_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1607_gd_200x200, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1607_GD_200X200_3W_SW_SPI : public U8X8 { public: U8X8_SSD1607_GD_200X200_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1607_gd_200x200, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SSD1607_WS_200X200_4W_SW_SPI : public U8X8 { public: U8X8_SSD1607_WS_200X200_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1607_ws_200x200, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_SSD1607_WS_200X200_4W_HW_SPI : public U8X8 { public: U8X8_SSD1607_WS_200X200_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1607_ws_200x200, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1607_WS_200X200_2ND_4W_HW_SPI : public U8X8 { public: U8X8_SSD1607_WS_200X200_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1607_ws_200x200, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_SSD1607_WS_200X200_3W_SW_SPI : public U8X8 { public: U8X8_SSD1607_WS_200X200_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ssd1607_ws_200x200, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_IL3820_296X128_4W_SW_SPI : public U8X8 { public: U8X8_IL3820_296X128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_il3820_296x128, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_IL3820_296X128_4W_HW_SPI : public U8X8 { public: U8X8_IL3820_296X128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_il3820_296x128, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_IL3820_296X128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_IL3820_296X128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_il3820_296x128, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_IL3820_296X128_3W_SW_SPI : public U8X8 { public: U8X8_IL3820_296X128_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_il3820_296x128, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_IL3820_V2_296X128_4W_SW_SPI : public U8X8 { public: U8X8_IL3820_V2_296X128_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_il3820_v2_296x128, u8x8_cad_011, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_IL3820_V2_296X128_4W_HW_SPI : public U8X8 { public: U8X8_IL3820_V2_296X128_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_il3820_v2_296x128, u8x8_cad_011, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_IL3820_V2_296X128_2ND_4W_HW_SPI : public U8X8 { public: U8X8_IL3820_V2_296X128_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_il3820_v2_296x128, u8x8_cad_011, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_IL3820_V2_296X128_3W_SW_SPI : public U8X8 { public: U8X8_IL3820_V2_296X128_3W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_il3820_v2_296x128, u8x8_cad_011, u8x8_byte_arduino_3wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_3Wire_SW_SPI(getU8x8(), clock, data, cs, reset); } }; class U8X8_SED1330_240X128_6800 : public U8X8 { public: U8X8_SED1330_240X128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sed1330_240x128, u8x8_cad_100, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_SED1330_240X128_8080 : public U8X8 { public: U8X8_SED1330_240X128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_sed1330_240x128, u8x8_cad_100, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_RA8835_NHD_240X128_6800 : public U8X8 { public: U8X8_RA8835_NHD_240X128_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ra8835_nhd_240x128, u8x8_cad_100, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_RA8835_NHD_240X128_8080 : public U8X8 { public: U8X8_RA8835_NHD_240X128_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ra8835_nhd_240x128, u8x8_cad_100, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_RA8835_320X240_6800 : public U8X8 { public: U8X8_RA8835_320X240_6800(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ra8835_320x240, u8x8_cad_100, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_6800(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_RA8835_320X240_8080 : public U8X8 { public: U8X8_RA8835_320X240_8080(uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_ra8835_320x240, u8x8_cad_100, u8x8_byte_arduino_8bit_8080mode, u8x8_gpio_and_delay_arduino); u8x8_SetPin_8Bit_8080(getU8x8(), d0, d1, d2, d3, d4, d5, d6, d7, enable, cs, dc, reset); } }; class U8X8_MAX7219_64X8_4W_SW_SPI : public U8X8 { public: U8X8_MAX7219_64X8_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_max7219_64x8, u8x8_cad_empty, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_MAX7219_64X8_4W_HW_SPI : public U8X8 { public: U8X8_MAX7219_64X8_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_max7219_64x8, u8x8_cad_empty, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_MAX7219_64X8_2ND_4W_HW_SPI : public U8X8 { public: U8X8_MAX7219_64X8_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_max7219_64x8, u8x8_cad_empty, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_MAX7219_32X8_4W_SW_SPI : public U8X8 { public: U8X8_MAX7219_32X8_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_max7219_32x8, u8x8_cad_empty, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_MAX7219_32X8_4W_HW_SPI : public U8X8 { public: U8X8_MAX7219_32X8_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_max7219_32x8, u8x8_cad_empty, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_MAX7219_32X8_2ND_4W_HW_SPI : public U8X8 { public: U8X8_MAX7219_32X8_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_max7219_32x8, u8x8_cad_empty, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_MAX7219_8X8_4W_SW_SPI : public U8X8 { public: U8X8_MAX7219_8X8_4W_SW_SPI(uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_max7219_8x8, u8x8_cad_empty, u8x8_byte_arduino_4wire_sw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_SW_SPI(getU8x8(), clock, data, cs, dc, reset); } }; class U8X8_MAX7219_8X8_4W_HW_SPI : public U8X8 { public: U8X8_MAX7219_8X8_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_max7219_8x8, u8x8_cad_empty, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; class U8X8_MAX7219_8X8_2ND_4W_HW_SPI : public U8X8 { public: U8X8_MAX7219_8X8_2ND_4W_HW_SPI(uint8_t cs, uint8_t dc, uint8_t reset = U8X8_PIN_NONE) : U8X8() { u8x8_Setup(getU8x8(), u8x8_d_max7219_8x8, u8x8_cad_empty, u8x8_byte_arduino_2nd_hw_spi, u8x8_gpio_and_delay_arduino); u8x8_SetPin_4Wire_HW_SPI(getU8x8(), cs, dc, reset); } }; // constructor list end #endif // U8X8_USE_PINS #endif /* _U8X8LIB_HH */ ================================================ FILE: Drivers/u8g2/Inc/u8g2.h ================================================ /* u8g2.h Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. call sequence u8g2_SetupBuffer_XYZ u8x8_Setup_XYZ u8x8_SetupDefaults(u8g2); assign u8x8 callbacks u8x8->display_cb(u8x8, U8X8_MSG_DISPLAY_SETUP_MEMORY, 0, NULL); setup tile buffer Arduino Uno Text Example > FONT_ROTATION INTERSECTION CLIPPING text data bss dec hex > 8700 > x x x 7450 104 1116 8670 21de > - x x 7132 104 1115 8351 209f > x - x 7230 104 1116 8450 2102 > - - x 7010 104 1115 8229 2025 > - - - 6880 104 1115 8099 1fa3 */ #ifndef _U8G2_H #define _U8G2_H #include "u8x8.h" /* The following macro switches the library into dynamic display buffer allocation mode. Defining this constant will disable all static memory allocation for device memory buffer and thus allows the user to allocate device buffers statically. Before using any display functions, the dynamic buffer *must* be assigned to the u8g2 struct using the u8g2_SetBufferPtr function. When using dynamic allocation, the stack size must be increased by u8g2_GetBufferSize bytes. */ //#define U8G2_USE_DYNAMIC_ALLOC /* The following macro enables 16 Bit mode. Without defining this macro all calulations are done with 8 Bit (1 Byte) variables. Especially on AVR architecture, this will save some space. If this macro is defined, then U8g2 will switch to 16 Bit mode. Use 16 Bit mode for any display with more than 240 pixel in one direction. */ //#define U8G2_16BIT /* U8g2 feature selection, see also https://github.com/olikraus/u8g2/wiki/u8g2optimization */ /* The following macro enables the HVLine speed optimization. It will consume about 40 bytes more in flash memory of the AVR. HVLine procedures are also used by the text drawing functions. */ #define U8G2_WITH_HVLINE_SPEED_OPTIMIZATION /* The following macro activates the early intersection check with the current visible area. Clipping (and low level intersection calculation) will still happen and is controlled by U8G2_WITH_CLIPPING. This early intersection check only improves speed for the picture loop (u8g2_FirstPage/NextPage). With a full framebuffer in RAM and if most graphical elements are drawn within the visible area, then this macro can be commented to reduce code size. */ #define U8G2_WITH_INTERSECTION /* Enable clip window support: void u8g2_SetMaxClipWindow(u8g2_t *u8g2) void u8g2_SetClipWindow(u8g2_t *u8g2, u8g2_uint_t clip_x0, u8g2_uint_t clip_y0, u8g2_uint_t clip_x1, u8g2_uint_t clip_y1 ) Setting a clip window will restrict all drawing to this window. Clip window support requires about 200 bytes flash memory on AVR systems */ #define U8G2_WITH_CLIP_WINDOW_SUPPORT /* The following macro enables all four drawing directions for glyphs and strings. If this macro is not defined, than a string can be drawn only in horizontal direction. */ #define U8G2_WITH_FONT_ROTATION /* U8glib V2 contains support for unicode plane 0 (Basic Multilingual Plane, BMP). The following macro activates this support. Deactivation would save some ROM. This definition also defines the behavior of the expected string encoding. If the following macro is defined, then the DrawUTF8 function is enabled and the string argument for this function is assumed to be UTF-8 encoded. If the following macro is not defined, then all strings in the c-code are assumed to be ISO 8859-1/CP1252 encoded. Independently from this macro, the Arduino print function never accepts UTF-8 strings. This macro does not affect the u8x8 string draw function. u8x8 has also two function, one for pure strings and one for UTF8 Conclusion: U8G2_WITH_UNICODE defined - C-Code Strings must be UTF-8 encoded - Full support of all 65536 glyphs of the unicode basic multilingual plane - Up to 65536 glyphs of the font file can be used. U8G2_WITH_UNICODE not defined - C-Code Strings are assumbed to be ISO 8859-1/CP1252 encoded - Only character values 0 to 255 are supported in the font file. */ #define U8G2_WITH_UNICODE /*==========================================*/ #ifdef __GNUC__ # define U8G2_NOINLINE __attribute__((noinline)) #else # define U8G2_NOINLINE #endif #define U8G2_FONT_SECTION(name) U8X8_FONT_SECTION(name) /* the macro U8G2_USE_LARGE_FONTS enables large fonts (>32K) */ /* it can be enabled for those uC supporting larger arrays */ #if defined(unix) || defined(__arm__) || defined(__arc__) || defined(ESP8266) || defined(ESP_PLATFORM) #ifndef U8G2_USE_LARGE_FONTS #define U8G2_USE_LARGE_FONTS #endif #endif /*==========================================*/ /* C++ compatible */ #ifdef __cplusplus extern "C" { #endif /*==========================================*/ #ifdef U8G2_16BIT typedef uint16_t u8g2_uint_t; /* for pixel position only */ typedef int16_t u8g2_int_t; /* introduced for circle calculation */ typedef int32_t u8g2_long_t; /* introduced for ellipse calculation */ #else typedef uint8_t u8g2_uint_t; /* for pixel position only */ typedef int8_t u8g2_int_t; /* introduced for circle calculation */ typedef int16_t u8g2_long_t; /* introduced for ellipse calculation */ #endif typedef struct u8g2_struct u8g2_t; typedef struct u8g2_cb_struct u8g2_cb_t; typedef void (*u8g2_update_dimension_cb)(u8g2_t *u8g2); typedef void (*u8g2_update_page_win_cb)(u8g2_t *u8g2); typedef void (*u8g2_draw_l90_cb)(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir); typedef void (*u8g2_draw_ll_hvline_cb)(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir); typedef uint8_t (*u8g2_get_kerning_cb)(u8g2_t *u8g2, uint16_t e1, uint16_t e2); /* from ucglib... */ struct _u8g2_font_info_t { /* offset 0 */ uint8_t glyph_cnt; uint8_t bbx_mode; uint8_t bits_per_0; uint8_t bits_per_1; /* offset 4 */ uint8_t bits_per_char_width; uint8_t bits_per_char_height; uint8_t bits_per_char_x; uint8_t bits_per_char_y; uint8_t bits_per_delta_x; /* offset 9 */ int8_t max_char_width; int8_t max_char_height; /* overall height, NOT ascent. Instead ascent = max_char_height + y_offset */ int8_t x_offset; int8_t y_offset; /* offset 13 */ int8_t ascent_A; int8_t descent_g; /* usually a negative value */ int8_t ascent_para; int8_t descent_para; /* offset 17 */ uint16_t start_pos_upper_A; uint16_t start_pos_lower_a; /* offset 21 */ #ifdef U8G2_WITH_UNICODE uint16_t start_pos_unicode; #endif }; typedef struct _u8g2_font_info_t u8g2_font_info_t; /* from ucglib... */ struct _u8g2_font_decode_t { const uint8_t *decode_ptr; /* pointer to the compressed data */ u8g2_uint_t target_x; u8g2_uint_t target_y; int8_t x; /* local coordinates, (0,0) is upper left */ int8_t y; int8_t glyph_width; int8_t glyph_height; uint8_t decode_bit_pos; /* bitpos inside a byte of the compressed data */ uint8_t is_transparent; uint8_t fg_color; uint8_t bg_color; #ifdef U8G2_WITH_FONT_ROTATION uint8_t dir; /* direction */ #endif }; typedef struct _u8g2_font_decode_t u8g2_font_decode_t; struct _u8g2_kerning_t { uint16_t first_table_cnt; uint16_t second_table_cnt; const uint16_t *first_encoding_table; const uint16_t *index_to_second_table; const uint16_t *second_encoding_table; const uint8_t *kerning_values; }; typedef struct _u8g2_kerning_t u8g2_kerning_t; struct u8g2_cb_struct { u8g2_update_dimension_cb update_dimension; u8g2_update_page_win_cb update_page_win; u8g2_draw_l90_cb draw_l90; }; typedef u8g2_uint_t (*u8g2_font_calc_vref_fnptr)(u8g2_t *u8g2); struct u8g2_struct { u8x8_t u8x8; u8g2_draw_ll_hvline_cb ll_hvline; /* low level hvline procedure */ const u8g2_cb_t *cb; /* callback drawprocedures, can be replaced for rotation */ /* the following variables must be assigned during u8g2 setup */ uint8_t *tile_buf_ptr; /* ptr to memory area with u8x8.display_info->tile_width * 8 * tile_buf_height bytes */ uint8_t tile_buf_height; /* height of the tile memory area in tile rows */ uint8_t tile_curr_row; /* current row for picture loop */ /* dimension of the buffer in pixel */ u8g2_uint_t pixel_buf_width; /* equal to tile_buf_width*8 */ u8g2_uint_t pixel_buf_height; /* tile_buf_height*8 */ u8g2_uint_t pixel_curr_row; /* u8g2.tile_curr_row*8 */ /* the following variables are set by the update dimension callback */ /* this is the clipbox after rotation for the hvline procedures */ //u8g2_uint_t buf_x0; /* left corner of the buffer */ //u8g2_uint_t buf_x1; /* right corner of the buffer (excluded) */ u8g2_uint_t buf_y0; u8g2_uint_t buf_y1; /* display dimensions in pixel for the user, calculated in u8g2_update_dimension_common() */ u8g2_uint_t width; u8g2_uint_t height; /* ths is the clip box for the user to check if a specific box has an intersection */ /* use u8g2_IsIntersection from u8g2_intersection.c to test against this intersection */ /* actually, this window describes the positon of the current page */ u8g2_uint_t user_x0; /* left corner of the buffer */ u8g2_uint_t user_x1; /* right corner of the buffer (excluded) */ u8g2_uint_t user_y0; /* upper edge of the buffer */ u8g2_uint_t user_y1; /* lower edge of the buffer (excluded) */ #ifdef U8G2_WITH_CLIP_WINDOW_SUPPORT /* clip window */ u8g2_uint_t clip_x0; /* left corner of the clip window */ u8g2_uint_t clip_x1; /* right corner of the clip window (excluded) */ u8g2_uint_t clip_y0; /* upper edge of the clip window */ u8g2_uint_t clip_y1; /* lower edge of the clip window (excluded) */ #endif /* U8G2_WITH_CLIP_WINDOW_SUPPORT */ /* information about the current font */ const uint8_t *font; /* current font for all text procedures */ // removed: const u8g2_kerning_t *kerning; /* can be NULL */ // removed: u8g2_get_kerning_cb get_kerning_cb; u8g2_font_calc_vref_fnptr font_calc_vref; u8g2_font_decode_t font_decode; /* new font decode structure */ u8g2_font_info_t font_info; /* new font info structure */ #ifdef U8G2_WITH_CLIP_WINDOW_SUPPORT /* 1 of there is an intersection between user_?? and clip_?? box */ uint8_t is_page_clip_window_intersection; #endif /* U8G2_WITH_CLIP_WINDOW_SUPPORT */ uint8_t font_height_mode; int8_t font_ref_ascent; int8_t font_ref_descent; int8_t glyph_x_offset; /* set by u8g2_GetGlyphWidth as a side effect */ uint8_t bitmap_transparency; /* black pixels will be treated as transparent (not drawn) */ uint8_t draw_color; /* 0: clear pixel, 1: set pixel, modified and restored by font procedures */ /* draw_color can be used also directly by the user API */ // the following variable should be renamed to is_buffer_auto_clear uint8_t is_auto_page_clear; /* set to 0 to disable automatic clear of the buffer in firstPage() and nextPage() */ }; #define u8g2_GetU8x8(u8g2) ((u8x8_t *)(u8g2)) //#define u8g2_GetU8x8(u8g2) (&((u8g2)->u8x8)) #ifdef U8X8_WITH_USER_PTR #define u8g2_GetUserPtr(u8g2) ((u8g2_GetU8x8(u8g2))->user_ptr) #define u8g2_SetUserPtr(u8g2, p) ((u8g2_GetU8x8(u8g2))->user_ptr = (p)) #endif // this should be renamed to SetBufferAutoClear #define u8g2_SetAutoPageClear(u8g2, mode) ((u8g2)->is_auto_page_clear = (mode)) /*==========================================*/ /* u8x8 wrapper */ #define u8g2_SetupDisplay(u8g2, display_cb, cad_cb, byte_cb, gpio_and_delay_cb) \ u8x8_Setup(u8g2_GetU8x8(u8g2), (display_cb), (cad_cb), (byte_cb), (gpio_and_delay_cb)) #define u8g2_InitDisplay(u8g2) u8x8_InitDisplay(u8g2_GetU8x8(u8g2)) #define u8g2_SetPowerSave(u8g2, is_enable) u8x8_SetPowerSave(u8g2_GetU8x8(u8g2), (is_enable)) #define u8g2_SetFlipMode(u8g2, mode) u8x8_SetFlipMode(u8g2_GetU8x8(u8g2), (mode)) #define u8g2_SetContrast(u8g2, value) u8x8_SetContrast(u8g2_GetU8x8(u8g2), (value)) //#define u8g2_ClearDisplay(u8g2) u8x8_ClearDisplay(u8g2_GetU8x8(u8g2)) obsolete, can not be used in all cases void u8g2_ClearDisplay(u8g2_t *u8g2); #define u8g2_GetDisplayHeight(u8g2) ((u8g2)->height) #define u8g2_GetDisplayWidth(u8g2) ((u8g2)->width) #define u8g2_GetDrawColor(u8g2) ((u8g2)->draw_color) #define u8g2_SetI2CAddress(u8g2, address) ((u8g2_GetU8x8(u8g2))->i2c_address = (address)) #define u8g2_GetI2CAddress(u8g2) u8x8_GetI2CAddress(u8g2_GetU8x8(u8g2)) #ifdef U8X8_USE_PINS #define u8g2_SetMenuSelectPin(u8g2, val) u8x8_SetMenuSelectPin(u8g2_GetU8x8(u8g2), (val)) #define u8g2_SetMenuNextPin(u8g2, val) u8x8_SetMenuNextPin(u8g2_GetU8x8(u8g2), (val)) #define u8g2_SetMenuPrevPin(u8g2, val) u8x8_SetMenuPrevPin(u8g2_GetU8x8(u8g2), (val)) #define u8g2_SetMenuHomePin(u8g2, val) u8x8_SetMenuHomePin(u8g2_GetU8x8(u8g2), (val)) #define u8g2_SetMenuUpPin(u8g2, val) u8x8_SetMenuUpPin(u8g2_GetU8x8(u8g2), (val)) #define u8g2_SetMenuDownPin(u8g2, val) u8x8_SetMenuDownPin(u8g2_GetU8x8(u8g2), (val)) #endif /*==========================================*/ /* u8g2_setup.c */ void u8g2_draw_l90_r0(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir); extern const u8g2_cb_t u8g2_cb_r0; extern const u8g2_cb_t u8g2_cb_r1; extern const u8g2_cb_t u8g2_cb_r2; extern const u8g2_cb_t u8g2_cb_r3; extern const u8g2_cb_t u8g2_cb_mirror; #define U8G2_R0 (&u8g2_cb_r0) #define U8G2_R1 (&u8g2_cb_r1) #define U8G2_R2 (&u8g2_cb_r2) #define U8G2_R3 (&u8g2_cb_r3) #define U8G2_MIRROR (&u8g2_cb_mirror) /* u8g2: A new, not yet initialized u8g2 memory areay buf: Memory are of size tile_buf_height* tile_buf_height: Number of full lines ll_hvline_cb: one of: u8g2_ll_hvline_vertical_top_lsb u8g2_ll_hvline_horizontal_right_lsb u8g2_cb U8G2_R0 .. U8G2_R3 */ void u8g2_SetMaxClipWindow(u8g2_t *u8g2); void u8g2_SetClipWindow(u8g2_t *u8g2, u8g2_uint_t clip_x0, u8g2_uint_t clip_y0, u8g2_uint_t clip_x1, u8g2_uint_t clip_y1 ); void u8g2_SetupBuffer(u8g2_t *u8g2, uint8_t *buf, uint8_t tile_buf_height, u8g2_draw_ll_hvline_cb ll_hvline_cb, const u8g2_cb_t *u8g2_cb); void u8g2_SetDisplayRotation(u8g2_t *u8g2, const u8g2_cb_t *u8g2_cb); /* null device setup */ void u8g2_Setup_null(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); /*==========================================*/ /* u8g2_d_memory.c generated code start */ uint8_t *u8g2_m_16_4_1(uint8_t *page_cnt); uint8_t *u8g2_m_16_4_2(uint8_t *page_cnt); uint8_t *u8g2_m_16_4_f(uint8_t *page_cnt); uint8_t *u8g2_m_16_8_1(uint8_t *page_cnt); uint8_t *u8g2_m_16_8_2(uint8_t *page_cnt); uint8_t *u8g2_m_16_8_f(uint8_t *page_cnt); uint8_t *u8g2_m_9_5_1(uint8_t *page_cnt); uint8_t *u8g2_m_9_5_2(uint8_t *page_cnt); uint8_t *u8g2_m_9_5_f(uint8_t *page_cnt); uint8_t *u8g2_m_8_4_1(uint8_t *page_cnt); uint8_t *u8g2_m_8_4_2(uint8_t *page_cnt); uint8_t *u8g2_m_8_4_f(uint8_t *page_cnt); uint8_t *u8g2_m_8_16_1(uint8_t *page_cnt); uint8_t *u8g2_m_8_16_2(uint8_t *page_cnt); uint8_t *u8g2_m_8_16_f(uint8_t *page_cnt); uint8_t *u8g2_m_12_12_1(uint8_t *page_cnt); uint8_t *u8g2_m_12_12_2(uint8_t *page_cnt); uint8_t *u8g2_m_12_12_f(uint8_t *page_cnt); uint8_t *u8g2_m_16_16_1(uint8_t *page_cnt); uint8_t *u8g2_m_16_16_2(uint8_t *page_cnt); uint8_t *u8g2_m_16_16_f(uint8_t *page_cnt); uint8_t *u8g2_m_20_20_1(uint8_t *page_cnt); uint8_t *u8g2_m_20_20_2(uint8_t *page_cnt); uint8_t *u8g2_m_20_20_f(uint8_t *page_cnt); uint8_t *u8g2_m_32_8_1(uint8_t *page_cnt); uint8_t *u8g2_m_32_8_2(uint8_t *page_cnt); uint8_t *u8g2_m_32_8_f(uint8_t *page_cnt); uint8_t *u8g2_m_8_6_1(uint8_t *page_cnt); uint8_t *u8g2_m_8_6_2(uint8_t *page_cnt); uint8_t *u8g2_m_8_6_f(uint8_t *page_cnt); uint8_t *u8g2_m_6_8_1(uint8_t *page_cnt); uint8_t *u8g2_m_6_8_2(uint8_t *page_cnt); uint8_t *u8g2_m_6_8_f(uint8_t *page_cnt); uint8_t *u8g2_m_12_2_1(uint8_t *page_cnt); uint8_t *u8g2_m_12_2_2(uint8_t *page_cnt); uint8_t *u8g2_m_12_2_f(uint8_t *page_cnt); uint8_t *u8g2_m_16_12_1(uint8_t *page_cnt); uint8_t *u8g2_m_16_12_2(uint8_t *page_cnt); uint8_t *u8g2_m_16_12_f(uint8_t *page_cnt); uint8_t *u8g2_m_32_4_1(uint8_t *page_cnt); uint8_t *u8g2_m_32_4_2(uint8_t *page_cnt); uint8_t *u8g2_m_32_4_f(uint8_t *page_cnt); uint8_t *u8g2_m_24_4_1(uint8_t *page_cnt); uint8_t *u8g2_m_24_4_2(uint8_t *page_cnt); uint8_t *u8g2_m_24_4_f(uint8_t *page_cnt); uint8_t *u8g2_m_50_30_1(uint8_t *page_cnt); uint8_t *u8g2_m_50_30_2(uint8_t *page_cnt); uint8_t *u8g2_m_50_30_f(uint8_t *page_cnt); uint8_t *u8g2_m_18_21_1(uint8_t *page_cnt); uint8_t *u8g2_m_18_21_2(uint8_t *page_cnt); uint8_t *u8g2_m_18_21_f(uint8_t *page_cnt); uint8_t *u8g2_m_13_8_1(uint8_t *page_cnt); uint8_t *u8g2_m_13_8_2(uint8_t *page_cnt); uint8_t *u8g2_m_13_8_f(uint8_t *page_cnt); uint8_t *u8g2_m_11_6_1(uint8_t *page_cnt); uint8_t *u8g2_m_11_6_2(uint8_t *page_cnt); uint8_t *u8g2_m_11_6_f(uint8_t *page_cnt); uint8_t *u8g2_m_12_9_1(uint8_t *page_cnt); uint8_t *u8g2_m_12_9_2(uint8_t *page_cnt); uint8_t *u8g2_m_12_9_f(uint8_t *page_cnt); uint8_t *u8g2_m_24_8_1(uint8_t *page_cnt); uint8_t *u8g2_m_24_8_2(uint8_t *page_cnt); uint8_t *u8g2_m_24_8_f(uint8_t *page_cnt); uint8_t *u8g2_m_30_8_1(uint8_t *page_cnt); uint8_t *u8g2_m_30_8_2(uint8_t *page_cnt); uint8_t *u8g2_m_30_8_f(uint8_t *page_cnt); uint8_t *u8g2_m_30_15_1(uint8_t *page_cnt); uint8_t *u8g2_m_30_15_2(uint8_t *page_cnt); uint8_t *u8g2_m_30_15_f(uint8_t *page_cnt); uint8_t *u8g2_m_30_16_1(uint8_t *page_cnt); uint8_t *u8g2_m_30_16_2(uint8_t *page_cnt); uint8_t *u8g2_m_30_16_f(uint8_t *page_cnt); uint8_t *u8g2_m_20_16_1(uint8_t *page_cnt); uint8_t *u8g2_m_20_16_2(uint8_t *page_cnt); uint8_t *u8g2_m_20_16_f(uint8_t *page_cnt); uint8_t *u8g2_m_20_13_1(uint8_t *page_cnt); uint8_t *u8g2_m_20_13_2(uint8_t *page_cnt); uint8_t *u8g2_m_20_13_f(uint8_t *page_cnt); uint8_t *u8g2_m_30_20_1(uint8_t *page_cnt); uint8_t *u8g2_m_30_20_2(uint8_t *page_cnt); uint8_t *u8g2_m_30_20_f(uint8_t *page_cnt); uint8_t *u8g2_m_40_30_1(uint8_t *page_cnt); uint8_t *u8g2_m_40_30_2(uint8_t *page_cnt); uint8_t *u8g2_m_40_30_f(uint8_t *page_cnt); uint8_t *u8g2_m_17_4_1(uint8_t *page_cnt); uint8_t *u8g2_m_17_4_2(uint8_t *page_cnt); uint8_t *u8g2_m_17_4_f(uint8_t *page_cnt); uint8_t *u8g2_m_17_8_1(uint8_t *page_cnt); uint8_t *u8g2_m_17_8_2(uint8_t *page_cnt); uint8_t *u8g2_m_17_8_f(uint8_t *page_cnt); uint8_t *u8g2_m_48_17_1(uint8_t *page_cnt); uint8_t *u8g2_m_48_17_2(uint8_t *page_cnt); uint8_t *u8g2_m_48_17_f(uint8_t *page_cnt); uint8_t *u8g2_m_32_16_1(uint8_t *page_cnt); uint8_t *u8g2_m_32_16_2(uint8_t *page_cnt); uint8_t *u8g2_m_32_16_f(uint8_t *page_cnt); uint8_t *u8g2_m_32_20_1(uint8_t *page_cnt); uint8_t *u8g2_m_32_20_2(uint8_t *page_cnt); uint8_t *u8g2_m_32_20_f(uint8_t *page_cnt); uint8_t *u8g2_m_22_13_1(uint8_t *page_cnt); uint8_t *u8g2_m_22_13_2(uint8_t *page_cnt); uint8_t *u8g2_m_22_13_f(uint8_t *page_cnt); uint8_t *u8g2_m_24_12_1(uint8_t *page_cnt); uint8_t *u8g2_m_24_12_2(uint8_t *page_cnt); uint8_t *u8g2_m_24_12_f(uint8_t *page_cnt); uint8_t *u8g2_m_20_10_1(uint8_t *page_cnt); uint8_t *u8g2_m_20_10_2(uint8_t *page_cnt); uint8_t *u8g2_m_20_10_f(uint8_t *page_cnt); uint8_t *u8g2_m_22_9_1(uint8_t *page_cnt); uint8_t *u8g2_m_22_9_2(uint8_t *page_cnt); uint8_t *u8g2_m_22_9_f(uint8_t *page_cnt); uint8_t *u8g2_m_25_25_1(uint8_t *page_cnt); uint8_t *u8g2_m_25_25_2(uint8_t *page_cnt); uint8_t *u8g2_m_25_25_f(uint8_t *page_cnt); uint8_t *u8g2_m_37_16_1(uint8_t *page_cnt); uint8_t *u8g2_m_37_16_2(uint8_t *page_cnt); uint8_t *u8g2_m_37_16_f(uint8_t *page_cnt); uint8_t *u8g2_m_8_1_1(uint8_t *page_cnt); uint8_t *u8g2_m_8_1_2(uint8_t *page_cnt); uint8_t *u8g2_m_8_1_f(uint8_t *page_cnt); uint8_t *u8g2_m_4_1_1(uint8_t *page_cnt); uint8_t *u8g2_m_4_1_2(uint8_t *page_cnt); uint8_t *u8g2_m_4_1_f(uint8_t *page_cnt); uint8_t *u8g2_m_1_1_1(uint8_t *page_cnt); uint8_t *u8g2_m_1_1_2(uint8_t *page_cnt); uint8_t *u8g2_m_1_1_f(uint8_t *page_cnt); uint8_t *u8g2_m_48_30_1(uint8_t *page_cnt); uint8_t *u8g2_m_48_30_2(uint8_t *page_cnt); uint8_t *u8g2_m_48_30_f(uint8_t *page_cnt); /* u8g2_d_memory.c generated code end */ /*==========================================*/ /* u8g2_d_setup.c generated code start */ void u8g2_Setup_ssd1305_128x32_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_128x32_adafruit_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_128x32_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_128x32_adafruit_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_128x32_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_128x32_adafruit_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_i2c_128x32_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_i2c_128x32_adafruit_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_i2c_128x32_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_i2c_128x32_adafruit_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_i2c_128x32_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_i2c_128x32_adafruit_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_128x64_adafruit_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_128x64_adafruit_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_128x64_adafruit_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_i2c_128x64_adafruit_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_i2c_128x64_adafruit_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1305_i2c_128x64_adafruit_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_128x64_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_128x64_vcomh0_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_128x64_alt0_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_128x64_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_128x64_vcomh0_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_128x64_alt0_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_128x64_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_128x64_vcomh0_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_128x64_alt0_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_128x64_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_128x64_vcomh0_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_128x64_alt0_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_128x64_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_128x64_vcomh0_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_128x64_alt0_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_128x64_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_128x64_vcomh0_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_128x64_alt0_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_128x64_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_128x64_vcomh0_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_128x64_winstar_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_128x64_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_128x64_vcomh0_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_128x64_winstar_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_128x64_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_128x64_vcomh0_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_128x64_winstar_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_i2c_128x64_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_i2c_128x64_vcomh0_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_i2c_128x64_winstar_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_i2c_128x64_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_i2c_128x64_vcomh0_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_i2c_128x64_winstar_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_i2c_128x64_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_i2c_128x64_vcomh0_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_i2c_128x64_winstar_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_72x40_wise_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_72x40_wise_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_72x40_wise_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_i2c_72x40_wise_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_i2c_72x40_wise_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_i2c_72x40_wise_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_64x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_64x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_64x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_i2c_64x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_i2c_64x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1106_i2c_64x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_64x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_64x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_64x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_64x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_64x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_64x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_seeed_96x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_seeed_96x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_seeed_96x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_seeed_96x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_seeed_96x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_seeed_96x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_pimoroni_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_seeed_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_pimoroni_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_seeed_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_pimoroni_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_seeed_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_pimoroni_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_seeed_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_pimoroni_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_seeed_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_pimoroni_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1107_i2c_seeed_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1108_160x160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1108_160x160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1108_160x160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1108_i2c_160x160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1108_i2c_160x160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1108_i2c_160x160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1122_256x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1122_256x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1122_256x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1122_i2c_256x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1122_i2c_256x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sh1122_i2c_256x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_128x32_univision_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_128x32_winstar_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_128x32_univision_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_128x32_winstar_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_128x32_univision_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_128x32_winstar_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_128x32_univision_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_128x32_winstar_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_128x32_univision_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_128x32_winstar_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_128x32_univision_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_128x32_winstar_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_64x48_er_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_64x48_er_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_64x48_er_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_64x48_er_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_64x48_er_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_64x48_er_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_48x64_winstar_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_48x64_winstar_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_48x64_winstar_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_48x64_winstar_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_48x64_winstar_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_48x64_winstar_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_64x32_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_64x32_1f_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_64x32_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_64x32_1f_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_64x32_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_64x32_1f_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_64x32_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_64x32_1f_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_64x32_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_64x32_1f_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_64x32_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_64x32_1f_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_96x16_er_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_96x16_er_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_96x16_er_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_96x16_er_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_96x16_er_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1306_i2c_96x16_er_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1309_128x64_noname2_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1309_128x64_noname2_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1309_128x64_noname2_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1309_i2c_128x64_noname2_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1309_i2c_128x64_noname2_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1309_i2c_128x64_noname2_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1309_128x64_noname0_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1309_128x64_noname0_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1309_128x64_noname0_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1309_i2c_128x64_noname0_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1309_i2c_128x64_noname0_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1309_i2c_128x64_noname0_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1316_128x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1316_128x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1316_128x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1316_i2c_128x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1316_i2c_128x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1316_i2c_128x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1317_96x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1317_96x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1317_96x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1317_i2c_96x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1317_i2c_96x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1317_i2c_96x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1318_128x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1318_128x96_xcp_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1318_128x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1318_128x96_xcp_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1318_128x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1318_128x96_xcp_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1318_i2c_128x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1318_i2c_128x96_xcp_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1318_i2c_128x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1318_i2c_128x96_xcp_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1318_i2c_128x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1318_i2c_128x96_xcp_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1325_nhd_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1325_nhd_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1325_nhd_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1325_i2c_nhd_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1325_i2c_nhd_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1325_i2c_nhd_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd0323_os128064_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd0323_os128064_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd0323_os128064_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd0323_i2c_os128064_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd0323_i2c_os128064_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd0323_i2c_os128064_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1326_er_256x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1326_er_256x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1326_er_256x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1326_i2c_er_256x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1326_i2c_er_256x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1326_i2c_er_256x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_seeed_96x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_seeed_96x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_seeed_96x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_i2c_seeed_96x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_i2c_seeed_96x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_i2c_seeed_96x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_ea_w128128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_midas_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_ws_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_ea_w128128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_midas_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_ws_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_ea_w128128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_midas_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_ws_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_i2c_ea_w128128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_i2c_midas_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_i2c_ws_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_i2c_ea_w128128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_i2c_midas_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_i2c_ws_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_i2c_ea_w128128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_i2c_midas_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1327_i2c_ws_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1329_128x96_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1329_128x96_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1329_128x96_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ld7032_60x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ld7032_60x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ld7032_60x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ld7032_i2c_60x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ld7032_i2c_60x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ld7032_i2c_60x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_p_192x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_p_192x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_p_192x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_192x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_192x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_192x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_s_192x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_s_192x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_s_192x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_p_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_p_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_p_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_s_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_s_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7920_s_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ls013b7dh03_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ls013b7dh03_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ls013b7dh03_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ls027b7dh01_400x240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ls027b7dh01_400x240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ls027b7dh01_400x240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ls013b7dh05_144x168_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ls013b7dh05_144x168_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ls013b7dh05_144x168_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1701_ea_dogs102_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1701_ea_dogs102_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1701_ea_dogs102_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1701_mini12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1701_mini12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1701_mini12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_pcd8544_84x48_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_pcd8544_84x48_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_pcd8544_84x48_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_pcf8812_96x65_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_pcf8812_96x65_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_pcf8812_96x65_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_hx1230_96x68_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_hx1230_96x68_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_hx1230_96x68_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1604_jlx19264_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1604_jlx19264_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1604_jlx19264_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1604_i2c_jlx19264_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1604_i2c_jlx19264_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1604_i2c_jlx19264_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_erc24064_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_erc24064_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_erc24064_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_i2c_erc24064_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_i2c_erc24064_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_i2c_erc24064_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_erc240120_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_erc240120_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_erc240120_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_i2c_erc240120_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_i2c_erc240120_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_i2c_erc240120_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_240x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_240x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_240x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_i2c_240x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_i2c_240x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1608_i2c_240x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1638_160x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1638_160x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1638_160x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1610_ea_dogxl160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1610_ea_dogxl160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1610_ea_dogxl160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1610_i2c_ea_dogxl160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1610_i2c_ea_dogxl160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1610_i2c_ea_dogxl160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_ea_dogm240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_ea_dogm240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_ea_dogm240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_i2c_ea_dogm240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_i2c_ea_dogm240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_i2c_ea_dogm240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_ea_dogxl240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_ea_dogxl240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_ea_dogxl240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_i2c_ea_dogxl240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_i2c_ea_dogxl240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_i2c_ea_dogxl240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_ew50850_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_ew50850_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_ew50850_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_i2c_ew50850_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_i2c_ew50850_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_i2c_ew50850_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_cg160160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_cg160160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_cg160160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_i2c_cg160160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_i2c_cg160160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1611_i2c_cg160160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7511_avd_320x240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7511_avd_320x240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7511_avd_320x240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_ea_dogm128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_lm6063_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_64128n_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_zolen_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_lm6059_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_lx12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_erc12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_erc12864_alt_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_nhd_c12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_jlx12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_ea_dogm128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_lm6063_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_64128n_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_zolen_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_lm6059_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_lx12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_erc12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_erc12864_alt_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_nhd_c12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_jlx12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_ea_dogm128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_lm6063_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_64128n_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_zolen_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_lm6059_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_lx12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_erc12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_erc12864_alt_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_nhd_c12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_jlx12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_nhd_c12832_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_nhd_c12832_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_nhd_c12832_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1601_128x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1601_128x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1601_128x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1601_i2c_128x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1601_i2c_128x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_uc1601_i2c_128x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_ea_dogm132_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_ea_dogm132_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7565_ea_dogm132_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_pi_132x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_pi_132x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_pi_132x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_jlx12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_enh_dg128064_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_enh_dg128064i_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_jlx12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_enh_dg128064_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_enh_dg128064i_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_jlx12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_enh_dg128064_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_enh_dg128064i_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_64x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_64x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_64x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_i2c_64x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_i2c_64x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7567_i2c_64x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7586s_s028hn118a_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7586s_s028hn118a_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7586s_s028hn118a_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7586s_erc240160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7586s_erc240160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7586s_erc240160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7588_jlx12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7588_jlx12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7588_jlx12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7588_i2c_jlx12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7588_i2c_jlx12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st7588_i2c_jlx12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx256128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_wo256x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx256128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_wo256x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx256128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_wo256x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx256128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_wo256x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx256128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_wo256x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx256128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_wo256x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx256160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx256160m_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx256160_alt_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx256160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx256160m_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx256160_alt_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx256160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx256160m_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx256160_alt_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx256160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx256160m_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx256160_alt_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx256160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx256160m_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx256160_alt_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx256160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx256160m_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx256160_alt_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx240160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx240160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx240160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx240160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx240160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx240160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx25664_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx25664_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx25664_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx25664_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx25664_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx25664_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx172104_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx172104_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx172104_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx172104_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx172104_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx172104_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx19296_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx19296_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_jlx19296_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx19296_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx19296_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75256_i2c_jlx19296_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75320_jlx320240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75320_jlx320240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75320_jlx320240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75320_i2c_jlx320240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75320_i2c_jlx320240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_st75320_i2c_jlx320240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_nt7534_tg12864r_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_nt7534_tg12864r_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_nt7534_tg12864r_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ist3020_erc19264_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ist3020_erc19264_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ist3020_erc19264_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sbn1661_122x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sbn1661_122x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sbn1661_122x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sed1520_122x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sed1520_122x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sed1520_122x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ks0108_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ks0108_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ks0108_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ks0108_erm19264_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ks0108_erm19264_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ks0108_erm19264_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_lc7981_160x80_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_lc7981_160x80_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_lc7981_160x80_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_lc7981_160x160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_lc7981_160x160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_lc7981_160x160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_lc7981_240x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_lc7981_240x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_lc7981_240x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_lc7981_240x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_lc7981_240x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_lc7981_240x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_240x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_240x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_240x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_240x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_240x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_240x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_256x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_256x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_256x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_128x64_alt_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_128x64_alt_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_128x64_alt_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_160x80_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_160x80_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_t6963_160x80_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1322_nhd_256x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1322_nhd_256x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1322_nhd_256x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1322_nhd_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1322_nhd_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1322_nhd_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1606_172x72_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1606_172x72_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1606_172x72_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1607_200x200_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1607_gd_200x200_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1607_ws_200x200_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1607_200x200_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1607_gd_200x200_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1607_ws_200x200_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1607_200x200_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1607_gd_200x200_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ssd1607_ws_200x200_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_il3820_296x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_il3820_v2_296x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_il3820_296x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_il3820_v2_296x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_il3820_296x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_il3820_v2_296x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sed1330_240x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sed1330_240x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_sed1330_240x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ra8835_nhd_240x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ra8835_nhd_240x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ra8835_nhd_240x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ra8835_320x240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ra8835_320x240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_ra8835_320x240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_max7219_64x8_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_max7219_64x8_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_max7219_64x8_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_max7219_32x8_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_max7219_32x8_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_max7219_32x8_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_max7219_8x8_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_max7219_8x8_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_max7219_8x8_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_a2printer_384x240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_a2printer_384x240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); void u8g2_Setup_a2printer_384x240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); /* u8g2_d_setup.c generated code end */ /*==========================================*/ /* u8g2_buffer.c */ void u8g2_SendBuffer(u8g2_t *u8g2); void u8g2_ClearBuffer(u8g2_t *u8g2); void u8g2_SetBufferCurrTileRow(u8g2_t *u8g2, uint8_t row) U8G2_NOINLINE; void u8g2_FirstPage(u8g2_t *u8g2); uint8_t u8g2_NextPage(u8g2_t *u8g2); #ifdef U8G2_USE_DYNAMIC_ALLOC #define u8g2_SetBufferPtr(u8g2, buf) ((u8g2)->tile_buf_ptr = (buf)); #define u8g2_GetBufferSize(u8g2) ((u8g2)->u8x8.display_info->tile_width * 8 * (u8g2)->tile_buf_height) #endif #define u8g2_GetBufferPtr(u8g2) ((u8g2)->tile_buf_ptr) #define u8g2_GetBufferTileHeight(u8g2) ((u8g2)->tile_buf_height) #define u8g2_GetBufferTileWidth(u8g2) (u8g2_GetU8x8(u8g2)->display_info->tile_width) /* the following variable is only valid after calling u8g2_FirstPage */ /* renamed from Page to Buffer: the CurrTileRow is the current row of the buffer, issue #370 */ #define u8g2_GetPageCurrTileRow(u8g2) ((u8g2)->tile_curr_row) #define u8g2_GetBufferCurrTileRow(u8g2) ((u8g2)->tile_curr_row) void u8g2_UpdateDisplayArea(u8g2_t *u8g2, uint8_t tx, uint8_t ty, uint8_t tw, uint8_t th); void u8g2_UpdateDisplay(u8g2_t *u8g2); /*==========================================*/ /* u8g2_ll_hvline.c */ /* x,y Upper left position of the line within the local buffer (not the display!) len length of the line in pixel, len must not be 0 dir 0: horizontal line (left to right) 1: vertical line (top to bottom) asumption: all clipping done */ /* SSD13xx, UC17xx, UC16xx */ void u8g2_ll_hvline_vertical_top_lsb(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir); /* ST7920 */ void u8g2_ll_hvline_horizontal_right_lsb(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir); /*==========================================*/ /* u8g2_hvline.c */ /* u8g2_DrawHVLine does not use u8g2_IsIntersection */ void u8g2_DrawHVLine(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir); /* the following three function will do an intersection test of this is enabled with U8G2_WITH_INTERSECTION */ void u8g2_DrawHLine(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len); void u8g2_DrawVLine(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len); void u8g2_DrawPixel(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y); void u8g2_SetDrawColor(u8g2_t *u8g2, uint8_t color) U8G2_NOINLINE; /* u8g: u8g_SetColorIndex(u8g_t *u8g, uint8_t idx); */ /*==========================================*/ /* u8g2_bitmap.c */ void u8g2_SetBitmapMode(u8g2_t *u8g2, uint8_t is_transparent); void u8g2_DrawHorizontalBitmap(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, const uint8_t *b); void u8g2_DrawBitmap(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t cnt, u8g2_uint_t h, const uint8_t *bitmap); void u8g2_DrawXBM(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, const uint8_t *bitmap); void u8g2_DrawXBMP(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, const uint8_t *bitmap); /* assumes bitmap in PROGMEM */ /*==========================================*/ /* u8g2_intersection.c */ #ifdef U8G2_WITH_INTERSECTION uint8_t u8g2_IsIntersection(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t x1, u8g2_uint_t y1); #endif /* U8G2_WITH_INTERSECTION */ /*==========================================*/ /* u8g2_circle.c */ #define U8G2_DRAW_UPPER_RIGHT 0x01 #define U8G2_DRAW_UPPER_LEFT 0x02 #define U8G2_DRAW_LOWER_LEFT 0x04 #define U8G2_DRAW_LOWER_RIGHT 0x08 #define U8G2_DRAW_ALL (U8G2_DRAW_UPPER_RIGHT|U8G2_DRAW_UPPER_LEFT|U8G2_DRAW_LOWER_RIGHT|U8G2_DRAW_LOWER_LEFT) void u8g2_DrawCircle(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rad, uint8_t option); void u8g2_DrawDisc(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rad, uint8_t option); void u8g2_DrawEllipse(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rx, u8g2_uint_t ry, uint8_t option); void u8g2_DrawFilledEllipse(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rx, u8g2_uint_t ry, uint8_t option); /*==========================================*/ /* u8g2_line.c */ void u8g2_DrawLine(u8g2_t *u8g2, u8g2_uint_t x1, u8g2_uint_t y1, u8g2_uint_t x2, u8g2_uint_t y2); /*==========================================*/ /* u8g2_box.c */ void u8g2_DrawBox(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h); void u8g2_DrawFrame(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h); void u8g2_DrawRBox(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, u8g2_uint_t r); void u8g2_DrawRFrame(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, u8g2_uint_t r); /*==========================================*/ /* u8g2_polygon.c */ void u8g2_ClearPolygonXY(void); void u8g2_AddPolygonXY(u8g2_t *u8g2, int16_t x, int16_t y); void u8g2_DrawPolygon(u8g2_t *u8g2); void u8g2_DrawTriangle(u8g2_t *u8g2, int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2); /*==========================================*/ /* u8g2_kerning.c */ //uint8_t u8g2_GetNullKerning(u8g2_t *u8g2, uint16_t e1, uint16_t e2); uint8_t u8g2_GetKerning(u8g2_t *u8g2, u8g2_kerning_t *kerning, uint16_t e1, uint16_t e2); uint8_t u8g2_GetKerningByTable(u8g2_t *u8g2, const uint16_t *kt, uint16_t e1, uint16_t e2); /*==========================================*/ /* u8g2_font.c */ size_t u8g2_GetFontSize(const uint8_t *font_arg); #define U8G2_FONT_HEIGHT_MODE_TEXT 0 #define U8G2_FONT_HEIGHT_MODE_XTEXT 1 #define U8G2_FONT_HEIGHT_MODE_ALL 2 void u8g2_SetFont(u8g2_t *u8g2, const uint8_t *font); void u8g2_SetFontMode(u8g2_t *u8g2, uint8_t is_transparent); uint8_t u8g2_IsGlyph(u8g2_t *u8g2, uint16_t requested_encoding); int8_t u8g2_GetGlyphWidth(u8g2_t *u8g2, uint16_t requested_encoding); u8g2_uint_t u8g2_DrawGlyph(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, uint16_t encoding); int8_t u8g2_GetStrX(u8g2_t *u8g2, const char *s); /* for u8g compatibility */ void u8g2_SetFontDirection(u8g2_t *u8g2, uint8_t dir); u8g2_uint_t u8g2_DrawStr(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, const char *str); u8g2_uint_t u8g2_DrawUTF8(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, const char *str); u8g2_uint_t u8g2_DrawExtendedUTF8(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, uint8_t to_left, u8g2_kerning_t *kerning, const char *str); u8g2_uint_t u8g2_DrawExtUTF8(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, uint8_t to_left, const uint16_t *kerning_table, const char *str); #define u8g2_GetMaxCharHeight(u8g2) ((u8g2)->font_info.max_char_height) #define u8g2_GetMaxCharWidth(u8g2) ((u8g2)->font_info.max_char_width) #define u8g2_GetAscent(u8g2) ((u8g2)->font_ref_ascent) #define u8g2_GetDescent(u8g2) ((u8g2)->font_ref_descent) #define u8g2_GetFontAscent(u8g2) ((u8g2)->font_ref_ascent) #define u8g2_GetFontDescent(u8g2) ((u8g2)->font_ref_descent) uint8_t u8g2_IsAllValidUTF8(u8g2_t *u8g2, const char *str); // checks whether all codes are valid u8g2_uint_t u8g2_GetStrWidth(u8g2_t *u8g2, const char *s); u8g2_uint_t u8g2_GetUTF8Width(u8g2_t *u8g2, const char *str); void u8g2_SetFontPosBaseline(u8g2_t *u8g2); void u8g2_SetFontPosBottom(u8g2_t *u8g2); void u8g2_SetFontPosTop(u8g2_t *u8g2); void u8g2_SetFontPosCenter(u8g2_t *u8g2); void u8g2_SetFontRefHeightText(u8g2_t *u8g2); void u8g2_SetFontRefHeightExtendedText(u8g2_t *u8g2); void u8g2_SetFontRefHeightAll(u8g2_t *u8g2); /*==========================================*/ /* u8log_u8g2.c */ void u8g2_DrawLog(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8log_t *u8log); void u8log_u8g2_cb(u8log_t * u8log); /*==========================================*/ /* u8g2_selection_list.c */ void u8g2_DrawUTF8Line(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, const char *s, uint8_t border_size, uint8_t is_invert); u8g2_uint_t u8g2_DrawUTF8Lines(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t line_height, const char *s); uint8_t u8g2_UserInterfaceSelectionList(u8g2_t *u8g2, const char *title, uint8_t start_pos, const char *sl); /*==========================================*/ /* u8g2_message.c */ uint8_t u8g2_UserInterfaceMessage(u8g2_t *u8g2, const char *title1, const char *title2, const char *title3, const char *buttons); /*==========================================*/ /* u8g2_input_value.c */ uint8_t u8g2_UserInterfaceInputValue(u8g2_t *u8g2, const char *title, const char *pre, uint8_t *value, uint8_t lo, uint8_t hi, uint8_t digits, const char *post); /*==========================================*/ /* u8x8_d_sdl_128x64.c */ void u8g2_SetupBuffer_SDL_128x64(u8g2_t *u8g2, const u8g2_cb_t *u8g2_cb); void u8g2_SetupBuffer_SDL_128x64_4(u8g2_t *u8g2, const u8g2_cb_t *u8g2_cb); void u8g2_SetupBuffer_SDL_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *u8g2_cb); /*==========================================*/ /* u8x8_d_tga.c */ void u8g2_SetupBuffer_TGA_DESC(u8g2_t *u8g2, const u8g2_cb_t *u8g2_cb); void u8g2_SetupBuffer_TGA_LCD(u8g2_t *u8g2, const u8g2_cb_t *u8g2_cb); /*==========================================*/ /* u8x8_d_bitmap.c */ void u8g2_SetupBitmap(u8g2_t *u8g2, const u8g2_cb_t *u8g2_cb, uint16_t pixel_width, uint16_t pixel_height); /*==========================================*/ /* u8x8_d_utf8.c */ /* 96x32 stdout */ void u8g2_SetupBuffer_Utf8(u8g2_t *u8g2, const u8g2_cb_t *u8g2_cb); /*==========================================*/ /* itoa procedures */ #define u8g2_u8toa u8x8_u8toa #define u8g2_u16toa u8x8_u16toa /*==========================================*/ /* start font list */ extern const uint8_t u8g2_font_u8glib_4_tf[] U8G2_FONT_SECTION("u8g2_font_u8glib_4_tf"); extern const uint8_t u8g2_font_u8glib_4_tr[] U8G2_FONT_SECTION("u8g2_font_u8glib_4_tr"); extern const uint8_t u8g2_font_u8glib_4_hf[] U8G2_FONT_SECTION("u8g2_font_u8glib_4_hf"); extern const uint8_t u8g2_font_u8glib_4_hr[] U8G2_FONT_SECTION("u8g2_font_u8glib_4_hr"); extern const uint8_t u8g2_font_m2icon_5_tf[] U8G2_FONT_SECTION("u8g2_font_m2icon_5_tf"); extern const uint8_t u8g2_font_m2icon_7_tf[] U8G2_FONT_SECTION("u8g2_font_m2icon_7_tf"); extern const uint8_t u8g2_font_m2icon_9_tf[] U8G2_FONT_SECTION("u8g2_font_m2icon_9_tf"); extern const uint8_t u8g2_font_emoticons21_tr[] U8G2_FONT_SECTION("u8g2_font_emoticons21_tr"); extern const uint8_t u8g2_font_battery19_tn[] U8G2_FONT_SECTION("u8g2_font_battery19_tn"); extern const uint8_t u8g2_font_freedoomr10_tu[] U8G2_FONT_SECTION("u8g2_font_freedoomr10_tu"); extern const uint8_t u8g2_font_freedoomr10_mu[] U8G2_FONT_SECTION("u8g2_font_freedoomr10_mu"); extern const uint8_t u8g2_font_freedoomr25_tn[] U8G2_FONT_SECTION("u8g2_font_freedoomr25_tn"); extern const uint8_t u8g2_font_freedoomr25_mn[] U8G2_FONT_SECTION("u8g2_font_freedoomr25_mn"); extern const uint8_t u8g2_font_7Segments_26x42_mn[] U8G2_FONT_SECTION("u8g2_font_7Segments_26x42_mn"); extern const uint8_t u8g2_font_amstrad_cpc_extended_8f[] U8G2_FONT_SECTION("u8g2_font_amstrad_cpc_extended_8f"); extern const uint8_t u8g2_font_amstrad_cpc_extended_8r[] U8G2_FONT_SECTION("u8g2_font_amstrad_cpc_extended_8r"); extern const uint8_t u8g2_font_amstrad_cpc_extended_8n[] U8G2_FONT_SECTION("u8g2_font_amstrad_cpc_extended_8n"); extern const uint8_t u8g2_font_amstrad_cpc_extended_8u[] U8G2_FONT_SECTION("u8g2_font_amstrad_cpc_extended_8u"); extern const uint8_t u8g2_font_cursor_tf[] U8G2_FONT_SECTION("u8g2_font_cursor_tf"); extern const uint8_t u8g2_font_cursor_tr[] U8G2_FONT_SECTION("u8g2_font_cursor_tr"); extern const uint8_t u8g2_font_micro_tr[] U8G2_FONT_SECTION("u8g2_font_micro_tr"); extern const uint8_t u8g2_font_micro_tn[] U8G2_FONT_SECTION("u8g2_font_micro_tn"); extern const uint8_t u8g2_font_micro_mr[] U8G2_FONT_SECTION("u8g2_font_micro_mr"); extern const uint8_t u8g2_font_micro_mn[] U8G2_FONT_SECTION("u8g2_font_micro_mn"); extern const uint8_t u8g2_font_4x6_tf[] U8G2_FONT_SECTION("u8g2_font_4x6_tf"); extern const uint8_t u8g2_font_4x6_tr[] U8G2_FONT_SECTION("u8g2_font_4x6_tr"); extern const uint8_t u8g2_font_4x6_tn[] U8G2_FONT_SECTION("u8g2_font_4x6_tn"); extern const uint8_t u8g2_font_4x6_mf[] U8G2_FONT_SECTION("u8g2_font_4x6_mf"); extern const uint8_t u8g2_font_4x6_mr[] U8G2_FONT_SECTION("u8g2_font_4x6_mr"); extern const uint8_t u8g2_font_4x6_mn[] U8G2_FONT_SECTION("u8g2_font_4x6_mn"); extern const uint8_t u8g2_font_4x6_t_cyrillic[] U8G2_FONT_SECTION("u8g2_font_4x6_t_cyrillic"); extern const uint8_t u8g2_font_5x7_tf[] U8G2_FONT_SECTION("u8g2_font_5x7_tf"); extern const uint8_t u8g2_font_5x7_tr[] U8G2_FONT_SECTION("u8g2_font_5x7_tr"); extern const uint8_t u8g2_font_5x7_tn[] U8G2_FONT_SECTION("u8g2_font_5x7_tn"); extern const uint8_t u8g2_font_5x7_mf[] U8G2_FONT_SECTION("u8g2_font_5x7_mf"); extern const uint8_t u8g2_font_5x7_mr[] U8G2_FONT_SECTION("u8g2_font_5x7_mr"); extern const uint8_t u8g2_font_5x7_mn[] U8G2_FONT_SECTION("u8g2_font_5x7_mn"); extern const uint8_t u8g2_font_5x7_t_cyrillic[] U8G2_FONT_SECTION("u8g2_font_5x7_t_cyrillic"); extern const uint8_t u8g2_font_5x8_tf[] U8G2_FONT_SECTION("u8g2_font_5x8_tf"); extern const uint8_t u8g2_font_5x8_tr[] U8G2_FONT_SECTION("u8g2_font_5x8_tr"); extern const uint8_t u8g2_font_5x8_tn[] U8G2_FONT_SECTION("u8g2_font_5x8_tn"); extern const uint8_t u8g2_font_5x8_mf[] U8G2_FONT_SECTION("u8g2_font_5x8_mf"); extern const uint8_t u8g2_font_5x8_mr[] U8G2_FONT_SECTION("u8g2_font_5x8_mr"); extern const uint8_t u8g2_font_5x8_mn[] U8G2_FONT_SECTION("u8g2_font_5x8_mn"); extern const uint8_t u8g2_font_5x8_t_cyrillic[] U8G2_FONT_SECTION("u8g2_font_5x8_t_cyrillic"); extern const uint8_t u8g2_font_6x10_tf[] U8G2_FONT_SECTION("u8g2_font_6x10_tf"); extern const uint8_t u8g2_font_6x10_tr[] U8G2_FONT_SECTION("u8g2_font_6x10_tr"); extern const uint8_t u8g2_font_6x10_tn[] U8G2_FONT_SECTION("u8g2_font_6x10_tn"); extern const uint8_t u8g2_font_6x10_mf[] U8G2_FONT_SECTION("u8g2_font_6x10_mf"); extern const uint8_t u8g2_font_6x10_mr[] U8G2_FONT_SECTION("u8g2_font_6x10_mr"); extern const uint8_t u8g2_font_6x10_mn[] U8G2_FONT_SECTION("u8g2_font_6x10_mn"); extern const uint8_t u8g2_font_6x12_tf[] U8G2_FONT_SECTION("u8g2_font_6x12_tf"); extern const uint8_t u8g2_font_6x12_tr[] U8G2_FONT_SECTION("u8g2_font_6x12_tr"); extern const uint8_t u8g2_font_6x12_tn[] U8G2_FONT_SECTION("u8g2_font_6x12_tn"); extern const uint8_t u8g2_font_6x12_te[] U8G2_FONT_SECTION("u8g2_font_6x12_te"); extern const uint8_t u8g2_font_6x12_mf[] U8G2_FONT_SECTION("u8g2_font_6x12_mf"); extern const uint8_t u8g2_font_6x12_mr[] U8G2_FONT_SECTION("u8g2_font_6x12_mr"); extern const uint8_t u8g2_font_6x12_mn[] U8G2_FONT_SECTION("u8g2_font_6x12_mn"); extern const uint8_t u8g2_font_6x12_me[] U8G2_FONT_SECTION("u8g2_font_6x12_me"); extern const uint8_t u8g2_font_6x12_t_symbols[] U8G2_FONT_SECTION("u8g2_font_6x12_t_symbols"); extern const uint8_t u8g2_font_6x12_m_symbols[] U8G2_FONT_SECTION("u8g2_font_6x12_m_symbols"); extern const uint8_t u8g2_font_6x12_t_cyrillic[] U8G2_FONT_SECTION("u8g2_font_6x12_t_cyrillic"); extern const uint8_t u8g2_font_6x13_tf[] U8G2_FONT_SECTION("u8g2_font_6x13_tf"); extern const uint8_t u8g2_font_6x13_tr[] U8G2_FONT_SECTION("u8g2_font_6x13_tr"); extern const uint8_t u8g2_font_6x13_tn[] U8G2_FONT_SECTION("u8g2_font_6x13_tn"); extern const uint8_t u8g2_font_6x13_te[] U8G2_FONT_SECTION("u8g2_font_6x13_te"); extern const uint8_t u8g2_font_6x13_mf[] U8G2_FONT_SECTION("u8g2_font_6x13_mf"); extern const uint8_t u8g2_font_6x13_mr[] U8G2_FONT_SECTION("u8g2_font_6x13_mr"); extern const uint8_t u8g2_font_6x13_mn[] U8G2_FONT_SECTION("u8g2_font_6x13_mn"); extern const uint8_t u8g2_font_6x13_me[] U8G2_FONT_SECTION("u8g2_font_6x13_me"); extern const uint8_t u8g2_font_6x13_t_hebrew[] U8G2_FONT_SECTION("u8g2_font_6x13_t_hebrew"); extern const uint8_t u8g2_font_6x13_t_cyrillic[] U8G2_FONT_SECTION("u8g2_font_6x13_t_cyrillic"); extern const uint8_t u8g2_font_6x13B_tf[] U8G2_FONT_SECTION("u8g2_font_6x13B_tf"); extern const uint8_t u8g2_font_6x13B_tr[] U8G2_FONT_SECTION("u8g2_font_6x13B_tr"); extern const uint8_t u8g2_font_6x13B_tn[] U8G2_FONT_SECTION("u8g2_font_6x13B_tn"); extern const uint8_t u8g2_font_6x13B_mf[] U8G2_FONT_SECTION("u8g2_font_6x13B_mf"); extern const uint8_t u8g2_font_6x13B_mr[] U8G2_FONT_SECTION("u8g2_font_6x13B_mr"); extern const uint8_t u8g2_font_6x13B_mn[] U8G2_FONT_SECTION("u8g2_font_6x13B_mn"); extern const uint8_t u8g2_font_6x13B_t_hebrew[] U8G2_FONT_SECTION("u8g2_font_6x13B_t_hebrew"); extern const uint8_t u8g2_font_6x13B_t_cyrillic[] U8G2_FONT_SECTION("u8g2_font_6x13B_t_cyrillic"); extern const uint8_t u8g2_font_6x13O_tf[] U8G2_FONT_SECTION("u8g2_font_6x13O_tf"); extern const uint8_t u8g2_font_6x13O_tr[] U8G2_FONT_SECTION("u8g2_font_6x13O_tr"); extern const uint8_t u8g2_font_6x13O_tn[] U8G2_FONT_SECTION("u8g2_font_6x13O_tn"); extern const uint8_t u8g2_font_6x13O_mf[] U8G2_FONT_SECTION("u8g2_font_6x13O_mf"); extern const uint8_t u8g2_font_6x13O_mr[] U8G2_FONT_SECTION("u8g2_font_6x13O_mr"); extern const uint8_t u8g2_font_6x13O_mn[] U8G2_FONT_SECTION("u8g2_font_6x13O_mn"); extern const uint8_t u8g2_font_7x13_tf[] U8G2_FONT_SECTION("u8g2_font_7x13_tf"); extern const uint8_t u8g2_font_7x13_tr[] U8G2_FONT_SECTION("u8g2_font_7x13_tr"); extern const uint8_t u8g2_font_7x13_tn[] U8G2_FONT_SECTION("u8g2_font_7x13_tn"); extern const uint8_t u8g2_font_7x13_te[] U8G2_FONT_SECTION("u8g2_font_7x13_te"); extern const uint8_t u8g2_font_7x13_mf[] U8G2_FONT_SECTION("u8g2_font_7x13_mf"); extern const uint8_t u8g2_font_7x13_mr[] U8G2_FONT_SECTION("u8g2_font_7x13_mr"); extern const uint8_t u8g2_font_7x13_mn[] U8G2_FONT_SECTION("u8g2_font_7x13_mn"); extern const uint8_t u8g2_font_7x13_me[] U8G2_FONT_SECTION("u8g2_font_7x13_me"); extern const uint8_t u8g2_font_7x13_t_symbols[] U8G2_FONT_SECTION("u8g2_font_7x13_t_symbols"); extern const uint8_t u8g2_font_7x13_m_symbols[] U8G2_FONT_SECTION("u8g2_font_7x13_m_symbols"); extern const uint8_t u8g2_font_7x13_t_cyrillic[] U8G2_FONT_SECTION("u8g2_font_7x13_t_cyrillic"); extern const uint8_t u8g2_font_7x13B_tf[] U8G2_FONT_SECTION("u8g2_font_7x13B_tf"); extern const uint8_t u8g2_font_7x13B_tr[] U8G2_FONT_SECTION("u8g2_font_7x13B_tr"); extern const uint8_t u8g2_font_7x13B_tn[] U8G2_FONT_SECTION("u8g2_font_7x13B_tn"); extern const uint8_t u8g2_font_7x13B_mf[] U8G2_FONT_SECTION("u8g2_font_7x13B_mf"); extern const uint8_t u8g2_font_7x13B_mr[] U8G2_FONT_SECTION("u8g2_font_7x13B_mr"); extern const uint8_t u8g2_font_7x13B_mn[] U8G2_FONT_SECTION("u8g2_font_7x13B_mn"); extern const uint8_t u8g2_font_7x13O_tf[] U8G2_FONT_SECTION("u8g2_font_7x13O_tf"); extern const uint8_t u8g2_font_7x13O_tr[] U8G2_FONT_SECTION("u8g2_font_7x13O_tr"); extern const uint8_t u8g2_font_7x13O_tn[] U8G2_FONT_SECTION("u8g2_font_7x13O_tn"); extern const uint8_t u8g2_font_7x13O_mf[] U8G2_FONT_SECTION("u8g2_font_7x13O_mf"); extern const uint8_t u8g2_font_7x13O_mr[] U8G2_FONT_SECTION("u8g2_font_7x13O_mr"); extern const uint8_t u8g2_font_7x13O_mn[] U8G2_FONT_SECTION("u8g2_font_7x13O_mn"); extern const uint8_t u8g2_font_7x14_tf[] U8G2_FONT_SECTION("u8g2_font_7x14_tf"); extern const uint8_t u8g2_font_7x14_tr[] U8G2_FONT_SECTION("u8g2_font_7x14_tr"); extern const uint8_t u8g2_font_7x14_tn[] U8G2_FONT_SECTION("u8g2_font_7x14_tn"); extern const uint8_t u8g2_font_7x14_mf[] U8G2_FONT_SECTION("u8g2_font_7x14_mf"); extern const uint8_t u8g2_font_7x14_mr[] U8G2_FONT_SECTION("u8g2_font_7x14_mr"); extern const uint8_t u8g2_font_7x14_mn[] U8G2_FONT_SECTION("u8g2_font_7x14_mn"); extern const uint8_t u8g2_font_7x14B_tf[] U8G2_FONT_SECTION("u8g2_font_7x14B_tf"); extern const uint8_t u8g2_font_7x14B_tr[] U8G2_FONT_SECTION("u8g2_font_7x14B_tr"); extern const uint8_t u8g2_font_7x14B_tn[] U8G2_FONT_SECTION("u8g2_font_7x14B_tn"); extern const uint8_t u8g2_font_7x14B_mf[] U8G2_FONT_SECTION("u8g2_font_7x14B_mf"); extern const uint8_t u8g2_font_7x14B_mr[] U8G2_FONT_SECTION("u8g2_font_7x14B_mr"); extern const uint8_t u8g2_font_7x14B_mn[] U8G2_FONT_SECTION("u8g2_font_7x14B_mn"); extern const uint8_t u8g2_font_8x13_tf[] U8G2_FONT_SECTION("u8g2_font_8x13_tf"); extern const uint8_t u8g2_font_8x13_tr[] U8G2_FONT_SECTION("u8g2_font_8x13_tr"); extern const uint8_t u8g2_font_8x13_tn[] U8G2_FONT_SECTION("u8g2_font_8x13_tn"); extern const uint8_t u8g2_font_8x13_te[] U8G2_FONT_SECTION("u8g2_font_8x13_te"); extern const uint8_t u8g2_font_8x13_mf[] U8G2_FONT_SECTION("u8g2_font_8x13_mf"); extern const uint8_t u8g2_font_8x13_mr[] U8G2_FONT_SECTION("u8g2_font_8x13_mr"); extern const uint8_t u8g2_font_8x13_mn[] U8G2_FONT_SECTION("u8g2_font_8x13_mn"); extern const uint8_t u8g2_font_8x13_me[] U8G2_FONT_SECTION("u8g2_font_8x13_me"); extern const uint8_t u8g2_font_8x13_t_symbols[] U8G2_FONT_SECTION("u8g2_font_8x13_t_symbols"); extern const uint8_t u8g2_font_8x13_m_symbols[] U8G2_FONT_SECTION("u8g2_font_8x13_m_symbols"); extern const uint8_t u8g2_font_8x13_t_cyrillic[] U8G2_FONT_SECTION("u8g2_font_8x13_t_cyrillic"); extern const uint8_t u8g2_font_8x13B_tf[] U8G2_FONT_SECTION("u8g2_font_8x13B_tf"); extern const uint8_t u8g2_font_8x13B_tr[] U8G2_FONT_SECTION("u8g2_font_8x13B_tr"); extern const uint8_t u8g2_font_8x13B_tn[] U8G2_FONT_SECTION("u8g2_font_8x13B_tn"); extern const uint8_t u8g2_font_8x13B_mf[] U8G2_FONT_SECTION("u8g2_font_8x13B_mf"); extern const uint8_t u8g2_font_8x13B_mr[] U8G2_FONT_SECTION("u8g2_font_8x13B_mr"); extern const uint8_t u8g2_font_8x13B_mn[] U8G2_FONT_SECTION("u8g2_font_8x13B_mn"); extern const uint8_t u8g2_font_8x13O_tf[] U8G2_FONT_SECTION("u8g2_font_8x13O_tf"); extern const uint8_t u8g2_font_8x13O_tr[] U8G2_FONT_SECTION("u8g2_font_8x13O_tr"); extern const uint8_t u8g2_font_8x13O_tn[] U8G2_FONT_SECTION("u8g2_font_8x13O_tn"); extern const uint8_t u8g2_font_8x13O_mf[] U8G2_FONT_SECTION("u8g2_font_8x13O_mf"); extern const uint8_t u8g2_font_8x13O_mr[] U8G2_FONT_SECTION("u8g2_font_8x13O_mr"); extern const uint8_t u8g2_font_8x13O_mn[] U8G2_FONT_SECTION("u8g2_font_8x13O_mn"); extern const uint8_t u8g2_font_9x15_tf[] U8G2_FONT_SECTION("u8g2_font_9x15_tf"); extern const uint8_t u8g2_font_9x15_tr[] U8G2_FONT_SECTION("u8g2_font_9x15_tr"); extern const uint8_t u8g2_font_9x15_tn[] U8G2_FONT_SECTION("u8g2_font_9x15_tn"); extern const uint8_t u8g2_font_9x15_te[] U8G2_FONT_SECTION("u8g2_font_9x15_te"); extern const uint8_t u8g2_font_9x15_mf[] U8G2_FONT_SECTION("u8g2_font_9x15_mf"); extern const uint8_t u8g2_font_9x15_mr[] U8G2_FONT_SECTION("u8g2_font_9x15_mr"); extern const uint8_t u8g2_font_9x15_mn[] U8G2_FONT_SECTION("u8g2_font_9x15_mn"); extern const uint8_t u8g2_font_9x15_me[] U8G2_FONT_SECTION("u8g2_font_9x15_me"); extern const uint8_t u8g2_font_9x15_t_symbols[] U8G2_FONT_SECTION("u8g2_font_9x15_t_symbols"); extern const uint8_t u8g2_font_9x15_m_symbols[] U8G2_FONT_SECTION("u8g2_font_9x15_m_symbols"); extern const uint8_t u8g2_font_9x15_t_cyrillic[] U8G2_FONT_SECTION("u8g2_font_9x15_t_cyrillic"); extern const uint8_t u8g2_font_9x15B_tf[] U8G2_FONT_SECTION("u8g2_font_9x15B_tf"); extern const uint8_t u8g2_font_9x15B_tr[] U8G2_FONT_SECTION("u8g2_font_9x15B_tr"); extern const uint8_t u8g2_font_9x15B_tn[] U8G2_FONT_SECTION("u8g2_font_9x15B_tn"); extern const uint8_t u8g2_font_9x15B_mf[] U8G2_FONT_SECTION("u8g2_font_9x15B_mf"); extern const uint8_t u8g2_font_9x15B_mr[] U8G2_FONT_SECTION("u8g2_font_9x15B_mr"); extern const uint8_t u8g2_font_9x15B_mn[] U8G2_FONT_SECTION("u8g2_font_9x15B_mn"); extern const uint8_t u8g2_font_9x18_tf[] U8G2_FONT_SECTION("u8g2_font_9x18_tf"); extern const uint8_t u8g2_font_9x18_tr[] U8G2_FONT_SECTION("u8g2_font_9x18_tr"); extern const uint8_t u8g2_font_9x18_tn[] U8G2_FONT_SECTION("u8g2_font_9x18_tn"); extern const uint8_t u8g2_font_9x18_mf[] U8G2_FONT_SECTION("u8g2_font_9x18_mf"); extern const uint8_t u8g2_font_9x18_mr[] U8G2_FONT_SECTION("u8g2_font_9x18_mr"); extern const uint8_t u8g2_font_9x18_mn[] U8G2_FONT_SECTION("u8g2_font_9x18_mn"); extern const uint8_t u8g2_font_9x18B_tf[] U8G2_FONT_SECTION("u8g2_font_9x18B_tf"); extern const uint8_t u8g2_font_9x18B_tr[] U8G2_FONT_SECTION("u8g2_font_9x18B_tr"); extern const uint8_t u8g2_font_9x18B_tn[] U8G2_FONT_SECTION("u8g2_font_9x18B_tn"); extern const uint8_t u8g2_font_9x18B_mf[] U8G2_FONT_SECTION("u8g2_font_9x18B_mf"); extern const uint8_t u8g2_font_9x18B_mr[] U8G2_FONT_SECTION("u8g2_font_9x18B_mr"); extern const uint8_t u8g2_font_9x18B_mn[] U8G2_FONT_SECTION("u8g2_font_9x18B_mn"); extern const uint8_t u8g2_font_10x20_tf[] U8G2_FONT_SECTION("u8g2_font_10x20_tf"); extern const uint8_t u8g2_font_10x20_tr[] U8G2_FONT_SECTION("u8g2_font_10x20_tr"); extern const uint8_t u8g2_font_10x20_tn[] U8G2_FONT_SECTION("u8g2_font_10x20_tn"); extern const uint8_t u8g2_font_10x20_te[] U8G2_FONT_SECTION("u8g2_font_10x20_te"); extern const uint8_t u8g2_font_10x20_mf[] U8G2_FONT_SECTION("u8g2_font_10x20_mf"); extern const uint8_t u8g2_font_10x20_mr[] U8G2_FONT_SECTION("u8g2_font_10x20_mr"); extern const uint8_t u8g2_font_10x20_mn[] U8G2_FONT_SECTION("u8g2_font_10x20_mn"); extern const uint8_t u8g2_font_10x20_me[] U8G2_FONT_SECTION("u8g2_font_10x20_me"); extern const uint8_t u8g2_font_10x20_t_greek[] U8G2_FONT_SECTION("u8g2_font_10x20_t_greek"); extern const uint8_t u8g2_font_10x20_t_cyrillic[] U8G2_FONT_SECTION("u8g2_font_10x20_t_cyrillic"); extern const uint8_t u8g2_font_10x20_t_arabic[] U8G2_FONT_SECTION("u8g2_font_10x20_t_arabic"); extern const uint8_t u8g2_font_siji_t_6x10[] U8G2_FONT_SECTION("u8g2_font_siji_t_6x10"); extern const uint8_t u8g2_font_tom_thumb_4x6_t_all[] U8G2_FONT_SECTION("u8g2_font_tom_thumb_4x6_t_all"); extern const uint8_t u8g2_font_tom_thumb_4x6_tf[] U8G2_FONT_SECTION("u8g2_font_tom_thumb_4x6_tf"); extern const uint8_t u8g2_font_tom_thumb_4x6_tr[] U8G2_FONT_SECTION("u8g2_font_tom_thumb_4x6_tr"); extern const uint8_t u8g2_font_tom_thumb_4x6_tn[] U8G2_FONT_SECTION("u8g2_font_tom_thumb_4x6_tn"); extern const uint8_t u8g2_font_tom_thumb_4x6_te[] U8G2_FONT_SECTION("u8g2_font_tom_thumb_4x6_te"); extern const uint8_t u8g2_font_tom_thumb_4x6_mf[] U8G2_FONT_SECTION("u8g2_font_tom_thumb_4x6_mf"); extern const uint8_t u8g2_font_tom_thumb_4x6_mr[] U8G2_FONT_SECTION("u8g2_font_tom_thumb_4x6_mr"); extern const uint8_t u8g2_font_tom_thumb_4x6_mn[] U8G2_FONT_SECTION("u8g2_font_tom_thumb_4x6_mn"); extern const uint8_t u8g2_font_tom_thumb_4x6_me[] U8G2_FONT_SECTION("u8g2_font_tom_thumb_4x6_me"); extern const uint8_t u8g2_font_t0_11_tf[] U8G2_FONT_SECTION("u8g2_font_t0_11_tf"); extern const uint8_t u8g2_font_t0_11_tr[] U8G2_FONT_SECTION("u8g2_font_t0_11_tr"); extern const uint8_t u8g2_font_t0_11_tn[] U8G2_FONT_SECTION("u8g2_font_t0_11_tn"); extern const uint8_t u8g2_font_t0_11_te[] U8G2_FONT_SECTION("u8g2_font_t0_11_te"); extern const uint8_t u8g2_font_t0_11_mf[] U8G2_FONT_SECTION("u8g2_font_t0_11_mf"); extern const uint8_t u8g2_font_t0_11_mr[] U8G2_FONT_SECTION("u8g2_font_t0_11_mr"); extern const uint8_t u8g2_font_t0_11_mn[] U8G2_FONT_SECTION("u8g2_font_t0_11_mn"); extern const uint8_t u8g2_font_t0_11_me[] U8G2_FONT_SECTION("u8g2_font_t0_11_me"); extern const uint8_t u8g2_font_t0_11_t_all[] U8G2_FONT_SECTION("u8g2_font_t0_11_t_all"); extern const uint8_t u8g2_font_t0_11b_tf[] U8G2_FONT_SECTION("u8g2_font_t0_11b_tf"); extern const uint8_t u8g2_font_t0_11b_tr[] U8G2_FONT_SECTION("u8g2_font_t0_11b_tr"); extern const uint8_t u8g2_font_t0_11b_tn[] U8G2_FONT_SECTION("u8g2_font_t0_11b_tn"); extern const uint8_t u8g2_font_t0_11b_te[] U8G2_FONT_SECTION("u8g2_font_t0_11b_te"); extern const uint8_t u8g2_font_t0_11b_mf[] U8G2_FONT_SECTION("u8g2_font_t0_11b_mf"); extern const uint8_t u8g2_font_t0_11b_mr[] U8G2_FONT_SECTION("u8g2_font_t0_11b_mr"); extern const uint8_t u8g2_font_t0_11b_mn[] U8G2_FONT_SECTION("u8g2_font_t0_11b_mn"); extern const uint8_t u8g2_font_t0_11b_me[] U8G2_FONT_SECTION("u8g2_font_t0_11b_me"); extern const uint8_t u8g2_font_t0_12_tf[] U8G2_FONT_SECTION("u8g2_font_t0_12_tf"); extern const uint8_t u8g2_font_t0_12_tr[] U8G2_FONT_SECTION("u8g2_font_t0_12_tr"); extern const uint8_t u8g2_font_t0_12_tn[] U8G2_FONT_SECTION("u8g2_font_t0_12_tn"); extern const uint8_t u8g2_font_t0_12_te[] U8G2_FONT_SECTION("u8g2_font_t0_12_te"); extern const uint8_t u8g2_font_t0_12_mf[] U8G2_FONT_SECTION("u8g2_font_t0_12_mf"); extern const uint8_t u8g2_font_t0_12_mr[] U8G2_FONT_SECTION("u8g2_font_t0_12_mr"); extern const uint8_t u8g2_font_t0_12_mn[] U8G2_FONT_SECTION("u8g2_font_t0_12_mn"); extern const uint8_t u8g2_font_t0_12_me[] U8G2_FONT_SECTION("u8g2_font_t0_12_me"); extern const uint8_t u8g2_font_t0_12b_tf[] U8G2_FONT_SECTION("u8g2_font_t0_12b_tf"); extern const uint8_t u8g2_font_t0_12b_tr[] U8G2_FONT_SECTION("u8g2_font_t0_12b_tr"); extern const uint8_t u8g2_font_t0_12b_tn[] U8G2_FONT_SECTION("u8g2_font_t0_12b_tn"); extern const uint8_t u8g2_font_t0_12b_te[] U8G2_FONT_SECTION("u8g2_font_t0_12b_te"); extern const uint8_t u8g2_font_t0_12b_mf[] U8G2_FONT_SECTION("u8g2_font_t0_12b_mf"); extern const uint8_t u8g2_font_t0_12b_mr[] U8G2_FONT_SECTION("u8g2_font_t0_12b_mr"); extern const uint8_t u8g2_font_t0_12b_mn[] U8G2_FONT_SECTION("u8g2_font_t0_12b_mn"); extern const uint8_t u8g2_font_t0_12b_me[] U8G2_FONT_SECTION("u8g2_font_t0_12b_me"); extern const uint8_t u8g2_font_t0_13_tf[] U8G2_FONT_SECTION("u8g2_font_t0_13_tf"); extern const uint8_t u8g2_font_t0_13_tr[] U8G2_FONT_SECTION("u8g2_font_t0_13_tr"); extern const uint8_t u8g2_font_t0_13_tn[] U8G2_FONT_SECTION("u8g2_font_t0_13_tn"); extern const uint8_t u8g2_font_t0_13_te[] U8G2_FONT_SECTION("u8g2_font_t0_13_te"); extern const uint8_t u8g2_font_t0_13_mf[] U8G2_FONT_SECTION("u8g2_font_t0_13_mf"); extern const uint8_t u8g2_font_t0_13_mr[] U8G2_FONT_SECTION("u8g2_font_t0_13_mr"); extern const uint8_t u8g2_font_t0_13_mn[] U8G2_FONT_SECTION("u8g2_font_t0_13_mn"); extern const uint8_t u8g2_font_t0_13_me[] U8G2_FONT_SECTION("u8g2_font_t0_13_me"); extern const uint8_t u8g2_font_t0_13b_tf[] U8G2_FONT_SECTION("u8g2_font_t0_13b_tf"); extern const uint8_t u8g2_font_t0_13b_tr[] U8G2_FONT_SECTION("u8g2_font_t0_13b_tr"); extern const uint8_t u8g2_font_t0_13b_tn[] U8G2_FONT_SECTION("u8g2_font_t0_13b_tn"); extern const uint8_t u8g2_font_t0_13b_te[] U8G2_FONT_SECTION("u8g2_font_t0_13b_te"); extern const uint8_t u8g2_font_t0_13b_mf[] U8G2_FONT_SECTION("u8g2_font_t0_13b_mf"); extern const uint8_t u8g2_font_t0_13b_mr[] U8G2_FONT_SECTION("u8g2_font_t0_13b_mr"); extern const uint8_t u8g2_font_t0_13b_mn[] U8G2_FONT_SECTION("u8g2_font_t0_13b_mn"); extern const uint8_t u8g2_font_t0_13b_me[] U8G2_FONT_SECTION("u8g2_font_t0_13b_me"); extern const uint8_t u8g2_font_t0_14_tf[] U8G2_FONT_SECTION("u8g2_font_t0_14_tf"); extern const uint8_t u8g2_font_t0_14_tr[] U8G2_FONT_SECTION("u8g2_font_t0_14_tr"); extern const uint8_t u8g2_font_t0_14_tn[] U8G2_FONT_SECTION("u8g2_font_t0_14_tn"); extern const uint8_t u8g2_font_t0_14_te[] U8G2_FONT_SECTION("u8g2_font_t0_14_te"); extern const uint8_t u8g2_font_t0_14_mf[] U8G2_FONT_SECTION("u8g2_font_t0_14_mf"); extern const uint8_t u8g2_font_t0_14_mr[] U8G2_FONT_SECTION("u8g2_font_t0_14_mr"); extern const uint8_t u8g2_font_t0_14_mn[] U8G2_FONT_SECTION("u8g2_font_t0_14_mn"); extern const uint8_t u8g2_font_t0_14_me[] U8G2_FONT_SECTION("u8g2_font_t0_14_me"); extern const uint8_t u8g2_font_t0_14b_tf[] U8G2_FONT_SECTION("u8g2_font_t0_14b_tf"); extern const uint8_t u8g2_font_t0_14b_tr[] U8G2_FONT_SECTION("u8g2_font_t0_14b_tr"); extern const uint8_t u8g2_font_t0_14b_tn[] U8G2_FONT_SECTION("u8g2_font_t0_14b_tn"); extern const uint8_t u8g2_font_t0_14b_te[] U8G2_FONT_SECTION("u8g2_font_t0_14b_te"); extern const uint8_t u8g2_font_t0_14b_mf[] U8G2_FONT_SECTION("u8g2_font_t0_14b_mf"); extern const uint8_t u8g2_font_t0_14b_mr[] U8G2_FONT_SECTION("u8g2_font_t0_14b_mr"); extern const uint8_t u8g2_font_t0_14b_mn[] U8G2_FONT_SECTION("u8g2_font_t0_14b_mn"); extern const uint8_t u8g2_font_t0_14b_me[] U8G2_FONT_SECTION("u8g2_font_t0_14b_me"); extern const uint8_t u8g2_font_t0_15_tf[] U8G2_FONT_SECTION("u8g2_font_t0_15_tf"); extern const uint8_t u8g2_font_t0_15_tr[] U8G2_FONT_SECTION("u8g2_font_t0_15_tr"); extern const uint8_t u8g2_font_t0_15_tn[] U8G2_FONT_SECTION("u8g2_font_t0_15_tn"); extern const uint8_t u8g2_font_t0_15_te[] U8G2_FONT_SECTION("u8g2_font_t0_15_te"); extern const uint8_t u8g2_font_t0_15_mf[] U8G2_FONT_SECTION("u8g2_font_t0_15_mf"); extern const uint8_t u8g2_font_t0_15_mr[] U8G2_FONT_SECTION("u8g2_font_t0_15_mr"); extern const uint8_t u8g2_font_t0_15_mn[] U8G2_FONT_SECTION("u8g2_font_t0_15_mn"); extern const uint8_t u8g2_font_t0_15_me[] U8G2_FONT_SECTION("u8g2_font_t0_15_me"); extern const uint8_t u8g2_font_t0_15b_tf[] U8G2_FONT_SECTION("u8g2_font_t0_15b_tf"); extern const uint8_t u8g2_font_t0_15b_tr[] U8G2_FONT_SECTION("u8g2_font_t0_15b_tr"); extern const uint8_t u8g2_font_t0_15b_tn[] U8G2_FONT_SECTION("u8g2_font_t0_15b_tn"); extern const uint8_t u8g2_font_t0_15b_te[] U8G2_FONT_SECTION("u8g2_font_t0_15b_te"); extern const uint8_t u8g2_font_t0_15b_mf[] U8G2_FONT_SECTION("u8g2_font_t0_15b_mf"); extern const uint8_t u8g2_font_t0_15b_mr[] U8G2_FONT_SECTION("u8g2_font_t0_15b_mr"); extern const uint8_t u8g2_font_t0_15b_mn[] U8G2_FONT_SECTION("u8g2_font_t0_15b_mn"); extern const uint8_t u8g2_font_t0_15b_me[] U8G2_FONT_SECTION("u8g2_font_t0_15b_me"); extern const uint8_t u8g2_font_t0_16_tf[] U8G2_FONT_SECTION("u8g2_font_t0_16_tf"); extern const uint8_t u8g2_font_t0_16_tr[] U8G2_FONT_SECTION("u8g2_font_t0_16_tr"); extern const uint8_t u8g2_font_t0_16_tn[] U8G2_FONT_SECTION("u8g2_font_t0_16_tn"); extern const uint8_t u8g2_font_t0_16_te[] U8G2_FONT_SECTION("u8g2_font_t0_16_te"); extern const uint8_t u8g2_font_t0_16_mf[] U8G2_FONT_SECTION("u8g2_font_t0_16_mf"); extern const uint8_t u8g2_font_t0_16_mr[] U8G2_FONT_SECTION("u8g2_font_t0_16_mr"); extern const uint8_t u8g2_font_t0_16_mn[] U8G2_FONT_SECTION("u8g2_font_t0_16_mn"); extern const uint8_t u8g2_font_t0_16_me[] U8G2_FONT_SECTION("u8g2_font_t0_16_me"); extern const uint8_t u8g2_font_t0_16b_tf[] U8G2_FONT_SECTION("u8g2_font_t0_16b_tf"); extern const uint8_t u8g2_font_t0_16b_tr[] U8G2_FONT_SECTION("u8g2_font_t0_16b_tr"); extern const uint8_t u8g2_font_t0_16b_tn[] U8G2_FONT_SECTION("u8g2_font_t0_16b_tn"); extern const uint8_t u8g2_font_t0_16b_te[] U8G2_FONT_SECTION("u8g2_font_t0_16b_te"); extern const uint8_t u8g2_font_t0_16b_mf[] U8G2_FONT_SECTION("u8g2_font_t0_16b_mf"); extern const uint8_t u8g2_font_t0_16b_mr[] U8G2_FONT_SECTION("u8g2_font_t0_16b_mr"); extern const uint8_t u8g2_font_t0_16b_mn[] U8G2_FONT_SECTION("u8g2_font_t0_16b_mn"); extern const uint8_t u8g2_font_t0_16b_me[] U8G2_FONT_SECTION("u8g2_font_t0_16b_me"); extern const uint8_t u8g2_font_t0_17_tf[] U8G2_FONT_SECTION("u8g2_font_t0_17_tf"); extern const uint8_t u8g2_font_t0_17_tr[] U8G2_FONT_SECTION("u8g2_font_t0_17_tr"); extern const uint8_t u8g2_font_t0_17_tn[] U8G2_FONT_SECTION("u8g2_font_t0_17_tn"); extern const uint8_t u8g2_font_t0_17_te[] U8G2_FONT_SECTION("u8g2_font_t0_17_te"); extern const uint8_t u8g2_font_t0_17_mf[] U8G2_FONT_SECTION("u8g2_font_t0_17_mf"); extern const uint8_t u8g2_font_t0_17_mr[] U8G2_FONT_SECTION("u8g2_font_t0_17_mr"); extern const uint8_t u8g2_font_t0_17_mn[] U8G2_FONT_SECTION("u8g2_font_t0_17_mn"); extern const uint8_t u8g2_font_t0_17_me[] U8G2_FONT_SECTION("u8g2_font_t0_17_me"); extern const uint8_t u8g2_font_t0_17b_tf[] U8G2_FONT_SECTION("u8g2_font_t0_17b_tf"); extern const uint8_t u8g2_font_t0_17b_tr[] U8G2_FONT_SECTION("u8g2_font_t0_17b_tr"); extern const uint8_t u8g2_font_t0_17b_tn[] U8G2_FONT_SECTION("u8g2_font_t0_17b_tn"); extern const uint8_t u8g2_font_t0_17b_te[] U8G2_FONT_SECTION("u8g2_font_t0_17b_te"); extern const uint8_t u8g2_font_t0_17b_mf[] U8G2_FONT_SECTION("u8g2_font_t0_17b_mf"); extern const uint8_t u8g2_font_t0_17b_mr[] U8G2_FONT_SECTION("u8g2_font_t0_17b_mr"); extern const uint8_t u8g2_font_t0_17b_mn[] U8G2_FONT_SECTION("u8g2_font_t0_17b_mn"); extern const uint8_t u8g2_font_t0_17b_me[] U8G2_FONT_SECTION("u8g2_font_t0_17b_me"); extern const uint8_t u8g2_font_t0_18_tf[] U8G2_FONT_SECTION("u8g2_font_t0_18_tf"); extern const uint8_t u8g2_font_t0_18_tr[] U8G2_FONT_SECTION("u8g2_font_t0_18_tr"); extern const uint8_t u8g2_font_t0_18_tn[] U8G2_FONT_SECTION("u8g2_font_t0_18_tn"); extern const uint8_t u8g2_font_t0_18_te[] U8G2_FONT_SECTION("u8g2_font_t0_18_te"); extern const uint8_t u8g2_font_t0_18_mf[] U8G2_FONT_SECTION("u8g2_font_t0_18_mf"); extern const uint8_t u8g2_font_t0_18_mr[] U8G2_FONT_SECTION("u8g2_font_t0_18_mr"); extern const uint8_t u8g2_font_t0_18_mn[] U8G2_FONT_SECTION("u8g2_font_t0_18_mn"); extern const uint8_t u8g2_font_t0_18_me[] U8G2_FONT_SECTION("u8g2_font_t0_18_me"); extern const uint8_t u8g2_font_t0_18b_tf[] U8G2_FONT_SECTION("u8g2_font_t0_18b_tf"); extern const uint8_t u8g2_font_t0_18b_tr[] U8G2_FONT_SECTION("u8g2_font_t0_18b_tr"); extern const uint8_t u8g2_font_t0_18b_tn[] U8G2_FONT_SECTION("u8g2_font_t0_18b_tn"); extern const uint8_t u8g2_font_t0_18b_te[] U8G2_FONT_SECTION("u8g2_font_t0_18b_te"); extern const uint8_t u8g2_font_t0_18b_mf[] U8G2_FONT_SECTION("u8g2_font_t0_18b_mf"); extern const uint8_t u8g2_font_t0_18b_mr[] U8G2_FONT_SECTION("u8g2_font_t0_18b_mr"); extern const uint8_t u8g2_font_t0_18b_mn[] U8G2_FONT_SECTION("u8g2_font_t0_18b_mn"); extern const uint8_t u8g2_font_t0_18b_me[] U8G2_FONT_SECTION("u8g2_font_t0_18b_me"); extern const uint8_t u8g2_font_t0_22_tf[] U8G2_FONT_SECTION("u8g2_font_t0_22_tf"); extern const uint8_t u8g2_font_t0_22_tr[] U8G2_FONT_SECTION("u8g2_font_t0_22_tr"); extern const uint8_t u8g2_font_t0_22_tn[] U8G2_FONT_SECTION("u8g2_font_t0_22_tn"); extern const uint8_t u8g2_font_t0_22_te[] U8G2_FONT_SECTION("u8g2_font_t0_22_te"); extern const uint8_t u8g2_font_t0_22_mf[] U8G2_FONT_SECTION("u8g2_font_t0_22_mf"); extern const uint8_t u8g2_font_t0_22_mr[] U8G2_FONT_SECTION("u8g2_font_t0_22_mr"); extern const uint8_t u8g2_font_t0_22_mn[] U8G2_FONT_SECTION("u8g2_font_t0_22_mn"); extern const uint8_t u8g2_font_t0_22_me[] U8G2_FONT_SECTION("u8g2_font_t0_22_me"); extern const uint8_t u8g2_font_t0_22b_tf[] U8G2_FONT_SECTION("u8g2_font_t0_22b_tf"); extern const uint8_t u8g2_font_t0_22b_tr[] U8G2_FONT_SECTION("u8g2_font_t0_22b_tr"); extern const uint8_t u8g2_font_t0_22b_tn[] U8G2_FONT_SECTION("u8g2_font_t0_22b_tn"); extern const uint8_t u8g2_font_t0_22b_te[] U8G2_FONT_SECTION("u8g2_font_t0_22b_te"); extern const uint8_t u8g2_font_t0_22b_mf[] U8G2_FONT_SECTION("u8g2_font_t0_22b_mf"); extern const uint8_t u8g2_font_t0_22b_mr[] U8G2_FONT_SECTION("u8g2_font_t0_22b_mr"); extern const uint8_t u8g2_font_t0_22b_mn[] U8G2_FONT_SECTION("u8g2_font_t0_22b_mn"); extern const uint8_t u8g2_font_t0_22b_me[] U8G2_FONT_SECTION("u8g2_font_t0_22b_me"); extern const uint8_t u8g2_font_open_iconic_all_1x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_all_1x_t"); extern const uint8_t u8g2_font_open_iconic_app_1x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_app_1x_t"); extern const uint8_t u8g2_font_open_iconic_arrow_1x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_arrow_1x_t"); extern const uint8_t u8g2_font_open_iconic_check_1x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_check_1x_t"); extern const uint8_t u8g2_font_open_iconic_email_1x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_email_1x_t"); extern const uint8_t u8g2_font_open_iconic_embedded_1x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_embedded_1x_t"); extern const uint8_t u8g2_font_open_iconic_gui_1x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_gui_1x_t"); extern const uint8_t u8g2_font_open_iconic_human_1x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_human_1x_t"); extern const uint8_t u8g2_font_open_iconic_mime_1x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_mime_1x_t"); extern const uint8_t u8g2_font_open_iconic_other_1x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_other_1x_t"); extern const uint8_t u8g2_font_open_iconic_play_1x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_play_1x_t"); extern const uint8_t u8g2_font_open_iconic_text_1x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_text_1x_t"); extern const uint8_t u8g2_font_open_iconic_thing_1x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_thing_1x_t"); extern const uint8_t u8g2_font_open_iconic_weather_1x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_weather_1x_t"); extern const uint8_t u8g2_font_open_iconic_www_1x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_www_1x_t"); extern const uint8_t u8g2_font_open_iconic_all_2x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_all_2x_t"); extern const uint8_t u8g2_font_open_iconic_app_2x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_app_2x_t"); extern const uint8_t u8g2_font_open_iconic_arrow_2x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_arrow_2x_t"); extern const uint8_t u8g2_font_open_iconic_check_2x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_check_2x_t"); extern const uint8_t u8g2_font_open_iconic_email_2x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_email_2x_t"); extern const uint8_t u8g2_font_open_iconic_embedded_2x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_embedded_2x_t"); extern const uint8_t u8g2_font_open_iconic_gui_2x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_gui_2x_t"); extern const uint8_t u8g2_font_open_iconic_human_2x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_human_2x_t"); extern const uint8_t u8g2_font_open_iconic_mime_2x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_mime_2x_t"); extern const uint8_t u8g2_font_open_iconic_other_2x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_other_2x_t"); extern const uint8_t u8g2_font_open_iconic_play_2x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_play_2x_t"); extern const uint8_t u8g2_font_open_iconic_text_2x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_text_2x_t"); extern const uint8_t u8g2_font_open_iconic_thing_2x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_thing_2x_t"); extern const uint8_t u8g2_font_open_iconic_weather_2x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_weather_2x_t"); extern const uint8_t u8g2_font_open_iconic_www_2x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_www_2x_t"); extern const uint8_t u8g2_font_open_iconic_all_4x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_all_4x_t"); extern const uint8_t u8g2_font_open_iconic_app_4x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_app_4x_t"); extern const uint8_t u8g2_font_open_iconic_arrow_4x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_arrow_4x_t"); extern const uint8_t u8g2_font_open_iconic_check_4x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_check_4x_t"); extern const uint8_t u8g2_font_open_iconic_email_4x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_email_4x_t"); extern const uint8_t u8g2_font_open_iconic_embedded_4x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_embedded_4x_t"); extern const uint8_t u8g2_font_open_iconic_gui_4x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_gui_4x_t"); extern const uint8_t u8g2_font_open_iconic_human_4x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_human_4x_t"); extern const uint8_t u8g2_font_open_iconic_mime_4x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_mime_4x_t"); extern const uint8_t u8g2_font_open_iconic_other_4x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_other_4x_t"); extern const uint8_t u8g2_font_open_iconic_play_4x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_play_4x_t"); extern const uint8_t u8g2_font_open_iconic_text_4x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_text_4x_t"); extern const uint8_t u8g2_font_open_iconic_thing_4x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_thing_4x_t"); extern const uint8_t u8g2_font_open_iconic_weather_4x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_weather_4x_t"); extern const uint8_t u8g2_font_open_iconic_www_4x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_www_4x_t"); extern const uint8_t u8g2_font_open_iconic_all_6x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_all_6x_t"); extern const uint8_t u8g2_font_open_iconic_app_6x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_app_6x_t"); extern const uint8_t u8g2_font_open_iconic_arrow_6x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_arrow_6x_t"); extern const uint8_t u8g2_font_open_iconic_check_6x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_check_6x_t"); extern const uint8_t u8g2_font_open_iconic_email_6x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_email_6x_t"); extern const uint8_t u8g2_font_open_iconic_embedded_6x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_embedded_6x_t"); extern const uint8_t u8g2_font_open_iconic_gui_6x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_gui_6x_t"); extern const uint8_t u8g2_font_open_iconic_human_6x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_human_6x_t"); extern const uint8_t u8g2_font_open_iconic_mime_6x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_mime_6x_t"); extern const uint8_t u8g2_font_open_iconic_other_6x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_other_6x_t"); extern const uint8_t u8g2_font_open_iconic_play_6x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_play_6x_t"); extern const uint8_t u8g2_font_open_iconic_text_6x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_text_6x_t"); extern const uint8_t u8g2_font_open_iconic_thing_6x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_thing_6x_t"); extern const uint8_t u8g2_font_open_iconic_weather_6x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_weather_6x_t"); extern const uint8_t u8g2_font_open_iconic_www_6x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_www_6x_t"); extern const uint8_t u8g2_font_open_iconic_all_8x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_all_8x_t"); extern const uint8_t u8g2_font_open_iconic_app_8x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_app_8x_t"); extern const uint8_t u8g2_font_open_iconic_arrow_8x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_arrow_8x_t"); extern const uint8_t u8g2_font_open_iconic_check_8x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_check_8x_t"); extern const uint8_t u8g2_font_open_iconic_email_8x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_email_8x_t"); extern const uint8_t u8g2_font_open_iconic_embedded_8x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_embedded_8x_t"); extern const uint8_t u8g2_font_open_iconic_gui_8x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_gui_8x_t"); extern const uint8_t u8g2_font_open_iconic_human_8x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_human_8x_t"); extern const uint8_t u8g2_font_open_iconic_mime_8x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_mime_8x_t"); extern const uint8_t u8g2_font_open_iconic_other_8x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_other_8x_t"); extern const uint8_t u8g2_font_open_iconic_play_8x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_play_8x_t"); extern const uint8_t u8g2_font_open_iconic_text_8x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_text_8x_t"); extern const uint8_t u8g2_font_open_iconic_thing_8x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_thing_8x_t"); extern const uint8_t u8g2_font_open_iconic_weather_8x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_weather_8x_t"); extern const uint8_t u8g2_font_open_iconic_www_8x_t[] U8G2_FONT_SECTION("u8g2_font_open_iconic_www_8x_t"); extern const uint8_t u8g2_font_profont10_tf[] U8G2_FONT_SECTION("u8g2_font_profont10_tf"); extern const uint8_t u8g2_font_profont10_tr[] U8G2_FONT_SECTION("u8g2_font_profont10_tr"); extern const uint8_t u8g2_font_profont10_tn[] U8G2_FONT_SECTION("u8g2_font_profont10_tn"); extern const uint8_t u8g2_font_profont10_mf[] U8G2_FONT_SECTION("u8g2_font_profont10_mf"); extern const uint8_t u8g2_font_profont10_mr[] U8G2_FONT_SECTION("u8g2_font_profont10_mr"); extern const uint8_t u8g2_font_profont10_mn[] U8G2_FONT_SECTION("u8g2_font_profont10_mn"); extern const uint8_t u8g2_font_profont11_tf[] U8G2_FONT_SECTION("u8g2_font_profont11_tf"); extern const uint8_t u8g2_font_profont11_tr[] U8G2_FONT_SECTION("u8g2_font_profont11_tr"); extern const uint8_t u8g2_font_profont11_tn[] U8G2_FONT_SECTION("u8g2_font_profont11_tn"); extern const uint8_t u8g2_font_profont11_mf[] U8G2_FONT_SECTION("u8g2_font_profont11_mf"); extern const uint8_t u8g2_font_profont11_mr[] U8G2_FONT_SECTION("u8g2_font_profont11_mr"); extern const uint8_t u8g2_font_profont11_mn[] U8G2_FONT_SECTION("u8g2_font_profont11_mn"); extern const uint8_t u8g2_font_profont12_tf[] U8G2_FONT_SECTION("u8g2_font_profont12_tf"); extern const uint8_t u8g2_font_profont12_tr[] U8G2_FONT_SECTION("u8g2_font_profont12_tr"); extern const uint8_t u8g2_font_profont12_tn[] U8G2_FONT_SECTION("u8g2_font_profont12_tn"); extern const uint8_t u8g2_font_profont12_mf[] U8G2_FONT_SECTION("u8g2_font_profont12_mf"); extern const uint8_t u8g2_font_profont12_mr[] U8G2_FONT_SECTION("u8g2_font_profont12_mr"); extern const uint8_t u8g2_font_profont12_mn[] U8G2_FONT_SECTION("u8g2_font_profont12_mn"); extern const uint8_t u8g2_font_profont15_tf[] U8G2_FONT_SECTION("u8g2_font_profont15_tf"); extern const uint8_t u8g2_font_profont15_tr[] U8G2_FONT_SECTION("u8g2_font_profont15_tr"); extern const uint8_t u8g2_font_profont15_tn[] U8G2_FONT_SECTION("u8g2_font_profont15_tn"); extern const uint8_t u8g2_font_profont15_mf[] U8G2_FONT_SECTION("u8g2_font_profont15_mf"); extern const uint8_t u8g2_font_profont15_mr[] U8G2_FONT_SECTION("u8g2_font_profont15_mr"); extern const uint8_t u8g2_font_profont15_mn[] U8G2_FONT_SECTION("u8g2_font_profont15_mn"); extern const uint8_t u8g2_font_profont17_tf[] U8G2_FONT_SECTION("u8g2_font_profont17_tf"); extern const uint8_t u8g2_font_profont17_tr[] U8G2_FONT_SECTION("u8g2_font_profont17_tr"); extern const uint8_t u8g2_font_profont17_tn[] U8G2_FONT_SECTION("u8g2_font_profont17_tn"); extern const uint8_t u8g2_font_profont17_mf[] U8G2_FONT_SECTION("u8g2_font_profont17_mf"); extern const uint8_t u8g2_font_profont17_mr[] U8G2_FONT_SECTION("u8g2_font_profont17_mr"); extern const uint8_t u8g2_font_profont17_mn[] U8G2_FONT_SECTION("u8g2_font_profont17_mn"); extern const uint8_t u8g2_font_profont22_tf[] U8G2_FONT_SECTION("u8g2_font_profont22_tf"); extern const uint8_t u8g2_font_profont22_tr[] U8G2_FONT_SECTION("u8g2_font_profont22_tr"); extern const uint8_t u8g2_font_profont22_tn[] U8G2_FONT_SECTION("u8g2_font_profont22_tn"); extern const uint8_t u8g2_font_profont22_mf[] U8G2_FONT_SECTION("u8g2_font_profont22_mf"); extern const uint8_t u8g2_font_profont22_mr[] U8G2_FONT_SECTION("u8g2_font_profont22_mr"); extern const uint8_t u8g2_font_profont22_mn[] U8G2_FONT_SECTION("u8g2_font_profont22_mn"); extern const uint8_t u8g2_font_profont29_tf[] U8G2_FONT_SECTION("u8g2_font_profont29_tf"); extern const uint8_t u8g2_font_profont29_tr[] U8G2_FONT_SECTION("u8g2_font_profont29_tr"); extern const uint8_t u8g2_font_profont29_tn[] U8G2_FONT_SECTION("u8g2_font_profont29_tn"); extern const uint8_t u8g2_font_profont29_mf[] U8G2_FONT_SECTION("u8g2_font_profont29_mf"); extern const uint8_t u8g2_font_profont29_mr[] U8G2_FONT_SECTION("u8g2_font_profont29_mr"); extern const uint8_t u8g2_font_profont29_mn[] U8G2_FONT_SECTION("u8g2_font_profont29_mn"); extern const uint8_t u8g2_font_samim_10_t_all[] U8G2_FONT_SECTION("u8g2_font_samim_10_t_all"); extern const uint8_t u8g2_font_samim_12_t_all[] U8G2_FONT_SECTION("u8g2_font_samim_12_t_all"); extern const uint8_t u8g2_font_samim_14_t_all[] U8G2_FONT_SECTION("u8g2_font_samim_14_t_all"); extern const uint8_t u8g2_font_samim_16_t_all[] U8G2_FONT_SECTION("u8g2_font_samim_16_t_all"); extern const uint8_t u8g2_font_samim_fd_10_t_all[] U8G2_FONT_SECTION("u8g2_font_samim_fd_10_t_all"); extern const uint8_t u8g2_font_samim_fd_12_t_all[] U8G2_FONT_SECTION("u8g2_font_samim_fd_12_t_all"); extern const uint8_t u8g2_font_samim_fd_14_t_all[] U8G2_FONT_SECTION("u8g2_font_samim_fd_14_t_all"); extern const uint8_t u8g2_font_samim_fd_16_t_all[] U8G2_FONT_SECTION("u8g2_font_samim_fd_16_t_all"); extern const uint8_t u8g2_font_ganj_nameh_sans10_t_all[] U8G2_FONT_SECTION("u8g2_font_ganj_nameh_sans10_t_all"); extern const uint8_t u8g2_font_ganj_nameh_sans12_t_all[] U8G2_FONT_SECTION("u8g2_font_ganj_nameh_sans12_t_all"); extern const uint8_t u8g2_font_ganj_nameh_sans14_t_all[] U8G2_FONT_SECTION("u8g2_font_ganj_nameh_sans14_t_all"); extern const uint8_t u8g2_font_ganj_nameh_sans16_t_all[] U8G2_FONT_SECTION("u8g2_font_ganj_nameh_sans16_t_all"); extern const uint8_t u8g2_font_iranian_sans_8_t_all[] U8G2_FONT_SECTION("u8g2_font_iranian_sans_8_t_all"); extern const uint8_t u8g2_font_iranian_sans_10_t_all[] U8G2_FONT_SECTION("u8g2_font_iranian_sans_10_t_all"); extern const uint8_t u8g2_font_iranian_sans_12_t_all[] U8G2_FONT_SECTION("u8g2_font_iranian_sans_12_t_all"); extern const uint8_t u8g2_font_iranian_sans_14_t_all[] U8G2_FONT_SECTION("u8g2_font_iranian_sans_14_t_all"); extern const uint8_t u8g2_font_iranian_sans_16_t_all[] U8G2_FONT_SECTION("u8g2_font_iranian_sans_16_t_all"); extern const uint8_t u8g2_font_mozart_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_mozart_nbp_tf"); extern const uint8_t u8g2_font_mozart_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_mozart_nbp_tr"); extern const uint8_t u8g2_font_mozart_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_mozart_nbp_tn"); extern const uint8_t u8g2_font_mozart_nbp_t_all[] U8G2_FONT_SECTION("u8g2_font_mozart_nbp_t_all"); extern const uint8_t u8g2_font_mozart_nbp_h_all[] U8G2_FONT_SECTION("u8g2_font_mozart_nbp_h_all"); extern const uint8_t u8g2_font_glasstown_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_glasstown_nbp_tf"); extern const uint8_t u8g2_font_glasstown_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_glasstown_nbp_tr"); extern const uint8_t u8g2_font_glasstown_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_glasstown_nbp_tn"); extern const uint8_t u8g2_font_glasstown_nbp_t_all[] U8G2_FONT_SECTION("u8g2_font_glasstown_nbp_t_all"); extern const uint8_t u8g2_font_shylock_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_shylock_nbp_tf"); extern const uint8_t u8g2_font_shylock_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_shylock_nbp_tr"); extern const uint8_t u8g2_font_shylock_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_shylock_nbp_tn"); extern const uint8_t u8g2_font_shylock_nbp_t_all[] U8G2_FONT_SECTION("u8g2_font_shylock_nbp_t_all"); extern const uint8_t u8g2_font_roentgen_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_roentgen_nbp_tf"); extern const uint8_t u8g2_font_roentgen_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_roentgen_nbp_tr"); extern const uint8_t u8g2_font_roentgen_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_roentgen_nbp_tn"); extern const uint8_t u8g2_font_roentgen_nbp_t_all[] U8G2_FONT_SECTION("u8g2_font_roentgen_nbp_t_all"); extern const uint8_t u8g2_font_roentgen_nbp_h_all[] U8G2_FONT_SECTION("u8g2_font_roentgen_nbp_h_all"); extern const uint8_t u8g2_font_calibration_gothic_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_calibration_gothic_nbp_tf"); extern const uint8_t u8g2_font_calibration_gothic_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_calibration_gothic_nbp_tr"); extern const uint8_t u8g2_font_calibration_gothic_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_calibration_gothic_nbp_tn"); extern const uint8_t u8g2_font_calibration_gothic_nbp_t_all[] U8G2_FONT_SECTION("u8g2_font_calibration_gothic_nbp_t_all"); extern const uint8_t u8g2_font_smart_patrol_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_smart_patrol_nbp_tf"); extern const uint8_t u8g2_font_smart_patrol_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_smart_patrol_nbp_tr"); extern const uint8_t u8g2_font_smart_patrol_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_smart_patrol_nbp_tn"); extern const uint8_t u8g2_font_prospero_bold_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_prospero_bold_nbp_tf"); extern const uint8_t u8g2_font_prospero_bold_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_prospero_bold_nbp_tr"); extern const uint8_t u8g2_font_prospero_bold_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_prospero_bold_nbp_tn"); extern const uint8_t u8g2_font_prospero_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_prospero_nbp_tf"); extern const uint8_t u8g2_font_prospero_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_prospero_nbp_tr"); extern const uint8_t u8g2_font_prospero_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_prospero_nbp_tn"); extern const uint8_t u8g2_font_balthasar_regular_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_balthasar_regular_nbp_tf"); extern const uint8_t u8g2_font_balthasar_regular_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_balthasar_regular_nbp_tr"); extern const uint8_t u8g2_font_balthasar_regular_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_balthasar_regular_nbp_tn"); extern const uint8_t u8g2_font_balthasar_titling_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_balthasar_titling_nbp_tf"); extern const uint8_t u8g2_font_balthasar_titling_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_balthasar_titling_nbp_tr"); extern const uint8_t u8g2_font_balthasar_titling_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_balthasar_titling_nbp_tn"); extern const uint8_t u8g2_font_synchronizer_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_synchronizer_nbp_tf"); extern const uint8_t u8g2_font_synchronizer_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_synchronizer_nbp_tr"); extern const uint8_t u8g2_font_synchronizer_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_synchronizer_nbp_tn"); extern const uint8_t u8g2_font_mercutio_basic_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_mercutio_basic_nbp_tf"); extern const uint8_t u8g2_font_mercutio_basic_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_mercutio_basic_nbp_tr"); extern const uint8_t u8g2_font_mercutio_basic_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_mercutio_basic_nbp_tn"); extern const uint8_t u8g2_font_mercutio_basic_nbp_t_all[] U8G2_FONT_SECTION("u8g2_font_mercutio_basic_nbp_t_all"); extern const uint8_t u8g2_font_mercutio_sc_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_mercutio_sc_nbp_tf"); extern const uint8_t u8g2_font_mercutio_sc_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_mercutio_sc_nbp_tr"); extern const uint8_t u8g2_font_mercutio_sc_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_mercutio_sc_nbp_tn"); extern const uint8_t u8g2_font_mercutio_sc_nbp_t_all[] U8G2_FONT_SECTION("u8g2_font_mercutio_sc_nbp_t_all"); extern const uint8_t u8g2_font_miranda_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_miranda_nbp_tf"); extern const uint8_t u8g2_font_miranda_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_miranda_nbp_tr"); extern const uint8_t u8g2_font_miranda_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_miranda_nbp_tn"); extern const uint8_t u8g2_font_nine_by_five_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_nine_by_five_nbp_tf"); extern const uint8_t u8g2_font_nine_by_five_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_nine_by_five_nbp_tr"); extern const uint8_t u8g2_font_nine_by_five_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_nine_by_five_nbp_tn"); extern const uint8_t u8g2_font_nine_by_five_nbp_t_all[] U8G2_FONT_SECTION("u8g2_font_nine_by_five_nbp_t_all"); extern const uint8_t u8g2_font_rosencrantz_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_rosencrantz_nbp_tf"); extern const uint8_t u8g2_font_rosencrantz_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_rosencrantz_nbp_tr"); extern const uint8_t u8g2_font_rosencrantz_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_rosencrantz_nbp_tn"); extern const uint8_t u8g2_font_rosencrantz_nbp_t_all[] U8G2_FONT_SECTION("u8g2_font_rosencrantz_nbp_t_all"); extern const uint8_t u8g2_font_guildenstern_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_guildenstern_nbp_tf"); extern const uint8_t u8g2_font_guildenstern_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_guildenstern_nbp_tr"); extern const uint8_t u8g2_font_guildenstern_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_guildenstern_nbp_tn"); extern const uint8_t u8g2_font_guildenstern_nbp_t_all[] U8G2_FONT_SECTION("u8g2_font_guildenstern_nbp_t_all"); extern const uint8_t u8g2_font_astragal_nbp_tf[] U8G2_FONT_SECTION("u8g2_font_astragal_nbp_tf"); extern const uint8_t u8g2_font_astragal_nbp_tr[] U8G2_FONT_SECTION("u8g2_font_astragal_nbp_tr"); extern const uint8_t u8g2_font_astragal_nbp_tn[] U8G2_FONT_SECTION("u8g2_font_astragal_nbp_tn"); extern const uint8_t u8g2_font_habsburgchancery_tf[] U8G2_FONT_SECTION("u8g2_font_habsburgchancery_tf"); extern const uint8_t u8g2_font_habsburgchancery_tr[] U8G2_FONT_SECTION("u8g2_font_habsburgchancery_tr"); extern const uint8_t u8g2_font_habsburgchancery_tn[] U8G2_FONT_SECTION("u8g2_font_habsburgchancery_tn"); extern const uint8_t u8g2_font_habsburgchancery_t_all[] U8G2_FONT_SECTION("u8g2_font_habsburgchancery_t_all"); extern const uint8_t u8g2_font_missingplanet_tf[] U8G2_FONT_SECTION("u8g2_font_missingplanet_tf"); extern const uint8_t u8g2_font_missingplanet_tr[] U8G2_FONT_SECTION("u8g2_font_missingplanet_tr"); extern const uint8_t u8g2_font_missingplanet_tn[] U8G2_FONT_SECTION("u8g2_font_missingplanet_tn"); extern const uint8_t u8g2_font_missingplanet_t_all[] U8G2_FONT_SECTION("u8g2_font_missingplanet_t_all"); extern const uint8_t u8g2_font_ordinarybasis_tf[] U8G2_FONT_SECTION("u8g2_font_ordinarybasis_tf"); extern const uint8_t u8g2_font_ordinarybasis_tr[] U8G2_FONT_SECTION("u8g2_font_ordinarybasis_tr"); extern const uint8_t u8g2_font_ordinarybasis_tn[] U8G2_FONT_SECTION("u8g2_font_ordinarybasis_tn"); extern const uint8_t u8g2_font_ordinarybasis_t_all[] U8G2_FONT_SECTION("u8g2_font_ordinarybasis_t_all"); extern const uint8_t u8g2_font_pixelmordred_tf[] U8G2_FONT_SECTION("u8g2_font_pixelmordred_tf"); extern const uint8_t u8g2_font_pixelmordred_tr[] U8G2_FONT_SECTION("u8g2_font_pixelmordred_tr"); extern const uint8_t u8g2_font_pixelmordred_tn[] U8G2_FONT_SECTION("u8g2_font_pixelmordred_tn"); extern const uint8_t u8g2_font_pixelmordred_t_all[] U8G2_FONT_SECTION("u8g2_font_pixelmordred_t_all"); extern const uint8_t u8g2_font_secretaryhand_tf[] U8G2_FONT_SECTION("u8g2_font_secretaryhand_tf"); extern const uint8_t u8g2_font_secretaryhand_tr[] U8G2_FONT_SECTION("u8g2_font_secretaryhand_tr"); extern const uint8_t u8g2_font_secretaryhand_tn[] U8G2_FONT_SECTION("u8g2_font_secretaryhand_tn"); extern const uint8_t u8g2_font_secretaryhand_t_all[] U8G2_FONT_SECTION("u8g2_font_secretaryhand_t_all"); extern const uint8_t u8g2_font_beanstalk_mel_tr[] U8G2_FONT_SECTION("u8g2_font_beanstalk_mel_tr"); extern const uint8_t u8g2_font_beanstalk_mel_tn[] U8G2_FONT_SECTION("u8g2_font_beanstalk_mel_tn"); extern const uint8_t u8g2_font_cube_mel_tr[] U8G2_FONT_SECTION("u8g2_font_cube_mel_tr"); extern const uint8_t u8g2_font_cube_mel_tn[] U8G2_FONT_SECTION("u8g2_font_cube_mel_tn"); extern const uint8_t u8g2_font_mademoiselle_mel_tr[] U8G2_FONT_SECTION("u8g2_font_mademoiselle_mel_tr"); extern const uint8_t u8g2_font_mademoiselle_mel_tn[] U8G2_FONT_SECTION("u8g2_font_mademoiselle_mel_tn"); extern const uint8_t u8g2_font_pieceofcake_mel_tr[] U8G2_FONT_SECTION("u8g2_font_pieceofcake_mel_tr"); extern const uint8_t u8g2_font_pieceofcake_mel_tn[] U8G2_FONT_SECTION("u8g2_font_pieceofcake_mel_tn"); extern const uint8_t u8g2_font_press_mel_tr[] U8G2_FONT_SECTION("u8g2_font_press_mel_tr"); extern const uint8_t u8g2_font_press_mel_tn[] U8G2_FONT_SECTION("u8g2_font_press_mel_tn"); extern const uint8_t u8g2_font_repress_mel_tr[] U8G2_FONT_SECTION("u8g2_font_repress_mel_tr"); extern const uint8_t u8g2_font_repress_mel_tn[] U8G2_FONT_SECTION("u8g2_font_repress_mel_tn"); extern const uint8_t u8g2_font_sticker_mel_tr[] U8G2_FONT_SECTION("u8g2_font_sticker_mel_tr"); extern const uint8_t u8g2_font_sticker_mel_tn[] U8G2_FONT_SECTION("u8g2_font_sticker_mel_tn"); extern const uint8_t u8g2_font_celibatemonk_tr[] U8G2_FONT_SECTION("u8g2_font_celibatemonk_tr"); extern const uint8_t u8g2_font_disrespectfulteenager_tu[] U8G2_FONT_SECTION("u8g2_font_disrespectfulteenager_tu"); extern const uint8_t u8g2_font_michaelmouse_tu[] U8G2_FONT_SECTION("u8g2_font_michaelmouse_tu"); extern const uint8_t u8g2_font_sandyforest_tr[] U8G2_FONT_SECTION("u8g2_font_sandyforest_tr"); extern const uint8_t u8g2_font_sandyforest_tn[] U8G2_FONT_SECTION("u8g2_font_sandyforest_tn"); extern const uint8_t u8g2_font_sandyforest_tu[] U8G2_FONT_SECTION("u8g2_font_sandyforest_tu"); extern const uint8_t u8g2_font_cupcakemetoyourleader_tr[] U8G2_FONT_SECTION("u8g2_font_cupcakemetoyourleader_tr"); extern const uint8_t u8g2_font_cupcakemetoyourleader_tn[] U8G2_FONT_SECTION("u8g2_font_cupcakemetoyourleader_tn"); extern const uint8_t u8g2_font_cupcakemetoyourleader_tu[] U8G2_FONT_SECTION("u8g2_font_cupcakemetoyourleader_tu"); extern const uint8_t u8g2_font_oldwizard_tf[] U8G2_FONT_SECTION("u8g2_font_oldwizard_tf"); extern const uint8_t u8g2_font_oldwizard_tr[] U8G2_FONT_SECTION("u8g2_font_oldwizard_tr"); extern const uint8_t u8g2_font_oldwizard_tn[] U8G2_FONT_SECTION("u8g2_font_oldwizard_tn"); extern const uint8_t u8g2_font_oldwizard_tu[] U8G2_FONT_SECTION("u8g2_font_oldwizard_tu"); extern const uint8_t u8g2_font_squirrel_tr[] U8G2_FONT_SECTION("u8g2_font_squirrel_tr"); extern const uint8_t u8g2_font_squirrel_tn[] U8G2_FONT_SECTION("u8g2_font_squirrel_tn"); extern const uint8_t u8g2_font_squirrel_tu[] U8G2_FONT_SECTION("u8g2_font_squirrel_tu"); extern const uint8_t u8g2_font_diodesemimono_tr[] U8G2_FONT_SECTION("u8g2_font_diodesemimono_tr"); extern const uint8_t u8g2_font_questgiver_tr[] U8G2_FONT_SECTION("u8g2_font_questgiver_tr"); extern const uint8_t u8g2_font_seraphimb1_tr[] U8G2_FONT_SECTION("u8g2_font_seraphimb1_tr"); extern const uint8_t u8g2_font_jinxedwizards_tr[] U8G2_FONT_SECTION("u8g2_font_jinxedwizards_tr"); extern const uint8_t u8g2_font_lastpriestess_tr[] U8G2_FONT_SECTION("u8g2_font_lastpriestess_tr"); extern const uint8_t u8g2_font_lastpriestess_tu[] U8G2_FONT_SECTION("u8g2_font_lastpriestess_tu"); extern const uint8_t u8g2_font_bitcasual_tf[] U8G2_FONT_SECTION("u8g2_font_bitcasual_tf"); extern const uint8_t u8g2_font_bitcasual_tr[] U8G2_FONT_SECTION("u8g2_font_bitcasual_tr"); extern const uint8_t u8g2_font_bitcasual_tn[] U8G2_FONT_SECTION("u8g2_font_bitcasual_tn"); extern const uint8_t u8g2_font_bitcasual_tu[] U8G2_FONT_SECTION("u8g2_font_bitcasual_tu"); extern const uint8_t u8g2_font_bitcasual_t_all[] U8G2_FONT_SECTION("u8g2_font_bitcasual_t_all"); extern const uint8_t u8g2_font_koleeko_tf[] U8G2_FONT_SECTION("u8g2_font_koleeko_tf"); extern const uint8_t u8g2_font_koleeko_tr[] U8G2_FONT_SECTION("u8g2_font_koleeko_tr"); extern const uint8_t u8g2_font_koleeko_tn[] U8G2_FONT_SECTION("u8g2_font_koleeko_tn"); extern const uint8_t u8g2_font_koleeko_tu[] U8G2_FONT_SECTION("u8g2_font_koleeko_tu"); extern const uint8_t u8g2_font_tenfatguys_tf[] U8G2_FONT_SECTION("u8g2_font_tenfatguys_tf"); extern const uint8_t u8g2_font_tenfatguys_tr[] U8G2_FONT_SECTION("u8g2_font_tenfatguys_tr"); extern const uint8_t u8g2_font_tenfatguys_tn[] U8G2_FONT_SECTION("u8g2_font_tenfatguys_tn"); extern const uint8_t u8g2_font_tenfatguys_tu[] U8G2_FONT_SECTION("u8g2_font_tenfatguys_tu"); extern const uint8_t u8g2_font_tenfatguys_t_all[] U8G2_FONT_SECTION("u8g2_font_tenfatguys_t_all"); extern const uint8_t u8g2_font_tenstamps_mf[] U8G2_FONT_SECTION("u8g2_font_tenstamps_mf"); extern const uint8_t u8g2_font_tenstamps_mr[] U8G2_FONT_SECTION("u8g2_font_tenstamps_mr"); extern const uint8_t u8g2_font_tenstamps_mn[] U8G2_FONT_SECTION("u8g2_font_tenstamps_mn"); extern const uint8_t u8g2_font_tenstamps_mu[] U8G2_FONT_SECTION("u8g2_font_tenstamps_mu"); extern const uint8_t u8g2_font_tenthinguys_tf[] U8G2_FONT_SECTION("u8g2_font_tenthinguys_tf"); extern const uint8_t u8g2_font_tenthinguys_tr[] U8G2_FONT_SECTION("u8g2_font_tenthinguys_tr"); extern const uint8_t u8g2_font_tenthinguys_tn[] U8G2_FONT_SECTION("u8g2_font_tenthinguys_tn"); extern const uint8_t u8g2_font_tenthinguys_tu[] U8G2_FONT_SECTION("u8g2_font_tenthinguys_tu"); extern const uint8_t u8g2_font_tenthinguys_t_all[] U8G2_FONT_SECTION("u8g2_font_tenthinguys_t_all"); extern const uint8_t u8g2_font_tenthinnerguys_tf[] U8G2_FONT_SECTION("u8g2_font_tenthinnerguys_tf"); extern const uint8_t u8g2_font_tenthinnerguys_tr[] U8G2_FONT_SECTION("u8g2_font_tenthinnerguys_tr"); extern const uint8_t u8g2_font_tenthinnerguys_tn[] U8G2_FONT_SECTION("u8g2_font_tenthinnerguys_tn"); extern const uint8_t u8g2_font_tenthinnerguys_tu[] U8G2_FONT_SECTION("u8g2_font_tenthinnerguys_tu"); extern const uint8_t u8g2_font_tenthinnerguys_t_all[] U8G2_FONT_SECTION("u8g2_font_tenthinnerguys_t_all"); extern const uint8_t u8g2_font_twelvedings_t_all[] U8G2_FONT_SECTION("u8g2_font_twelvedings_t_all"); extern const uint8_t u8g2_font_fewture_tf[] U8G2_FONT_SECTION("u8g2_font_fewture_tf"); extern const uint8_t u8g2_font_fewture_tr[] U8G2_FONT_SECTION("u8g2_font_fewture_tr"); extern const uint8_t u8g2_font_fewture_tn[] U8G2_FONT_SECTION("u8g2_font_fewture_tn"); extern const uint8_t u8g2_font_halftone_tf[] U8G2_FONT_SECTION("u8g2_font_halftone_tf"); extern const uint8_t u8g2_font_halftone_tr[] U8G2_FONT_SECTION("u8g2_font_halftone_tr"); extern const uint8_t u8g2_font_halftone_tn[] U8G2_FONT_SECTION("u8g2_font_halftone_tn"); extern const uint8_t u8g2_font_nerhoe_tf[] U8G2_FONT_SECTION("u8g2_font_nerhoe_tf"); extern const uint8_t u8g2_font_nerhoe_tr[] U8G2_FONT_SECTION("u8g2_font_nerhoe_tr"); extern const uint8_t u8g2_font_nerhoe_tn[] U8G2_FONT_SECTION("u8g2_font_nerhoe_tn"); extern const uint8_t u8g2_font_oskool_tf[] U8G2_FONT_SECTION("u8g2_font_oskool_tf"); extern const uint8_t u8g2_font_oskool_tr[] U8G2_FONT_SECTION("u8g2_font_oskool_tr"); extern const uint8_t u8g2_font_oskool_tn[] U8G2_FONT_SECTION("u8g2_font_oskool_tn"); extern const uint8_t u8g2_font_tinytim_tf[] U8G2_FONT_SECTION("u8g2_font_tinytim_tf"); extern const uint8_t u8g2_font_tinytim_tr[] U8G2_FONT_SECTION("u8g2_font_tinytim_tr"); extern const uint8_t u8g2_font_tinytim_tn[] U8G2_FONT_SECTION("u8g2_font_tinytim_tn"); extern const uint8_t u8g2_font_tooseornament_tf[] U8G2_FONT_SECTION("u8g2_font_tooseornament_tf"); extern const uint8_t u8g2_font_tooseornament_tr[] U8G2_FONT_SECTION("u8g2_font_tooseornament_tr"); extern const uint8_t u8g2_font_tooseornament_tn[] U8G2_FONT_SECTION("u8g2_font_tooseornament_tn"); extern const uint8_t u8g2_font_bauhaus2015_tr[] U8G2_FONT_SECTION("u8g2_font_bauhaus2015_tr"); extern const uint8_t u8g2_font_bauhaus2015_tn[] U8G2_FONT_SECTION("u8g2_font_bauhaus2015_tn"); extern const uint8_t u8g2_font_finderskeepers_tf[] U8G2_FONT_SECTION("u8g2_font_finderskeepers_tf"); extern const uint8_t u8g2_font_finderskeepers_tr[] U8G2_FONT_SECTION("u8g2_font_finderskeepers_tr"); extern const uint8_t u8g2_font_finderskeepers_tn[] U8G2_FONT_SECTION("u8g2_font_finderskeepers_tn"); extern const uint8_t u8g2_font_sirclivethebold_tr[] U8G2_FONT_SECTION("u8g2_font_sirclivethebold_tr"); extern const uint8_t u8g2_font_sirclivethebold_tn[] U8G2_FONT_SECTION("u8g2_font_sirclivethebold_tn"); extern const uint8_t u8g2_font_sirclive_tr[] U8G2_FONT_SECTION("u8g2_font_sirclive_tr"); extern const uint8_t u8g2_font_sirclive_tn[] U8G2_FONT_SECTION("u8g2_font_sirclive_tn"); extern const uint8_t u8g2_font_adventurer_tf[] U8G2_FONT_SECTION("u8g2_font_adventurer_tf"); extern const uint8_t u8g2_font_adventurer_tr[] U8G2_FONT_SECTION("u8g2_font_adventurer_tr"); extern const uint8_t u8g2_font_adventurer_t_all[] U8G2_FONT_SECTION("u8g2_font_adventurer_t_all"); extern const uint8_t u8g2_font_bracketedbabies_tr[] U8G2_FONT_SECTION("u8g2_font_bracketedbabies_tr"); extern const uint8_t u8g2_font_frikativ_tf[] U8G2_FONT_SECTION("u8g2_font_frikativ_tf"); extern const uint8_t u8g2_font_frikativ_tr[] U8G2_FONT_SECTION("u8g2_font_frikativ_tr"); extern const uint8_t u8g2_font_frikativ_t_all[] U8G2_FONT_SECTION("u8g2_font_frikativ_t_all"); extern const uint8_t u8g2_font_fancypixels_tf[] U8G2_FONT_SECTION("u8g2_font_fancypixels_tf"); extern const uint8_t u8g2_font_fancypixels_tr[] U8G2_FONT_SECTION("u8g2_font_fancypixels_tr"); extern const uint8_t u8g2_font_heavybottom_tr[] U8G2_FONT_SECTION("u8g2_font_heavybottom_tr"); extern const uint8_t u8g2_font_iconquadpix_m_all[] U8G2_FONT_SECTION("u8g2_font_iconquadpix_m_all"); extern const uint8_t u8g2_font_lastapprenticebold_tr[] U8G2_FONT_SECTION("u8g2_font_lastapprenticebold_tr"); extern const uint8_t u8g2_font_lastapprenticethin_tr[] U8G2_FONT_SECTION("u8g2_font_lastapprenticethin_tr"); extern const uint8_t u8g2_font_tallpix_tr[] U8G2_FONT_SECTION("u8g2_font_tallpix_tr"); extern const uint8_t u8g2_font_BBSesque_tf[] U8G2_FONT_SECTION("u8g2_font_BBSesque_tf"); extern const uint8_t u8g2_font_BBSesque_tr[] U8G2_FONT_SECTION("u8g2_font_BBSesque_tr"); extern const uint8_t u8g2_font_BBSesque_te[] U8G2_FONT_SECTION("u8g2_font_BBSesque_te"); extern const uint8_t u8g2_font_Born2bSportySlab_tf[] U8G2_FONT_SECTION("u8g2_font_Born2bSportySlab_tf"); extern const uint8_t u8g2_font_Born2bSportySlab_tr[] U8G2_FONT_SECTION("u8g2_font_Born2bSportySlab_tr"); extern const uint8_t u8g2_font_Born2bSportySlab_te[] U8G2_FONT_SECTION("u8g2_font_Born2bSportySlab_te"); extern const uint8_t u8g2_font_Born2bSportySlab_t_all[] U8G2_FONT_SECTION("u8g2_font_Born2bSportySlab_t_all"); extern const uint8_t u8g2_font_Born2bSportyV2_tf[] U8G2_FONT_SECTION("u8g2_font_Born2bSportyV2_tf"); extern const uint8_t u8g2_font_Born2bSportyV2_tr[] U8G2_FONT_SECTION("u8g2_font_Born2bSportyV2_tr"); extern const uint8_t u8g2_font_Born2bSportyV2_te[] U8G2_FONT_SECTION("u8g2_font_Born2bSportyV2_te"); extern const uint8_t u8g2_font_CursivePixel_tr[] U8G2_FONT_SECTION("u8g2_font_CursivePixel_tr"); extern const uint8_t u8g2_font_Engrish_tf[] U8G2_FONT_SECTION("u8g2_font_Engrish_tf"); extern const uint8_t u8g2_font_Engrish_tr[] U8G2_FONT_SECTION("u8g2_font_Engrish_tr"); extern const uint8_t u8g2_font_ImpactBits_tr[] U8G2_FONT_SECTION("u8g2_font_ImpactBits_tr"); extern const uint8_t u8g2_font_IPAandRUSLCD_tf[] U8G2_FONT_SECTION("u8g2_font_IPAandRUSLCD_tf"); extern const uint8_t u8g2_font_IPAandRUSLCD_tr[] U8G2_FONT_SECTION("u8g2_font_IPAandRUSLCD_tr"); extern const uint8_t u8g2_font_IPAandRUSLCD_te[] U8G2_FONT_SECTION("u8g2_font_IPAandRUSLCD_te"); extern const uint8_t u8g2_font_HelvetiPixel_tr[] U8G2_FONT_SECTION("u8g2_font_HelvetiPixel_tr"); extern const uint8_t u8g2_font_TimesNewPixel_tr[] U8G2_FONT_SECTION("u8g2_font_TimesNewPixel_tr"); extern const uint8_t u8g2_font_BitTypeWriter_tr[] U8G2_FONT_SECTION("u8g2_font_BitTypeWriter_tr"); extern const uint8_t u8g2_font_BitTypeWriter_te[] U8G2_FONT_SECTION("u8g2_font_BitTypeWriter_te"); extern const uint8_t u8g2_font_Georgia7px_tf[] U8G2_FONT_SECTION("u8g2_font_Georgia7px_tf"); extern const uint8_t u8g2_font_Georgia7px_tr[] U8G2_FONT_SECTION("u8g2_font_Georgia7px_tr"); extern const uint8_t u8g2_font_Georgia7px_te[] U8G2_FONT_SECTION("u8g2_font_Georgia7px_te"); extern const uint8_t u8g2_font_Wizzard_tr[] U8G2_FONT_SECTION("u8g2_font_Wizzard_tr"); extern const uint8_t u8g2_font_HelvetiPixelOutline_tr[] U8G2_FONT_SECTION("u8g2_font_HelvetiPixelOutline_tr"); extern const uint8_t u8g2_font_HelvetiPixelOutline_te[] U8G2_FONT_SECTION("u8g2_font_HelvetiPixelOutline_te"); extern const uint8_t u8g2_font_Untitled16PixelSansSerifBitmap_tr[] U8G2_FONT_SECTION("u8g2_font_Untitled16PixelSansSerifBitmap_tr"); extern const uint8_t u8g2_font_etl14thai_t[] U8G2_FONT_SECTION("u8g2_font_etl14thai_t"); extern const uint8_t u8g2_font_etl16thai_t[] U8G2_FONT_SECTION("u8g2_font_etl16thai_t"); extern const uint8_t u8g2_font_etl24thai_t[] U8G2_FONT_SECTION("u8g2_font_etl24thai_t"); extern const uint8_t u8g2_font_crox1cb_tf[] U8G2_FONT_SECTION("u8g2_font_crox1cb_tf"); extern const uint8_t u8g2_font_crox1cb_tr[] U8G2_FONT_SECTION("u8g2_font_crox1cb_tr"); extern const uint8_t u8g2_font_crox1cb_tn[] U8G2_FONT_SECTION("u8g2_font_crox1cb_tn"); extern const uint8_t u8g2_font_crox1cb_mf[] U8G2_FONT_SECTION("u8g2_font_crox1cb_mf"); extern const uint8_t u8g2_font_crox1cb_mr[] U8G2_FONT_SECTION("u8g2_font_crox1cb_mr"); extern const uint8_t u8g2_font_crox1cb_mn[] U8G2_FONT_SECTION("u8g2_font_crox1cb_mn"); extern const uint8_t u8g2_font_crox1c_tf[] U8G2_FONT_SECTION("u8g2_font_crox1c_tf"); extern const uint8_t u8g2_font_crox1c_tr[] U8G2_FONT_SECTION("u8g2_font_crox1c_tr"); extern const uint8_t u8g2_font_crox1c_tn[] U8G2_FONT_SECTION("u8g2_font_crox1c_tn"); extern const uint8_t u8g2_font_crox1c_mf[] U8G2_FONT_SECTION("u8g2_font_crox1c_mf"); extern const uint8_t u8g2_font_crox1c_mr[] U8G2_FONT_SECTION("u8g2_font_crox1c_mr"); extern const uint8_t u8g2_font_crox1c_mn[] U8G2_FONT_SECTION("u8g2_font_crox1c_mn"); extern const uint8_t u8g2_font_crox1hb_tf[] U8G2_FONT_SECTION("u8g2_font_crox1hb_tf"); extern const uint8_t u8g2_font_crox1hb_tr[] U8G2_FONT_SECTION("u8g2_font_crox1hb_tr"); extern const uint8_t u8g2_font_crox1hb_tn[] U8G2_FONT_SECTION("u8g2_font_crox1hb_tn"); extern const uint8_t u8g2_font_crox1h_tf[] U8G2_FONT_SECTION("u8g2_font_crox1h_tf"); extern const uint8_t u8g2_font_crox1h_tr[] U8G2_FONT_SECTION("u8g2_font_crox1h_tr"); extern const uint8_t u8g2_font_crox1h_tn[] U8G2_FONT_SECTION("u8g2_font_crox1h_tn"); extern const uint8_t u8g2_font_crox1tb_tf[] U8G2_FONT_SECTION("u8g2_font_crox1tb_tf"); extern const uint8_t u8g2_font_crox1tb_tr[] U8G2_FONT_SECTION("u8g2_font_crox1tb_tr"); extern const uint8_t u8g2_font_crox1tb_tn[] U8G2_FONT_SECTION("u8g2_font_crox1tb_tn"); extern const uint8_t u8g2_font_crox1t_tf[] U8G2_FONT_SECTION("u8g2_font_crox1t_tf"); extern const uint8_t u8g2_font_crox1t_tr[] U8G2_FONT_SECTION("u8g2_font_crox1t_tr"); extern const uint8_t u8g2_font_crox1t_tn[] U8G2_FONT_SECTION("u8g2_font_crox1t_tn"); extern const uint8_t u8g2_font_crox2cb_tf[] U8G2_FONT_SECTION("u8g2_font_crox2cb_tf"); extern const uint8_t u8g2_font_crox2cb_tr[] U8G2_FONT_SECTION("u8g2_font_crox2cb_tr"); extern const uint8_t u8g2_font_crox2cb_tn[] U8G2_FONT_SECTION("u8g2_font_crox2cb_tn"); extern const uint8_t u8g2_font_crox2cb_mf[] U8G2_FONT_SECTION("u8g2_font_crox2cb_mf"); extern const uint8_t u8g2_font_crox2cb_mr[] U8G2_FONT_SECTION("u8g2_font_crox2cb_mr"); extern const uint8_t u8g2_font_crox2cb_mn[] U8G2_FONT_SECTION("u8g2_font_crox2cb_mn"); extern const uint8_t u8g2_font_crox2c_tf[] U8G2_FONT_SECTION("u8g2_font_crox2c_tf"); extern const uint8_t u8g2_font_crox2c_tr[] U8G2_FONT_SECTION("u8g2_font_crox2c_tr"); extern const uint8_t u8g2_font_crox2c_tn[] U8G2_FONT_SECTION("u8g2_font_crox2c_tn"); extern const uint8_t u8g2_font_crox2c_mf[] U8G2_FONT_SECTION("u8g2_font_crox2c_mf"); extern const uint8_t u8g2_font_crox2c_mr[] U8G2_FONT_SECTION("u8g2_font_crox2c_mr"); extern const uint8_t u8g2_font_crox2c_mn[] U8G2_FONT_SECTION("u8g2_font_crox2c_mn"); extern const uint8_t u8g2_font_crox2hb_tf[] U8G2_FONT_SECTION("u8g2_font_crox2hb_tf"); extern const uint8_t u8g2_font_crox2hb_tr[] U8G2_FONT_SECTION("u8g2_font_crox2hb_tr"); extern const uint8_t u8g2_font_crox2hb_tn[] U8G2_FONT_SECTION("u8g2_font_crox2hb_tn"); extern const uint8_t u8g2_font_crox2h_tf[] U8G2_FONT_SECTION("u8g2_font_crox2h_tf"); extern const uint8_t u8g2_font_crox2h_tr[] U8G2_FONT_SECTION("u8g2_font_crox2h_tr"); extern const uint8_t u8g2_font_crox2h_tn[] U8G2_FONT_SECTION("u8g2_font_crox2h_tn"); extern const uint8_t u8g2_font_crox2tb_tf[] U8G2_FONT_SECTION("u8g2_font_crox2tb_tf"); extern const uint8_t u8g2_font_crox2tb_tr[] U8G2_FONT_SECTION("u8g2_font_crox2tb_tr"); extern const uint8_t u8g2_font_crox2tb_tn[] U8G2_FONT_SECTION("u8g2_font_crox2tb_tn"); extern const uint8_t u8g2_font_crox2t_tf[] U8G2_FONT_SECTION("u8g2_font_crox2t_tf"); extern const uint8_t u8g2_font_crox2t_tr[] U8G2_FONT_SECTION("u8g2_font_crox2t_tr"); extern const uint8_t u8g2_font_crox2t_tn[] U8G2_FONT_SECTION("u8g2_font_crox2t_tn"); extern const uint8_t u8g2_font_crox3cb_tf[] U8G2_FONT_SECTION("u8g2_font_crox3cb_tf"); extern const uint8_t u8g2_font_crox3cb_tr[] U8G2_FONT_SECTION("u8g2_font_crox3cb_tr"); extern const uint8_t u8g2_font_crox3cb_tn[] U8G2_FONT_SECTION("u8g2_font_crox3cb_tn"); extern const uint8_t u8g2_font_crox3cb_mf[] U8G2_FONT_SECTION("u8g2_font_crox3cb_mf"); extern const uint8_t u8g2_font_crox3cb_mr[] U8G2_FONT_SECTION("u8g2_font_crox3cb_mr"); extern const uint8_t u8g2_font_crox3cb_mn[] U8G2_FONT_SECTION("u8g2_font_crox3cb_mn"); extern const uint8_t u8g2_font_crox3c_tf[] U8G2_FONT_SECTION("u8g2_font_crox3c_tf"); extern const uint8_t u8g2_font_crox3c_tr[] U8G2_FONT_SECTION("u8g2_font_crox3c_tr"); extern const uint8_t u8g2_font_crox3c_tn[] U8G2_FONT_SECTION("u8g2_font_crox3c_tn"); extern const uint8_t u8g2_font_crox3c_mf[] U8G2_FONT_SECTION("u8g2_font_crox3c_mf"); extern const uint8_t u8g2_font_crox3c_mr[] U8G2_FONT_SECTION("u8g2_font_crox3c_mr"); extern const uint8_t u8g2_font_crox3c_mn[] U8G2_FONT_SECTION("u8g2_font_crox3c_mn"); extern const uint8_t u8g2_font_crox3hb_tf[] U8G2_FONT_SECTION("u8g2_font_crox3hb_tf"); extern const uint8_t u8g2_font_crox3hb_tr[] U8G2_FONT_SECTION("u8g2_font_crox3hb_tr"); extern const uint8_t u8g2_font_crox3hb_tn[] U8G2_FONT_SECTION("u8g2_font_crox3hb_tn"); extern const uint8_t u8g2_font_crox3h_tf[] U8G2_FONT_SECTION("u8g2_font_crox3h_tf"); extern const uint8_t u8g2_font_crox3h_tr[] U8G2_FONT_SECTION("u8g2_font_crox3h_tr"); extern const uint8_t u8g2_font_crox3h_tn[] U8G2_FONT_SECTION("u8g2_font_crox3h_tn"); extern const uint8_t u8g2_font_crox3tb_tf[] U8G2_FONT_SECTION("u8g2_font_crox3tb_tf"); extern const uint8_t u8g2_font_crox3tb_tr[] U8G2_FONT_SECTION("u8g2_font_crox3tb_tr"); extern const uint8_t u8g2_font_crox3tb_tn[] U8G2_FONT_SECTION("u8g2_font_crox3tb_tn"); extern const uint8_t u8g2_font_crox3t_tf[] U8G2_FONT_SECTION("u8g2_font_crox3t_tf"); extern const uint8_t u8g2_font_crox3t_tr[] U8G2_FONT_SECTION("u8g2_font_crox3t_tr"); extern const uint8_t u8g2_font_crox3t_tn[] U8G2_FONT_SECTION("u8g2_font_crox3t_tn"); extern const uint8_t u8g2_font_crox4hb_tf[] U8G2_FONT_SECTION("u8g2_font_crox4hb_tf"); extern const uint8_t u8g2_font_crox4hb_tr[] U8G2_FONT_SECTION("u8g2_font_crox4hb_tr"); extern const uint8_t u8g2_font_crox4hb_tn[] U8G2_FONT_SECTION("u8g2_font_crox4hb_tn"); extern const uint8_t u8g2_font_crox4h_tf[] U8G2_FONT_SECTION("u8g2_font_crox4h_tf"); extern const uint8_t u8g2_font_crox4h_tr[] U8G2_FONT_SECTION("u8g2_font_crox4h_tr"); extern const uint8_t u8g2_font_crox4h_tn[] U8G2_FONT_SECTION("u8g2_font_crox4h_tn"); extern const uint8_t u8g2_font_crox4tb_tf[] U8G2_FONT_SECTION("u8g2_font_crox4tb_tf"); extern const uint8_t u8g2_font_crox4tb_tr[] U8G2_FONT_SECTION("u8g2_font_crox4tb_tr"); extern const uint8_t u8g2_font_crox4tb_tn[] U8G2_FONT_SECTION("u8g2_font_crox4tb_tn"); extern const uint8_t u8g2_font_crox4t_tf[] U8G2_FONT_SECTION("u8g2_font_crox4t_tf"); extern const uint8_t u8g2_font_crox4t_tr[] U8G2_FONT_SECTION("u8g2_font_crox4t_tr"); extern const uint8_t u8g2_font_crox4t_tn[] U8G2_FONT_SECTION("u8g2_font_crox4t_tn"); extern const uint8_t u8g2_font_crox5hb_tf[] U8G2_FONT_SECTION("u8g2_font_crox5hb_tf"); extern const uint8_t u8g2_font_crox5hb_tr[] U8G2_FONT_SECTION("u8g2_font_crox5hb_tr"); extern const uint8_t u8g2_font_crox5hb_tn[] U8G2_FONT_SECTION("u8g2_font_crox5hb_tn"); extern const uint8_t u8g2_font_crox5h_tf[] U8G2_FONT_SECTION("u8g2_font_crox5h_tf"); extern const uint8_t u8g2_font_crox5h_tr[] U8G2_FONT_SECTION("u8g2_font_crox5h_tr"); extern const uint8_t u8g2_font_crox5h_tn[] U8G2_FONT_SECTION("u8g2_font_crox5h_tn"); extern const uint8_t u8g2_font_crox5tb_tf[] U8G2_FONT_SECTION("u8g2_font_crox5tb_tf"); extern const uint8_t u8g2_font_crox5tb_tr[] U8G2_FONT_SECTION("u8g2_font_crox5tb_tr"); extern const uint8_t u8g2_font_crox5tb_tn[] U8G2_FONT_SECTION("u8g2_font_crox5tb_tn"); extern const uint8_t u8g2_font_crox5t_tf[] U8G2_FONT_SECTION("u8g2_font_crox5t_tf"); extern const uint8_t u8g2_font_crox5t_tr[] U8G2_FONT_SECTION("u8g2_font_crox5t_tr"); extern const uint8_t u8g2_font_crox5t_tn[] U8G2_FONT_SECTION("u8g2_font_crox5t_tn"); extern const uint8_t u8g2_font_cu12_tf[] U8G2_FONT_SECTION("u8g2_font_cu12_tf"); extern const uint8_t u8g2_font_cu12_tr[] U8G2_FONT_SECTION("u8g2_font_cu12_tr"); extern const uint8_t u8g2_font_cu12_tn[] U8G2_FONT_SECTION("u8g2_font_cu12_tn"); extern const uint8_t u8g2_font_cu12_te[] U8G2_FONT_SECTION("u8g2_font_cu12_te"); extern const uint8_t u8g2_font_cu12_hf[] U8G2_FONT_SECTION("u8g2_font_cu12_hf"); extern const uint8_t u8g2_font_cu12_hr[] U8G2_FONT_SECTION("u8g2_font_cu12_hr"); extern const uint8_t u8g2_font_cu12_hn[] U8G2_FONT_SECTION("u8g2_font_cu12_hn"); extern const uint8_t u8g2_font_cu12_he[] U8G2_FONT_SECTION("u8g2_font_cu12_he"); extern const uint8_t u8g2_font_cu12_mf[] U8G2_FONT_SECTION("u8g2_font_cu12_mf"); extern const uint8_t u8g2_font_cu12_mr[] U8G2_FONT_SECTION("u8g2_font_cu12_mr"); extern const uint8_t u8g2_font_cu12_mn[] U8G2_FONT_SECTION("u8g2_font_cu12_mn"); extern const uint8_t u8g2_font_cu12_me[] U8G2_FONT_SECTION("u8g2_font_cu12_me"); extern const uint8_t u8g2_font_cu12_t_symbols[] U8G2_FONT_SECTION("u8g2_font_cu12_t_symbols"); extern const uint8_t u8g2_font_cu12_h_symbols[] U8G2_FONT_SECTION("u8g2_font_cu12_h_symbols"); extern const uint8_t u8g2_font_cu12_t_greek[] U8G2_FONT_SECTION("u8g2_font_cu12_t_greek"); extern const uint8_t u8g2_font_cu12_t_cyrillic[] U8G2_FONT_SECTION("u8g2_font_cu12_t_cyrillic"); extern const uint8_t u8g2_font_cu12_t_tibetan[] U8G2_FONT_SECTION("u8g2_font_cu12_t_tibetan"); extern const uint8_t u8g2_font_cu12_t_hebrew[] U8G2_FONT_SECTION("u8g2_font_cu12_t_hebrew"); extern const uint8_t u8g2_font_cu12_t_arabic[] U8G2_FONT_SECTION("u8g2_font_cu12_t_arabic"); extern const uint8_t u8g2_font_unifont_tf[] U8G2_FONT_SECTION("u8g2_font_unifont_tf"); extern const uint8_t u8g2_font_unifont_tr[] U8G2_FONT_SECTION("u8g2_font_unifont_tr"); extern const uint8_t u8g2_font_unifont_te[] U8G2_FONT_SECTION("u8g2_font_unifont_te"); extern const uint8_t u8g2_font_unifont_t_latin[] U8G2_FONT_SECTION("u8g2_font_unifont_t_latin"); extern const uint8_t u8g2_font_unifont_t_extended[] U8G2_FONT_SECTION("u8g2_font_unifont_t_extended"); extern const uint8_t u8g2_font_unifont_t_greek[] U8G2_FONT_SECTION("u8g2_font_unifont_t_greek"); extern const uint8_t u8g2_font_unifont_t_cyrillic[] U8G2_FONT_SECTION("u8g2_font_unifont_t_cyrillic"); extern const uint8_t u8g2_font_unifont_t_hebrew[] U8G2_FONT_SECTION("u8g2_font_unifont_t_hebrew"); extern const uint8_t u8g2_font_unifont_t_bengali[] U8G2_FONT_SECTION("u8g2_font_unifont_t_bengali"); extern const uint8_t u8g2_font_unifont_t_tibetan[] U8G2_FONT_SECTION("u8g2_font_unifont_t_tibetan"); extern const uint8_t u8g2_font_unifont_t_urdu[] U8G2_FONT_SECTION("u8g2_font_unifont_t_urdu"); extern const uint8_t u8g2_font_unifont_t_polish[] U8G2_FONT_SECTION("u8g2_font_unifont_t_polish"); extern const uint8_t u8g2_font_unifont_t_devanagari[] U8G2_FONT_SECTION("u8g2_font_unifont_t_devanagari"); extern const uint8_t u8g2_font_unifont_t_arabic[] U8G2_FONT_SECTION("u8g2_font_unifont_t_arabic"); extern const uint8_t u8g2_font_unifont_t_symbols[] U8G2_FONT_SECTION("u8g2_font_unifont_t_symbols"); extern const uint8_t u8g2_font_unifont_h_symbols[] U8G2_FONT_SECTION("u8g2_font_unifont_h_symbols"); extern const uint8_t u8g2_font_unifont_t_emoticons[] U8G2_FONT_SECTION("u8g2_font_unifont_t_emoticons"); extern const uint8_t u8g2_font_unifont_t_animals[] U8G2_FONT_SECTION("u8g2_font_unifont_t_animals"); extern const uint8_t u8g2_font_unifont_t_domino[] U8G2_FONT_SECTION("u8g2_font_unifont_t_domino"); extern const uint8_t u8g2_font_unifont_t_cards[] U8G2_FONT_SECTION("u8g2_font_unifont_t_cards"); extern const uint8_t u8g2_font_unifont_t_weather[] U8G2_FONT_SECTION("u8g2_font_unifont_t_weather"); extern const uint8_t u8g2_font_unifont_t_chinese1[] U8G2_FONT_SECTION("u8g2_font_unifont_t_chinese1"); extern const uint8_t u8g2_font_unifont_t_chinese2[] U8G2_FONT_SECTION("u8g2_font_unifont_t_chinese2"); extern const uint8_t u8g2_font_unifont_t_chinese3[] U8G2_FONT_SECTION("u8g2_font_unifont_t_chinese3"); extern const uint8_t u8g2_font_unifont_t_japanese1[] U8G2_FONT_SECTION("u8g2_font_unifont_t_japanese1"); extern const uint8_t u8g2_font_unifont_t_japanese2[] U8G2_FONT_SECTION("u8g2_font_unifont_t_japanese2"); extern const uint8_t u8g2_font_unifont_t_japanese3[] U8G2_FONT_SECTION("u8g2_font_unifont_t_japanese3"); extern const uint8_t u8g2_font_unifont_t_korean1[] U8G2_FONT_SECTION("u8g2_font_unifont_t_korean1"); extern const uint8_t u8g2_font_unifont_t_korean2[] U8G2_FONT_SECTION("u8g2_font_unifont_t_korean2"); extern const uint8_t u8g2_font_unifont_t_vietnamese1[] U8G2_FONT_SECTION("u8g2_font_unifont_t_vietnamese1"); extern const uint8_t u8g2_font_unifont_t_vietnamese2[] U8G2_FONT_SECTION("u8g2_font_unifont_t_vietnamese2"); extern const uint8_t u8g2_font_gb16st_t_1[] U8G2_FONT_SECTION("u8g2_font_gb16st_t_1"); extern const uint8_t u8g2_font_gb16st_t_2[] U8G2_FONT_SECTION("u8g2_font_gb16st_t_2"); extern const uint8_t u8g2_font_gb16st_t_3[] U8G2_FONT_SECTION("u8g2_font_gb16st_t_3"); extern const uint8_t u8g2_font_gb24st_t_1[] U8G2_FONT_SECTION("u8g2_font_gb24st_t_1"); extern const uint8_t u8g2_font_gb24st_t_2[] U8G2_FONT_SECTION("u8g2_font_gb24st_t_2"); extern const uint8_t u8g2_font_gb24st_t_3[] U8G2_FONT_SECTION("u8g2_font_gb24st_t_3"); extern const uint8_t u8g2_font_wqy12_t_chinese1[] U8G2_FONT_SECTION("u8g2_font_wqy12_t_chinese1"); extern const uint8_t u8g2_font_wqy12_t_chinese2[] U8G2_FONT_SECTION("u8g2_font_wqy12_t_chinese2"); extern const uint8_t u8g2_font_wqy12_t_chinese3[] U8G2_FONT_SECTION("u8g2_font_wqy12_t_chinese3"); extern const uint8_t u8g2_font_wqy12_t_gb2312[] U8G2_FONT_SECTION("u8g2_font_wqy12_t_gb2312"); extern const uint8_t u8g2_font_wqy12_t_gb2312a[] U8G2_FONT_SECTION("u8g2_font_wqy12_t_gb2312a"); extern const uint8_t u8g2_font_wqy12_t_gb2312b[] U8G2_FONT_SECTION("u8g2_font_wqy12_t_gb2312b"); extern const uint8_t u8g2_font_wqy13_t_chinese1[] U8G2_FONT_SECTION("u8g2_font_wqy13_t_chinese1"); extern const uint8_t u8g2_font_wqy13_t_chinese2[] U8G2_FONT_SECTION("u8g2_font_wqy13_t_chinese2"); extern const uint8_t u8g2_font_wqy13_t_chinese3[] U8G2_FONT_SECTION("u8g2_font_wqy13_t_chinese3"); extern const uint8_t u8g2_font_wqy13_t_gb2312[] U8G2_FONT_SECTION("u8g2_font_wqy13_t_gb2312"); extern const uint8_t u8g2_font_wqy13_t_gb2312a[] U8G2_FONT_SECTION("u8g2_font_wqy13_t_gb2312a"); extern const uint8_t u8g2_font_wqy13_t_gb2312b[] U8G2_FONT_SECTION("u8g2_font_wqy13_t_gb2312b"); extern const uint8_t u8g2_font_wqy14_t_chinese1[] U8G2_FONT_SECTION("u8g2_font_wqy14_t_chinese1"); extern const uint8_t u8g2_font_wqy14_t_chinese2[] U8G2_FONT_SECTION("u8g2_font_wqy14_t_chinese2"); extern const uint8_t u8g2_font_wqy14_t_chinese3[] U8G2_FONT_SECTION("u8g2_font_wqy14_t_chinese3"); extern const uint8_t u8g2_font_wqy14_t_gb2312[] U8G2_FONT_SECTION("u8g2_font_wqy14_t_gb2312"); extern const uint8_t u8g2_font_wqy14_t_gb2312a[] U8G2_FONT_SECTION("u8g2_font_wqy14_t_gb2312a"); extern const uint8_t u8g2_font_wqy14_t_gb2312b[] U8G2_FONT_SECTION("u8g2_font_wqy14_t_gb2312b"); extern const uint8_t u8g2_font_wqy15_t_chinese1[] U8G2_FONT_SECTION("u8g2_font_wqy15_t_chinese1"); extern const uint8_t u8g2_font_wqy15_t_chinese2[] U8G2_FONT_SECTION("u8g2_font_wqy15_t_chinese2"); extern const uint8_t u8g2_font_wqy15_t_chinese3[] U8G2_FONT_SECTION("u8g2_font_wqy15_t_chinese3"); extern const uint8_t u8g2_font_wqy15_t_gb2312[] U8G2_FONT_SECTION("u8g2_font_wqy15_t_gb2312"); extern const uint8_t u8g2_font_wqy15_t_gb2312a[] U8G2_FONT_SECTION("u8g2_font_wqy15_t_gb2312a"); extern const uint8_t u8g2_font_wqy15_t_gb2312b[] U8G2_FONT_SECTION("u8g2_font_wqy15_t_gb2312b"); extern const uint8_t u8g2_font_wqy16_t_chinese1[] U8G2_FONT_SECTION("u8g2_font_wqy16_t_chinese1"); extern const uint8_t u8g2_font_wqy16_t_chinese2[] U8G2_FONT_SECTION("u8g2_font_wqy16_t_chinese2"); extern const uint8_t u8g2_font_wqy16_t_chinese3[] U8G2_FONT_SECTION("u8g2_font_wqy16_t_chinese3"); extern const uint8_t u8g2_font_wqy16_t_gb2312[] U8G2_FONT_SECTION("u8g2_font_wqy16_t_gb2312"); extern const uint8_t u8g2_font_wqy16_t_gb2312a[] U8G2_FONT_SECTION("u8g2_font_wqy16_t_gb2312a"); extern const uint8_t u8g2_font_wqy16_t_gb2312b[] U8G2_FONT_SECTION("u8g2_font_wqy16_t_gb2312b"); extern const uint8_t u8g2_font_b10_t_japanese1[] U8G2_FONT_SECTION("u8g2_font_b10_t_japanese1"); extern const uint8_t u8g2_font_b10_t_japanese2[] U8G2_FONT_SECTION("u8g2_font_b10_t_japanese2"); extern const uint8_t u8g2_font_b10_b_t_japanese1[] U8G2_FONT_SECTION("u8g2_font_b10_b_t_japanese1"); extern const uint8_t u8g2_font_b10_b_t_japanese2[] U8G2_FONT_SECTION("u8g2_font_b10_b_t_japanese2"); extern const uint8_t u8g2_font_f10_t_japanese1[] U8G2_FONT_SECTION("u8g2_font_f10_t_japanese1"); extern const uint8_t u8g2_font_f10_t_japanese2[] U8G2_FONT_SECTION("u8g2_font_f10_t_japanese2"); extern const uint8_t u8g2_font_f10_b_t_japanese1[] U8G2_FONT_SECTION("u8g2_font_f10_b_t_japanese1"); extern const uint8_t u8g2_font_f10_b_t_japanese2[] U8G2_FONT_SECTION("u8g2_font_f10_b_t_japanese2"); extern const uint8_t u8g2_font_b12_t_japanese1[] U8G2_FONT_SECTION("u8g2_font_b12_t_japanese1"); extern const uint8_t u8g2_font_b12_t_japanese2[] U8G2_FONT_SECTION("u8g2_font_b12_t_japanese2"); extern const uint8_t u8g2_font_b12_t_japanese3[] U8G2_FONT_SECTION("u8g2_font_b12_t_japanese3"); extern const uint8_t u8g2_font_b12_b_t_japanese1[] U8G2_FONT_SECTION("u8g2_font_b12_b_t_japanese1"); extern const uint8_t u8g2_font_b12_b_t_japanese2[] U8G2_FONT_SECTION("u8g2_font_b12_b_t_japanese2"); extern const uint8_t u8g2_font_b12_b_t_japanese3[] U8G2_FONT_SECTION("u8g2_font_b12_b_t_japanese3"); extern const uint8_t u8g2_font_f12_t_japanese1[] U8G2_FONT_SECTION("u8g2_font_f12_t_japanese1"); extern const uint8_t u8g2_font_f12_t_japanese2[] U8G2_FONT_SECTION("u8g2_font_f12_t_japanese2"); extern const uint8_t u8g2_font_f12_b_t_japanese1[] U8G2_FONT_SECTION("u8g2_font_f12_b_t_japanese1"); extern const uint8_t u8g2_font_f12_b_t_japanese2[] U8G2_FONT_SECTION("u8g2_font_f12_b_t_japanese2"); extern const uint8_t u8g2_font_b16_t_japanese1[] U8G2_FONT_SECTION("u8g2_font_b16_t_japanese1"); extern const uint8_t u8g2_font_b16_t_japanese2[] U8G2_FONT_SECTION("u8g2_font_b16_t_japanese2"); extern const uint8_t u8g2_font_b16_t_japanese3[] U8G2_FONT_SECTION("u8g2_font_b16_t_japanese3"); extern const uint8_t u8g2_font_b16_b_t_japanese1[] U8G2_FONT_SECTION("u8g2_font_b16_b_t_japanese1"); extern const uint8_t u8g2_font_b16_b_t_japanese2[] U8G2_FONT_SECTION("u8g2_font_b16_b_t_japanese2"); extern const uint8_t u8g2_font_b16_b_t_japanese3[] U8G2_FONT_SECTION("u8g2_font_b16_b_t_japanese3"); extern const uint8_t u8g2_font_f16_t_japanese1[] U8G2_FONT_SECTION("u8g2_font_f16_t_japanese1"); extern const uint8_t u8g2_font_f16_t_japanese2[] U8G2_FONT_SECTION("u8g2_font_f16_t_japanese2"); extern const uint8_t u8g2_font_f16_b_t_japanese1[] U8G2_FONT_SECTION("u8g2_font_f16_b_t_japanese1"); extern const uint8_t u8g2_font_f16_b_t_japanese2[] U8G2_FONT_SECTION("u8g2_font_f16_b_t_japanese2"); extern const uint8_t u8g2_font_artossans8_8r[] U8G2_FONT_SECTION("u8g2_font_artossans8_8r"); extern const uint8_t u8g2_font_artossans8_8n[] U8G2_FONT_SECTION("u8g2_font_artossans8_8n"); extern const uint8_t u8g2_font_artossans8_8u[] U8G2_FONT_SECTION("u8g2_font_artossans8_8u"); extern const uint8_t u8g2_font_artosserif8_8r[] U8G2_FONT_SECTION("u8g2_font_artosserif8_8r"); extern const uint8_t u8g2_font_artosserif8_8n[] U8G2_FONT_SECTION("u8g2_font_artosserif8_8n"); extern const uint8_t u8g2_font_artosserif8_8u[] U8G2_FONT_SECTION("u8g2_font_artosserif8_8u"); extern const uint8_t u8g2_font_chroma48medium8_8r[] U8G2_FONT_SECTION("u8g2_font_chroma48medium8_8r"); extern const uint8_t u8g2_font_chroma48medium8_8n[] U8G2_FONT_SECTION("u8g2_font_chroma48medium8_8n"); extern const uint8_t u8g2_font_chroma48medium8_8u[] U8G2_FONT_SECTION("u8g2_font_chroma48medium8_8u"); extern const uint8_t u8g2_font_saikyosansbold8_8n[] U8G2_FONT_SECTION("u8g2_font_saikyosansbold8_8n"); extern const uint8_t u8g2_font_saikyosansbold8_8u[] U8G2_FONT_SECTION("u8g2_font_saikyosansbold8_8u"); extern const uint8_t u8g2_font_torussansbold8_8r[] U8G2_FONT_SECTION("u8g2_font_torussansbold8_8r"); extern const uint8_t u8g2_font_torussansbold8_8n[] U8G2_FONT_SECTION("u8g2_font_torussansbold8_8n"); extern const uint8_t u8g2_font_torussansbold8_8u[] U8G2_FONT_SECTION("u8g2_font_torussansbold8_8u"); extern const uint8_t u8g2_font_victoriabold8_8r[] U8G2_FONT_SECTION("u8g2_font_victoriabold8_8r"); extern const uint8_t u8g2_font_victoriabold8_8n[] U8G2_FONT_SECTION("u8g2_font_victoriabold8_8n"); extern const uint8_t u8g2_font_victoriabold8_8u[] U8G2_FONT_SECTION("u8g2_font_victoriabold8_8u"); extern const uint8_t u8g2_font_victoriamedium8_8r[] U8G2_FONT_SECTION("u8g2_font_victoriamedium8_8r"); extern const uint8_t u8g2_font_victoriamedium8_8n[] U8G2_FONT_SECTION("u8g2_font_victoriamedium8_8n"); extern const uint8_t u8g2_font_victoriamedium8_8u[] U8G2_FONT_SECTION("u8g2_font_victoriamedium8_8u"); extern const uint8_t u8g2_font_courB08_tf[] U8G2_FONT_SECTION("u8g2_font_courB08_tf"); extern const uint8_t u8g2_font_courB08_tr[] U8G2_FONT_SECTION("u8g2_font_courB08_tr"); extern const uint8_t u8g2_font_courB08_tn[] U8G2_FONT_SECTION("u8g2_font_courB08_tn"); extern const uint8_t u8g2_font_courB10_tf[] U8G2_FONT_SECTION("u8g2_font_courB10_tf"); extern const uint8_t u8g2_font_courB10_tr[] U8G2_FONT_SECTION("u8g2_font_courB10_tr"); extern const uint8_t u8g2_font_courB10_tn[] U8G2_FONT_SECTION("u8g2_font_courB10_tn"); extern const uint8_t u8g2_font_courB12_tf[] U8G2_FONT_SECTION("u8g2_font_courB12_tf"); extern const uint8_t u8g2_font_courB12_tr[] U8G2_FONT_SECTION("u8g2_font_courB12_tr"); extern const uint8_t u8g2_font_courB12_tn[] U8G2_FONT_SECTION("u8g2_font_courB12_tn"); extern const uint8_t u8g2_font_courB14_tf[] U8G2_FONT_SECTION("u8g2_font_courB14_tf"); extern const uint8_t u8g2_font_courB14_tr[] U8G2_FONT_SECTION("u8g2_font_courB14_tr"); extern const uint8_t u8g2_font_courB14_tn[] U8G2_FONT_SECTION("u8g2_font_courB14_tn"); extern const uint8_t u8g2_font_courB18_tf[] U8G2_FONT_SECTION("u8g2_font_courB18_tf"); extern const uint8_t u8g2_font_courB18_tr[] U8G2_FONT_SECTION("u8g2_font_courB18_tr"); extern const uint8_t u8g2_font_courB18_tn[] U8G2_FONT_SECTION("u8g2_font_courB18_tn"); extern const uint8_t u8g2_font_courB24_tf[] U8G2_FONT_SECTION("u8g2_font_courB24_tf"); extern const uint8_t u8g2_font_courB24_tr[] U8G2_FONT_SECTION("u8g2_font_courB24_tr"); extern const uint8_t u8g2_font_courB24_tn[] U8G2_FONT_SECTION("u8g2_font_courB24_tn"); extern const uint8_t u8g2_font_courR08_tf[] U8G2_FONT_SECTION("u8g2_font_courR08_tf"); extern const uint8_t u8g2_font_courR08_tr[] U8G2_FONT_SECTION("u8g2_font_courR08_tr"); extern const uint8_t u8g2_font_courR08_tn[] U8G2_FONT_SECTION("u8g2_font_courR08_tn"); extern const uint8_t u8g2_font_courR10_tf[] U8G2_FONT_SECTION("u8g2_font_courR10_tf"); extern const uint8_t u8g2_font_courR10_tr[] U8G2_FONT_SECTION("u8g2_font_courR10_tr"); extern const uint8_t u8g2_font_courR10_tn[] U8G2_FONT_SECTION("u8g2_font_courR10_tn"); extern const uint8_t u8g2_font_courR12_tf[] U8G2_FONT_SECTION("u8g2_font_courR12_tf"); extern const uint8_t u8g2_font_courR12_tr[] U8G2_FONT_SECTION("u8g2_font_courR12_tr"); extern const uint8_t u8g2_font_courR12_tn[] U8G2_FONT_SECTION("u8g2_font_courR12_tn"); extern const uint8_t u8g2_font_courR14_tf[] U8G2_FONT_SECTION("u8g2_font_courR14_tf"); extern const uint8_t u8g2_font_courR14_tr[] U8G2_FONT_SECTION("u8g2_font_courR14_tr"); extern const uint8_t u8g2_font_courR14_tn[] U8G2_FONT_SECTION("u8g2_font_courR14_tn"); extern const uint8_t u8g2_font_courR18_tf[] U8G2_FONT_SECTION("u8g2_font_courR18_tf"); extern const uint8_t u8g2_font_courR18_tr[] U8G2_FONT_SECTION("u8g2_font_courR18_tr"); extern const uint8_t u8g2_font_courR18_tn[] U8G2_FONT_SECTION("u8g2_font_courR18_tn"); extern const uint8_t u8g2_font_courR24_tf[] U8G2_FONT_SECTION("u8g2_font_courR24_tf"); extern const uint8_t u8g2_font_courR24_tr[] U8G2_FONT_SECTION("u8g2_font_courR24_tr"); extern const uint8_t u8g2_font_courR24_tn[] U8G2_FONT_SECTION("u8g2_font_courR24_tn"); extern const uint8_t u8g2_font_helvB08_tf[] U8G2_FONT_SECTION("u8g2_font_helvB08_tf"); extern const uint8_t u8g2_font_helvB08_tr[] U8G2_FONT_SECTION("u8g2_font_helvB08_tr"); extern const uint8_t u8g2_font_helvB08_tn[] U8G2_FONT_SECTION("u8g2_font_helvB08_tn"); extern const uint8_t u8g2_font_helvB08_te[] U8G2_FONT_SECTION("u8g2_font_helvB08_te"); extern const uint8_t u8g2_font_helvB10_tf[] U8G2_FONT_SECTION("u8g2_font_helvB10_tf"); extern const uint8_t u8g2_font_helvB10_tr[] U8G2_FONT_SECTION("u8g2_font_helvB10_tr"); extern const uint8_t u8g2_font_helvB10_tn[] U8G2_FONT_SECTION("u8g2_font_helvB10_tn"); extern const uint8_t u8g2_font_helvB10_te[] U8G2_FONT_SECTION("u8g2_font_helvB10_te"); extern const uint8_t u8g2_font_helvB12_tf[] U8G2_FONT_SECTION("u8g2_font_helvB12_tf"); extern const uint8_t u8g2_font_helvB12_tr[] U8G2_FONT_SECTION("u8g2_font_helvB12_tr"); extern const uint8_t u8g2_font_helvB12_tn[] U8G2_FONT_SECTION("u8g2_font_helvB12_tn"); extern const uint8_t u8g2_font_helvB12_te[] U8G2_FONT_SECTION("u8g2_font_helvB12_te"); extern const uint8_t u8g2_font_helvB14_tf[] U8G2_FONT_SECTION("u8g2_font_helvB14_tf"); extern const uint8_t u8g2_font_helvB14_tr[] U8G2_FONT_SECTION("u8g2_font_helvB14_tr"); extern const uint8_t u8g2_font_helvB14_tn[] U8G2_FONT_SECTION("u8g2_font_helvB14_tn"); extern const uint8_t u8g2_font_helvB14_te[] U8G2_FONT_SECTION("u8g2_font_helvB14_te"); extern const uint8_t u8g2_font_helvB18_tf[] U8G2_FONT_SECTION("u8g2_font_helvB18_tf"); extern const uint8_t u8g2_font_helvB18_tr[] U8G2_FONT_SECTION("u8g2_font_helvB18_tr"); extern const uint8_t u8g2_font_helvB18_tn[] U8G2_FONT_SECTION("u8g2_font_helvB18_tn"); extern const uint8_t u8g2_font_helvB18_te[] U8G2_FONT_SECTION("u8g2_font_helvB18_te"); extern const uint8_t u8g2_font_helvB24_tf[] U8G2_FONT_SECTION("u8g2_font_helvB24_tf"); extern const uint8_t u8g2_font_helvB24_tr[] U8G2_FONT_SECTION("u8g2_font_helvB24_tr"); extern const uint8_t u8g2_font_helvB24_tn[] U8G2_FONT_SECTION("u8g2_font_helvB24_tn"); extern const uint8_t u8g2_font_helvB24_te[] U8G2_FONT_SECTION("u8g2_font_helvB24_te"); extern const uint8_t u8g2_font_helvR08_tf[] U8G2_FONT_SECTION("u8g2_font_helvR08_tf"); extern const uint8_t u8g2_font_helvR08_tr[] U8G2_FONT_SECTION("u8g2_font_helvR08_tr"); extern const uint8_t u8g2_font_helvR08_tn[] U8G2_FONT_SECTION("u8g2_font_helvR08_tn"); extern const uint8_t u8g2_font_helvR08_te[] U8G2_FONT_SECTION("u8g2_font_helvR08_te"); extern const uint8_t u8g2_font_helvR10_tf[] U8G2_FONT_SECTION("u8g2_font_helvR10_tf"); extern const uint8_t u8g2_font_helvR10_tr[] U8G2_FONT_SECTION("u8g2_font_helvR10_tr"); extern const uint8_t u8g2_font_helvR10_tn[] U8G2_FONT_SECTION("u8g2_font_helvR10_tn"); extern const uint8_t u8g2_font_helvR10_te[] U8G2_FONT_SECTION("u8g2_font_helvR10_te"); extern const uint8_t u8g2_font_helvR12_tf[] U8G2_FONT_SECTION("u8g2_font_helvR12_tf"); extern const uint8_t u8g2_font_helvR12_tr[] U8G2_FONT_SECTION("u8g2_font_helvR12_tr"); extern const uint8_t u8g2_font_helvR12_tn[] U8G2_FONT_SECTION("u8g2_font_helvR12_tn"); extern const uint8_t u8g2_font_helvR12_te[] U8G2_FONT_SECTION("u8g2_font_helvR12_te"); extern const uint8_t u8g2_font_helvR14_tf[] U8G2_FONT_SECTION("u8g2_font_helvR14_tf"); extern const uint8_t u8g2_font_helvR14_tr[] U8G2_FONT_SECTION("u8g2_font_helvR14_tr"); extern const uint8_t u8g2_font_helvR14_tn[] U8G2_FONT_SECTION("u8g2_font_helvR14_tn"); extern const uint8_t u8g2_font_helvR14_te[] U8G2_FONT_SECTION("u8g2_font_helvR14_te"); extern const uint8_t u8g2_font_helvR18_tf[] U8G2_FONT_SECTION("u8g2_font_helvR18_tf"); extern const uint8_t u8g2_font_helvR18_tr[] U8G2_FONT_SECTION("u8g2_font_helvR18_tr"); extern const uint8_t u8g2_font_helvR18_tn[] U8G2_FONT_SECTION("u8g2_font_helvR18_tn"); extern const uint8_t u8g2_font_helvR18_te[] U8G2_FONT_SECTION("u8g2_font_helvR18_te"); extern const uint8_t u8g2_font_helvR24_tf[] U8G2_FONT_SECTION("u8g2_font_helvR24_tf"); extern const uint8_t u8g2_font_helvR24_tr[] U8G2_FONT_SECTION("u8g2_font_helvR24_tr"); extern const uint8_t u8g2_font_helvR24_tn[] U8G2_FONT_SECTION("u8g2_font_helvR24_tn"); extern const uint8_t u8g2_font_helvR24_te[] U8G2_FONT_SECTION("u8g2_font_helvR24_te"); extern const uint8_t u8g2_font_ncenB08_tf[] U8G2_FONT_SECTION("u8g2_font_ncenB08_tf"); extern const uint8_t u8g2_font_ncenB08_tr[] U8G2_FONT_SECTION("u8g2_font_ncenB08_tr"); extern const uint8_t u8g2_font_ncenB08_tn[] U8G2_FONT_SECTION("u8g2_font_ncenB08_tn"); extern const uint8_t u8g2_font_ncenB08_te[] U8G2_FONT_SECTION("u8g2_font_ncenB08_te"); extern const uint8_t u8g2_font_ncenB10_tf[] U8G2_FONT_SECTION("u8g2_font_ncenB10_tf"); extern const uint8_t u8g2_font_ncenB10_tr[] U8G2_FONT_SECTION("u8g2_font_ncenB10_tr"); extern const uint8_t u8g2_font_ncenB10_tn[] U8G2_FONT_SECTION("u8g2_font_ncenB10_tn"); extern const uint8_t u8g2_font_ncenB10_te[] U8G2_FONT_SECTION("u8g2_font_ncenB10_te"); extern const uint8_t u8g2_font_ncenB12_tf[] U8G2_FONT_SECTION("u8g2_font_ncenB12_tf"); extern const uint8_t u8g2_font_ncenB12_tr[] U8G2_FONT_SECTION("u8g2_font_ncenB12_tr"); extern const uint8_t u8g2_font_ncenB12_tn[] U8G2_FONT_SECTION("u8g2_font_ncenB12_tn"); extern const uint8_t u8g2_font_ncenB12_te[] U8G2_FONT_SECTION("u8g2_font_ncenB12_te"); extern const uint8_t u8g2_font_ncenB14_tf[] U8G2_FONT_SECTION("u8g2_font_ncenB14_tf"); extern const uint8_t u8g2_font_ncenB14_tr[] U8G2_FONT_SECTION("u8g2_font_ncenB14_tr"); extern const uint8_t u8g2_font_ncenB14_tn[] U8G2_FONT_SECTION("u8g2_font_ncenB14_tn"); extern const uint8_t u8g2_font_ncenB14_te[] U8G2_FONT_SECTION("u8g2_font_ncenB14_te"); extern const uint8_t u8g2_font_ncenB18_tf[] U8G2_FONT_SECTION("u8g2_font_ncenB18_tf"); extern const uint8_t u8g2_font_ncenB18_tr[] U8G2_FONT_SECTION("u8g2_font_ncenB18_tr"); extern const uint8_t u8g2_font_ncenB18_tn[] U8G2_FONT_SECTION("u8g2_font_ncenB18_tn"); extern const uint8_t u8g2_font_ncenB18_te[] U8G2_FONT_SECTION("u8g2_font_ncenB18_te"); extern const uint8_t u8g2_font_ncenB24_tf[] U8G2_FONT_SECTION("u8g2_font_ncenB24_tf"); extern const uint8_t u8g2_font_ncenB24_tr[] U8G2_FONT_SECTION("u8g2_font_ncenB24_tr"); extern const uint8_t u8g2_font_ncenB24_tn[] U8G2_FONT_SECTION("u8g2_font_ncenB24_tn"); extern const uint8_t u8g2_font_ncenB24_te[] U8G2_FONT_SECTION("u8g2_font_ncenB24_te"); extern const uint8_t u8g2_font_ncenR08_tf[] U8G2_FONT_SECTION("u8g2_font_ncenR08_tf"); extern const uint8_t u8g2_font_ncenR08_tr[] U8G2_FONT_SECTION("u8g2_font_ncenR08_tr"); extern const uint8_t u8g2_font_ncenR08_tn[] U8G2_FONT_SECTION("u8g2_font_ncenR08_tn"); extern const uint8_t u8g2_font_ncenR08_te[] U8G2_FONT_SECTION("u8g2_font_ncenR08_te"); extern const uint8_t u8g2_font_ncenR10_tf[] U8G2_FONT_SECTION("u8g2_font_ncenR10_tf"); extern const uint8_t u8g2_font_ncenR10_tr[] U8G2_FONT_SECTION("u8g2_font_ncenR10_tr"); extern const uint8_t u8g2_font_ncenR10_tn[] U8G2_FONT_SECTION("u8g2_font_ncenR10_tn"); extern const uint8_t u8g2_font_ncenR10_te[] U8G2_FONT_SECTION("u8g2_font_ncenR10_te"); extern const uint8_t u8g2_font_ncenR12_tf[] U8G2_FONT_SECTION("u8g2_font_ncenR12_tf"); extern const uint8_t u8g2_font_ncenR12_tr[] U8G2_FONT_SECTION("u8g2_font_ncenR12_tr"); extern const uint8_t u8g2_font_ncenR12_tn[] U8G2_FONT_SECTION("u8g2_font_ncenR12_tn"); extern const uint8_t u8g2_font_ncenR12_te[] U8G2_FONT_SECTION("u8g2_font_ncenR12_te"); extern const uint8_t u8g2_font_ncenR14_tf[] U8G2_FONT_SECTION("u8g2_font_ncenR14_tf"); extern const uint8_t u8g2_font_ncenR14_tr[] U8G2_FONT_SECTION("u8g2_font_ncenR14_tr"); extern const uint8_t u8g2_font_ncenR14_tn[] U8G2_FONT_SECTION("u8g2_font_ncenR14_tn"); extern const uint8_t u8g2_font_ncenR14_te[] U8G2_FONT_SECTION("u8g2_font_ncenR14_te"); extern const uint8_t u8g2_font_ncenR18_tf[] U8G2_FONT_SECTION("u8g2_font_ncenR18_tf"); extern const uint8_t u8g2_font_ncenR18_tr[] U8G2_FONT_SECTION("u8g2_font_ncenR18_tr"); extern const uint8_t u8g2_font_ncenR18_tn[] U8G2_FONT_SECTION("u8g2_font_ncenR18_tn"); extern const uint8_t u8g2_font_ncenR18_te[] U8G2_FONT_SECTION("u8g2_font_ncenR18_te"); extern const uint8_t u8g2_font_ncenR24_tf[] U8G2_FONT_SECTION("u8g2_font_ncenR24_tf"); extern const uint8_t u8g2_font_ncenR24_tr[] U8G2_FONT_SECTION("u8g2_font_ncenR24_tr"); extern const uint8_t u8g2_font_ncenR24_tn[] U8G2_FONT_SECTION("u8g2_font_ncenR24_tn"); extern const uint8_t u8g2_font_ncenR24_te[] U8G2_FONT_SECTION("u8g2_font_ncenR24_te"); extern const uint8_t u8g2_font_timB08_tf[] U8G2_FONT_SECTION("u8g2_font_timB08_tf"); extern const uint8_t u8g2_font_timB08_tr[] U8G2_FONT_SECTION("u8g2_font_timB08_tr"); extern const uint8_t u8g2_font_timB08_tn[] U8G2_FONT_SECTION("u8g2_font_timB08_tn"); extern const uint8_t u8g2_font_timB10_tf[] U8G2_FONT_SECTION("u8g2_font_timB10_tf"); extern const uint8_t u8g2_font_timB10_tr[] U8G2_FONT_SECTION("u8g2_font_timB10_tr"); extern const uint8_t u8g2_font_timB10_tn[] U8G2_FONT_SECTION("u8g2_font_timB10_tn"); extern const uint8_t u8g2_font_timB12_tf[] U8G2_FONT_SECTION("u8g2_font_timB12_tf"); extern const uint8_t u8g2_font_timB12_tr[] U8G2_FONT_SECTION("u8g2_font_timB12_tr"); extern const uint8_t u8g2_font_timB12_tn[] U8G2_FONT_SECTION("u8g2_font_timB12_tn"); extern const uint8_t u8g2_font_timB14_tf[] U8G2_FONT_SECTION("u8g2_font_timB14_tf"); extern const uint8_t u8g2_font_timB14_tr[] U8G2_FONT_SECTION("u8g2_font_timB14_tr"); extern const uint8_t u8g2_font_timB14_tn[] U8G2_FONT_SECTION("u8g2_font_timB14_tn"); extern const uint8_t u8g2_font_timB18_tf[] U8G2_FONT_SECTION("u8g2_font_timB18_tf"); extern const uint8_t u8g2_font_timB18_tr[] U8G2_FONT_SECTION("u8g2_font_timB18_tr"); extern const uint8_t u8g2_font_timB18_tn[] U8G2_FONT_SECTION("u8g2_font_timB18_tn"); extern const uint8_t u8g2_font_timB24_tf[] U8G2_FONT_SECTION("u8g2_font_timB24_tf"); extern const uint8_t u8g2_font_timB24_tr[] U8G2_FONT_SECTION("u8g2_font_timB24_tr"); extern const uint8_t u8g2_font_timB24_tn[] U8G2_FONT_SECTION("u8g2_font_timB24_tn"); extern const uint8_t u8g2_font_timR08_tf[] U8G2_FONT_SECTION("u8g2_font_timR08_tf"); extern const uint8_t u8g2_font_timR08_tr[] U8G2_FONT_SECTION("u8g2_font_timR08_tr"); extern const uint8_t u8g2_font_timR08_tn[] U8G2_FONT_SECTION("u8g2_font_timR08_tn"); extern const uint8_t u8g2_font_timR10_tf[] U8G2_FONT_SECTION("u8g2_font_timR10_tf"); extern const uint8_t u8g2_font_timR10_tr[] U8G2_FONT_SECTION("u8g2_font_timR10_tr"); extern const uint8_t u8g2_font_timR10_tn[] U8G2_FONT_SECTION("u8g2_font_timR10_tn"); extern const uint8_t u8g2_font_timR12_tf[] U8G2_FONT_SECTION("u8g2_font_timR12_tf"); extern const uint8_t u8g2_font_timR12_tr[] U8G2_FONT_SECTION("u8g2_font_timR12_tr"); extern const uint8_t u8g2_font_timR12_tn[] U8G2_FONT_SECTION("u8g2_font_timR12_tn"); extern const uint8_t u8g2_font_timR14_tf[] U8G2_FONT_SECTION("u8g2_font_timR14_tf"); extern const uint8_t u8g2_font_timR14_tr[] U8G2_FONT_SECTION("u8g2_font_timR14_tr"); extern const uint8_t u8g2_font_timR14_tn[] U8G2_FONT_SECTION("u8g2_font_timR14_tn"); extern const uint8_t u8g2_font_timR18_tf[] U8G2_FONT_SECTION("u8g2_font_timR18_tf"); extern const uint8_t u8g2_font_timR18_tr[] U8G2_FONT_SECTION("u8g2_font_timR18_tr"); extern const uint8_t u8g2_font_timR18_tn[] U8G2_FONT_SECTION("u8g2_font_timR18_tn"); extern const uint8_t u8g2_font_timR24_tf[] U8G2_FONT_SECTION("u8g2_font_timR24_tf"); extern const uint8_t u8g2_font_timR24_tr[] U8G2_FONT_SECTION("u8g2_font_timR24_tr"); extern const uint8_t u8g2_font_timR24_tn[] U8G2_FONT_SECTION("u8g2_font_timR24_tn"); extern const uint8_t u8g2_font_baby_tf[] U8G2_FONT_SECTION("u8g2_font_baby_tf"); extern const uint8_t u8g2_font_baby_tr[] U8G2_FONT_SECTION("u8g2_font_baby_tr"); extern const uint8_t u8g2_font_baby_tn[] U8G2_FONT_SECTION("u8g2_font_baby_tn"); extern const uint8_t u8g2_font_blipfest_07_tr[] U8G2_FONT_SECTION("u8g2_font_blipfest_07_tr"); extern const uint8_t u8g2_font_blipfest_07_tn[] U8G2_FONT_SECTION("u8g2_font_blipfest_07_tn"); extern const uint8_t u8g2_font_chikita_tf[] U8G2_FONT_SECTION("u8g2_font_chikita_tf"); extern const uint8_t u8g2_font_chikita_tr[] U8G2_FONT_SECTION("u8g2_font_chikita_tr"); extern const uint8_t u8g2_font_chikita_tn[] U8G2_FONT_SECTION("u8g2_font_chikita_tn"); extern const uint8_t u8g2_font_lucasfont_alternate_tf[] U8G2_FONT_SECTION("u8g2_font_lucasfont_alternate_tf"); extern const uint8_t u8g2_font_lucasfont_alternate_tr[] U8G2_FONT_SECTION("u8g2_font_lucasfont_alternate_tr"); extern const uint8_t u8g2_font_lucasfont_alternate_tn[] U8G2_FONT_SECTION("u8g2_font_lucasfont_alternate_tn"); extern const uint8_t u8g2_font_p01type_tf[] U8G2_FONT_SECTION("u8g2_font_p01type_tf"); extern const uint8_t u8g2_font_p01type_tr[] U8G2_FONT_SECTION("u8g2_font_p01type_tr"); extern const uint8_t u8g2_font_p01type_tn[] U8G2_FONT_SECTION("u8g2_font_p01type_tn"); extern const uint8_t u8g2_font_pixelle_micro_tr[] U8G2_FONT_SECTION("u8g2_font_pixelle_micro_tr"); extern const uint8_t u8g2_font_pixelle_micro_tn[] U8G2_FONT_SECTION("u8g2_font_pixelle_micro_tn"); extern const uint8_t u8g2_font_robot_de_niro_tf[] U8G2_FONT_SECTION("u8g2_font_robot_de_niro_tf"); extern const uint8_t u8g2_font_robot_de_niro_tr[] U8G2_FONT_SECTION("u8g2_font_robot_de_niro_tr"); extern const uint8_t u8g2_font_robot_de_niro_tn[] U8G2_FONT_SECTION("u8g2_font_robot_de_niro_tn"); extern const uint8_t u8g2_font_trixel_square_tf[] U8G2_FONT_SECTION("u8g2_font_trixel_square_tf"); extern const uint8_t u8g2_font_trixel_square_tr[] U8G2_FONT_SECTION("u8g2_font_trixel_square_tr"); extern const uint8_t u8g2_font_trixel_square_tn[] U8G2_FONT_SECTION("u8g2_font_trixel_square_tn"); extern const uint8_t u8g2_font_haxrcorp4089_tr[] U8G2_FONT_SECTION("u8g2_font_haxrcorp4089_tr"); extern const uint8_t u8g2_font_haxrcorp4089_tn[] U8G2_FONT_SECTION("u8g2_font_haxrcorp4089_tn"); extern const uint8_t u8g2_font_haxrcorp4089_t_cyrillic[] U8G2_FONT_SECTION("u8g2_font_haxrcorp4089_t_cyrillic"); extern const uint8_t u8g2_font_bubble_tr[] U8G2_FONT_SECTION("u8g2_font_bubble_tr"); extern const uint8_t u8g2_font_bubble_tn[] U8G2_FONT_SECTION("u8g2_font_bubble_tn"); extern const uint8_t u8g2_font_cardimon_pixel_tf[] U8G2_FONT_SECTION("u8g2_font_cardimon_pixel_tf"); extern const uint8_t u8g2_font_cardimon_pixel_tr[] U8G2_FONT_SECTION("u8g2_font_cardimon_pixel_tr"); extern const uint8_t u8g2_font_cardimon_pixel_tn[] U8G2_FONT_SECTION("u8g2_font_cardimon_pixel_tn"); extern const uint8_t u8g2_font_maniac_tf[] U8G2_FONT_SECTION("u8g2_font_maniac_tf"); extern const uint8_t u8g2_font_maniac_tr[] U8G2_FONT_SECTION("u8g2_font_maniac_tr"); extern const uint8_t u8g2_font_maniac_tn[] U8G2_FONT_SECTION("u8g2_font_maniac_tn"); extern const uint8_t u8g2_font_maniac_te[] U8G2_FONT_SECTION("u8g2_font_maniac_te"); extern const uint8_t u8g2_font_lucasarts_scumm_subtitle_o_tf[] U8G2_FONT_SECTION("u8g2_font_lucasarts_scumm_subtitle_o_tf"); extern const uint8_t u8g2_font_lucasarts_scumm_subtitle_o_tr[] U8G2_FONT_SECTION("u8g2_font_lucasarts_scumm_subtitle_o_tr"); extern const uint8_t u8g2_font_lucasarts_scumm_subtitle_o_tn[] U8G2_FONT_SECTION("u8g2_font_lucasarts_scumm_subtitle_o_tn"); extern const uint8_t u8g2_font_lucasarts_scumm_subtitle_r_tf[] U8G2_FONT_SECTION("u8g2_font_lucasarts_scumm_subtitle_r_tf"); extern const uint8_t u8g2_font_lucasarts_scumm_subtitle_r_tr[] U8G2_FONT_SECTION("u8g2_font_lucasarts_scumm_subtitle_r_tr"); extern const uint8_t u8g2_font_lucasarts_scumm_subtitle_r_tn[] U8G2_FONT_SECTION("u8g2_font_lucasarts_scumm_subtitle_r_tn"); extern const uint8_t u8g2_font_fub11_tf[] U8G2_FONT_SECTION("u8g2_font_fub11_tf"); extern const uint8_t u8g2_font_fub11_tr[] U8G2_FONT_SECTION("u8g2_font_fub11_tr"); extern const uint8_t u8g2_font_fub11_tn[] U8G2_FONT_SECTION("u8g2_font_fub11_tn"); extern const uint8_t u8g2_font_fub14_tf[] U8G2_FONT_SECTION("u8g2_font_fub14_tf"); extern const uint8_t u8g2_font_fub14_tr[] U8G2_FONT_SECTION("u8g2_font_fub14_tr"); extern const uint8_t u8g2_font_fub14_tn[] U8G2_FONT_SECTION("u8g2_font_fub14_tn"); extern const uint8_t u8g2_font_fub17_tf[] U8G2_FONT_SECTION("u8g2_font_fub17_tf"); extern const uint8_t u8g2_font_fub17_tr[] U8G2_FONT_SECTION("u8g2_font_fub17_tr"); extern const uint8_t u8g2_font_fub17_tn[] U8G2_FONT_SECTION("u8g2_font_fub17_tn"); extern const uint8_t u8g2_font_fub20_tf[] U8G2_FONT_SECTION("u8g2_font_fub20_tf"); extern const uint8_t u8g2_font_fub20_tr[] U8G2_FONT_SECTION("u8g2_font_fub20_tr"); extern const uint8_t u8g2_font_fub20_tn[] U8G2_FONT_SECTION("u8g2_font_fub20_tn"); extern const uint8_t u8g2_font_fub25_tf[] U8G2_FONT_SECTION("u8g2_font_fub25_tf"); extern const uint8_t u8g2_font_fub25_tr[] U8G2_FONT_SECTION("u8g2_font_fub25_tr"); extern const uint8_t u8g2_font_fub25_tn[] U8G2_FONT_SECTION("u8g2_font_fub25_tn"); extern const uint8_t u8g2_font_fub30_tf[] U8G2_FONT_SECTION("u8g2_font_fub30_tf"); extern const uint8_t u8g2_font_fub30_tr[] U8G2_FONT_SECTION("u8g2_font_fub30_tr"); extern const uint8_t u8g2_font_fub30_tn[] U8G2_FONT_SECTION("u8g2_font_fub30_tn"); extern const uint8_t u8g2_font_fub35_tf[] U8G2_FONT_SECTION("u8g2_font_fub35_tf"); extern const uint8_t u8g2_font_fub35_tr[] U8G2_FONT_SECTION("u8g2_font_fub35_tr"); extern const uint8_t u8g2_font_fub35_tn[] U8G2_FONT_SECTION("u8g2_font_fub35_tn"); extern const uint8_t u8g2_font_fub42_tf[] U8G2_FONT_SECTION("u8g2_font_fub42_tf"); extern const uint8_t u8g2_font_fub42_tr[] U8G2_FONT_SECTION("u8g2_font_fub42_tr"); extern const uint8_t u8g2_font_fub42_tn[] U8G2_FONT_SECTION("u8g2_font_fub42_tn"); extern const uint8_t u8g2_font_fub49_tn[] U8G2_FONT_SECTION("u8g2_font_fub49_tn"); extern const uint8_t u8g2_font_fub11_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fub11_t_symbol"); extern const uint8_t u8g2_font_fub14_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fub14_t_symbol"); extern const uint8_t u8g2_font_fub17_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fub17_t_symbol"); extern const uint8_t u8g2_font_fub20_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fub20_t_symbol"); extern const uint8_t u8g2_font_fub25_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fub25_t_symbol"); extern const uint8_t u8g2_font_fub30_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fub30_t_symbol"); extern const uint8_t u8g2_font_fub35_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fub35_t_symbol"); extern const uint8_t u8g2_font_fub42_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fub42_t_symbol"); extern const uint8_t u8g2_font_fub49_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fub49_t_symbol"); extern const uint8_t u8g2_font_fur11_tf[] U8G2_FONT_SECTION("u8g2_font_fur11_tf"); extern const uint8_t u8g2_font_fur11_tr[] U8G2_FONT_SECTION("u8g2_font_fur11_tr"); extern const uint8_t u8g2_font_fur11_tn[] U8G2_FONT_SECTION("u8g2_font_fur11_tn"); extern const uint8_t u8g2_font_fur14_tf[] U8G2_FONT_SECTION("u8g2_font_fur14_tf"); extern const uint8_t u8g2_font_fur14_tr[] U8G2_FONT_SECTION("u8g2_font_fur14_tr"); extern const uint8_t u8g2_font_fur14_tn[] U8G2_FONT_SECTION("u8g2_font_fur14_tn"); extern const uint8_t u8g2_font_fur17_tf[] U8G2_FONT_SECTION("u8g2_font_fur17_tf"); extern const uint8_t u8g2_font_fur17_tr[] U8G2_FONT_SECTION("u8g2_font_fur17_tr"); extern const uint8_t u8g2_font_fur17_tn[] U8G2_FONT_SECTION("u8g2_font_fur17_tn"); extern const uint8_t u8g2_font_fur20_tf[] U8G2_FONT_SECTION("u8g2_font_fur20_tf"); extern const uint8_t u8g2_font_fur20_tr[] U8G2_FONT_SECTION("u8g2_font_fur20_tr"); extern const uint8_t u8g2_font_fur20_tn[] U8G2_FONT_SECTION("u8g2_font_fur20_tn"); extern const uint8_t u8g2_font_fur25_tf[] U8G2_FONT_SECTION("u8g2_font_fur25_tf"); extern const uint8_t u8g2_font_fur25_tr[] U8G2_FONT_SECTION("u8g2_font_fur25_tr"); extern const uint8_t u8g2_font_fur25_tn[] U8G2_FONT_SECTION("u8g2_font_fur25_tn"); extern const uint8_t u8g2_font_fur30_tf[] U8G2_FONT_SECTION("u8g2_font_fur30_tf"); extern const uint8_t u8g2_font_fur30_tr[] U8G2_FONT_SECTION("u8g2_font_fur30_tr"); extern const uint8_t u8g2_font_fur30_tn[] U8G2_FONT_SECTION("u8g2_font_fur30_tn"); extern const uint8_t u8g2_font_fur35_tf[] U8G2_FONT_SECTION("u8g2_font_fur35_tf"); extern const uint8_t u8g2_font_fur35_tr[] U8G2_FONT_SECTION("u8g2_font_fur35_tr"); extern const uint8_t u8g2_font_fur35_tn[] U8G2_FONT_SECTION("u8g2_font_fur35_tn"); extern const uint8_t u8g2_font_fur42_tf[] U8G2_FONT_SECTION("u8g2_font_fur42_tf"); extern const uint8_t u8g2_font_fur42_tr[] U8G2_FONT_SECTION("u8g2_font_fur42_tr"); extern const uint8_t u8g2_font_fur42_tn[] U8G2_FONT_SECTION("u8g2_font_fur42_tn"); extern const uint8_t u8g2_font_fur49_tn[] U8G2_FONT_SECTION("u8g2_font_fur49_tn"); extern const uint8_t u8g2_font_fur11_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fur11_t_symbol"); extern const uint8_t u8g2_font_fur14_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fur14_t_symbol"); extern const uint8_t u8g2_font_fur17_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fur17_t_symbol"); extern const uint8_t u8g2_font_fur20_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fur20_t_symbol"); extern const uint8_t u8g2_font_fur25_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fur25_t_symbol"); extern const uint8_t u8g2_font_fur30_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fur30_t_symbol"); extern const uint8_t u8g2_font_fur35_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fur35_t_symbol"); extern const uint8_t u8g2_font_fur42_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fur42_t_symbol"); extern const uint8_t u8g2_font_fur49_t_symbol[] U8G2_FONT_SECTION("u8g2_font_fur49_t_symbol"); extern const uint8_t u8g2_font_osb18_tf[] U8G2_FONT_SECTION("u8g2_font_osb18_tf"); extern const uint8_t u8g2_font_osb18_tr[] U8G2_FONT_SECTION("u8g2_font_osb18_tr"); extern const uint8_t u8g2_font_osb18_tn[] U8G2_FONT_SECTION("u8g2_font_osb18_tn"); extern const uint8_t u8g2_font_osb21_tf[] U8G2_FONT_SECTION("u8g2_font_osb21_tf"); extern const uint8_t u8g2_font_osb21_tr[] U8G2_FONT_SECTION("u8g2_font_osb21_tr"); extern const uint8_t u8g2_font_osb21_tn[] U8G2_FONT_SECTION("u8g2_font_osb21_tn"); extern const uint8_t u8g2_font_osb26_tf[] U8G2_FONT_SECTION("u8g2_font_osb26_tf"); extern const uint8_t u8g2_font_osb26_tr[] U8G2_FONT_SECTION("u8g2_font_osb26_tr"); extern const uint8_t u8g2_font_osb26_tn[] U8G2_FONT_SECTION("u8g2_font_osb26_tn"); extern const uint8_t u8g2_font_osb29_tf[] U8G2_FONT_SECTION("u8g2_font_osb29_tf"); extern const uint8_t u8g2_font_osb29_tr[] U8G2_FONT_SECTION("u8g2_font_osb29_tr"); extern const uint8_t u8g2_font_osb29_tn[] U8G2_FONT_SECTION("u8g2_font_osb29_tn"); extern const uint8_t u8g2_font_osb35_tf[] U8G2_FONT_SECTION("u8g2_font_osb35_tf"); extern const uint8_t u8g2_font_osb35_tr[] U8G2_FONT_SECTION("u8g2_font_osb35_tr"); extern const uint8_t u8g2_font_osb35_tn[] U8G2_FONT_SECTION("u8g2_font_osb35_tn"); extern const uint8_t u8g2_font_osb41_tf[] U8G2_FONT_SECTION("u8g2_font_osb41_tf"); extern const uint8_t u8g2_font_osb41_tr[] U8G2_FONT_SECTION("u8g2_font_osb41_tr"); extern const uint8_t u8g2_font_osb41_tn[] U8G2_FONT_SECTION("u8g2_font_osb41_tn"); extern const uint8_t u8g2_font_osr18_tf[] U8G2_FONT_SECTION("u8g2_font_osr18_tf"); extern const uint8_t u8g2_font_osr18_tr[] U8G2_FONT_SECTION("u8g2_font_osr18_tr"); extern const uint8_t u8g2_font_osr18_tn[] U8G2_FONT_SECTION("u8g2_font_osr18_tn"); extern const uint8_t u8g2_font_osr21_tf[] U8G2_FONT_SECTION("u8g2_font_osr21_tf"); extern const uint8_t u8g2_font_osr21_tr[] U8G2_FONT_SECTION("u8g2_font_osr21_tr"); extern const uint8_t u8g2_font_osr21_tn[] U8G2_FONT_SECTION("u8g2_font_osr21_tn"); extern const uint8_t u8g2_font_osr26_tf[] U8G2_FONT_SECTION("u8g2_font_osr26_tf"); extern const uint8_t u8g2_font_osr26_tr[] U8G2_FONT_SECTION("u8g2_font_osr26_tr"); extern const uint8_t u8g2_font_osr26_tn[] U8G2_FONT_SECTION("u8g2_font_osr26_tn"); extern const uint8_t u8g2_font_osr29_tf[] U8G2_FONT_SECTION("u8g2_font_osr29_tf"); extern const uint8_t u8g2_font_osr29_tr[] U8G2_FONT_SECTION("u8g2_font_osr29_tr"); extern const uint8_t u8g2_font_osr29_tn[] U8G2_FONT_SECTION("u8g2_font_osr29_tn"); extern const uint8_t u8g2_font_osr35_tf[] U8G2_FONT_SECTION("u8g2_font_osr35_tf"); extern const uint8_t u8g2_font_osr35_tr[] U8G2_FONT_SECTION("u8g2_font_osr35_tr"); extern const uint8_t u8g2_font_osr35_tn[] U8G2_FONT_SECTION("u8g2_font_osr35_tn"); extern const uint8_t u8g2_font_osr41_tf[] U8G2_FONT_SECTION("u8g2_font_osr41_tf"); extern const uint8_t u8g2_font_osr41_tr[] U8G2_FONT_SECTION("u8g2_font_osr41_tr"); extern const uint8_t u8g2_font_osr41_tn[] U8G2_FONT_SECTION("u8g2_font_osr41_tn"); extern const uint8_t u8g2_font_inr16_mf[] U8G2_FONT_SECTION("u8g2_font_inr16_mf"); extern const uint8_t u8g2_font_inr16_mr[] U8G2_FONT_SECTION("u8g2_font_inr16_mr"); extern const uint8_t u8g2_font_inr16_mn[] U8G2_FONT_SECTION("u8g2_font_inr16_mn"); extern const uint8_t u8g2_font_inr19_mf[] U8G2_FONT_SECTION("u8g2_font_inr19_mf"); extern const uint8_t u8g2_font_inr19_mr[] U8G2_FONT_SECTION("u8g2_font_inr19_mr"); extern const uint8_t u8g2_font_inr19_mn[] U8G2_FONT_SECTION("u8g2_font_inr19_mn"); extern const uint8_t u8g2_font_inr21_mf[] U8G2_FONT_SECTION("u8g2_font_inr21_mf"); extern const uint8_t u8g2_font_inr21_mr[] U8G2_FONT_SECTION("u8g2_font_inr21_mr"); extern const uint8_t u8g2_font_inr21_mn[] U8G2_FONT_SECTION("u8g2_font_inr21_mn"); extern const uint8_t u8g2_font_inr24_mf[] U8G2_FONT_SECTION("u8g2_font_inr24_mf"); extern const uint8_t u8g2_font_inr24_mr[] U8G2_FONT_SECTION("u8g2_font_inr24_mr"); extern const uint8_t u8g2_font_inr24_mn[] U8G2_FONT_SECTION("u8g2_font_inr24_mn"); extern const uint8_t u8g2_font_inr27_mf[] U8G2_FONT_SECTION("u8g2_font_inr27_mf"); extern const uint8_t u8g2_font_inr27_mr[] U8G2_FONT_SECTION("u8g2_font_inr27_mr"); extern const uint8_t u8g2_font_inr27_mn[] U8G2_FONT_SECTION("u8g2_font_inr27_mn"); extern const uint8_t u8g2_font_inr30_mf[] U8G2_FONT_SECTION("u8g2_font_inr30_mf"); extern const uint8_t u8g2_font_inr30_mr[] U8G2_FONT_SECTION("u8g2_font_inr30_mr"); extern const uint8_t u8g2_font_inr30_mn[] U8G2_FONT_SECTION("u8g2_font_inr30_mn"); extern const uint8_t u8g2_font_inr33_mf[] U8G2_FONT_SECTION("u8g2_font_inr33_mf"); extern const uint8_t u8g2_font_inr33_mr[] U8G2_FONT_SECTION("u8g2_font_inr33_mr"); extern const uint8_t u8g2_font_inr33_mn[] U8G2_FONT_SECTION("u8g2_font_inr33_mn"); extern const uint8_t u8g2_font_inr38_mf[] U8G2_FONT_SECTION("u8g2_font_inr38_mf"); extern const uint8_t u8g2_font_inr38_mr[] U8G2_FONT_SECTION("u8g2_font_inr38_mr"); extern const uint8_t u8g2_font_inr38_mn[] U8G2_FONT_SECTION("u8g2_font_inr38_mn"); extern const uint8_t u8g2_font_inr42_mf[] U8G2_FONT_SECTION("u8g2_font_inr42_mf"); extern const uint8_t u8g2_font_inr42_mr[] U8G2_FONT_SECTION("u8g2_font_inr42_mr"); extern const uint8_t u8g2_font_inr42_mn[] U8G2_FONT_SECTION("u8g2_font_inr42_mn"); extern const uint8_t u8g2_font_inr46_mf[] U8G2_FONT_SECTION("u8g2_font_inr46_mf"); extern const uint8_t u8g2_font_inr46_mr[] U8G2_FONT_SECTION("u8g2_font_inr46_mr"); extern const uint8_t u8g2_font_inr46_mn[] U8G2_FONT_SECTION("u8g2_font_inr46_mn"); extern const uint8_t u8g2_font_inr49_mf[] U8G2_FONT_SECTION("u8g2_font_inr49_mf"); extern const uint8_t u8g2_font_inr49_mr[] U8G2_FONT_SECTION("u8g2_font_inr49_mr"); extern const uint8_t u8g2_font_inr49_mn[] U8G2_FONT_SECTION("u8g2_font_inr49_mn"); extern const uint8_t u8g2_font_inr53_mf[] U8G2_FONT_SECTION("u8g2_font_inr53_mf"); extern const uint8_t u8g2_font_inr53_mr[] U8G2_FONT_SECTION("u8g2_font_inr53_mr"); extern const uint8_t u8g2_font_inr53_mn[] U8G2_FONT_SECTION("u8g2_font_inr53_mn"); extern const uint8_t u8g2_font_inr57_mn[] U8G2_FONT_SECTION("u8g2_font_inr57_mn"); extern const uint8_t u8g2_font_inr62_mn[] U8G2_FONT_SECTION("u8g2_font_inr62_mn"); extern const uint8_t u8g2_font_inb16_mf[] U8G2_FONT_SECTION("u8g2_font_inb16_mf"); extern const uint8_t u8g2_font_inb16_mr[] U8G2_FONT_SECTION("u8g2_font_inb16_mr"); extern const uint8_t u8g2_font_inb16_mn[] U8G2_FONT_SECTION("u8g2_font_inb16_mn"); extern const uint8_t u8g2_font_inb19_mf[] U8G2_FONT_SECTION("u8g2_font_inb19_mf"); extern const uint8_t u8g2_font_inb19_mr[] U8G2_FONT_SECTION("u8g2_font_inb19_mr"); extern const uint8_t u8g2_font_inb19_mn[] U8G2_FONT_SECTION("u8g2_font_inb19_mn"); extern const uint8_t u8g2_font_inb21_mf[] U8G2_FONT_SECTION("u8g2_font_inb21_mf"); extern const uint8_t u8g2_font_inb21_mr[] U8G2_FONT_SECTION("u8g2_font_inb21_mr"); extern const uint8_t u8g2_font_inb21_mn[] U8G2_FONT_SECTION("u8g2_font_inb21_mn"); extern const uint8_t u8g2_font_inb24_mf[] U8G2_FONT_SECTION("u8g2_font_inb24_mf"); extern const uint8_t u8g2_font_inb24_mr[] U8G2_FONT_SECTION("u8g2_font_inb24_mr"); extern const uint8_t u8g2_font_inb24_mn[] U8G2_FONT_SECTION("u8g2_font_inb24_mn"); extern const uint8_t u8g2_font_inb27_mf[] U8G2_FONT_SECTION("u8g2_font_inb27_mf"); extern const uint8_t u8g2_font_inb27_mr[] U8G2_FONT_SECTION("u8g2_font_inb27_mr"); extern const uint8_t u8g2_font_inb27_mn[] U8G2_FONT_SECTION("u8g2_font_inb27_mn"); extern const uint8_t u8g2_font_inb30_mf[] U8G2_FONT_SECTION("u8g2_font_inb30_mf"); extern const uint8_t u8g2_font_inb30_mr[] U8G2_FONT_SECTION("u8g2_font_inb30_mr"); extern const uint8_t u8g2_font_inb30_mn[] U8G2_FONT_SECTION("u8g2_font_inb30_mn"); extern const uint8_t u8g2_font_inb33_mf[] U8G2_FONT_SECTION("u8g2_font_inb33_mf"); extern const uint8_t u8g2_font_inb33_mr[] U8G2_FONT_SECTION("u8g2_font_inb33_mr"); extern const uint8_t u8g2_font_inb33_mn[] U8G2_FONT_SECTION("u8g2_font_inb33_mn"); extern const uint8_t u8g2_font_inb38_mf[] U8G2_FONT_SECTION("u8g2_font_inb38_mf"); extern const uint8_t u8g2_font_inb38_mr[] U8G2_FONT_SECTION("u8g2_font_inb38_mr"); extern const uint8_t u8g2_font_inb38_mn[] U8G2_FONT_SECTION("u8g2_font_inb38_mn"); extern const uint8_t u8g2_font_inb42_mf[] U8G2_FONT_SECTION("u8g2_font_inb42_mf"); extern const uint8_t u8g2_font_inb42_mr[] U8G2_FONT_SECTION("u8g2_font_inb42_mr"); extern const uint8_t u8g2_font_inb42_mn[] U8G2_FONT_SECTION("u8g2_font_inb42_mn"); extern const uint8_t u8g2_font_inb46_mf[] U8G2_FONT_SECTION("u8g2_font_inb46_mf"); extern const uint8_t u8g2_font_inb46_mr[] U8G2_FONT_SECTION("u8g2_font_inb46_mr"); extern const uint8_t u8g2_font_inb46_mn[] U8G2_FONT_SECTION("u8g2_font_inb46_mn"); extern const uint8_t u8g2_font_inb49_mf[] U8G2_FONT_SECTION("u8g2_font_inb49_mf"); extern const uint8_t u8g2_font_inb49_mr[] U8G2_FONT_SECTION("u8g2_font_inb49_mr"); extern const uint8_t u8g2_font_inb49_mn[] U8G2_FONT_SECTION("u8g2_font_inb49_mn"); extern const uint8_t u8g2_font_inb53_mf[] U8G2_FONT_SECTION("u8g2_font_inb53_mf"); extern const uint8_t u8g2_font_inb53_mr[] U8G2_FONT_SECTION("u8g2_font_inb53_mr"); extern const uint8_t u8g2_font_inb53_mn[] U8G2_FONT_SECTION("u8g2_font_inb53_mn"); extern const uint8_t u8g2_font_inb57_mn[] U8G2_FONT_SECTION("u8g2_font_inb57_mn"); extern const uint8_t u8g2_font_inb63_mn[] U8G2_FONT_SECTION("u8g2_font_inb63_mn"); extern const uint8_t u8g2_font_logisoso16_tf[] U8G2_FONT_SECTION("u8g2_font_logisoso16_tf"); extern const uint8_t u8g2_font_logisoso16_tr[] U8G2_FONT_SECTION("u8g2_font_logisoso16_tr"); extern const uint8_t u8g2_font_logisoso16_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso16_tn"); extern const uint8_t u8g2_font_logisoso18_tf[] U8G2_FONT_SECTION("u8g2_font_logisoso18_tf"); extern const uint8_t u8g2_font_logisoso18_tr[] U8G2_FONT_SECTION("u8g2_font_logisoso18_tr"); extern const uint8_t u8g2_font_logisoso18_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso18_tn"); extern const uint8_t u8g2_font_logisoso20_tf[] U8G2_FONT_SECTION("u8g2_font_logisoso20_tf"); extern const uint8_t u8g2_font_logisoso20_tr[] U8G2_FONT_SECTION("u8g2_font_logisoso20_tr"); extern const uint8_t u8g2_font_logisoso20_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso20_tn"); extern const uint8_t u8g2_font_logisoso22_tf[] U8G2_FONT_SECTION("u8g2_font_logisoso22_tf"); extern const uint8_t u8g2_font_logisoso22_tr[] U8G2_FONT_SECTION("u8g2_font_logisoso22_tr"); extern const uint8_t u8g2_font_logisoso22_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso22_tn"); extern const uint8_t u8g2_font_logisoso24_tf[] U8G2_FONT_SECTION("u8g2_font_logisoso24_tf"); extern const uint8_t u8g2_font_logisoso24_tr[] U8G2_FONT_SECTION("u8g2_font_logisoso24_tr"); extern const uint8_t u8g2_font_logisoso24_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso24_tn"); extern const uint8_t u8g2_font_logisoso26_tf[] U8G2_FONT_SECTION("u8g2_font_logisoso26_tf"); extern const uint8_t u8g2_font_logisoso26_tr[] U8G2_FONT_SECTION("u8g2_font_logisoso26_tr"); extern const uint8_t u8g2_font_logisoso26_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso26_tn"); extern const uint8_t u8g2_font_logisoso28_tf[] U8G2_FONT_SECTION("u8g2_font_logisoso28_tf"); extern const uint8_t u8g2_font_logisoso28_tr[] U8G2_FONT_SECTION("u8g2_font_logisoso28_tr"); extern const uint8_t u8g2_font_logisoso28_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso28_tn"); extern const uint8_t u8g2_font_logisoso30_tf[] U8G2_FONT_SECTION("u8g2_font_logisoso30_tf"); extern const uint8_t u8g2_font_logisoso30_tr[] U8G2_FONT_SECTION("u8g2_font_logisoso30_tr"); extern const uint8_t u8g2_font_logisoso30_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso30_tn"); extern const uint8_t u8g2_font_logisoso32_tf[] U8G2_FONT_SECTION("u8g2_font_logisoso32_tf"); extern const uint8_t u8g2_font_logisoso32_tr[] U8G2_FONT_SECTION("u8g2_font_logisoso32_tr"); extern const uint8_t u8g2_font_logisoso32_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso32_tn"); extern const uint8_t u8g2_font_logisoso34_tf[] U8G2_FONT_SECTION("u8g2_font_logisoso34_tf"); extern const uint8_t u8g2_font_logisoso34_tr[] U8G2_FONT_SECTION("u8g2_font_logisoso34_tr"); extern const uint8_t u8g2_font_logisoso34_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso34_tn"); extern const uint8_t u8g2_font_logisoso38_tf[] U8G2_FONT_SECTION("u8g2_font_logisoso38_tf"); extern const uint8_t u8g2_font_logisoso38_tr[] U8G2_FONT_SECTION("u8g2_font_logisoso38_tr"); extern const uint8_t u8g2_font_logisoso38_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso38_tn"); extern const uint8_t u8g2_font_logisoso42_tf[] U8G2_FONT_SECTION("u8g2_font_logisoso42_tf"); extern const uint8_t u8g2_font_logisoso42_tr[] U8G2_FONT_SECTION("u8g2_font_logisoso42_tr"); extern const uint8_t u8g2_font_logisoso42_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso42_tn"); extern const uint8_t u8g2_font_logisoso46_tf[] U8G2_FONT_SECTION("u8g2_font_logisoso46_tf"); extern const uint8_t u8g2_font_logisoso46_tr[] U8G2_FONT_SECTION("u8g2_font_logisoso46_tr"); extern const uint8_t u8g2_font_logisoso46_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso46_tn"); extern const uint8_t u8g2_font_logisoso50_tf[] U8G2_FONT_SECTION("u8g2_font_logisoso50_tf"); extern const uint8_t u8g2_font_logisoso50_tr[] U8G2_FONT_SECTION("u8g2_font_logisoso50_tr"); extern const uint8_t u8g2_font_logisoso50_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso50_tn"); extern const uint8_t u8g2_font_logisoso54_tf[] U8G2_FONT_SECTION("u8g2_font_logisoso54_tf"); extern const uint8_t u8g2_font_logisoso54_tr[] U8G2_FONT_SECTION("u8g2_font_logisoso54_tr"); extern const uint8_t u8g2_font_logisoso54_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso54_tn"); extern const uint8_t u8g2_font_logisoso58_tf[] U8G2_FONT_SECTION("u8g2_font_logisoso58_tf"); extern const uint8_t u8g2_font_logisoso58_tr[] U8G2_FONT_SECTION("u8g2_font_logisoso58_tr"); extern const uint8_t u8g2_font_logisoso58_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso58_tn"); extern const uint8_t u8g2_font_logisoso62_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso62_tn"); extern const uint8_t u8g2_font_logisoso78_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso78_tn"); extern const uint8_t u8g2_font_logisoso92_tn[] U8G2_FONT_SECTION("u8g2_font_logisoso92_tn"); extern const uint8_t u8g2_font_pressstart2p_8f[] U8G2_FONT_SECTION("u8g2_font_pressstart2p_8f"); extern const uint8_t u8g2_font_pressstart2p_8r[] U8G2_FONT_SECTION("u8g2_font_pressstart2p_8r"); extern const uint8_t u8g2_font_pressstart2p_8n[] U8G2_FONT_SECTION("u8g2_font_pressstart2p_8n"); extern const uint8_t u8g2_font_pressstart2p_8u[] U8G2_FONT_SECTION("u8g2_font_pressstart2p_8u"); extern const uint8_t u8g2_font_pcsenior_8f[] U8G2_FONT_SECTION("u8g2_font_pcsenior_8f"); extern const uint8_t u8g2_font_pcsenior_8r[] U8G2_FONT_SECTION("u8g2_font_pcsenior_8r"); extern const uint8_t u8g2_font_pcsenior_8n[] U8G2_FONT_SECTION("u8g2_font_pcsenior_8n"); extern const uint8_t u8g2_font_pcsenior_8u[] U8G2_FONT_SECTION("u8g2_font_pcsenior_8u"); extern const uint8_t u8g2_font_pxplusibmcgathin_8f[] U8G2_FONT_SECTION("u8g2_font_pxplusibmcgathin_8f"); extern const uint8_t u8g2_font_pxplusibmcgathin_8r[] U8G2_FONT_SECTION("u8g2_font_pxplusibmcgathin_8r"); extern const uint8_t u8g2_font_pxplusibmcgathin_8n[] U8G2_FONT_SECTION("u8g2_font_pxplusibmcgathin_8n"); extern const uint8_t u8g2_font_pxplusibmcgathin_8u[] U8G2_FONT_SECTION("u8g2_font_pxplusibmcgathin_8u"); extern const uint8_t u8g2_font_pxplusibmcga_8f[] U8G2_FONT_SECTION("u8g2_font_pxplusibmcga_8f"); extern const uint8_t u8g2_font_pxplusibmcga_8r[] U8G2_FONT_SECTION("u8g2_font_pxplusibmcga_8r"); extern const uint8_t u8g2_font_pxplusibmcga_8n[] U8G2_FONT_SECTION("u8g2_font_pxplusibmcga_8n"); extern const uint8_t u8g2_font_pxplusibmcga_8u[] U8G2_FONT_SECTION("u8g2_font_pxplusibmcga_8u"); extern const uint8_t u8g2_font_pxplustandynewtv_8f[] U8G2_FONT_SECTION("u8g2_font_pxplustandynewtv_8f"); extern const uint8_t u8g2_font_pxplustandynewtv_8r[] U8G2_FONT_SECTION("u8g2_font_pxplustandynewtv_8r"); extern const uint8_t u8g2_font_pxplustandynewtv_8n[] U8G2_FONT_SECTION("u8g2_font_pxplustandynewtv_8n"); extern const uint8_t u8g2_font_pxplustandynewtv_8u[] U8G2_FONT_SECTION("u8g2_font_pxplustandynewtv_8u"); extern const uint8_t u8g2_font_pxplustandynewtv_t_all[] U8G2_FONT_SECTION("u8g2_font_pxplustandynewtv_t_all"); extern const uint8_t u8g2_font_pxplustandynewtv_8_all[] U8G2_FONT_SECTION("u8g2_font_pxplustandynewtv_8_all"); extern const uint8_t u8g2_font_pxplusibmvga9_tf[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga9_tf"); extern const uint8_t u8g2_font_pxplusibmvga9_tr[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga9_tr"); extern const uint8_t u8g2_font_pxplusibmvga9_tn[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga9_tn"); extern const uint8_t u8g2_font_pxplusibmvga9_mf[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga9_mf"); extern const uint8_t u8g2_font_pxplusibmvga9_mr[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga9_mr"); extern const uint8_t u8g2_font_pxplusibmvga9_mn[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga9_mn"); extern const uint8_t u8g2_font_pxplusibmvga9_t_all[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga9_t_all"); extern const uint8_t u8g2_font_pxplusibmvga9_m_all[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga9_m_all"); extern const uint8_t u8g2_font_pxplusibmvga8_tf[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga8_tf"); extern const uint8_t u8g2_font_pxplusibmvga8_tr[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga8_tr"); extern const uint8_t u8g2_font_pxplusibmvga8_tn[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga8_tn"); extern const uint8_t u8g2_font_pxplusibmvga8_mf[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga8_mf"); extern const uint8_t u8g2_font_pxplusibmvga8_mr[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga8_mr"); extern const uint8_t u8g2_font_pxplusibmvga8_mn[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga8_mn"); extern const uint8_t u8g2_font_pxplusibmvga8_t_all[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga8_t_all"); extern const uint8_t u8g2_font_pxplusibmvga8_m_all[] U8G2_FONT_SECTION("u8g2_font_pxplusibmvga8_m_all"); extern const uint8_t u8g2_font_px437wyse700a_tf[] U8G2_FONT_SECTION("u8g2_font_px437wyse700a_tf"); extern const uint8_t u8g2_font_px437wyse700a_tr[] U8G2_FONT_SECTION("u8g2_font_px437wyse700a_tr"); extern const uint8_t u8g2_font_px437wyse700a_tn[] U8G2_FONT_SECTION("u8g2_font_px437wyse700a_tn"); extern const uint8_t u8g2_font_px437wyse700a_mf[] U8G2_FONT_SECTION("u8g2_font_px437wyse700a_mf"); extern const uint8_t u8g2_font_px437wyse700a_mr[] U8G2_FONT_SECTION("u8g2_font_px437wyse700a_mr"); extern const uint8_t u8g2_font_px437wyse700a_mn[] U8G2_FONT_SECTION("u8g2_font_px437wyse700a_mn"); extern const uint8_t u8g2_font_px437wyse700b_tf[] U8G2_FONT_SECTION("u8g2_font_px437wyse700b_tf"); extern const uint8_t u8g2_font_px437wyse700b_tr[] U8G2_FONT_SECTION("u8g2_font_px437wyse700b_tr"); extern const uint8_t u8g2_font_px437wyse700b_tn[] U8G2_FONT_SECTION("u8g2_font_px437wyse700b_tn"); extern const uint8_t u8g2_font_px437wyse700b_mf[] U8G2_FONT_SECTION("u8g2_font_px437wyse700b_mf"); extern const uint8_t u8g2_font_px437wyse700b_mr[] U8G2_FONT_SECTION("u8g2_font_px437wyse700b_mr"); extern const uint8_t u8g2_font_px437wyse700b_mn[] U8G2_FONT_SECTION("u8g2_font_px437wyse700b_mn"); /* end font list */ /*==========================================*/ /* u8g font mapping, might be incomplete.... */ #define u8g_font_10x20 u8g2_font_10x20_tf #define u8g_font_10x20r u8g2_font_10x20_tr #define u8g_font_4x6 u8g2_font_4x6_tf #define u8g_font_4x6r u8g2_font_4x6_tr #define u8g_font_5x7 u8g2_font_5x7_tf #define u8g_font_5x7r u8g2_font_5x7_tr #define u8g_font_5x8 u8g2_font_5x8_tf #define u8g_font_5x8r u8g2_font_5x8_tr #define u8g_font_6x10 u8g2_font_6x10_tf #define u8g_font_6x10r u8g2_font_6x10_tr #define u8g_font_6x12 u8g2_font_6x12_tf #define u8g_font_6x12r u8g2_font_6x12_tr #define u8g_font_6x13B u8g2_font_6x13B_tf #define u8g_font_6x13Br u8g2_font_6x13B_tr #define u8g_font_6x13 u8g2_font_6x13_tf #define u8g_font_6x13r u8g2_font_6x13_tr #define u8g_font_6x13O u8g2_font_6x13O_tf #define u8g_font_6x13Or u8g2_font_6x13O_tr #define u8g_font_7x13B u8g2_font_7x13B_tf #define u8g_font_7x13Br u8g2_font_7x13B_tr #define u8g_font_7x13 u8g2_font_7x13_tf #define u8g_font_7x13r u8g2_font_7x13_tr #define u8g_font_7x13O u8g2_font_7x13O_tf #define u8g_font_7x13Or u8g2_font_7x13O_tr #define u8g_font_7x14B u8g2_font_7x14B_tf #define u8g_font_7x14Br u8g2_font_7x14B_tr #define u8g_font_7x14 u8g2_font_7x14_tf #define u8g_font_7x14r u8g2_font_7x14_tr #define u8g_font_8x13B u8g2_font_8x13B_tf #define u8g_font_8x13Br u8g2_font_8x13B_tr #define u8g_font_8x13 u8g2_font_8x13_tf #define u8g_font_8x13r u8g2_font_8x13_tr #define u8g_font_8x13O u8g2_font_8x13O_tf #define u8g_font_8x13Or u8g2_font_8x13O_tr #define u8g_font_9x15B u8g2_font_9x15B_tf #define u8g_font_9x15Br u8g2_font_9x15B_tr #define u8g_font_9x15 u8g2_font_9x15_tf #define u8g_font_9x15r u8g2_font_9x15_tr #define u8g_font_9x18B u8g2_font_9x18B_tf #define u8g_font_9x18 u8g2_font_9x18_tf #define u8g_font_9x18Br u8g2_font_9x18B_tr #define u8g_font_9x18r u8g2_font_9x18_tr #define u8g_font_cu12 u8g2_font_cu12_tf #define u8g_font_micro u8g2_font_micro_tf #define u8g_font_unifont u8g2_font_unifont_t_latin #define u8g_font_unifontr u8g2_font_unifont_t_latin #define u8g_font_courB08 u8g2_font_courB08_tf #define u8g_font_courB08r u8g2_font_courB08_tr #define u8g_font_courB10 u8g2_font_courB10_tf #define u8g_font_courB10r u8g2_font_courB10_tr #define u8g_font_courB12 u8g2_font_courB12_tf #define u8g_font_courB12r u8g2_font_courB12_tr #define u8g_font_courB14 u8g2_font_courB14_tf #define u8g_font_courB14r u8g2_font_courB14_tr #define u8g_font_courB18 u8g2_font_courB18_tf #define u8g_font_courB18r u8g2_font_courB18_tr #define u8g_font_courB24 u8g2_font_courB24_tf #define u8g_font_courB24r u8g2_font_courB24_tr #define u8g_font_courB24n u8g2_font_courB24_tn #define u8g_font_courR08 u8g2_font_courR08_tf #define u8g_font_courR08r u8g2_font_courR08_tr #define u8g_font_courR10 u8g2_font_courR10_tf #define u8g_font_courR10r u8g2_font_courR10_tr #define u8g_font_courR12 u8g2_font_courR12_tf #define u8g_font_courR12r u8g2_font_courR12_tr #define u8g_font_courR14 u8g2_font_courR14_tf #define u8g_font_courR14r u8g2_font_courR14_tr #define u8g_font_courR18 u8g2_font_courR18_tf #define u8g_font_courR18r u8g2_font_courR18_tr #define u8g_font_courR24 u8g2_font_courR24_tf #define u8g_font_courR24r u8g2_font_courR24_tr #define u8g_font_courR24n u8g2_font_courR24_tn #define u8g_font_helvB08 u8g2_font_helvB08_tf #define u8g_font_helvB08r u8g2_font_helvB08_tr #define u8g_font_helvB08n u8g2_font_helvB08_tn #define u8g_font_helvB10 u8g2_font_helvB10_tf #define u8g_font_helvB10r u8g2_font_helvB10_tr #define u8g_font_helvB10n u8g2_font_helvB10_tn #define u8g_font_helvB12 u8g2_font_helvB12_tf #define u8g_font_helvB12r u8g2_font_helvB12_tr #define u8g_font_helvB12n u8g2_font_helvB12_tn #define u8g_font_helvB14 u8g2_font_helvB14_tf #define u8g_font_helvB14r u8g2_font_helvB14_tr #define u8g_font_helvB14n u8g2_font_helvB14_tn #define u8g_font_helvB18 u8g2_font_helvB18_tf #define u8g_font_helvB18r u8g2_font_helvB18_tr #define u8g_font_helvB18n u8g2_font_helvB18_tn #define u8g_font_helvB24 u8g2_font_helvB24_tf #define u8g_font_helvB24r u8g2_font_helvB24_tr #define u8g_font_helvB24n u8g2_font_helvB24_tn #define u8g_font_helvR08 u8g2_font_helvR08_tf #define u8g_font_helvR08r u8g2_font_helvR08_tr #define u8g_font_helvR08n u8g2_font_helvR08_tn #define u8g_font_helvR10 u8g2_font_helvR10_tf #define u8g_font_helvR10r u8g2_font_helvR10_tr #define u8g_font_helvR10n u8g2_font_helvR10_tn #define u8g_font_helvR12 u8g2_font_helvR12_tf #define u8g_font_helvR12r u8g2_font_helvR12_tr #define u8g_font_helvR12n u8g2_font_helvR12_tn #define u8g_font_helvR14 u8g2_font_helvR14_tf #define u8g_font_helvR14r u8g2_font_helvR14_tr #define u8g_font_helvR14n u8g2_font_helvR14_tn #define u8g_font_helvR18 u8g2_font_helvR18_tf #define u8g_font_helvR18r u8g2_font_helvR18_tr #define u8g_font_helvR18n u8g2_font_helvR18_tn #define u8g_font_helvR24 u8g2_font_helvR24_tf #define u8g_font_helvR24r u8g2_font_helvR24_tr #define u8g_font_helvR24n u8g2_font_helvR24_tn #define u8g_font_ncenB08 u8g2_font_ncenB08_tf #define u8g_font_ncenB08r u8g2_font_ncenB08_tr #define u8g_font_ncenB10 u8g2_font_ncenB10_tf #define u8g_font_ncenB10r u8g2_font_ncenB10_tr #define u8g_font_ncenB12 u8g2_font_ncenB12_tf #define u8g_font_ncenB12r u8g2_font_ncenB12_tr #define u8g_font_ncenB14 u8g2_font_ncenB14_tf #define u8g_font_ncenB14r u8g2_font_ncenB14_tr #define u8g_font_ncenB18 u8g2_font_ncenB18_tf #define u8g_font_ncenB18r u8g2_font_ncenB18_tr #define u8g_font_ncenB24 u8g2_font_ncenB24_tf #define u8g_font_ncenB24r u8g2_font_ncenB24_tr #define u8g_font_ncenB24n u8g2_font_ncenB24_tn #define u8g_font_ncenR08 u8g2_font_ncenR08_tf #define u8g_font_ncenR08r u8g2_font_ncenR08_tr #define u8g_font_ncenR10 u8g2_font_ncenR10_tf #define u8g_font_ncenR10r u8g2_font_ncenR10_tr #define u8g_font_ncenR12 u8g2_font_ncenR12_tf #define u8g_font_ncenR12r u8g2_font_ncenR12_tr #define u8g_font_ncenR14 u8g2_font_ncenR14_tf #define u8g_font_ncenR14r u8g2_font_ncenR14_tr #define u8g_font_ncenR18 u8g2_font_ncenR18_tf #define u8g_font_ncenR18r u8g2_font_ncenR18_tr #define u8g_font_ncenR24 u8g2_font_ncenR24_tf #define u8g_font_ncenR24r u8g2_font_ncenR24_tr #define u8g_font_ncenR24n u8g2_font_ncenR24_tn #define u8g_font_timB08 u8g2_font_timB08_tf #define u8g_font_timB08r u8g2_font_timB08_tr #define u8g_font_timB10 u8g2_font_timB10_tf #define u8g_font_timB10r u8g2_font_timB10_tr #define u8g_font_timB12 u8g2_font_timB12_tf #define u8g_font_timB12r u8g2_font_timB12_tr #define u8g_font_timB14 u8g2_font_timB14_tf #define u8g_font_timB14r u8g2_font_timB14_tr #define u8g_font_timB18 u8g2_font_timB18_tf #define u8g_font_timB18r u8g2_font_timB18_tr #define u8g_font_timB24 u8g2_font_timB24_tf #define u8g_font_timB24r u8g2_font_timB24_tr #define u8g_font_timB24n u8g2_font_timB24_tn #define u8g_font_timR08 u8g2_font_timR08_tf #define u8g_font_timR08r u8g2_font_timR08_tr #define u8g_font_timR10 u8g2_font_timR10_tf #define u8g_font_timR10r u8g2_font_timR10_tr #define u8g_font_timR12 u8g2_font_timR12_tf #define u8g_font_timR12r u8g2_font_timR12_tr #define u8g_font_timR14 u8g2_font_timR14_tf #define u8g_font_timR14r u8g2_font_timR14_tr #define u8g_font_timR18 u8g2_font_timR18_tf #define u8g_font_timR18r u8g2_font_timR18_tr #define u8g_font_timR24 u8g2_font_timR24_tf #define u8g_font_timR24r u8g2_font_timR24_tr #define u8g_font_timR24n u8g2_font_timR24_tn #define u8g_font_p01type u8g2_font_p01type_tf #define u8g_font_p01typer u8g2_font_p01type_tr #define u8g_font_lucasfont_alternate u8g2_font_lucasfont_alternate_tf #define u8g_font_lucasfont_alternater u8g2_font_lucasfont_alternate_tr #define u8g_font_chikita u8g2_font_chikita_tf #define u8g_font_chikitar u8g2_font_chikita_tr #define u8g_font_pixelle_micro u8g2_font_pixelle_micro_tf #define u8g_font_pixelle_micror u8g2_font_pixelle_micro_tr #define u8g_font_trixel_square u8g2_font_trixel_square_tf #define u8g_font_trixel_squarer u8g2_font_trixel_square_tr #define u8g_font_robot_de_niro u8g2_font_robot_de_niro_tf #define u8g_font_robot_de_niror u8g2_font_robot_de_niro_tr #define u8g_font_baby u8g2_font_baby_tf #define u8g_font_babyr u8g2_font_baby_tr #define u8g_font_blipfest_07 u8g2_font_blipfest_07_tr #define u8g_font_blipfest_07r u8g2_font_blipfest_07_tr #define u8g_font_blipfest_07n u8g2_font_blipfest_07_tn #define u8g_font_profont10 u8g2_font_profont10_tf #define u8g_font_profont10r u8g2_font_profont10_tr #define u8g_font_profont11 u8g2_font_profont11_tf #define u8g_font_profont11r u8g2_font_profont11_tr #define u8g_font_profont12 u8g2_font_profont12_tf #define u8g_font_profont12r u8g2_font_profont12_tr #define u8g_font_profont15 u8g2_font_profont15_tf #define u8g_font_profont15r u8g2_font_profont15_tr #define u8g_font_profont17 u8g2_font_profont17_tf #define u8g_font_profont17r u8g2_font_profont17_tr #define u8g_font_profont22 u8g2_font_profont22_tf #define u8g_font_profont22r u8g2_font_profont22_tr #define u8g_font_profont29 u8g2_font_profont29_tf #define u8g_font_profont29r u8g2_font_profont29_tr /*==========================================*/ /* C++ compatible */ #ifdef __cplusplus } #endif #endif ================================================ FILE: Drivers/u8g2/Inc/u8x8.h ================================================ /* u8x8.h Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. U8glib has several layers. Each layer is implemented with a callback function. This callback function handels the messages for the layer. The topmost level is the display layer. It includes the following messages: U8X8_MSG_DISPLAY_SETUP_MEMORY no communicaation with the display, setup memory ony U8X8_MSG_DISPLAY_INIT U8X8_MSG_DISPLAY_SET_FLIP_MODE U8X8_MSG_DISPLAY_SET_POWER_SAVE U8X8_MSG_DISPLAY_SET_CONTRAST U8X8_MSG_DISPLAY_DRAW_TILE A display driver may decided to breakdown these messages to a lower level interface or implement this functionality directly. One layer is the Command/Arg/Data interface. It can be used by the display layer to communicate with the display hardware. This layer only deals with data, commands and arguments. D/C line is unknown. U8X8_MSG_CAD_INIT U8X8_MSG_CAD_SET_I2C_ADR (obsolete) U8X8_MSG_CAD_SET_DEVICE (obsolete) U8X8_MSG_CAD_START_TRANSFER U8X8_MSG_CAD_SEND_CMD U8X8_MSG_CAD_SEND_ARG U8X8_MSG_CAD_SEND_DATA U8X8_MSG_CAD_END_TRANSFER The byte interface is there to send 1 byte (8 bits) to the display hardware. This layer depends on the hardware of a microcontroller, if a specific hardware should be used (I2C or SPI). If this interface is implemented via software, it may use the GPIO level for sending bytes. U8X8_MSG_BYTE_INIT U8X8_MSG_BYTE_SEND 30 U8X8_MSG_BYTE_SET_DC 31 U8X8_MSG_BYTE_START_TRANSFER U8X8_MSG_BYTE_END_TRANSFER U8X8_MSG_BYTE_SET_I2C_ADR (obsolete) U8X8_MSG_BYTE_SET_DEVICE (obsolete) GPIO and Delay U8X8_MSG_GPIO_INIT U8X8_MSG_DELAY_MILLI U8X8_MSG_DELAY_10MICRO U8X8_MSG_DELAY_100NANO U8X8_MSG_DELAY_NANO */ #ifndef _U8X8_H #define _U8X8_H /*==========================================*/ /* Global Defines */ /* Undefine this to remove u8x8_SetContrast function */ #define U8X8_WITH_SET_CONTRAST /* Define this for an additional user pointer inside the u8x8 data struct */ //#define U8X8_WITH_USER_PTR /* Undefine this to remove u8x8_SetFlipMode function */ /* 26 May 2016: Obsolete */ //#define U8X8_WITH_SET_FLIP_MODE /* Select 0 or 1 for the default flip mode. This is not affected by U8X8_WITH_FLIP_MODE */ /* Note: Not all display types support a mirror functon for the frame buffer */ /* 26 May 2016: Obsolete */ //#define U8X8_DEFAULT_FLIP_MODE 0 /*==========================================*/ /* Includes */ #include #include #include #include #if defined(__GNUC__) && defined(__AVR__) #include #endif /*==========================================*/ /* C++ compatible */ #ifdef __cplusplus extern "C" { #endif /*==========================================*/ /* U8G2 internal defines */ /* the following macro returns the first value for the normal mode */ /* or the second argument for the flip mode */ /* 26 May 2016: Obsolete #if U8X8_DEFAULT_FLIP_MODE == 0 #define U8X8_IF_DEFAULT_NORMAL_OR_FLIP(normal, flipmode) (normal) #else #define U8X8_IF_DEFAULT_NORMAL_OR_FLIP(normal, flipmode) (flipmode) #endif */ #ifdef __GNUC__ # define U8X8_NOINLINE __attribute__((noinline)) # define U8X8_SECTION(name) __attribute__ ((section (name))) # define U8X8_UNUSED __attribute__((unused)) #else # define U8X8_SECTION(name) # define U8X8_NOINLINE # define U8X8_UNUSED #endif #if defined(__GNUC__) && defined(__AVR__) # define U8X8_FONT_SECTION(name) U8X8_SECTION(".progmem." name) # define u8x8_pgm_read(adr) pgm_read_byte_near(adr) # define U8X8_PROGMEM PROGMEM #endif #if defined(ESP8266) uint8_t u8x8_pgm_read_esp(const uint8_t * addr); /* u8x8_8x8.c */ # define U8X8_FONT_SECTION(name) __attribute__((section(".text." name))) # define u8x8_pgm_read(adr) u8x8_pgm_read_esp(adr) # define U8X8_PROGMEM #endif #ifndef U8X8_FONT_SECTION # define U8X8_FONT_SECTION(name) #endif #ifndef u8x8_pgm_read # ifndef CHAR_BIT # define u8x8_pgm_read(adr) (*(const uint8_t *)(adr)) # else # if CHAR_BIT > 8 # define u8x8_pgm_read(adr) ((*(const uint8_t *)(adr)) & 0x0ff) # else # define u8x8_pgm_read(adr) (*(const uint8_t *)(adr)) # endif # endif #endif #ifndef U8X8_PROGMEM # define U8X8_PROGMEM #endif #ifdef ARDUINO #define U8X8_USE_PINS #endif /*==========================================*/ /* U8X8 typedefs and data structures */ typedef struct u8x8_struct u8x8_t; typedef struct u8x8_display_info_struct u8x8_display_info_t; typedef struct u8x8_tile_struct u8x8_tile_t; typedef uint8_t (*u8x8_msg_cb)(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); typedef uint16_t (*u8x8_char_cb)(u8x8_t *u8x8, uint8_t b); //struct u8x8_mcd_struct //{ // u8x8_msg_cb cb; /* current callback function */ // u8x8_t *u8g2; /* pointer to the u8g2 parent to minimize the number of args */ // u8x8_mcd_t *next; //}; struct u8x8_tile_struct { uint8_t *tile_ptr; /* pointer to one or more tiles... should be "const" */ uint8_t cnt; /* number of tiles */ uint8_t x_pos; /* tile x position */ uint8_t y_pos; /* tile x position */ }; struct u8x8_display_info_struct { /* == general == */ uint8_t chip_enable_level; /* UC1601: 0 */ uint8_t chip_disable_level; /* opposite of chip_enable_level */ uint8_t post_chip_enable_wait_ns; /* UC1601: 5ns */ uint8_t pre_chip_disable_wait_ns; /* UC1601: 5ns */ uint8_t reset_pulse_width_ms; /* UC1601: 0.003ms --> 1ms */ uint8_t post_reset_wait_ms; /* UC1601: 6ms */ /* == SPI interface == */ /* after SDA has been applied, wait this much time for the SCK data takeover edge */ /* if this is smaller than sck_pulse_width_ns, then use the value from sck_pulse_width_ns */ uint8_t sda_setup_time_ns; /* UC1601: 12ns */ /* the pulse width of the the clock signal, cycle time is twice this value */ /* max freq is 1/(2*sck_pulse_width_ns) */ /* AVR: below 70: DIV2, 8 MHz, >= 70 --> 4MHz clock (DIV4) */ uint8_t sck_pulse_width_ns; /* UC1701: 50ns */ /* until here we have 8 bytes (uint8_t). Newly introduced for SPI.beginTransaction */ uint32_t sck_clock_hz; /* previous name "sck_takeover_edge" renamed to "spi_mode" */ /* bit 0 of spi_mode is equal to the value of the previous variable sck_takeover_edge, 20 Aug 16: This is wrong the bit is actually inverted */ /* SPI has four clock modes: */ /* 0: clock active high, data out on falling edge, clock default value is zero, takover on rising edge */ /* 1: clock active high, data out on rising edge, clock default value is zero, takover on falling edge */ /* 2: clock active low, data out on rising edge */ /* 3: clock active low, data out on falling edge */ /* most displays have clock mode 1 */ uint8_t spi_mode; /* == I2C == */ uint8_t i2c_bus_clock_100kHz; /* UC1601: 1000000000/275 = 37 *100k */ /* == 8 bit interface == */ /* how long to wait after all data line are set */ uint8_t data_setup_time_ns; /* UC1601: 30ns */ /* write enable pulse width */ uint8_t write_pulse_width_ns; /* UC1601: 40ns */ /* == layout == */ uint8_t tile_width; uint8_t tile_height; uint8_t default_x_offset; /* default x offset for the display */ uint8_t flipmode_x_offset; /* x offset, if flip mode is enabled */ /* pixel width is not used by the u8x8 procedures */ /* instead it will be used by the u8g2 procedures, because the pixel dimension can */ /* not always be calculated from the tile_width/_height */ /* the following conditions must be true: */ /* pixel_width <= tile_width*8 */ /* pixel_height <= tile_height*8 */ uint16_t pixel_width; uint16_t pixel_height; }; /* list of U8x8 pins */ #define U8X8_PIN_D0 0 #define U8X8_PIN_SPI_CLOCK 0 #define U8X8_PIN_D1 1 #define U8X8_PIN_SPI_DATA 1 #define U8X8_PIN_D2 2 #define U8X8_PIN_D3 3 #define U8X8_PIN_D4 4 #define U8X8_PIN_D5 5 #define U8X8_PIN_D6 6 #define U8X8_PIN_D7 7 #define U8X8_PIN_E 8 #define U8X8_PIN_CS 9 /* parallel, SPI */ #define U8X8_PIN_DC 10 /* parallel, SPI */ #define U8X8_PIN_RESET 11 /* parallel, SPI, I2C */ #define U8X8_PIN_I2C_CLOCK 12 /* 1 = Input/high impedance, 0 = drive low */ #define U8X8_PIN_I2C_DATA 13 /* 1 = Input/high impedance, 0 = drive low */ #define U8X8_PIN_CS1 14 /* KS0108 extra chip select */ #define U8X8_PIN_CS2 15 /* KS0108 extra chip select */ #define U8X8_PIN_OUTPUT_CNT 16 #define U8X8_PIN_MENU_SELECT 16 #define U8X8_PIN_MENU_NEXT 17 #define U8X8_PIN_MENU_PREV 18 #define U8X8_PIN_MENU_HOME 19 #define U8X8_PIN_MENU_UP 20 #define U8X8_PIN_MENU_DOWN 21 #define U8X8_PIN_INPUT_CNT 6 #ifdef U8X8_USE_PINS #define U8X8_PIN_CNT (U8X8_PIN_OUTPUT_CNT+U8X8_PIN_INPUT_CNT) #define U8X8_PIN_NONE 255 #endif struct u8x8_struct { const u8x8_display_info_t *display_info; u8x8_char_cb next_cb; /* procedure, which will be used to get the next char from the string */ u8x8_msg_cb display_cb; u8x8_msg_cb cad_cb; u8x8_msg_cb byte_cb; u8x8_msg_cb gpio_and_delay_cb; uint32_t bus_clock; /* can be used by the byte function to store the clock speed of the bus */ const uint8_t *font; uint16_t encoding; /* encoding result for utf8 decoder in next_cb */ uint8_t x_offset; /* copied from info struct, can be modified in flip mode */ uint8_t is_font_inverse_mode; /* 0: normal, 1: font glyphs are inverted */ uint8_t i2c_address; /* a valid i2c adr. Initially this is 255, but this is set to something usefull during DISPLAY_INIT */ /* i2c_address is the address for writing data to the display */ /* usually, the lowest bit must be zero for a valid address */ uint8_t i2c_started; /* for i2c interface */ uint8_t device_address; /* this is the device address, replacement for U8X8_MSG_CAD_SET_DEVICE */ uint8_t utf8_state; /* number of chars which are still to scan */ uint8_t gpio_result; /* return value from the gpio call (only for MENU keys at the moment) */ uint8_t debounce_default_pin_state; uint8_t debounce_last_pin_state; uint8_t debounce_state; uint8_t debounce_result_msg; /* result msg or event after debounce */ #ifdef U8X8_WITH_USER_PTR void *user_ptr; #endif #ifdef U8X8_USE_PINS uint8_t pins[U8X8_PIN_CNT]; /* defines a pinlist: Mainly a list of pins for the Arduino Envionment, use U8X8_PIN_xxx to access */ #endif }; #ifdef U8X8_WITH_USER_PTR #define u8x8_GetUserPtr(u8x8) ((u8x8)->user_ptr) #define u8x8_SetUserPtr(u8x8, p) ((u8x8)->user_ptr = (p)) #endif #define u8x8_GetCols(u8x8) ((u8x8)->display_info->tile_width) #define u8x8_GetRows(u8x8) ((u8x8)->display_info->tile_height) #define u8x8_GetI2CAddress(u8x8) ((u8x8)->i2c_address) #define u8x8_SetI2CAddress(u8x8, address) ((u8x8)->i2c_address = (address)) #define u8x8_SetGPIOResult(u8x8, val) ((u8x8)->gpio_result = (val)) #define u8x8_GetSPIClockPhase(u8x8) ((u8x8)->display_info->spi_mode & 0x01) /* 0 means rising edge */ #define u8x8_GetSPIClockPolarity(u8x8) (((u8x8)->display_info->spi_mode & 0x02) >> 1) #define u8x8_GetSPIClockDefaultLevel(u8x8) (((u8x8)->display_info->spi_mode & 0x02) >> 1) #define u8x8_GetFontCharWidth(u8x8) u8x8_pgm_read( (u8x8)->font + 2 ) #define u8x8_GetFontCharHeight(u8x8) u8x8_pgm_read( (u8x8)->font + 3 ) #ifdef U8X8_USE_PINS #define u8x8_SetPin(u8x8,pin,val) (u8x8)->pins[pin] = (val) #define u8x8_SetMenuSelectPin(u8x8, val) u8x8_SetPin((u8x8),U8X8_PIN_MENU_SELECT,(val)) #define u8x8_SetMenuNextPin(u8x8, val) u8x8_SetPin((u8x8),U8X8_PIN_MENU_NEXT,(val)) #define u8x8_SetMenuPrevPin(u8x8, val) u8x8_SetPin((u8x8),U8X8_PIN_MENU_PREV,(val)) #define u8x8_SetMenuHomePin(u8x8, val) u8x8_SetPin((u8x8),U8X8_PIN_MENU_HOME,(val)) #define u8x8_SetMenuUpPin(u8x8, val) u8x8_SetPin((u8x8),U8X8_PIN_MENU_UP,(val)) #define u8x8_SetMenuDownPin(u8x8, val) u8x8_SetPin((u8x8),U8X8_PIN_MENU_DOWN,(val)) #endif /*==========================================*/ /* u8log extension for u8x8 and u8g2 */ typedef struct u8log_struct u8log_t; /* redraw the specified line. */ typedef void (*u8log_cb)(u8log_t * u8log); struct u8log_struct { /* configuration */ void *aux_data; /* pointer to u8x8 or u8g2 */ uint8_t width, height; /* size of the terminal */ u8log_cb cb; /* callback redraw function */ uint8_t *screen_buffer; /* size must be width*heigh bytes */ uint8_t is_redraw_line_for_each_char; int8_t line_height_offset; /* extra offset for the line height (u8g2 only) */ /* internal data */ //uint8_t last_x, last_y; /* position of the last printed char */ uint8_t cursor_x, cursor_y; /* position of the cursor, might be off screen */ uint8_t redraw_line; /* redraw specific line if is_redraw_line is not 0 */ uint8_t is_redraw_line; uint8_t is_redraw_all; uint8_t is_redraw_all_required_for_next_nl; /* in nl mode, redraw all instead of current line */ }; /*==========================================*/ /* helper functions */ void u8x8_d_helper_display_setup_memory(u8x8_t *u8x8, const u8x8_display_info_t *display_info); void u8x8_d_helper_display_init(u8x8_t *u8g2); /* Display Interface */ /* Name: U8X8_MSG_DISPLAY_SETUP_MEMORY Args: None Tasks: 1) setup u8g2->display_info copy u8g2->display_info->default_x_offset to u8g2->x_offset usually calls u8x8_d_helper_display_setup_memory() */ #define U8X8_MSG_DISPLAY_SETUP_MEMORY 9 /* Name: U8X8_MSG_DISPLAY_INIT Args: None Tasks: 2) put interface into default state: execute u8x8_gpio_Init for port directions execute u8x8_cad_Init for default port levels 3) set CS status (not clear, may be done in cad/byte interface 4) execute display reset (gpio interface) 5) send setup sequence to display, do not activate display, disable "power save" will follow */ #define U8X8_MSG_DISPLAY_INIT 10 /* Name: U8X8_MSG_DISPLAY_SET_POWER_SAVE Args: arg_int: 0: normal mode (RAM is visible on the display), 1: nothing is shown Tasks: Depending on arg_int, put the display into normal or power save mode. Send the corresponding sequence to the display. In power save mode, it must be possible to modify the RAM content. */ #define U8X8_MSG_DISPLAY_SET_POWER_SAVE 11 /* Name: U8X8_MSG_DISPLAY_SET_FLIP_MODE Args: arg_int: 0: normal mode, 1: flipped HW screen (180 degree) Tasks: Reprogramms the display controller to rotate the display by 180 degree (arg_int = 1) or not (arg_int = 0) This may change u8g2->x_offset if the display is smaller than the controller ram This message should only be supported if U8X8_WITH_FLIP_MODE is defined. */ #define U8X8_MSG_DISPLAY_SET_FLIP_MODE 13 /* arg_int: 0..255 contrast value */ #define U8X8_MSG_DISPLAY_SET_CONTRAST 14 /* Name: U8X8_MSG_DISPLAY_DRAW_TILE Args: arg_int: How often to repeat this tile pattern arg_ptr: pointer to u8x8_tile_t uint8_t *tile_ptr; pointer to one or more tiles (number is "cnt") uint8_t cnt; number of tiles uint8_t x_pos; first tile x position uint8_t y_pos; first tile y position Tasks: One tile has exactly 8 bytes (8x8 pixel monochrome bitmap). The lowest bit of the first byte is the upper left corner The highest bit of the first byte is the lower left corner The lowest bit of the last byte is the upper right corner The highest bit of the last byte is the lower left corner "tile_ptr" is the address of a memory area, which contains one or more tiles. "cnt" will contain the exact number of tiles in the memory areay. The size of the memory area is 8*cnt; Multiple tiles in the memory area form a horizontal sequence, this means the first tile is drawn at x_pos/y_pos, the second tile is drawn at x_pos+1/y_pos, third at x_pos+2/y_pos. "arg_int" tells how often the tile sequence should be repeated: For example if "cnt" is two and tile_ptr points to tiles A and B, then for arg_int = 3, the following tile sequence will be drawn: ABABAB. Totally, cnt*arg_int tiles will be drawn. */ #define U8X8_MSG_DISPLAY_DRAW_TILE 15 /* Name: U8X8_MSG_DISPLAY_REFRESH Args: arg_int: - arg_ptr: - This was introduced for the SSD1606 eInk display. The problem is, that all RAM access will not appear on the screen unless a special command is executed. With this message, this command sequence is executed. Use void u8x8_RefreshDisplay(u8x8_t *u8x8) to send the message to the display handler. */ #define U8X8_MSG_DISPLAY_REFRESH 16 /*==========================================*/ /* u8x8_setup.c */ uint8_t u8x8_dummy_cb(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /* Setup u8x8 object itself. This should be the very first function called on the new u8x8 object. After this call, assign the callback functions. Optional: Set the pins */ void u8x8_SetupDefaults(u8x8_t *u8x8); /* do not use this, use u8x8_Setup() instead */ void u8x8_Setup(u8x8_t *u8x8, u8x8_msg_cb display_cb, u8x8_msg_cb cad_cb, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb); /*==========================================*/ /* u8x8_display.c */ uint8_t u8x8_DrawTile(u8x8_t *u8x8, uint8_t x, uint8_t y, uint8_t cnt, uint8_t *tile_ptr); /* After a call to u8x8_SetupDefaults, setup u8x8 memory structures & inform callbacks This function is also called from u8x8_Setup(), so do not call u8x8_SetupMemory() directly, but use u8x8_Setup() instead. */ void u8x8_SetupMemory(u8x8_t *u8x8); /* After calling u8x8_SetupMemory()/u8x8_Setup(), init the display hardware itself. This will will the first time, u8x8 talks to the display. It will init the display, but keep display in power save mode. Usually this command must be followed by u8x8_SetPowerSave() */ void u8x8_InitDisplay(u8x8_t *u8x8); /* wake up display from power save mode */ void u8x8_SetPowerSave(u8x8_t *u8x8, uint8_t is_enable); void u8x8_SetFlipMode(u8x8_t *u8x8, uint8_t mode); void u8x8_SetContrast(u8x8_t *u8x8, uint8_t value); void u8x8_ClearDisplayWithTile(u8x8_t *u8x8, const uint8_t *buf) U8X8_NOINLINE; void u8x8_ClearDisplay(u8x8_t *u8x8); // this does not work for u8g2 in some cases void u8x8_FillDisplay(u8x8_t *u8x8); void u8x8_RefreshDisplay(u8x8_t *u8x8); // make RAM content visible on the display (Dec 16: SSD1606 only) void u8x8_ClearLine(u8x8_t *u8x8, uint8_t line); /*==========================================*/ /* Command Arg Data (CAD) Interface */ /* U8X8_MSG_CAD_INIT no args call U8X8_MSG_BYTE_INIT setup default values for the I/O lines */ #define U8X8_MSG_CAD_INIT 20 #define U8X8_MSG_CAD_SEND_CMD 21 /* arg_int: cmd byte */ #define U8X8_MSG_CAD_SEND_ARG 22 /* arg_int: arg byte */ #define U8X8_MSG_CAD_SEND_DATA 23 /* arg_int: expected cs level after processing this msg */ #define U8X8_MSG_CAD_START_TRANSFER 24 /* arg_int: expected cs level after processing this msg */ #define U8X8_MSG_CAD_END_TRANSFER 25 /* arg_int = 0: disable chip, arg_int = 1: enable chip */ //#define U8X8_MSG_CAD_SET_I2C_ADR 26 //#define U8X8_MSG_CAD_SET_DEVICE 27 /* u8g_cad.c */ #define u8x8_cad_Init(u8x8) ((u8x8)->cad_cb((u8x8), U8X8_MSG_CAD_INIT, 0, NULL )) uint8_t u8x8_cad_SendCmd(u8x8_t *u8x8, uint8_t cmd) U8X8_NOINLINE; uint8_t u8x8_cad_SendArg(u8x8_t *u8x8, uint8_t arg) U8X8_NOINLINE; uint8_t u8x8_cad_SendMultipleArg(u8x8_t *u8x8, uint8_t cnt, uint8_t arg) U8X8_NOINLINE; uint8_t u8x8_cad_SendData(u8x8_t *u8x8, uint8_t cnt, uint8_t *data) U8X8_NOINLINE; uint8_t u8x8_cad_StartTransfer(u8x8_t *u8x8) U8X8_NOINLINE; uint8_t u8x8_cad_EndTransfer(u8x8_t *u8x8) U8X8_NOINLINE; void u8x8_cad_vsendf(u8x8_t * u8x8, const char *fmt, va_list va); void u8x8_SendF(u8x8_t * u8x8, const char *fmt, ...); /* #define U8X8_C(c0) (0x04), (c0) #define U8X8_CA(c0,a0) (0x05), (c0), (a0) #define U8X8_CAA(c0,a0,a1) (0x06), (c0), (a0), (a1) #define U8X8_DATA() (0x10) #define U8X8_D1(d0) (0x11), (d0) */ #define U8X8_C(c0) (U8X8_MSG_CAD_SEND_CMD), (c0) #define U8X8_A(a0) (U8X8_MSG_CAD_SEND_ARG), (a0) #define U8X8_CA(c0,a0) (U8X8_MSG_CAD_SEND_CMD), (c0), (U8X8_MSG_CAD_SEND_ARG), (a0) #define U8X8_CAA(c0,a0,a1) (U8X8_MSG_CAD_SEND_CMD), (c0), (U8X8_MSG_CAD_SEND_ARG), (a0), (U8X8_MSG_CAD_SEND_ARG), (a1) #define U8X8_CAAA(c0,a0,a1, a2) (U8X8_MSG_CAD_SEND_CMD), (c0), (U8X8_MSG_CAD_SEND_ARG), (a0), (U8X8_MSG_CAD_SEND_ARG), (a1), (U8X8_MSG_CAD_SEND_ARG), (a2) #define U8X8_CAAAA(c0,a0,a1,a2,a3) (U8X8_MSG_CAD_SEND_CMD), (c0), (U8X8_MSG_CAD_SEND_ARG), (a0), (U8X8_MSG_CAD_SEND_ARG), (a1), (U8X8_MSG_CAD_SEND_ARG), (a2), (U8X8_MSG_CAD_SEND_ARG), (a3) #define U8X8_AAC(a0,a1,c0) (U8X8_MSG_CAD_SEND_ARG), (a0), (U8X8_MSG_CAD_SEND_ARG), (a1), (U8X8_MSG_CAD_SEND_CMD), (c0) #define U8X8_D1(d0) (U8X8_MSG_CAD_SEND_DATA), (d0) #define U8X8_A4(a0,a1,a2,a3) U8X8_A(a0), U8X8_A(a1), U8X8_A(a2), U8X8_A(a3) #define U8X8_A8(a0,a1,a2,a3,a4,a5,a6,a7) U8X8_A4((a0), (a1), (a2), (a3)), U8X8_A4((a4), (a5), (a6), (a7)) #define U8X8_START_TRANSFER() (U8X8_MSG_CAD_START_TRANSFER) #define U8X8_END_TRANSFER() (U8X8_MSG_CAD_END_TRANSFER) #define U8X8_DLY(m) (0xfe),(m) /* delay in milli seconds */ #define U8X8_END() (0xff) void u8x8_cad_SendSequence(u8x8_t *u8x8, uint8_t const *data); uint8_t u8x8_cad_empty(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_cad_110(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_cad_001(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_cad_011(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_cad_100(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_cad_st7920_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_cad_ssd13xx_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_cad_ssd13xx_fast_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_cad_st75256_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_cad_ld7032_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_cad_uc16xx_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /*==========================================*/ /* Byte Interface */ #define U8X8_MSG_BYTE_INIT U8X8_MSG_CAD_INIT #define U8X8_MSG_BYTE_SET_DC 32 #define U8X8_MSG_BYTE_SEND U8X8_MSG_CAD_SEND_DATA #define U8X8_MSG_BYTE_START_TRANSFER U8X8_MSG_CAD_START_TRANSFER #define U8X8_MSG_BYTE_END_TRANSFER U8X8_MSG_CAD_END_TRANSFER //#define U8X8_MSG_BYTE_SET_I2C_ADR U8X8_MSG_CAD_SET_I2C_ADR //#define U8X8_MSG_BYTE_SET_DEVICE U8X8_MSG_CAD_SET_DEVICE uint8_t u8x8_byte_SetDC(u8x8_t *u8x8, uint8_t dc) U8X8_NOINLINE; uint8_t u8x8_byte_SendByte(u8x8_t *u8x8, uint8_t byte) U8X8_NOINLINE; uint8_t u8x8_byte_SendBytes(u8x8_t *u8x8, uint8_t cnt, uint8_t *data) U8X8_NOINLINE; uint8_t u8x8_byte_StartTransfer(u8x8_t *u8x8); uint8_t u8x8_byte_EndTransfer(u8x8_t *u8x8); uint8_t u8x8_byte_empty(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_byte_4wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_byte_8bit_6800mode(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_byte_8bit_8080mode(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_byte_3wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /* uint8_t u8x8_byte_st7920_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); */ void u8x8_byte_set_ks0108_cs(u8x8_t *u8x8, uint8_t arg) U8X8_NOINLINE; uint8_t u8x8_byte_ks0108(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_byte_ssd13xx_sw_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /* OBSOLETE! */ uint8_t u8x8_byte_sw_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_byte_sed1520(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /*==========================================*/ /* GPIO Interface */ /* U8X8_MSG_GPIO_AND_DELAY_INIT no args setup port directions, do not set IO levels, this is done with BYTE/CAD_INIT */ #define U8X8_MSG_GPIO_AND_DELAY_INIT 40 /* arg_int: milliseconds */ #define U8X8_MSG_DELAY_MILLI 41 /* 10MICRO and 100NANO are not used at the moment */ #define U8X8_MSG_DELAY_10MICRO 42 #define U8X8_MSG_DELAY_100NANO 43 #define U8X8_MSG_DELAY_NANO 44 /* delay of one i2c unit, should be 5us for 100K, and 1.25us for 400K */ #define U8X8_MSG_DELAY_I2C 45 #define U8X8_MSG_GPIO(x) (64+(x)) #ifdef U8X8_USE_PINS #define u8x8_GetPinIndex(u8x8, msg) ((msg)&0x3f) #define u8x8_GetPinValue(u8x8, msg) ((u8x8)->pins[(msg)&0x3f]) #endif #define U8X8_MSG_GPIO_D0 U8X8_MSG_GPIO(U8X8_PIN_D0) #define U8X8_MSG_GPIO_SPI_CLOCK U8X8_MSG_GPIO(U8X8_PIN_SPI_CLOCK) #define U8X8_MSG_GPIO_D1 U8X8_MSG_GPIO(U8X8_PIN_D1) #define U8X8_MSG_GPIO_SPI_DATA U8X8_MSG_GPIO(U8X8_PIN_SPI_DATA) #define U8X8_MSG_GPIO_D2 U8X8_MSG_GPIO(U8X8_PIN_D2) #define U8X8_MSG_GPIO_D3 U8X8_MSG_GPIO(U8X8_PIN_D3) #define U8X8_MSG_GPIO_D4 U8X8_MSG_GPIO(U8X8_PIN_D4) #define U8X8_MSG_GPIO_D5 U8X8_MSG_GPIO(U8X8_PIN_D5) #define U8X8_MSG_GPIO_D6 U8X8_MSG_GPIO(U8X8_PIN_D6) #define U8X8_MSG_GPIO_D7 U8X8_MSG_GPIO(U8X8_PIN_D7) #define U8X8_MSG_GPIO_E U8X8_MSG_GPIO(U8X8_PIN_E) // used as E1 for the SED1520 #define U8X8_MSG_GPIO_CS U8X8_MSG_GPIO(U8X8_PIN_CS) // used as E2 for the SED1520 #define U8X8_MSG_GPIO_DC U8X8_MSG_GPIO(U8X8_PIN_DC) #define U8X8_MSG_GPIO_RESET U8X8_MSG_GPIO(U8X8_PIN_RESET) #define U8X8_MSG_GPIO_I2C_CLOCK U8X8_MSG_GPIO(U8X8_PIN_I2C_CLOCK) #define U8X8_MSG_GPIO_I2C_DATA U8X8_MSG_GPIO(U8X8_PIN_I2C_DATA) #define U8X8_MSG_GPIO_CS1 U8X8_MSG_GPIO(U8X8_PIN_CS1) /* KS0108 extra chip select */ #define U8X8_MSG_GPIO_CS2 U8X8_MSG_GPIO(U8X8_PIN_CS2) /* KS0108 extra chip select */ /* these message expect the return value in u8x8->gpio_result */ #define U8X8_MSG_GPIO_MENU_SELECT U8X8_MSG_GPIO(U8X8_PIN_MENU_SELECT) #define U8X8_MSG_GPIO_MENU_NEXT U8X8_MSG_GPIO(U8X8_PIN_MENU_NEXT) #define U8X8_MSG_GPIO_MENU_PREV U8X8_MSG_GPIO(U8X8_PIN_MENU_PREV) #define U8X8_MSG_GPIO_MENU_HOME U8X8_MSG_GPIO(U8X8_PIN_MENU_HOME) #define U8X8_MSG_GPIO_MENU_UP U8X8_MSG_GPIO(U8X8_PIN_MENU_UP) #define U8X8_MSG_GPIO_MENU_DOWN U8X8_MSG_GPIO(U8X8_PIN_MENU_DOWN) #define u8x8_gpio_Init(u8x8) ((u8x8)->gpio_and_delay_cb((u8x8), U8X8_MSG_GPIO_AND_DELAY_INIT, 0, NULL )) /* #define u8x8_gpio_SetDC(u8x8, v) ((u8x8)->gpio_and_delay_cb((u8x8), U8X8_MSG_GPIO_DC, (v), NULL )) #define u8x8_gpio_SetCS(u8x8, v) ((u8x8)->gpio_and_delay_cb((u8x8), U8X8_MSG_GPIO_CS, (v), NULL )) #define u8x8_gpio_SetReset(u8x8, v) ((u8x8)->gpio_and_delay_cb((u8x8), U8X8_MSG_GPIO_RESET, (v), NULL )) */ #define u8x8_gpio_SetDC(u8x8, v) u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_DC, (v)) #define u8x8_gpio_SetCS(u8x8, v) u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_CS, (v)) #define u8x8_gpio_SetReset(u8x8, v) u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_RESET, (v)) #define u8x8_gpio_SetSPIClock(u8x8, v) u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_SPI_CLOCK, (v)) #define u8x8_gpio_SetSPIData(u8x8, v) u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_SPI_DATA, (v)) #define u8x8_gpio_SetI2CClock(u8x8, v) u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_I2C_CLOCK, (v)) #define u8x8_gpio_SetI2CData(u8x8, v) u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_I2C_DATA, (v)) void u8x8_gpio_call(u8x8_t *u8x8, uint8_t msg, uint8_t arg) U8X8_NOINLINE; #define u8x8_gpio_Delay(u8x8, msg, dly) u8x8_gpio_call((u8x8), (msg), (dly)) //void u8x8_gpio_Delay(u8x8_t *u8x8, uint8_t msg, uint8_t dly) U8X8_NOINLINE; /*==========================================*/ /* u8x8_debounce.c */ /* return U8X8_MSG_GPIO_MENU_xxxxx messages */ uint8_t u8x8_GetMenuEvent(u8x8_t *u8x8); /*==========================================*/ /* u8x8_d_stdio.c */ void u8x8_SetupStdio(u8x8_t *u8x8); /*==========================================*/ /* u8x8_d_sdl_128x64.c */ void u8x8_Setup_SDL_128x64(u8x8_t *u8x8); void u8x8_Setup_SDL_240x160(u8x8_t *u8x8); int u8g_sdl_get_key(void); /*==========================================*/ /* u8x8_d_tga.c */ void u8x8_Setup_TGA_DESC(u8x8_t *u8x8); void u8x8_Setup_TGA_LCD(u8x8_t *u8x8); void tga_save(const char *name); /*==========================================*/ /* u8x8_d_bitmap.c */ uint8_t u8x8_GetBitmapPixel(u8x8_t *u8x8, uint16_t x, uint16_t y); void u8x8_SaveBitmapTGA(u8x8_t *u8x8, const char *filename); void u8x8_SetupBitmap(u8x8_t *u8x8, uint16_t pixel_width, uint16_t pixel_height); uint8_t u8x8_ConnectBitmapToU8x8(u8x8_t *u8x8); /*==========================================*/ /* u8x8_d_utf8.c */ void u8x8_Setup_Utf8(u8x8_t *u8x8); /* stdout UTF-8 display */ void utf8_show(void); /* show content of UTF-8 frame buffer */ /*==========================================*/ /* u8x8_setup.c */ uint8_t u8x8_d_null_cb(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /* u8x8_d_XXX.c */ uint8_t u8x8_d_uc1701_ea_dogs102(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_uc1701_mini12864(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1305_128x32_noname(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1305_128x32_adafruit(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1305_128x64_adafruit(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1306_128x64_noname(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1306_128x64_vcomh0(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1306_128x64_alt0(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1309_128x64_noname0(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1309_128x64_noname2(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sh1106_128x64_noname(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sh1106_128x64_vcomh0(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sh1106_128x64_winstar(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sh1106_72x40_wise(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sh1106_64x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sh1107_64x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sh1107_seeed_96x96(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sh1107_128x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sh1107_pimoroni_128x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sh1107_seeed_128x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sh1108_160x160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sh1122_256x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7920_192x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7920_128x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1306_128x32_univision(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1306_128x32_winstar(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1306_64x48_er(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1306_48x64_winstar(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1306_64x32_noname(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1306_64x32_1f(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1306_96x16_er(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ls013b7dh03_128x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ls027b7dh01_400x240(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ls013b7dh05_144x168(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7511_avd_320x240(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7565_ea_dogm128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7565_lm6063(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7565_64128n(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7565_ea_dogm132(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7565_zolen_128x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7565_nhd_c12832(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7565_nhd_c12864(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7565_jlx12864(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7565_lm6059(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7565_lx12864(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7565_erc12864(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7565_erc12864_alt(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /* issue #790 */ uint8_t u8x8_d_st7567_pi_132x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7567_jlx12864(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7567_enh_dg128064(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7567_enh_dg128064i(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7567_64x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7586s_s028hn118a(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7586s_erc240160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st7588_jlx12864(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st75256_jlx256128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st75256_wo256x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st75256_jlx256160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st75256_jlx256160m(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st75256_jlx256160_alt(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st75256_jlx240160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st75256_jlx25664(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st75256_jlx172104(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st75256_jlx19296(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_st75320_jlx320240(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /* https://github.com/olikraus/u8g2/issues/921 */ uint8_t u8x8_d_nt7534_tg12864r(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /* u8x8_d_st7565.c */ uint8_t u8x8_d_ld7032_60x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_t6963_240x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_t6963_240x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_t6963_128x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_t6963_128x64_alt(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_t6963_160x80(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_t6963_256x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1316_128x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1317_96x96(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1318_128x96(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1318_128x96_xcp(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1322_nhd_256x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1322_nhd_128x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_a2printer_384x240(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sed1330_240x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ra8835_nhd_240x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ra8835_320x240(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1325_nhd_128x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd0323_os128064(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1327_seeed_96x96(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1327_ea_w128128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1327_midas_128x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1327_ws_128x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1326_er_256x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1329_128x96_noname(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_uc1601_128x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_uc1604_jlx19264(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_uc1608_erc24064(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_uc1608_erc240120(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_uc1608_240x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_uc1610_ea_dogxl160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_uc1611_ea_dogm240(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_uc1611_ea_dogxl240(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_uc1611_ew50850(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /* 240x160 */ uint8_t u8x8_d_uc1611_cg160160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /* 160x160 */ uint8_t u8x8_d_uc1617_jlx128128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_uc1638_160x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ks0108_128x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ks0108_erm19264(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sbn1661_122x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_sed1520_122x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_pcd8544_84x48(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_pcf8812_96x65(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_hx1230_96x68(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1606_172x72(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1607_200x200(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1607_v2_200x200(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1607_gd_200x200(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ssd1607_ws_200x200(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /* issue 637 */ uint8_t u8x8_d_il3820_296x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_il3820_v2_296x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_lc7981_160x80(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_lc7981_160x160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_lc7981_240x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_lc7981_240x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_ist3020_erc19264(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_max7219_64x8(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_max7219_32x8(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); uint8_t u8x8_d_max7219_8x8(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); /*==========================================*/ /* u8x8_8x8.c */ uint16_t u8x8_upscale_byte(uint8_t x) U8X8_NOINLINE; void u8x8_utf8_init(u8x8_t *u8x8); uint16_t u8x8_ascii_next(u8x8_t *u8x8, uint8_t b); uint16_t u8x8_utf8_next(u8x8_t *u8x8, uint8_t b); // the following two functions are replaced by the init/next functions //uint16_t u8x8_get_encoding_from_utf8_string(const char **str); //uint16_t u8x8_get_char_from_string(const char **str); void u8x8_SetFont(u8x8_t *u8x8, const uint8_t *font_8x8); void u8x8_DrawGlyph(u8x8_t *u8x8, uint8_t x, uint8_t y, uint8_t encoding); void u8x8_Draw2x2Glyph(u8x8_t *u8x8, uint8_t x, uint8_t y, uint8_t encoding); void u8x8_Draw1x2Glyph(u8x8_t *u8x8, uint8_t x, uint8_t y, uint8_t encoding); uint8_t u8x8_DrawString(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s); uint8_t u8x8_DrawUTF8(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s); /* return number of glyps */ uint8_t u8x8_Draw2x2String(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s); uint8_t u8x8_Draw2x2UTF8(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s); uint8_t u8x8_Draw1x2String(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s); uint8_t u8x8_Draw1x2UTF8(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s); uint8_t u8x8_GetUTF8Len(u8x8_t *u8x8, const char *s); #define u8x8_SetInverseFont(u8x8, b) (u8x8)->is_font_inverse_mode = (b) /*==========================================*/ /* itoa procedures */ const char *u8x8_u8toa(uint8_t v, uint8_t d); const char *u8x8_u16toa(uint16_t v, uint8_t d); /*==========================================*/ /* u8x8_string.c */ uint8_t u8x8_GetStringLineCnt(const char *str); /* return 0 for str==NULL */ const char *u8x8_GetStringLineStart(uint8_t line_idx, const char *str ); void u8x8_CopyStringLine(char *dest, uint8_t line_idx, const char *str); /* draw one line, consider \t for center */ uint8_t u8x8_DrawUTF8Line(u8x8_t *u8x8, uint8_t x, uint8_t y, uint8_t w, const char *s); /* draw multiple lines, handle \t */ uint8_t u8x8_DrawUTF8Lines(u8x8_t *u8x8, uint8_t x, uint8_t y, uint8_t w, const char *s); /*==========================================*/ /* u8x8_selection_list.c */ struct _u8sl_struct { uint8_t visible; /* number of visible elements in the menu */ uint8_t total; /* total number of elements in the menu */ uint8_t first_pos; /* position of the first visible line */ uint8_t current_pos; /* current cursor position, starts at 0 */ uint8_t x; /* u8x8 only, not used in u8g2 */ uint8_t y; /* u8x8 only, not used in u8g2 */ }; typedef struct _u8sl_struct u8sl_t; typedef void (*u8x8_sl_cb)(u8x8_t *u8x8, u8sl_t *u8sl, uint8_t idx, const void *aux); void u8sl_Next(u8sl_t *u8sl); void u8sl_Prev(u8sl_t *u8sl); uint8_t u8x8_UserInterfaceSelectionList(u8x8_t *u8x8, const char *title, uint8_t start_pos, const char *sl); /*==========================================*/ /* u8x8_message.c */ uint8_t u8x8_UserInterfaceMessage(u8x8_t *u8x8, const char *title1, const char *title2, const char *title3, const char *buttons); /*==========================================*/ /* u8x8_input_value.c */ uint8_t u8x8_UserInterfaceInputValue(u8x8_t *u8x8, const char *title, const char *pre, uint8_t *value, uint8_t lo, uint8_t hi, uint8_t digits, const char *post); /*==========================================*/ /* u8log.c */ void u8log_Init(u8log_t *u8log, uint8_t width, uint8_t height, uint8_t *buf); void u8log_SetCallback(u8log_t *u8log, u8log_cb cb, void *aux_data); void u8log_SetRedrawMode(u8log_t *u8log, uint8_t is_redraw_line_for_each_char); void u8log_SetLineHeightOffset(u8log_t *u8log, int8_t line_height_offset); void u8log_WriteString(u8log_t *u8log, const char *s) U8X8_NOINLINE; void u8log_WriteChar(u8log_t *u8log, uint8_t c) U8X8_NOINLINE; void u8log_WriteHex8(u8log_t *u8log, uint8_t b) U8X8_NOINLINE; void u8log_WriteHex16(u8log_t *u8log, uint16_t v); void u8log_WriteHex32(u8log_t *u8log, uint32_t v); void u8log_WriteDec8(u8log_t *u8log, uint8_t v, uint8_t d); void u8log_WriteDec16(u8log_t *u8log, uint16_t v, uint8_t d); /*==========================================*/ /* u8log_u8x8.c */ void u8x8_DrawLog(u8x8_t *u8x8, uint8_t x, uint8_t y, u8log_t *u8log); void u8log_u8x8_cb(u8log_t * u8log); /*==========================================*/ /* start font list */ extern const uint8_t u8x8_font_amstrad_cpc_extended_f[] U8X8_FONT_SECTION("u8x8_font_amstrad_cpc_extended_f"); extern const uint8_t u8x8_font_amstrad_cpc_extended_r[] U8X8_FONT_SECTION("u8x8_font_amstrad_cpc_extended_r"); extern const uint8_t u8x8_font_amstrad_cpc_extended_n[] U8X8_FONT_SECTION("u8x8_font_amstrad_cpc_extended_n"); extern const uint8_t u8x8_font_amstrad_cpc_extended_u[] U8X8_FONT_SECTION("u8x8_font_amstrad_cpc_extended_u"); extern const uint8_t u8x8_font_5x7_f[] U8X8_FONT_SECTION("u8x8_font_5x7_f"); extern const uint8_t u8x8_font_5x7_r[] U8X8_FONT_SECTION("u8x8_font_5x7_r"); extern const uint8_t u8x8_font_5x7_n[] U8X8_FONT_SECTION("u8x8_font_5x7_n"); extern const uint8_t u8x8_font_5x8_f[] U8X8_FONT_SECTION("u8x8_font_5x8_f"); extern const uint8_t u8x8_font_5x8_r[] U8X8_FONT_SECTION("u8x8_font_5x8_r"); extern const uint8_t u8x8_font_5x8_n[] U8X8_FONT_SECTION("u8x8_font_5x8_n"); extern const uint8_t u8x8_font_8x13_1x2_f[] U8X8_FONT_SECTION("u8x8_font_8x13_1x2_f"); extern const uint8_t u8x8_font_8x13_1x2_r[] U8X8_FONT_SECTION("u8x8_font_8x13_1x2_r"); extern const uint8_t u8x8_font_8x13_1x2_n[] U8X8_FONT_SECTION("u8x8_font_8x13_1x2_n"); extern const uint8_t u8x8_font_8x13B_1x2_f[] U8X8_FONT_SECTION("u8x8_font_8x13B_1x2_f"); extern const uint8_t u8x8_font_8x13B_1x2_r[] U8X8_FONT_SECTION("u8x8_font_8x13B_1x2_r"); extern const uint8_t u8x8_font_8x13B_1x2_n[] U8X8_FONT_SECTION("u8x8_font_8x13B_1x2_n"); extern const uint8_t u8x8_font_7x14_1x2_f[] U8X8_FONT_SECTION("u8x8_font_7x14_1x2_f"); extern const uint8_t u8x8_font_7x14_1x2_r[] U8X8_FONT_SECTION("u8x8_font_7x14_1x2_r"); extern const uint8_t u8x8_font_7x14_1x2_n[] U8X8_FONT_SECTION("u8x8_font_7x14_1x2_n"); extern const uint8_t u8x8_font_7x14B_1x2_f[] U8X8_FONT_SECTION("u8x8_font_7x14B_1x2_f"); extern const uint8_t u8x8_font_7x14B_1x2_r[] U8X8_FONT_SECTION("u8x8_font_7x14B_1x2_r"); extern const uint8_t u8x8_font_7x14B_1x2_n[] U8X8_FONT_SECTION("u8x8_font_7x14B_1x2_n"); extern const uint8_t u8x8_font_open_iconic_arrow_1x1[] U8X8_FONT_SECTION("u8x8_font_open_iconic_arrow_1x1"); extern const uint8_t u8x8_font_open_iconic_check_1x1[] U8X8_FONT_SECTION("u8x8_font_open_iconic_check_1x1"); extern const uint8_t u8x8_font_open_iconic_embedded_1x1[] U8X8_FONT_SECTION("u8x8_font_open_iconic_embedded_1x1"); extern const uint8_t u8x8_font_open_iconic_play_1x1[] U8X8_FONT_SECTION("u8x8_font_open_iconic_play_1x1"); extern const uint8_t u8x8_font_open_iconic_thing_1x1[] U8X8_FONT_SECTION("u8x8_font_open_iconic_thing_1x1"); extern const uint8_t u8x8_font_open_iconic_weather_1x1[] U8X8_FONT_SECTION("u8x8_font_open_iconic_weather_1x1"); extern const uint8_t u8x8_font_open_iconic_arrow_2x2[] U8X8_FONT_SECTION("u8x8_font_open_iconic_arrow_2x2"); extern const uint8_t u8x8_font_open_iconic_check_2x2[] U8X8_FONT_SECTION("u8x8_font_open_iconic_check_2x2"); extern const uint8_t u8x8_font_open_iconic_embedded_2x2[] U8X8_FONT_SECTION("u8x8_font_open_iconic_embedded_2x2"); extern const uint8_t u8x8_font_open_iconic_play_2x2[] U8X8_FONT_SECTION("u8x8_font_open_iconic_play_2x2"); extern const uint8_t u8x8_font_open_iconic_thing_2x2[] U8X8_FONT_SECTION("u8x8_font_open_iconic_thing_2x2"); extern const uint8_t u8x8_font_open_iconic_weather_2x2[] U8X8_FONT_SECTION("u8x8_font_open_iconic_weather_2x2"); extern const uint8_t u8x8_font_open_iconic_arrow_4x4[] U8X8_FONT_SECTION("u8x8_font_open_iconic_arrow_4x4"); extern const uint8_t u8x8_font_open_iconic_check_4x4[] U8X8_FONT_SECTION("u8x8_font_open_iconic_check_4x4"); extern const uint8_t u8x8_font_open_iconic_embedded_4x4[] U8X8_FONT_SECTION("u8x8_font_open_iconic_embedded_4x4"); extern const uint8_t u8x8_font_open_iconic_play_4x4[] U8X8_FONT_SECTION("u8x8_font_open_iconic_play_4x4"); extern const uint8_t u8x8_font_open_iconic_thing_4x4[] U8X8_FONT_SECTION("u8x8_font_open_iconic_thing_4x4"); extern const uint8_t u8x8_font_open_iconic_weather_4x4[] U8X8_FONT_SECTION("u8x8_font_open_iconic_weather_4x4"); extern const uint8_t u8x8_font_open_iconic_arrow_8x8[] U8X8_FONT_SECTION("u8x8_font_open_iconic_arrow_8x8"); extern const uint8_t u8x8_font_open_iconic_check_8x8[] U8X8_FONT_SECTION("u8x8_font_open_iconic_check_8x8"); extern const uint8_t u8x8_font_open_iconic_embedded_8x8[] U8X8_FONT_SECTION("u8x8_font_open_iconic_embedded_8x8"); extern const uint8_t u8x8_font_open_iconic_play_8x8[] U8X8_FONT_SECTION("u8x8_font_open_iconic_play_8x8"); extern const uint8_t u8x8_font_open_iconic_thing_8x8[] U8X8_FONT_SECTION("u8x8_font_open_iconic_thing_8x8"); extern const uint8_t u8x8_font_open_iconic_weather_8x8[] U8X8_FONT_SECTION("u8x8_font_open_iconic_weather_8x8"); extern const uint8_t u8x8_font_profont29_2x3_f[] U8X8_FONT_SECTION("u8x8_font_profont29_2x3_f"); extern const uint8_t u8x8_font_profont29_2x3_r[] U8X8_FONT_SECTION("u8x8_font_profont29_2x3_r"); extern const uint8_t u8x8_font_profont29_2x3_n[] U8X8_FONT_SECTION("u8x8_font_profont29_2x3_n"); extern const uint8_t u8x8_font_artossans8_r[] U8X8_FONT_SECTION("u8x8_font_artossans8_r"); extern const uint8_t u8x8_font_artossans8_n[] U8X8_FONT_SECTION("u8x8_font_artossans8_n"); extern const uint8_t u8x8_font_artossans8_u[] U8X8_FONT_SECTION("u8x8_font_artossans8_u"); extern const uint8_t u8x8_font_artosserif8_r[] U8X8_FONT_SECTION("u8x8_font_artosserif8_r"); extern const uint8_t u8x8_font_artosserif8_n[] U8X8_FONT_SECTION("u8x8_font_artosserif8_n"); extern const uint8_t u8x8_font_artosserif8_u[] U8X8_FONT_SECTION("u8x8_font_artosserif8_u"); extern const uint8_t u8x8_font_chroma48medium8_r[] U8X8_FONT_SECTION("u8x8_font_chroma48medium8_r"); extern const uint8_t u8x8_font_chroma48medium8_n[] U8X8_FONT_SECTION("u8x8_font_chroma48medium8_n"); extern const uint8_t u8x8_font_chroma48medium8_u[] U8X8_FONT_SECTION("u8x8_font_chroma48medium8_u"); extern const uint8_t u8x8_font_saikyosansbold8_n[] U8X8_FONT_SECTION("u8x8_font_saikyosansbold8_n"); extern const uint8_t u8x8_font_saikyosansbold8_u[] U8X8_FONT_SECTION("u8x8_font_saikyosansbold8_u"); extern const uint8_t u8x8_font_torussansbold8_r[] U8X8_FONT_SECTION("u8x8_font_torussansbold8_r"); extern const uint8_t u8x8_font_torussansbold8_n[] U8X8_FONT_SECTION("u8x8_font_torussansbold8_n"); extern const uint8_t u8x8_font_torussansbold8_u[] U8X8_FONT_SECTION("u8x8_font_torussansbold8_u"); extern const uint8_t u8x8_font_victoriabold8_r[] U8X8_FONT_SECTION("u8x8_font_victoriabold8_r"); extern const uint8_t u8x8_font_victoriabold8_n[] U8X8_FONT_SECTION("u8x8_font_victoriabold8_n"); extern const uint8_t u8x8_font_victoriabold8_u[] U8X8_FONT_SECTION("u8x8_font_victoriabold8_u"); extern const uint8_t u8x8_font_victoriamedium8_r[] U8X8_FONT_SECTION("u8x8_font_victoriamedium8_r"); extern const uint8_t u8x8_font_victoriamedium8_n[] U8X8_FONT_SECTION("u8x8_font_victoriamedium8_n"); extern const uint8_t u8x8_font_victoriamedium8_u[] U8X8_FONT_SECTION("u8x8_font_victoriamedium8_u"); extern const uint8_t u8x8_font_courB18_2x3_f[] U8X8_FONT_SECTION("u8x8_font_courB18_2x3_f"); extern const uint8_t u8x8_font_courB18_2x3_r[] U8X8_FONT_SECTION("u8x8_font_courB18_2x3_r"); extern const uint8_t u8x8_font_courB18_2x3_n[] U8X8_FONT_SECTION("u8x8_font_courB18_2x3_n"); extern const uint8_t u8x8_font_courR18_2x3_f[] U8X8_FONT_SECTION("u8x8_font_courR18_2x3_f"); extern const uint8_t u8x8_font_courR18_2x3_r[] U8X8_FONT_SECTION("u8x8_font_courR18_2x3_r"); extern const uint8_t u8x8_font_courR18_2x3_n[] U8X8_FONT_SECTION("u8x8_font_courR18_2x3_n"); extern const uint8_t u8x8_font_courB24_3x4_f[] U8X8_FONT_SECTION("u8x8_font_courB24_3x4_f"); extern const uint8_t u8x8_font_courB24_3x4_r[] U8X8_FONT_SECTION("u8x8_font_courB24_3x4_r"); extern const uint8_t u8x8_font_courB24_3x4_n[] U8X8_FONT_SECTION("u8x8_font_courB24_3x4_n"); extern const uint8_t u8x8_font_courR24_3x4_f[] U8X8_FONT_SECTION("u8x8_font_courR24_3x4_f"); extern const uint8_t u8x8_font_courR24_3x4_r[] U8X8_FONT_SECTION("u8x8_font_courR24_3x4_r"); extern const uint8_t u8x8_font_courR24_3x4_n[] U8X8_FONT_SECTION("u8x8_font_courR24_3x4_n"); extern const uint8_t u8x8_font_lucasarts_scumm_subtitle_o_2x2_f[] U8X8_FONT_SECTION("u8x8_font_lucasarts_scumm_subtitle_o_2x2_f"); extern const uint8_t u8x8_font_lucasarts_scumm_subtitle_o_2x2_r[] U8X8_FONT_SECTION("u8x8_font_lucasarts_scumm_subtitle_o_2x2_r"); extern const uint8_t u8x8_font_lucasarts_scumm_subtitle_o_2x2_n[] U8X8_FONT_SECTION("u8x8_font_lucasarts_scumm_subtitle_o_2x2_n"); extern const uint8_t u8x8_font_lucasarts_scumm_subtitle_r_2x2_f[] U8X8_FONT_SECTION("u8x8_font_lucasarts_scumm_subtitle_r_2x2_f"); extern const uint8_t u8x8_font_lucasarts_scumm_subtitle_r_2x2_r[] U8X8_FONT_SECTION("u8x8_font_lucasarts_scumm_subtitle_r_2x2_r"); extern const uint8_t u8x8_font_lucasarts_scumm_subtitle_r_2x2_n[] U8X8_FONT_SECTION("u8x8_font_lucasarts_scumm_subtitle_r_2x2_n"); extern const uint8_t u8x8_font_inr21_2x4_f[] U8X8_FONT_SECTION("u8x8_font_inr21_2x4_f"); extern const uint8_t u8x8_font_inr21_2x4_r[] U8X8_FONT_SECTION("u8x8_font_inr21_2x4_r"); extern const uint8_t u8x8_font_inr21_2x4_n[] U8X8_FONT_SECTION("u8x8_font_inr21_2x4_n"); extern const uint8_t u8x8_font_inr33_3x6_f[] U8X8_FONT_SECTION("u8x8_font_inr33_3x6_f"); extern const uint8_t u8x8_font_inr33_3x6_r[] U8X8_FONT_SECTION("u8x8_font_inr33_3x6_r"); extern const uint8_t u8x8_font_inr33_3x6_n[] U8X8_FONT_SECTION("u8x8_font_inr33_3x6_n"); extern const uint8_t u8x8_font_inr46_4x8_f[] U8X8_FONT_SECTION("u8x8_font_inr46_4x8_f"); extern const uint8_t u8x8_font_inr46_4x8_r[] U8X8_FONT_SECTION("u8x8_font_inr46_4x8_r"); extern const uint8_t u8x8_font_inr46_4x8_n[] U8X8_FONT_SECTION("u8x8_font_inr46_4x8_n"); extern const uint8_t u8x8_font_inb21_2x4_f[] U8X8_FONT_SECTION("u8x8_font_inb21_2x4_f"); extern const uint8_t u8x8_font_inb21_2x4_r[] U8X8_FONT_SECTION("u8x8_font_inb21_2x4_r"); extern const uint8_t u8x8_font_inb21_2x4_n[] U8X8_FONT_SECTION("u8x8_font_inb21_2x4_n"); extern const uint8_t u8x8_font_inb33_3x6_f[] U8X8_FONT_SECTION("u8x8_font_inb33_3x6_f"); extern const uint8_t u8x8_font_inb33_3x6_r[] U8X8_FONT_SECTION("u8x8_font_inb33_3x6_r"); extern const uint8_t u8x8_font_inb33_3x6_n[] U8X8_FONT_SECTION("u8x8_font_inb33_3x6_n"); extern const uint8_t u8x8_font_inb46_4x8_f[] U8X8_FONT_SECTION("u8x8_font_inb46_4x8_f"); extern const uint8_t u8x8_font_inb46_4x8_r[] U8X8_FONT_SECTION("u8x8_font_inb46_4x8_r"); extern const uint8_t u8x8_font_inb46_4x8_n[] U8X8_FONT_SECTION("u8x8_font_inb46_4x8_n"); extern const uint8_t u8x8_font_pressstart2p_f[] U8X8_FONT_SECTION("u8x8_font_pressstart2p_f"); extern const uint8_t u8x8_font_pressstart2p_r[] U8X8_FONT_SECTION("u8x8_font_pressstart2p_r"); extern const uint8_t u8x8_font_pressstart2p_n[] U8X8_FONT_SECTION("u8x8_font_pressstart2p_n"); extern const uint8_t u8x8_font_pressstart2p_u[] U8X8_FONT_SECTION("u8x8_font_pressstart2p_u"); extern const uint8_t u8x8_font_pcsenior_f[] U8X8_FONT_SECTION("u8x8_font_pcsenior_f"); extern const uint8_t u8x8_font_pcsenior_r[] U8X8_FONT_SECTION("u8x8_font_pcsenior_r"); extern const uint8_t u8x8_font_pcsenior_n[] U8X8_FONT_SECTION("u8x8_font_pcsenior_n"); extern const uint8_t u8x8_font_pcsenior_u[] U8X8_FONT_SECTION("u8x8_font_pcsenior_u"); extern const uint8_t u8x8_font_pxplusibmcgathin_f[] U8X8_FONT_SECTION("u8x8_font_pxplusibmcgathin_f"); extern const uint8_t u8x8_font_pxplusibmcgathin_r[] U8X8_FONT_SECTION("u8x8_font_pxplusibmcgathin_r"); extern const uint8_t u8x8_font_pxplusibmcgathin_n[] U8X8_FONT_SECTION("u8x8_font_pxplusibmcgathin_n"); extern const uint8_t u8x8_font_pxplusibmcgathin_u[] U8X8_FONT_SECTION("u8x8_font_pxplusibmcgathin_u"); extern const uint8_t u8x8_font_pxplusibmcga_f[] U8X8_FONT_SECTION("u8x8_font_pxplusibmcga_f"); extern const uint8_t u8x8_font_pxplusibmcga_r[] U8X8_FONT_SECTION("u8x8_font_pxplusibmcga_r"); extern const uint8_t u8x8_font_pxplusibmcga_n[] U8X8_FONT_SECTION("u8x8_font_pxplusibmcga_n"); extern const uint8_t u8x8_font_pxplusibmcga_u[] U8X8_FONT_SECTION("u8x8_font_pxplusibmcga_u"); extern const uint8_t u8x8_font_pxplustandynewtv_f[] U8X8_FONT_SECTION("u8x8_font_pxplustandynewtv_f"); extern const uint8_t u8x8_font_pxplustandynewtv_r[] U8X8_FONT_SECTION("u8x8_font_pxplustandynewtv_r"); extern const uint8_t u8x8_font_pxplustandynewtv_n[] U8X8_FONT_SECTION("u8x8_font_pxplustandynewtv_n"); extern const uint8_t u8x8_font_pxplustandynewtv_u[] U8X8_FONT_SECTION("u8x8_font_pxplustandynewtv_u"); extern const uint8_t u8x8_font_px437wyse700a_2x2_f[] U8X8_FONT_SECTION("u8x8_font_px437wyse700a_2x2_f"); extern const uint8_t u8x8_font_px437wyse700a_2x2_r[] U8X8_FONT_SECTION("u8x8_font_px437wyse700a_2x2_r"); extern const uint8_t u8x8_font_px437wyse700a_2x2_n[] U8X8_FONT_SECTION("u8x8_font_px437wyse700a_2x2_n"); extern const uint8_t u8x8_font_px437wyse700b_2x2_f[] U8X8_FONT_SECTION("u8x8_font_px437wyse700b_2x2_f"); extern const uint8_t u8x8_font_px437wyse700b_2x2_r[] U8X8_FONT_SECTION("u8x8_font_px437wyse700b_2x2_r"); extern const uint8_t u8x8_font_px437wyse700b_2x2_n[] U8X8_FONT_SECTION("u8x8_font_px437wyse700b_2x2_n"); /* end font list */ #ifdef __cplusplus } #endif #endif /* _U8X8_H */ ================================================ FILE: Drivers/u8g2/Src/U8x8lib.cpp-disable ================================================ /* U8x8lib.cpp Arduino specific low level functions Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "U8x8lib.h" #ifdef U8X8_HAVE_HW_SPI #include #endif #ifdef U8X8_HAVE_HW_I2C #include #endif /*=============================================*/ size_t U8X8::write(uint8_t v) { if ( v == '\n' ) { uint8_t dy = u8x8_pgm_read(u8x8.font+3); /* new 2019 format */ ty+=dy; tx=0; } else { uint8_t dx = u8x8_pgm_read(u8x8.font+2); /* new 2019 format */ u8x8_DrawGlyph(&u8x8, tx, ty, v); tx+=dx; } return 1; } /*=============================================*/ /*=== ARDUINO GPIO & DELAY ===*/ #ifdef U8X8_USE_PINS extern "C" uint8_t u8x8_gpio_and_delay_arduino(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, U8X8_UNUSED void *arg_ptr) { uint8_t i; switch(msg) { case U8X8_MSG_GPIO_AND_DELAY_INIT: for( i = 0; i < U8X8_PIN_CNT; i++ ) if ( u8x8->pins[i] != U8X8_PIN_NONE ) { if ( i < U8X8_PIN_OUTPUT_CNT ) { pinMode(u8x8->pins[i], OUTPUT); } else { #ifdef INPUT_PULLUP pinMode(u8x8->pins[i], INPUT_PULLUP); #else pinMode(u8x8->pins[i], OUTPUT); digitalWrite(u8x8->pins[i], 1); #endif } } break; #ifndef __AVR__ /* this case is not compiled for any AVR, because AVR uC are so slow */ /* that this delay does not matter */ case U8X8_MSG_DELAY_NANO: delayMicroseconds(arg_int==0?0:1); break; #endif case U8X8_MSG_DELAY_10MICRO: /* not used at the moment */ break; case U8X8_MSG_DELAY_100NANO: /* not used at the moment */ break; case U8X8_MSG_DELAY_MILLI: delay(arg_int); break; case U8X8_MSG_DELAY_I2C: /* arg_int is 1 or 4: 100KHz (5us) or 400KHz (1.25us) */ delayMicroseconds(arg_int<=2?5:2); break; case U8X8_MSG_GPIO_I2C_CLOCK: case U8X8_MSG_GPIO_I2C_DATA: if ( arg_int == 0 ) { pinMode(u8x8_GetPinValue(u8x8, msg), OUTPUT); digitalWrite(u8x8_GetPinValue(u8x8, msg), 0); } else { #ifdef INPUT_PULLUP pinMode(u8x8_GetPinValue(u8x8, msg), INPUT_PULLUP); #else pinMode(u8x8_GetPinValue(u8x8, msg), OUTPUT); digitalWrite(u8x8_GetPinValue(u8x8, msg), 1); #endif } break; default: if ( msg >= U8X8_MSG_GPIO(0) ) { i = u8x8_GetPinValue(u8x8, msg); if ( i != U8X8_PIN_NONE ) { if ( u8x8_GetPinIndex(u8x8, msg) < U8X8_PIN_OUTPUT_CNT ) { digitalWrite(i, arg_int); } else { if ( u8x8_GetPinIndex(u8x8, msg) == U8X8_PIN_OUTPUT_CNT ) { // call yield() for the first pin only, u8x8 will always request all the pins, so this should be ok yield(); } u8x8_SetGPIOResult(u8x8, digitalRead(i) == 0 ? 0 : 1); } } break; } return 0; } return 1; } #endif // U8X8_USE_PINS /*=============================================*/ /*=== 3 WIRE SOFTWARE SPI ===*/ /* replacement for a more faster u8x8_byte_3wire_sw_spi in general u8x8_byte_3wire_sw_spi could be a fallback: uint8_t u8x8_byte_arduino_3wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { return u8x8_byte_3wire_sw_spi(u8x8, msg,arg_int, arg_ptr); } */ #ifndef __AVR_ARCH__ #define __AVR_ARCH__ 0 #endif #if !defined(U8X8_USE_PINS) /* no pin information (very strange), so fallback */ uint8_t u8x8_byte_arduino_3wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { return u8x8_byte_3wire_sw_spi(u8x8, msg,arg_int, arg_ptr); } #elif __AVR_ARCH__ == 4 || __AVR_ARCH__ == 5 || __AVR_ARCH__ == 51 || __AVR_ARCH__ == 6 /* this function completly replaces u8x8_byte_4wire_sw_spi*/ extern "C" uint8_t u8x8_byte_arduino_3wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t i; uint8_t takeover_edge = u8x8_GetSPIClockPhase(u8x8); uint16_t b; uint8_t *data; /* the following static vars are recalculated in U8X8_MSG_BYTE_START_TRANSFER */ /* so, it should be possible to use multiple displays with different pins */ static volatile uint8_t *arduino_clock_port; static uint8_t arduino_clock_mask; static uint8_t arduino_clock_n_mask; static volatile uint8_t *arduino_data_port; static uint8_t arduino_data_mask; static uint8_t arduino_data_n_mask; static uint8_t last_dc; switch(msg) { case U8X8_MSG_BYTE_SEND: data = (uint8_t *)arg_ptr; if ( takeover_edge == 0 ) { while( arg_int > 0 ) { b = *data; if ( last_dc != 0 ) b |= 256; data++; arg_int--; /* issue 156, check for speed */ #if F_CPU <= 17000000 if ( b == 0 ) { *arduino_data_port &= arduino_data_n_mask; for( i = 0; i < 9; i++ ) { *arduino_clock_port |= arduino_clock_mask; *arduino_clock_port &= arduino_clock_n_mask; } } else #endif { for( i = 0; i < 9; i++ ) { if ( b & 256 ) *arduino_data_port |= arduino_data_mask; else *arduino_data_port &= arduino_data_n_mask; *arduino_clock_port |= arduino_clock_mask; b <<= 1; *arduino_clock_port &= arduino_clock_n_mask; } } } } else { while( arg_int > 0 ) { b = *data; if ( last_dc != 0 ) b |= 256; data++; arg_int--; /* issue 156, check for speed */ #if F_CPU <= 17000000 if ( b == 0 ) { *arduino_data_port &= arduino_data_n_mask; for( i = 0; i < 9; i++ ) { *arduino_clock_port &= arduino_clock_n_mask; *arduino_clock_port |= arduino_clock_mask; } } else #endif { for( i = 0; i < 9; i++ ) { if ( b & 256 ) *arduino_data_port |= arduino_data_mask; else *arduino_data_port &= arduino_data_n_mask; *arduino_clock_port &= arduino_clock_n_mask; b <<= 1; *arduino_clock_port |= arduino_clock_mask; } } } } break; case U8X8_MSG_BYTE_INIT: /* disable chipselect */ u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); /* no wait required here */ /* for SPI: setup correct level of the clock signal */ u8x8_gpio_SetSPIClock(u8x8, u8x8_GetSPIClockPhase(u8x8)); break; case U8X8_MSG_BYTE_SET_DC: last_dc = arg_int; break; case U8X8_MSG_BYTE_START_TRANSFER: u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_enable_level); u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->post_chip_enable_wait_ns, NULL); /* there is no consistency checking for u8x8->pins[U8X8_PIN_SPI_CLOCK] */ arduino_clock_port = portOutputRegister(digitalPinToPort(u8x8->pins[U8X8_PIN_SPI_CLOCK])); arduino_clock_mask = digitalPinToBitMask(u8x8->pins[U8X8_PIN_SPI_CLOCK]); arduino_clock_n_mask = ~arduino_clock_mask; /* there is no consistency checking for u8x8->pins[U8X8_PIN_SPI_DATA] */ arduino_data_port = portOutputRegister(digitalPinToPort(u8x8->pins[U8X8_PIN_SPI_DATA])); arduino_data_mask = digitalPinToBitMask(u8x8->pins[U8X8_PIN_SPI_DATA]); arduino_data_n_mask = ~arduino_data_mask; break; case U8X8_MSG_BYTE_END_TRANSFER: u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->pre_chip_disable_wait_ns, NULL); u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); break; default: return 0; } return 1; } #else /* fallback */ uint8_t u8x8_byte_arduino_3wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { return u8x8_byte_3wire_sw_spi(u8x8, msg,arg_int, arg_ptr); } #endif /*=============================================*/ /*=== 4 WIRE SOFTWARE SPI ===*/ /* replacement for a more faster u8x8_byte_4wire_sw_spi in general u8x8_byte_4wire_sw_spi could be a fallback: uint8_t u8x8_byte_arduino_4wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { return u8x8_byte_4wire_sw_spi(u8x8, msg,arg_int, arg_ptr); } */ #ifndef __AVR_ARCH__ #define __AVR_ARCH__ 0 #endif #if !defined(U8X8_USE_PINS) /* no pin information (very strange), so fallback */ uint8_t u8x8_byte_arduino_4wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { return u8x8_byte_4wire_sw_spi(u8x8, msg,arg_int, arg_ptr); } #elif __AVR_ARCH__ == 4 || __AVR_ARCH__ == 5 || __AVR_ARCH__ == 51 || __AVR_ARCH__ == 6 /* this function completly replaces u8x8_byte_4wire_sw_spi*/ extern "C" uint8_t u8x8_byte_arduino_4wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t SREG_backup; uint8_t i, b; uint8_t *data; uint8_t takeover_edge = u8x8_GetSPIClockPhase(u8x8); //uint8_t not_takeover_edge = 1 - takeover_edge; /* the following static vars are recalculated in U8X8_MSG_BYTE_START_TRANSFER */ /* so, it should be possible to use multiple displays with different pins */ static volatile uint8_t *arduino_clock_port; static uint8_t arduino_clock_mask; static uint8_t arduino_clock_n_mask; static volatile uint8_t *arduino_data_port; static uint8_t arduino_data_mask; static uint8_t arduino_data_n_mask; switch(msg) { case U8X8_MSG_BYTE_SEND: data = (uint8_t *)arg_ptr; if ( takeover_edge == 0 ) { while( arg_int > 0 ) { b = *data; data++; arg_int--; SREG_backup = SREG; cli(); /* issue 156, check for speed */ #if F_CPU <= 17000000 if ( b == 0 ) { *arduino_data_port &= arduino_data_n_mask; for( i = 0; i < 8; i++ ) { *arduino_clock_port |= arduino_clock_mask; *arduino_clock_port &= arduino_clock_n_mask; } } else #endif { for( i = 0; i < 8; i++ ) { if ( b & 128 ) *arduino_data_port |= arduino_data_mask; else *arduino_data_port &= arduino_data_n_mask; *arduino_clock_port |= arduino_clock_mask; b <<= 1; *arduino_clock_port &= arduino_clock_n_mask; } } SREG = SREG_backup; } } else { while( arg_int > 0 ) { b = *data; data++; arg_int--; SREG_backup = SREG; cli(); /* issue 156, check for speed */ #if F_CPU <= 17000000 if ( b == 0 ) { *arduino_data_port &= arduino_data_n_mask; for( i = 0; i < 8; i++ ) { *arduino_clock_port &= arduino_clock_n_mask; *arduino_clock_port |= arduino_clock_mask; } } else #endif { for( i = 0; i < 8; i++ ) { if ( b & 128 ) *arduino_data_port |= arduino_data_mask; else *arduino_data_port &= arduino_data_n_mask; *arduino_clock_port &= arduino_clock_n_mask; b <<= 1; *arduino_clock_port |= arduino_clock_mask; } } SREG = SREG_backup; } } break; case U8X8_MSG_BYTE_INIT: /* disable chipselect */ u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); /* no wait required here */ /* for SPI: setup correct level of the clock signal */ u8x8_gpio_SetSPIClock(u8x8, u8x8_GetSPIClockPhase(u8x8)); break; case U8X8_MSG_BYTE_SET_DC: u8x8_gpio_SetDC(u8x8, arg_int); break; case U8X8_MSG_BYTE_START_TRANSFER: u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_enable_level); u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->post_chip_enable_wait_ns, NULL); /* there is no consistency checking for u8x8->pins[U8X8_PIN_SPI_CLOCK] */ arduino_clock_port = portOutputRegister(digitalPinToPort(u8x8->pins[U8X8_PIN_SPI_CLOCK])); arduino_clock_mask = digitalPinToBitMask(u8x8->pins[U8X8_PIN_SPI_CLOCK]); arduino_clock_n_mask = ~arduino_clock_mask; /* there is no consistency checking for u8x8->pins[U8X8_PIN_SPI_DATA] */ arduino_data_port = portOutputRegister(digitalPinToPort(u8x8->pins[U8X8_PIN_SPI_DATA])); arduino_data_mask = digitalPinToBitMask(u8x8->pins[U8X8_PIN_SPI_DATA]); arduino_data_n_mask = ~arduino_data_mask; break; case U8X8_MSG_BYTE_END_TRANSFER: u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->pre_chip_disable_wait_ns, NULL); u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); break; default: return 0; } return 1; } #elif defined(__SAM3X8E__) /* Arduino DUE */ /* this function completly replaces u8x8_byte_4wire_sw_spi*/ extern "C" uint8_t u8x8_byte_arduino_4wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t i, b; uint16_t us = ((u8x8->display_info->sck_pulse_width_ns + 999)/1000); uint8_t *data; uint8_t takeover_edge = u8x8_GetSPIClockPhase(u8x8); //uint8_t not_takeover_edge = 1 - takeover_edge; /* the following static vars are recalculated in U8X8_MSG_BYTE_START_TRANSFER */ /* so, it should be possible to use multiple displays with different pins */ /* static volatile uint32_t *arduino_clock_port; static uint32_t arduino_clock_mask; static uint32_t arduino_clock_n_mask; static volatile uint32_t *arduino_data_port; static uint32_t arduino_data_mask; static uint32_t arduino_data_n_mask; */ static WoReg *arduinoSetClockPort, *arduinoUnsetClockPort; static uint32_t arduino_clock_mask; static WoReg *arduinoSetDataPort, *arduinoUnsetDataPort; static uint32_t arduino_data_mask; switch(msg) { case U8X8_MSG_BYTE_SEND: data = (uint8_t *)arg_ptr; if ( takeover_edge == 0 ) { while( arg_int > 0 ) { b = *data; data++; arg_int--; { for( i = 0; i < 8; i++ ) { /* if ( b & 128 ) *arduino_data_port |= arduino_data_mask; else *arduino_data_port &= arduino_data_n_mask; */ if (b & 128) *arduinoSetDataPort = arduino_data_mask; else *arduinoUnsetDataPort = arduino_data_mask; //delayMicroseconds(us); //*arduino_clock_port |= arduino_clock_mask; *arduinoSetClockPort = arduino_clock_mask; b <<= 1; delayMicroseconds(us); //*arduino_clock_port &= arduino_clock_n_mask; *arduinoUnsetClockPort = arduino_clock_mask; } } } } else { while( arg_int > 0 ) { b = *data; data++; arg_int--; { for( i = 0; i < 8; i++ ) { /* if ( b & 128 ) *arduino_data_port |= arduino_data_mask; else *arduino_data_port &= arduino_data_n_mask; */ if (b & 128) *arduinoSetDataPort = arduino_data_mask; else *arduinoUnsetDataPort = arduino_data_mask; //delayMicroseconds(us); //*arduino_clock_port &= arduino_clock_n_mask; *arduinoUnsetClockPort = arduino_clock_mask; b <<= 1; delayMicroseconds(us); //*arduino_clock_port |= arduino_clock_mask; *arduinoSetClockPort = arduino_clock_mask; } } } } break; case U8X8_MSG_BYTE_INIT: /* disable chipselect */ u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); /* no wait required here */ /* for SPI: setup correct level of the clock signal */ u8x8_gpio_SetSPIClock(u8x8, u8x8_GetSPIClockPhase(u8x8)); break; case U8X8_MSG_BYTE_SET_DC: u8x8_gpio_SetDC(u8x8, arg_int); break; case U8X8_MSG_BYTE_START_TRANSFER: u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_enable_level); u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->post_chip_enable_wait_ns, NULL); /* there is no consistency checking for u8x8->pins[U8X8_PIN_SPI_CLOCK] */ /* arduino_clock_port = portOutputRegister(digitalPinToPort(u8x8->pins[U8X8_PIN_SPI_CLOCK])); arduino_clock_mask = digitalPinToBitMask(u8x8->pins[U8X8_PIN_SPI_CLOCK]); arduino_clock_n_mask = ~arduino_clock_mask; arduino_data_port = portOutputRegister(digitalPinToPort(u8x8->pins[U8X8_PIN_SPI_DATA])); arduino_data_mask = digitalPinToBitMask(u8x8->pins[U8X8_PIN_SPI_DATA]); arduino_data_n_mask = ~arduino_data_mask; */ arduinoSetClockPort = &digitalPinToPort(u8x8->pins[U8X8_PIN_SPI_CLOCK])->PIO_SODR; arduinoUnsetClockPort = &digitalPinToPort(u8x8->pins[U8X8_PIN_SPI_CLOCK])->PIO_CODR; arduino_clock_mask = digitalPinToBitMask(u8x8->pins[U8X8_PIN_SPI_CLOCK]); arduinoSetDataPort = &digitalPinToPort(u8x8->pins[U8X8_PIN_SPI_DATA])->PIO_SODR; arduinoUnsetDataPort = &digitalPinToPort(u8x8->pins[U8X8_PIN_SPI_DATA])->PIO_CODR; arduino_data_mask = digitalPinToBitMask(u8x8->pins[U8X8_PIN_SPI_DATA]); break; case U8X8_MSG_BYTE_END_TRANSFER: u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->pre_chip_disable_wait_ns, NULL); u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); break; default: return 0; } return 1; } #else /* fallback */ uint8_t u8x8_byte_arduino_4wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { return u8x8_byte_4wire_sw_spi(u8x8, msg,arg_int, arg_ptr); } #endif /*=============================================*/ /*=== 4 WIRE HARDWARE SPI ===*/ #ifdef U8X8_USE_PINS extern "C" uint8_t u8x8_byte_arduino_hw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { #ifdef U8X8_HAVE_HW_SPI uint8_t *data; uint8_t internal_spi_mode; switch(msg) { case U8X8_MSG_BYTE_SEND: // 1.6.5 offers a block transfer, but the problem is, that the // buffer is overwritten with the incoming data // so it can not be used... // SPI.transfer((uint8_t *)arg_ptr, arg_int); data = (uint8_t *)arg_ptr; while( arg_int > 0 ) { SPI.transfer((uint8_t)*data); data++; arg_int--; } break; case U8X8_MSG_BYTE_INIT: if ( u8x8->bus_clock == 0 ) /* issue 769 */ u8x8->bus_clock = u8x8->display_info->sck_clock_hz; /* disable chipselect */ u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); /* no wait required here */ /* for SPI: setup correct level of the clock signal */ // removed, use SPI.begin() instead: pinMode(11, OUTPUT); // removed, use SPI.begin() instead: pinMode(13, OUTPUT); // removed, use SPI.begin() instead: digitalWrite(13, u8x8_GetSPIClockPhase(u8x8)); /* setup hardware with SPI.begin() instead of previous digitalWrite() and pinMode() calls */ /* issue #377 */ /* issue #378: removed ESP8266 support, which is implemented differently */ #if defined(ESP_PLATFORM) || defined(ARDUINO_ARCH_ESP32) /* ESP32 has the following begin: SPI.begin(int8_t sck=SCK, int8_t miso=MISO, int8_t mosi=MOSI, int8_t ss=-1); */ /* not sure about ESP8266 */ if ( u8x8->pins[U8X8_PIN_I2C_CLOCK] != U8X8_PIN_NONE && u8x8->pins[U8X8_PIN_I2C_DATA] != U8X8_PIN_NONE ) { /* SPI.begin(int8_t sck=SCK, int8_t miso=MISO, int8_t mosi=MOSI, int8_t ss=-1); */ /* actually MISO is not used, but what else could be used here??? */ SPI.begin(u8x8->pins[U8X8_PIN_I2C_CLOCK], MISO, u8x8->pins[U8X8_PIN_I2C_DATA]); } else { SPI.begin(); } #else SPI.begin(); #endif break; case U8X8_MSG_BYTE_SET_DC: u8x8_gpio_SetDC(u8x8, arg_int); break; case U8X8_MSG_BYTE_START_TRANSFER: /* SPI mode has to be mapped to the mode of the current controller, at least Uno, Due, 101 have different SPI_MODEx values */ internal_spi_mode = 0; switch(u8x8->display_info->spi_mode) { case 0: internal_spi_mode = SPI_MODE0; break; case 1: internal_spi_mode = SPI_MODE1; break; case 2: internal_spi_mode = SPI_MODE2; break; case 3: internal_spi_mode = SPI_MODE3; break; } #if ARDUINO >= 10600 SPI.beginTransaction(SPISettings(u8x8->bus_clock, MSBFIRST, internal_spi_mode)); #else SPI.begin(); if ( u8x8->display_info->sck_pulse_width_ns < 70 ) SPI.setClockDivider( SPI_CLOCK_DIV2 ); else if ( u8x8->display_info->sck_pulse_width_ns < 140 ) SPI.setClockDivider( SPI_CLOCK_DIV4 ); else SPI.setClockDivider( SPI_CLOCK_DIV8 ); SPI.setDataMode(internal_spi_mode); SPI.setBitOrder(MSBFIRST); #endif u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_enable_level); u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->post_chip_enable_wait_ns, NULL); break; case U8X8_MSG_BYTE_END_TRANSFER: u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->pre_chip_disable_wait_ns, NULL); u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); #if ARDUINO >= 10600 SPI.endTransaction(); #else SPI.end(); #endif break; default: return 0; } #else /* U8X8_HAVE_HW_SPI */ #endif /* U8X8_HAVE_HW_SPI */ return 1; } /* issue #244 */ extern "C" uint8_t u8x8_byte_arduino_2nd_hw_spi(U8X8_UNUSED u8x8_t *u8x8, U8X8_UNUSED uint8_t msg, U8X8_UNUSED uint8_t arg_int, U8X8_UNUSED void *arg_ptr) { #ifdef U8X8_HAVE_2ND_HW_SPI uint8_t *data; uint8_t internal_spi_mode; switch(msg) { case U8X8_MSG_BYTE_SEND: // 1.6.5 offers a block transfer, but the problem is, that the // buffer is overwritten with the incoming data // so it can not be used... // SPI.transfer((uint8_t *)arg_ptr, arg_int); data = (uint8_t *)arg_ptr; while( arg_int > 0 ) { SPI1.transfer((uint8_t)*data); data++; arg_int--; } break; case U8X8_MSG_BYTE_INIT: if ( u8x8->bus_clock == 0 ) /* issue 769 */ u8x8->bus_clock = u8x8->display_info->sck_clock_hz; /* disable chipselect */ u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); /* no wait required here */ /* for SPI1: setup correct level of the clock signal */ // removed, use SPI.begin() instead: pinMode(11, OUTPUT); // removed, use SPI.begin() instead: pinMode(13, OUTPUT); // removed, use SPI.begin() instead: digitalWrite(13, u8x8_GetSPIClockPhase(u8x8)); /* setup hardware with SPI.begin() instead of previous digitalWrite() and pinMode() calls */ SPI1.begin(); break; case U8X8_MSG_BYTE_SET_DC: u8x8_gpio_SetDC(u8x8, arg_int); break; case U8X8_MSG_BYTE_START_TRANSFER: /* SPI1 mode has to be mapped to the mode of the current controller, at least Uno, Due, 101 have different SPI_MODEx values */ internal_spi_mode = 0; switch(u8x8->display_info->spi_mode) { case 0: internal_spi_mode = SPI_MODE0; break; case 1: internal_spi_mode = SPI_MODE1; break; case 2: internal_spi_mode = SPI_MODE2; break; case 3: internal_spi_mode = SPI_MODE3; break; } #if ARDUINO >= 10600 SPI1.beginTransaction(SPISettings(u8x8->bus_clock, MSBFIRST, internal_spi_mode)); #else SPI1.begin(); if ( u8x8->display_info->sck_pulse_width_ns < 70 ) SPI1.setClockDivider( SPI_CLOCK_DIV2 ); else if ( u8x8->display_info->sck_pulse_width_ns < 140 ) SPI1.setClockDivider( SPI_CLOCK_DIV4 ); else SPI1.setClockDivider( SPI_CLOCK_DIV8 ); SPI1.setDataMode(internal_spi_mode); SPI1.setBitOrder(MSBFIRST); #endif u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_enable_level); u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->post_chip_enable_wait_ns, NULL); break; case U8X8_MSG_BYTE_END_TRANSFER: u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->pre_chip_disable_wait_ns, NULL); u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); #if ARDUINO >= 10600 SPI1.endTransaction(); #else SPI1.end(); #endif break; default: return 0; } #else #endif return 1; } /*=============================================*/ /* fast SW I2C for AVR uC */ #if !defined(U8X8_USE_PINS) /* no pin information (very strange), so fallback */ extern "C" uint8_t u8x8_byte_arduino_sw_i2c(U8X8_UNUSED u8x8_t *u8x8, U8X8_UNUSED uint8_t msg, U8X8_UNUSED uint8_t arg_int, U8X8_UNUSED void *arg_ptr) { return u8x8_byte_sw_i2c(u8x8, msg,arg_int, arg_ptr); } #elif !defined(U8X8_USE_ARDUINO_AVR_SW_I2C_OPTIMIZATION) extern "C" uint8_t u8x8_byte_arduino_sw_i2c(U8X8_UNUSED u8x8_t *u8x8, U8X8_UNUSED uint8_t msg, U8X8_UNUSED uint8_t arg_int, U8X8_UNUSED void *arg_ptr) { return u8x8_byte_sw_i2c(u8x8, msg,arg_int, arg_ptr); } #elif __AVR_ARCH__ == 4 || __AVR_ARCH__ == 5 || __AVR_ARCH__ == 51 || __AVR_ARCH__ == 6 /* the following static vars are recalculated in U8X8_MSG_BYTE_START_TRANSFER */ /* so, it should be possible to use multiple displays with different pins */ static volatile uint8_t *arduino_i2c_clock_port; static uint8_t arduino_i2c_clock_mask; static uint8_t arduino_i2c_clock_n_mask; static volatile uint8_t *arduino_i2c_data_port; static uint8_t arduino_i2c_data_mask; static uint8_t arduino_i2c_data_n_mask; /* software i2c, ignores ACK response (which is anyway not provided by some displays) also does not allow reading from the device */ static void i2c_delay(u8x8_t *u8x8) U8X8_NOINLINE; static void i2c_delay(u8x8_t *u8x8) { //u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_10MICRO, u8x8->display_info->i2c_bus_clock_100kHz); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_I2C, u8x8->display_info->i2c_bus_clock_100kHz); } static void i2c_init(u8x8_t *u8x8) { *arduino_i2c_clock_port |= arduino_i2c_clock_mask; *arduino_i2c_data_port |= arduino_i2c_data_mask; i2c_delay(u8x8); } /* actually, the scl line is not observed, so this procedure does not return a value */ static void i2c_read_scl_and_delay(u8x8_t *u8x8) { /* set as input (line will be high) */ *arduino_i2c_clock_port |= arduino_i2c_clock_mask; i2c_delay(u8x8); } static void i2c_clear_scl(u8x8_t *u8x8) { *arduino_i2c_clock_port &= arduino_i2c_clock_n_mask; } static void i2c_read_sda(u8x8_t *u8x8) { /* set as input (line will be high) */ *arduino_i2c_data_port |= arduino_i2c_data_mask; } static void i2c_clear_sda(u8x8_t *u8x8) { /* set open collector and drive low */ *arduino_i2c_data_port &= arduino_i2c_data_n_mask; } static void i2c_start(u8x8_t *u8x8) { if ( u8x8->i2c_started != 0 ) { /* if already started: do restart */ i2c_read_sda(u8x8); /* SDA = 1 */ i2c_delay(u8x8); i2c_read_scl_and_delay(u8x8); } i2c_read_sda(u8x8); /* send the start condition, both lines go from 1 to 0 */ i2c_clear_sda(u8x8); i2c_delay(u8x8); i2c_clear_scl(u8x8); u8x8->i2c_started = 1; } static void i2c_stop(u8x8_t *u8x8) { /* set SDA to 0 */ i2c_clear_sda(u8x8); i2c_delay(u8x8); /* now release all lines */ i2c_read_scl_and_delay(u8x8); /* set SDA to 1 */ i2c_read_sda(u8x8); i2c_delay(u8x8); u8x8->i2c_started = 0; } static void i2c_write_bit(u8x8_t *u8x8, uint8_t val) { if (val) i2c_read_sda(u8x8); else i2c_clear_sda(u8x8); i2c_delay(u8x8); i2c_read_scl_and_delay(u8x8); i2c_clear_scl(u8x8); } static void i2c_read_bit(u8x8_t *u8x8) { //uint8_t val; /* do not drive SDA */ i2c_read_sda(u8x8); i2c_delay(u8x8); i2c_read_scl_and_delay(u8x8); i2c_read_sda(u8x8); i2c_delay(u8x8); i2c_clear_scl(u8x8); //return val; } static void i2c_write_byte(u8x8_t *u8x8, uint8_t b) { i2c_write_bit(u8x8, b & 128); i2c_write_bit(u8x8, b & 64); i2c_write_bit(u8x8, b & 32); i2c_write_bit(u8x8, b & 16); i2c_write_bit(u8x8, b & 8); i2c_write_bit(u8x8, b & 4); i2c_write_bit(u8x8, b & 2); i2c_write_bit(u8x8, b & 1); /* read ack from client */ /* 0: ack was given by client */ /* 1: nothing happend during ack cycle */ i2c_read_bit(u8x8); } extern "C" uint8_t u8x8_byte_arduino_sw_i2c(U8X8_UNUSED u8x8_t *u8x8, U8X8_UNUSED uint8_t msg, U8X8_UNUSED uint8_t arg_int, U8X8_UNUSED void *arg_ptr) { uint8_t *data; switch(msg) { case U8X8_MSG_BYTE_SEND: data = (uint8_t *)arg_ptr; while( arg_int > 0 ) { i2c_write_byte(u8x8, *data); data++; arg_int--; } break; case U8X8_MSG_BYTE_INIT: pinMode(u8x8->pins[U8X8_PIN_I2C_CLOCK], OUTPUT); digitalWrite(u8x8->pins[U8X8_PIN_I2C_CLOCK], 1); pinMode(u8x8->pins[U8X8_PIN_I2C_DATA], OUTPUT); digitalWrite(u8x8->pins[U8X8_PIN_I2C_DATA], 1); i2c_init(u8x8); break; case U8X8_MSG_BYTE_SET_DC: break; case U8X8_MSG_BYTE_START_TRANSFER: /* there is no consistency checking for u8x8->pins[U8X8_PIN_I2C_CLOCK] */ arduino_i2c_clock_port = portOutputRegister(digitalPinToPort(u8x8->pins[U8X8_PIN_I2C_CLOCK])); arduino_i2c_clock_mask = digitalPinToBitMask(u8x8->pins[U8X8_PIN_I2C_CLOCK]); arduino_i2c_clock_n_mask = ~arduino_i2c_clock_mask; /* there is no consistency checking for u8x8->pins[U8X8_PIN_I2C_DATA] */ arduino_i2c_data_port = portOutputRegister(digitalPinToPort(u8x8->pins[U8X8_PIN_I2C_DATA])); arduino_i2c_data_mask = digitalPinToBitMask(u8x8->pins[U8X8_PIN_I2C_DATA]); arduino_i2c_data_n_mask = ~arduino_i2c_data_mask; i2c_start(u8x8); i2c_write_byte(u8x8, u8x8_GetI2CAddress(u8x8)); break; case U8X8_MSG_BYTE_END_TRANSFER: i2c_stop(u8x8); break; default: return 0; } return 1; } #else /* not AVR architecture, fallback */ extern "C" uint8_t u8x8_byte_arduino_sw_i2c(U8X8_UNUSED u8x8_t *u8x8, U8X8_UNUSED uint8_t msg, U8X8_UNUSED uint8_t arg_int, U8X8_UNUSED void *arg_ptr) { return u8x8_byte_sw_i2c(u8x8, msg,arg_int, arg_ptr); } #endif /*=============================================*/ /*=== HARDWARE I2C ===*/ extern "C" uint8_t u8x8_byte_arduino_hw_i2c(U8X8_UNUSED u8x8_t *u8x8, U8X8_UNUSED uint8_t msg, U8X8_UNUSED uint8_t arg_int, U8X8_UNUSED void *arg_ptr) { #ifdef U8X8_HAVE_HW_I2C switch(msg) { case U8X8_MSG_BYTE_SEND: Wire.write((uint8_t *)arg_ptr, (int)arg_int); break; case U8X8_MSG_BYTE_INIT: if ( u8x8->bus_clock == 0 ) /* issue 769 */ u8x8->bus_clock = u8x8->display_info->i2c_bus_clock_100kHz * 100000UL; #if defined(ESP8266) || defined(ARDUINO_ARCH_ESP8266) || defined(ESP_PLATFORM) || defined(ARDUINO_ARCH_ESP32) /* for ESP8266/ESP32, Wire.begin has two more arguments: clock and data */ if ( u8x8->pins[U8X8_PIN_I2C_CLOCK] != U8X8_PIN_NONE && u8x8->pins[U8X8_PIN_I2C_DATA] != U8X8_PIN_NONE ) { // second argument for the wire lib is the clock pin. In u8g2, the first argument of the clock pin in the clock/data pair Wire.begin(u8x8->pins[U8X8_PIN_I2C_DATA] , u8x8->pins[U8X8_PIN_I2C_CLOCK]); } else { Wire.begin(); } #else Wire.begin(); #endif break; case U8X8_MSG_BYTE_SET_DC: break; case U8X8_MSG_BYTE_START_TRANSFER: #if ARDUINO >= 10600 /* not sure when the setClock function was introduced, but it is there since 1.6.0 */ /* if there is any error with Wire.setClock() just remove this function call */ Wire.setClock(u8x8->bus_clock); #endif Wire.beginTransmission(u8x8_GetI2CAddress(u8x8)>>1); break; case U8X8_MSG_BYTE_END_TRANSFER: Wire.endTransmission(); break; default: return 0; } #endif return 1; } extern "C" uint8_t u8x8_byte_arduino_2nd_hw_i2c(U8X8_UNUSED u8x8_t *u8x8, U8X8_UNUSED uint8_t msg, U8X8_UNUSED uint8_t arg_int, U8X8_UNUSED void *arg_ptr) { #ifdef U8X8_HAVE_2ND_HW_I2C switch(msg) { case U8X8_MSG_BYTE_SEND: Wire1.write((uint8_t *)arg_ptr, (int)arg_int); break; case U8X8_MSG_BYTE_INIT: if ( u8x8->bus_clock == 0 ) /* issue 769 */ u8x8->bus_clock = u8x8->display_info->i2c_bus_clock_100kHz * 100000UL; Wire1.begin(); break; case U8X8_MSG_BYTE_SET_DC: break; case U8X8_MSG_BYTE_START_TRANSFER: #if ARDUINO >= 10600 /* not sure when the setClock function was introduced, but it is there since 1.6.0 */ /* if there is any error with Wire.setClock() just remove this function call */ Wire1.setClock(u8x8->bus_clock); #endif Wire1.beginTransmission(u8x8_GetI2CAddress(u8x8)>>1); break; case U8X8_MSG_BYTE_END_TRANSFER: Wire1.endTransmission(); break; default: return 0; } #endif return 1; } #endif // U8X8_USE_PINS /*=============================================*/ /* replacement for a more faster u8x8_byte_8bit_8080mode in general u8x8_byte_8bit_8080mode could be a fallback: uint8_t u8x8_byte_arduino_8bit_8080mode(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { return u8x8_byte_8bit_8080mode(u8x8, msg,arg_int, arg_ptr); } */ #ifndef __AVR_ARCH__ #define __AVR_ARCH__ 0 #endif #if !defined(U8X8_USE_PINS) /* no pin information (very strange), so fallback */ extern "C" uint8_t u8x8_byte_arduino_8bit_8080mode(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { return u8x8_byte_8bit_8080mode(u8x8, msg,arg_int, arg_ptr); } #elif __AVR_ARCH__ == 4 || __AVR_ARCH__ == 5 || __AVR_ARCH__ == 51 || __AVR_ARCH__ == 6 /* this function completly replaces u8x8_byte_8bit_8080mode*/ extern "C" uint8_t u8x8_byte_arduino_8bit_8080mode(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t i, b; uint8_t *data; /* the following static vars are recalculated in U8X8_MSG_BYTE_START_TRANSFER */ /* so, it should be possible to use multiple displays with different pins */ static volatile uint8_t *arduino_e_port; static volatile uint8_t arduino_e_mask; static volatile uint8_t arduino_e_n_mask; static volatile uint8_t *arduino_data_port[8]; static volatile uint8_t arduino_data_mask[8]; static volatile uint8_t arduino_data_n_mask[8]; switch(msg) { case U8X8_MSG_BYTE_SEND: data = (uint8_t *)arg_ptr; while( arg_int > 0 ) { b = *data; data++; arg_int--; for( i = 0; i < 8; i++ ) { if ( b & 1 ) *arduino_data_port[i] |= arduino_data_mask[i]; else *arduino_data_port[i] &= arduino_data_n_mask[i]; b >>= 1; } *arduino_e_port &= arduino_e_n_mask; /* AVR Architecture is very slow, extra call is not required */ //u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->sda_setup_time_ns); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->data_setup_time_ns); *arduino_e_port |= arduino_e_mask; /* AVR Architecture is very slow, extra call is not required */ //u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->sck_pulse_width_ns); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->write_pulse_width_ns); } break; case U8X8_MSG_BYTE_INIT: /* disable chipselect */ u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); /* no wait required here */ /* ensure that the enable signal is high */ u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_E, 1); break; case U8X8_MSG_BYTE_SET_DC: u8x8_gpio_SetDC(u8x8, arg_int); break; case U8X8_MSG_BYTE_START_TRANSFER: u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_enable_level); u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->post_chip_enable_wait_ns, NULL); /* there is no consistency checking for u8x8->pins[U8X8_PIN_E] */ arduino_e_port = portOutputRegister(digitalPinToPort(u8x8->pins[U8X8_PIN_E])); arduino_e_mask = digitalPinToBitMask(u8x8->pins[U8X8_PIN_E]); arduino_e_n_mask = ~arduino_e_mask; /* there is no consistency checking for u8x8->pins[U8X8_PIN_D0] */ for( i = 0; i < 8; i++ ) { arduino_data_port[i] = portOutputRegister(digitalPinToPort(u8x8->pins[U8X8_PIN_D0+i])); arduino_data_mask[i] = digitalPinToBitMask(u8x8->pins[U8X8_PIN_D0+i]); arduino_data_n_mask[i] = ~arduino_data_mask[i]; } break; case U8X8_MSG_BYTE_END_TRANSFER: u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->pre_chip_disable_wait_ns, NULL); u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); break; default: return 0; } return 1; } #else /* fallback */ extern "C" uint8_t u8x8_byte_arduino_8bit_8080mode(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { return u8x8_byte_8bit_8080mode(u8x8, msg,arg_int, arg_ptr); } #endif /*=============================================*/ /* replacement for a more faster u8x8_byte_ks0108 in general u8x8_byte_ks0108 could be a fallback: uint8_t u8x8_byte_arduino_ks0108(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { return u8x8_byte_ks0108(u8x8, msg,arg_int, arg_ptr); } */ #ifndef __AVR_ARCH__ #define __AVR_ARCH__ 0 #endif #if !defined(U8X8_USE_PINS) /* no pin information (very strange), so fallback */ extern "C" uint8_t u8x8_byte_arduino_ks0108(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { return u8x8_byte_ks0108(u8x8, msg,arg_int, arg_ptr); } #elif __AVR_ARCH__ == 4 || __AVR_ARCH__ == 5 || __AVR_ARCH__ == 51 || __AVR_ARCH__ == 6 /* this function completly replaces u8x8_byte_ks0108*/ extern "C" uint8_t u8x8_byte_arduino_ks0108(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t i, b; uint8_t *data; /* the following static vars are recalculated in U8X8_MSG_BYTE_START_TRANSFER */ /* so, it should be possible to use multiple displays with different pins */ static volatile uint8_t *arduino_e_port; static volatile uint8_t arduino_e_mask; static volatile uint8_t arduino_e_n_mask; static volatile uint8_t *arduino_data_port[8]; static volatile uint8_t arduino_data_mask[8]; static volatile uint8_t arduino_data_n_mask[8]; switch(msg) { case U8X8_MSG_BYTE_SEND: data = (uint8_t *)arg_ptr; while( arg_int > 0 ) { b = *data; data++; arg_int--; for( i = 0; i < 8; i++ ) { if ( b & 1 ) *arduino_data_port[i] |= arduino_data_mask[i]; else *arduino_data_port[i] &= arduino_data_n_mask[i]; b >>= 1; } *arduino_e_port |= arduino_e_mask; /* AVR Architecture is very slow, extra call is not required */ u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->data_setup_time_ns); *arduino_e_port &= arduino_e_n_mask; /* AVR Architecture is very slow, extra call is not required */ u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->write_pulse_width_ns); } break; case U8X8_MSG_BYTE_INIT: /* disable chipselect */ u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); /* no wait required here */ /* ensure that the enable signal is low */ u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_E, 0); break; case U8X8_MSG_BYTE_SET_DC: u8x8_gpio_SetDC(u8x8, arg_int); break; case U8X8_MSG_BYTE_START_TRANSFER: u8x8_byte_set_ks0108_cs(u8x8, arg_int); u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->post_chip_enable_wait_ns, NULL); /* there is no consistency checking for u8x8->pins[U8X8_PIN_E] */ arduino_e_port = portOutputRegister(digitalPinToPort(u8x8->pins[U8X8_PIN_E])); arduino_e_mask = digitalPinToBitMask(u8x8->pins[U8X8_PIN_E]); arduino_e_n_mask = ~arduino_e_mask; /* there is no consistency checking for u8x8->pins[U8X8_PIN_D0] */ for( i = 0; i < 8; i++ ) { arduino_data_port[i] = portOutputRegister(digitalPinToPort(u8x8->pins[U8X8_PIN_D0+i])); arduino_data_mask[i] = digitalPinToBitMask(u8x8->pins[U8X8_PIN_D0+i]); arduino_data_n_mask[i] = ~arduino_data_mask[i]; } break; case U8X8_MSG_BYTE_END_TRANSFER: u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->pre_chip_disable_wait_ns, NULL); u8x8_byte_set_ks0108_cs(u8x8, arg_int); break; default: return 0; } return 1; } #else /* fallback */ extern "C" uint8_t u8x8_byte_arduino_ks0108(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { return u8x8_byte_ks0108(u8x8, msg,arg_int, arg_ptr); } #endif #ifdef U8X8_USE_PINS /* use U8X8_PIN_NONE as value for "reset", if there is no reset line */ void u8x8_SetPin_4Wire_SW_SPI(u8x8_t *u8x8, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset) { u8x8_SetPin(u8x8, U8X8_PIN_SPI_CLOCK, clock); u8x8_SetPin(u8x8, U8X8_PIN_SPI_DATA, data); u8x8_SetPin(u8x8, U8X8_PIN_CS, cs); u8x8_SetPin(u8x8, U8X8_PIN_DC, dc); u8x8_SetPin(u8x8, U8X8_PIN_RESET, reset); } #ifdef _obsolete_com_specific_setup void u8x8_Setup_4Wire_SW_SPI(u8x8_t *u8x8, u8x8_msg_cb display_cb, uint8_t clock, uint8_t data, uint8_t cs, uint8_t dc, uint8_t reset) { u8x8_Setup(u8x8, display_cb, u8x8_cad_001, u8x8_byte_4wire_sw_spi, u8x8_gpio_and_delay_arduino); /* assign individual pin values (only for ARDUINO, if pin_list is available) */ u8x8_SetPin(u8x8, U8X8_PIN_SPI_CLOCK, clock); u8x8_SetPin(u8x8, U8X8_PIN_SPI_DATA, data); u8x8_SetPin(u8x8, U8X8_PIN_CS, cs); u8x8_SetPin(u8x8, U8X8_PIN_DC, dc); u8x8_SetPin(u8x8, U8X8_PIN_RESET, reset); } #endif /* obsolete com specific setup */ void u8x8_SetPin_3Wire_SW_SPI(u8x8_t *u8x8, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset) { u8x8_SetPin(u8x8, U8X8_PIN_SPI_CLOCK, clock); u8x8_SetPin(u8x8, U8X8_PIN_SPI_DATA, data); u8x8_SetPin(u8x8, U8X8_PIN_CS, cs); u8x8_SetPin(u8x8, U8X8_PIN_RESET, reset); } #ifdef _obsolete_com_specific_setup void u8x8_Setup_3Wire_SW_SPI(u8x8_t *u8x8, u8x8_msg_cb display_cb, uint8_t clock, uint8_t data, uint8_t cs, uint8_t reset) { u8x8_Setup(u8x8, display_cb, u8x8_cad_001, u8x8_byte_3wire_sw_spi, u8x8_gpio_and_delay_arduino); /* assign individual pin values (only for ARDUINO, if pin_list is available) */ u8x8_SetPin(u8x8, U8X8_PIN_SPI_CLOCK, clock); u8x8_SetPin(u8x8, U8X8_PIN_SPI_DATA, data); u8x8_SetPin(u8x8, U8X8_PIN_CS, cs); u8x8_SetPin(u8x8, U8X8_PIN_RESET, reset); } #endif /* obsolete com specific setup */ /* use U8X8_PIN_NONE as value for "reset", if there is no reset line */ void u8x8_SetPin_4Wire_HW_SPI(u8x8_t *u8x8, uint8_t cs, uint8_t dc, uint8_t reset) { u8x8_SetPin(u8x8, U8X8_PIN_CS, cs); u8x8_SetPin(u8x8, U8X8_PIN_DC, dc); u8x8_SetPin(u8x8, U8X8_PIN_RESET, reset); } void u8x8_SetPin_ST7920_HW_SPI(u8x8_t *u8x8, uint8_t cs, uint8_t reset) { u8x8_SetPin(u8x8, U8X8_PIN_CS, cs); u8x8_SetPin(u8x8, U8X8_PIN_RESET, reset); } #ifdef _obsolete_com_specific_setup void u8x8_Setup_4Wire_HW_SPI(u8x8_t *u8x8, u8x8_msg_cb display_cb, uint8_t cs, uint8_t dc, uint8_t reset) { u8x8_Setup(u8x8, display_cb, u8x8_cad_001, u8x8_byte_arduino_hw_spi, u8x8_gpio_and_delay_arduino); /* assign individual pin values (only for ARDUINO, if pin_list is available) */ u8x8_SetPin(u8x8, U8X8_PIN_CS, cs); u8x8_SetPin(u8x8, U8X8_PIN_DC, dc); u8x8_SetPin(u8x8, U8X8_PIN_RESET, reset); } #endif /* obsolete com specific setup */ void u8x8_SetPin_SW_I2C(u8x8_t *u8x8, uint8_t clock, uint8_t data, uint8_t reset) { u8x8_SetPin(u8x8, U8X8_PIN_I2C_CLOCK, clock); u8x8_SetPin(u8x8, U8X8_PIN_I2C_DATA, data); u8x8_SetPin(u8x8, U8X8_PIN_RESET, reset); } #ifdef _obsolete_com_specific_setup void u8x8_Setup_SSD13xx_SW_I2C(u8x8_t *u8x8, u8x8_msg_cb display_cb, uint8_t clock, uint8_t data, uint8_t reset) { u8x8_Setup(u8x8, display_cb, u8x8_cad_001, u8x8_byte_ssd13xx_sw_i2c, u8x8_gpio_and_delay_arduino); /* assign individual pin values (only for ARDUINO, if pin_list is available) */ u8x8_SetPin(u8x8, U8X8_PIN_I2C_CLOCK, clock); u8x8_SetPin(u8x8, U8X8_PIN_I2C_DATA, data); u8x8_SetPin(u8x8, U8X8_PIN_RESET, reset); } #endif /* obsolete com specific setup */ void u8x8_SetPin_HW_I2C(u8x8_t *u8x8, uint8_t reset, uint8_t clock, uint8_t data) { u8x8_SetPin(u8x8, U8X8_PIN_RESET, reset); u8x8_SetPin(u8x8, U8X8_PIN_I2C_CLOCK, clock); u8x8_SetPin(u8x8, U8X8_PIN_I2C_DATA, data); } void u8x8_SetPin_8Bit_6800(u8x8_t *u8x8, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset) { u8x8_SetPin(u8x8, U8X8_PIN_D0, d0); u8x8_SetPin(u8x8, U8X8_PIN_D1, d1); u8x8_SetPin(u8x8, U8X8_PIN_D2, d2); u8x8_SetPin(u8x8, U8X8_PIN_D3, d3); u8x8_SetPin(u8x8, U8X8_PIN_D4, d4); u8x8_SetPin(u8x8, U8X8_PIN_D5, d5); u8x8_SetPin(u8x8, U8X8_PIN_D6, d6); u8x8_SetPin(u8x8, U8X8_PIN_D7, d7); u8x8_SetPin(u8x8, U8X8_PIN_E, enable); u8x8_SetPin(u8x8, U8X8_PIN_CS, cs); u8x8_SetPin(u8x8, U8X8_PIN_DC, dc); u8x8_SetPin(u8x8, U8X8_PIN_RESET, reset); } #ifdef _obsolete_com_specific_setup void u8x8_Setup_8Bit_6800(u8x8_t *u8x8, u8x8_msg_cb display_cb, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t cs, uint8_t dc, uint8_t reset) { u8x8_Setup(u8x8, display_cb, u8x8_cad_001, u8x8_byte_8bit_6800mode, u8x8_gpio_and_delay_arduino); /* assign individual pin values (only for ARDUINO, if pin_list is available) */ u8x8_SetPin(u8x8, U8X8_PIN_D0, d0); u8x8_SetPin(u8x8, U8X8_PIN_D1, d1); u8x8_SetPin(u8x8, U8X8_PIN_D2, d2); u8x8_SetPin(u8x8, U8X8_PIN_D3, d3); u8x8_SetPin(u8x8, U8X8_PIN_D4, d4); u8x8_SetPin(u8x8, U8X8_PIN_D5, d5); u8x8_SetPin(u8x8, U8X8_PIN_D6, d6); u8x8_SetPin(u8x8, U8X8_PIN_D7, d7); u8x8_SetPin(u8x8, U8X8_PIN_E, enable); u8x8_SetPin(u8x8, U8X8_PIN_CS, cs); u8x8_SetPin(u8x8, U8X8_PIN_DC, dc); u8x8_SetPin(u8x8, U8X8_PIN_RESET, reset); } #endif /* obsolete com specific setup */ void u8x8_SetPin_8Bit_8080(u8x8_t *u8x8, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t wr, uint8_t cs, uint8_t dc, uint8_t reset) { u8x8_SetPin(u8x8, U8X8_PIN_D0, d0); u8x8_SetPin(u8x8, U8X8_PIN_D1, d1); u8x8_SetPin(u8x8, U8X8_PIN_D2, d2); u8x8_SetPin(u8x8, U8X8_PIN_D3, d3); u8x8_SetPin(u8x8, U8X8_PIN_D4, d4); u8x8_SetPin(u8x8, U8X8_PIN_D5, d5); u8x8_SetPin(u8x8, U8X8_PIN_D6, d6); u8x8_SetPin(u8x8, U8X8_PIN_D7, d7); u8x8_SetPin(u8x8, U8X8_PIN_E, wr); u8x8_SetPin(u8x8, U8X8_PIN_CS, cs); u8x8_SetPin(u8x8, U8X8_PIN_DC, dc); u8x8_SetPin(u8x8, U8X8_PIN_RESET, reset); } #ifdef _obsolete_com_specific_setup void u8x8_Setup_8Bit_8080(u8x8_t *u8x8, u8x8_msg_cb display_cb, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t wr, uint8_t cs, uint8_t dc, uint8_t reset) { u8x8_Setup(u8x8, display_cb, u8x8_cad_001, u8x8_byte_8bit_8080mode, u8x8_gpio_and_delay_arduino); /* assign individual pin values (only for ARDUINO, if pin_list is available) */ u8x8_SetPin(u8x8, U8X8_PIN_D0, d0); u8x8_SetPin(u8x8, U8X8_PIN_D1, d1); u8x8_SetPin(u8x8, U8X8_PIN_D2, d2); u8x8_SetPin(u8x8, U8X8_PIN_D3, d3); u8x8_SetPin(u8x8, U8X8_PIN_D4, d4); u8x8_SetPin(u8x8, U8X8_PIN_D5, d5); u8x8_SetPin(u8x8, U8X8_PIN_D6, d6); u8x8_SetPin(u8x8, U8X8_PIN_D7, d7); u8x8_SetPin(u8x8, U8X8_PIN_E, wr); u8x8_SetPin(u8x8, U8X8_PIN_CS, cs); u8x8_SetPin(u8x8, U8X8_PIN_DC, dc); u8x8_SetPin(u8x8, U8X8_PIN_RESET, reset); } #endif /* obsolete com specific setup */ void u8x8_SetPin_KS0108(u8x8_t *u8x8, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t enable, uint8_t dc, uint8_t cs0, uint8_t cs1, uint8_t cs2, uint8_t reset) { u8x8_SetPin(u8x8, U8X8_PIN_D0, d0); u8x8_SetPin(u8x8, U8X8_PIN_D1, d1); u8x8_SetPin(u8x8, U8X8_PIN_D2, d2); u8x8_SetPin(u8x8, U8X8_PIN_D3, d3); u8x8_SetPin(u8x8, U8X8_PIN_D4, d4); u8x8_SetPin(u8x8, U8X8_PIN_D5, d5); u8x8_SetPin(u8x8, U8X8_PIN_D6, d6); u8x8_SetPin(u8x8, U8X8_PIN_D7, d7); u8x8_SetPin(u8x8, U8X8_PIN_E, enable); u8x8_SetPin(u8x8, U8X8_PIN_DC, dc); u8x8_SetPin(u8x8, U8X8_PIN_CS, cs0); u8x8_SetPin(u8x8, U8X8_PIN_CS1, cs1); u8x8_SetPin(u8x8, U8X8_PIN_CS2, cs2); u8x8_SetPin(u8x8, U8X8_PIN_RESET, reset); } void u8x8_SetPin_SED1520(u8x8_t *u8x8, uint8_t d0, uint8_t d1, uint8_t d2, uint8_t d3, uint8_t d4, uint8_t d5, uint8_t d6, uint8_t d7, uint8_t dc, uint8_t e1, uint8_t e2, uint8_t reset) { u8x8_SetPin(u8x8, U8X8_PIN_D0, d0); u8x8_SetPin(u8x8, U8X8_PIN_D1, d1); u8x8_SetPin(u8x8, U8X8_PIN_D2, d2); u8x8_SetPin(u8x8, U8X8_PIN_D3, d3); u8x8_SetPin(u8x8, U8X8_PIN_D4, d4); u8x8_SetPin(u8x8, U8X8_PIN_D5, d5); u8x8_SetPin(u8x8, U8X8_PIN_D6, d6); u8x8_SetPin(u8x8, U8X8_PIN_D7, d7); u8x8_SetPin(u8x8, U8X8_PIN_E, e1); u8x8_SetPin(u8x8, U8X8_PIN_CS, e2); u8x8_SetPin(u8x8, U8X8_PIN_DC, dc); u8x8_SetPin(u8x8, U8X8_PIN_RESET, reset); } #endif // U8X8_USE_PINS ================================================ FILE: Drivers/u8g2/Src/u8g2_bitmap.c ================================================ /* u8g2_bitmap.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8g2.h" void u8g2_SetBitmapMode(u8g2_t *u8g2, uint8_t is_transparent) { u8g2->bitmap_transparency = is_transparent; } /* x,y Position on the display len Length of bitmap line in pixel. Note: This differs from u8glib which had a bytecount here. b Pointer to the bitmap line. Only draw pixels which are set. */ void u8g2_DrawHorizontalBitmap(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, const uint8_t *b) { uint8_t mask; uint8_t color = u8g2->draw_color; uint8_t ncolor = (color == 0 ? 1 : 0); #ifdef U8G2_WITH_INTERSECTION if ( u8g2_IsIntersection(u8g2, x, y, x+len, y+1) == 0 ) return; #endif /* U8G2_WITH_INTERSECTION */ mask = 128; while(len > 0) { if ( *b & mask ) { u8g2->draw_color = color; u8g2_DrawHVLine(u8g2, x, y, 1, 0); } else if ( u8g2->bitmap_transparency == 0 ) { u8g2->draw_color = ncolor; u8g2_DrawHVLine(u8g2, x, y, 1, 0); } x++; mask >>= 1; if ( mask == 0 ) { mask = 128; b++; } len--; } u8g2->draw_color = color; } /* u8glib compatible bitmap draw function */ void u8g2_DrawBitmap(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t cnt, u8g2_uint_t h, const uint8_t *bitmap) { u8g2_uint_t w; w = cnt; w *= 8; #ifdef U8G2_WITH_INTERSECTION if ( u8g2_IsIntersection(u8g2, x, y, x+w, y+h) == 0 ) return; #endif /* U8G2_WITH_INTERSECTION */ while( h > 0 ) { u8g2_DrawHorizontalBitmap(u8g2, x, y, w, bitmap); bitmap += cnt; y++; h--; } } void u8g2_DrawHXBM(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, const uint8_t *b) { uint8_t mask; uint8_t color = u8g2->draw_color; uint8_t ncolor = (color == 0 ? 1 : 0); #ifdef U8G2_WITH_INTERSECTION if ( u8g2_IsIntersection(u8g2, x, y, x+len, y+1) == 0 ) return; #endif /* U8G2_WITH_INTERSECTION */ mask = 1; while(len > 0) { if ( *b & mask ) { u8g2->draw_color = color; u8g2_DrawHVLine(u8g2, x, y, 1, 0); } else if ( u8g2->bitmap_transparency == 0 ) { u8g2->draw_color = ncolor; u8g2_DrawHVLine(u8g2, x, y, 1, 0); } x++; mask <<= 1; if ( mask == 0 ) { mask = 1; b++; } len--; } u8g2->draw_color = color; } void u8g2_DrawXBM(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, const uint8_t *bitmap) { u8g2_uint_t blen; blen = w; blen += 7; blen >>= 3; #ifdef U8G2_WITH_INTERSECTION if ( u8g2_IsIntersection(u8g2, x, y, x+w, y+h) == 0 ) return; #endif /* U8G2_WITH_INTERSECTION */ while( h > 0 ) { u8g2_DrawHXBM(u8g2, x, y, w, bitmap); bitmap += blen; y++; h--; } } void u8g2_DrawHXBMP(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, const uint8_t *b) { uint8_t mask; uint8_t color = u8g2->draw_color; uint8_t ncolor = (color == 0 ? 1 : 0); #ifdef U8G2_WITH_INTERSECTION if ( u8g2_IsIntersection(u8g2, x, y, x+len, y+1) == 0 ) return; #endif /* U8G2_WITH_INTERSECTION */ mask = 1; while(len > 0) { if( u8x8_pgm_read(b) & mask ) { u8g2->draw_color = color; u8g2_DrawHVLine(u8g2, x, y, 1, 0); } else if( u8g2->bitmap_transparency == 0 ) { u8g2->draw_color = ncolor; u8g2_DrawHVLine(u8g2, x, y, 1, 0); } x++; mask <<= 1; if ( mask == 0 ) { mask = 1; b++; } len--; } u8g2->draw_color = color; } void u8g2_DrawXBMP(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, const uint8_t *bitmap) { u8g2_uint_t blen; blen = w; blen += 7; blen >>= 3; #ifdef U8G2_WITH_INTERSECTION if ( u8g2_IsIntersection(u8g2, x, y, x+w, y+h) == 0 ) return; #endif /* U8G2_WITH_INTERSECTION */ while( h > 0 ) { u8g2_DrawHXBMP(u8g2, x, y, w, bitmap); bitmap += blen; y++; h--; } } ================================================ FILE: Drivers/u8g2/Src/u8g2_box.c ================================================ /* u8g2_box.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8g2.h" /* draw a filled box restriction: does not work for w = 0 or h = 0 */ void u8g2_DrawBox(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h) { #ifdef U8G2_WITH_INTERSECTION if ( u8g2_IsIntersection(u8g2, x, y, x+w, y+h) == 0 ) return; #endif /* U8G2_WITH_INTERSECTION */ while( h != 0 ) { u8g2_DrawHVLine(u8g2, x, y, w, 0); y++; h--; } } /* draw a frame (empty box) restriction: does not work for w = 0 or h = 0 ToDo: pixel in the corners are drawn twice. This could be optimized. */ void u8g2_DrawFrame(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h) { u8g2_uint_t xtmp = x; #ifdef U8G2_WITH_INTERSECTION if ( u8g2_IsIntersection(u8g2, x, y, x+w, y+h) == 0 ) return; #endif /* U8G2_WITH_INTERSECTION */ u8g2_DrawHVLine(u8g2, x, y, w, 0); u8g2_DrawHVLine(u8g2, x, y, h, 1); x+=w; x--; u8g2_DrawHVLine(u8g2, x, y, h, 1); y+=h; y--; u8g2_DrawHVLine(u8g2, xtmp, y, w, 0); } void u8g2_DrawRBox(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, u8g2_uint_t r) { u8g2_uint_t xl, yu; u8g2_uint_t yl, xr; #ifdef U8G2_WITH_INTERSECTION if ( u8g2_IsIntersection(u8g2, x, y, x+w, y+h) == 0 ) return; #endif /* U8G2_WITH_INTERSECTION */ xl = x; xl += r; yu = y; yu += r; xr = x; xr += w; xr -= r; xr -= 1; yl = y; yl += h; yl -= r; yl -= 1; u8g2_DrawDisc(u8g2, xl, yu, r, U8G2_DRAW_UPPER_LEFT); u8g2_DrawDisc(u8g2, xr, yu, r, U8G2_DRAW_UPPER_RIGHT); u8g2_DrawDisc(u8g2, xl, yl, r, U8G2_DRAW_LOWER_LEFT); u8g2_DrawDisc(u8g2, xr, yl, r, U8G2_DRAW_LOWER_RIGHT); { u8g2_uint_t ww, hh; ww = w; ww -= r; ww -= r; xl++; yu++; if ( ww >= 3 ) { ww -= 2; u8g2_DrawBox(u8g2, xl, y, ww, r+1); u8g2_DrawBox(u8g2, xl, yl, ww, r+1); } hh = h; hh -= r; hh -= r; //h--; if ( hh >= 3 ) { hh -= 2; u8g2_DrawBox(u8g2, x, yu, w, hh); } } } void u8g2_DrawRFrame(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, u8g2_uint_t r) { u8g2_uint_t xl, yu; #ifdef U8G2_WITH_INTERSECTION if ( u8g2_IsIntersection(u8g2, x, y, x+w, y+h) == 0 ) return; #endif /* U8G2_WITH_INTERSECTION */ xl = x; xl += r; yu = y; yu += r; { u8g2_uint_t yl, xr; xr = x; xr += w; xr -= r; xr -= 1; yl = y; yl += h; yl -= r; yl -= 1; u8g2_DrawCircle(u8g2, xl, yu, r, U8G2_DRAW_UPPER_LEFT); u8g2_DrawCircle(u8g2, xr, yu, r, U8G2_DRAW_UPPER_RIGHT); u8g2_DrawCircle(u8g2, xl, yl, r, U8G2_DRAW_LOWER_LEFT); u8g2_DrawCircle(u8g2, xr, yl, r, U8G2_DRAW_LOWER_RIGHT); } { u8g2_uint_t ww, hh; ww = w; ww -= r; ww -= r; hh = h; hh -= r; hh -= r; xl++; yu++; if ( ww >= 3 ) { ww -= 2; h--; u8g2_DrawHLine(u8g2, xl, y, ww); u8g2_DrawHLine(u8g2, xl, y+h, ww); } if ( hh >= 3 ) { hh -= 2; w--; u8g2_DrawVLine(u8g2, x, yu, hh); u8g2_DrawVLine(u8g2, x+w, yu, hh); } } } ================================================ FILE: Drivers/u8g2/Src/u8g2_buffer.c ================================================ /* u8g2_buffer.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8g2.h" #include /*============================================*/ void u8g2_ClearBuffer(u8g2_t *u8g2) { size_t cnt; cnt = u8g2_GetU8x8(u8g2)->display_info->tile_width; cnt *= u8g2->tile_buf_height; cnt *= 8; memset(u8g2->tile_buf_ptr, 0, cnt); } /*============================================*/ static void u8g2_send_tile_row(u8g2_t *u8g2, uint8_t src_tile_row, uint8_t dest_tile_row) { uint8_t *ptr; uint16_t offset; uint8_t w; w = u8g2_GetU8x8(u8g2)->display_info->tile_width; offset = src_tile_row; ptr = u8g2->tile_buf_ptr; offset *= w; offset *= 8; ptr += offset; u8x8_DrawTile(u8g2_GetU8x8(u8g2), 0, dest_tile_row, w, ptr); } /* write the buffer to the display RAM. For most displays, this will make the content visible to the user. Some displays (like the SSD1606) require a u8x8_RefreshDisplay() */ static void u8g2_send_buffer(u8g2_t *u8g2) U8X8_NOINLINE; static void u8g2_send_buffer(u8g2_t *u8g2) { uint8_t src_row; uint8_t src_max; uint8_t dest_row; uint8_t dest_max; src_row = 0; src_max = u8g2->tile_buf_height; dest_row = u8g2->tile_curr_row; dest_max = u8g2_GetU8x8(u8g2)->display_info->tile_height; do { u8g2_send_tile_row(u8g2, src_row, dest_row); src_row++; dest_row++; } while( src_row < src_max && dest_row < dest_max ); } /* same as u8g2_send_buffer but also send the DISPLAY_REFRESH message (used by SSD1606) */ void u8g2_SendBuffer(u8g2_t *u8g2) { u8g2_send_buffer(u8g2); u8x8_RefreshDisplay( u8g2_GetU8x8(u8g2) ); } /*============================================*/ void u8g2_SetBufferCurrTileRow(u8g2_t *u8g2, uint8_t row) { u8g2->tile_curr_row = row; u8g2->cb->update_dimension(u8g2); u8g2->cb->update_page_win(u8g2); } void u8g2_FirstPage(u8g2_t *u8g2) { if ( u8g2->is_auto_page_clear ) { u8g2_ClearBuffer(u8g2); } u8g2_SetBufferCurrTileRow(u8g2, 0); } uint8_t u8g2_NextPage(u8g2_t *u8g2) { uint8_t row; u8g2_send_buffer(u8g2); row = u8g2->tile_curr_row; row += u8g2->tile_buf_height; if ( row >= u8g2_GetU8x8(u8g2)->display_info->tile_height ) { u8x8_RefreshDisplay( u8g2_GetU8x8(u8g2) ); return 0; } if ( u8g2->is_auto_page_clear ) { u8g2_ClearBuffer(u8g2); } u8g2_SetBufferCurrTileRow(u8g2, row); return 1; } /*============================================*/ /* Description: Update a sub area of the display, given by tile position, width and height. The arguments are "tile" coordinates. Any u8g2 rotation is ignored. This procedure only checks whether full buffer mode is active. There is no error checking for the arguments: It is the responsibility of the user to ensure, that the provided arguments are correct. Limitations: - Only available in full buffer mode (will not do anything in page mode) - Tile positions and sizes (pixel position divided by 8) - Any display rotation/mirror is ignored - Only works with displays, which support U8x8 API - Will not send the e-paper refresh message (will probably not work with e-paper devices) */ void u8g2_UpdateDisplayArea(u8g2_t *u8g2, uint8_t tx, uint8_t ty, uint8_t tw, uint8_t th) { uint16_t page_size; uint8_t *ptr; /* check, whether we are in full buffer mode */ if ( u8g2->tile_buf_height != u8g2_GetU8x8(u8g2)->display_info->tile_height ) return; /* not in full buffer mode, do nothing */ page_size = u8g2->pixel_buf_width; /* 8*u8g2->u8g2_GetU8x8(u8g2)->display_info->tile_width */ ptr = u8g2_GetBufferPtr(u8g2); ptr += tx*8; ptr += page_size*ty; while( th > 0 ) { u8x8_DrawTile( u8g2_GetU8x8(u8g2), tx, ty, tw, ptr ); ptr += page_size; ty++; th--; } } /* same as sendBuffer, but does not send the ePaper refresh message */ void u8g2_UpdateDisplay(u8g2_t *u8g2) { u8g2_send_buffer(u8g2); } ================================================ FILE: Drivers/u8g2/Src/u8g2_circle.c ================================================ /* u8g2_box.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8g2.h" /*==============================================*/ /* Circle */ static void u8g2_draw_circle_section(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t x0, u8g2_uint_t y0, uint8_t option) U8G2_NOINLINE; static void u8g2_draw_circle_section(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t x0, u8g2_uint_t y0, uint8_t option) { /* upper right */ if ( option & U8G2_DRAW_UPPER_RIGHT ) { u8g2_DrawPixel(u8g2, x0 + x, y0 - y); u8g2_DrawPixel(u8g2, x0 + y, y0 - x); } /* upper left */ if ( option & U8G2_DRAW_UPPER_LEFT ) { u8g2_DrawPixel(u8g2, x0 - x, y0 - y); u8g2_DrawPixel(u8g2, x0 - y, y0 - x); } /* lower right */ if ( option & U8G2_DRAW_LOWER_RIGHT ) { u8g2_DrawPixel(u8g2, x0 + x, y0 + y); u8g2_DrawPixel(u8g2, x0 + y, y0 + x); } /* lower left */ if ( option & U8G2_DRAW_LOWER_LEFT ) { u8g2_DrawPixel(u8g2, x0 - x, y0 + y); u8g2_DrawPixel(u8g2, x0 - y, y0 + x); } } static void u8g2_draw_circle(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rad, uint8_t option) { u8g2_int_t f; u8g2_int_t ddF_x; u8g2_int_t ddF_y; u8g2_uint_t x; u8g2_uint_t y; f = 1; f -= rad; ddF_x = 1; ddF_y = 0; ddF_y -= rad; ddF_y *= 2; x = 0; y = rad; u8g2_draw_circle_section(u8g2, x, y, x0, y0, option); while ( x < y ) { if (f >= 0) { y--; ddF_y += 2; f += ddF_y; } x++; ddF_x += 2; f += ddF_x; u8g2_draw_circle_section(u8g2, x, y, x0, y0, option); } } void u8g2_DrawCircle(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rad, uint8_t option) { /* check for bounding box */ #ifdef U8G2_WITH_INTERSECTION { if ( u8g2_IsIntersection(u8g2, x0-rad, y0-rad, x0+rad+1, y0+rad+1) == 0 ) return; } #endif /* U8G2_WITH_INTERSECTION */ /* draw circle */ u8g2_draw_circle(u8g2, x0, y0, rad, option); } /*==============================================*/ /* Disk */ static void u8g2_draw_disc_section(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t x0, u8g2_uint_t y0, uint8_t option) U8G2_NOINLINE; static void u8g2_draw_disc_section(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t x0, u8g2_uint_t y0, uint8_t option) { /* upper right */ if ( option & U8G2_DRAW_UPPER_RIGHT ) { u8g2_DrawVLine(u8g2, x0+x, y0-y, y+1); u8g2_DrawVLine(u8g2, x0+y, y0-x, x+1); } /* upper left */ if ( option & U8G2_DRAW_UPPER_LEFT ) { u8g2_DrawVLine(u8g2, x0-x, y0-y, y+1); u8g2_DrawVLine(u8g2, x0-y, y0-x, x+1); } /* lower right */ if ( option & U8G2_DRAW_LOWER_RIGHT ) { u8g2_DrawVLine(u8g2, x0+x, y0, y+1); u8g2_DrawVLine(u8g2, x0+y, y0, x+1); } /* lower left */ if ( option & U8G2_DRAW_LOWER_LEFT ) { u8g2_DrawVLine(u8g2, x0-x, y0, y+1); u8g2_DrawVLine(u8g2, x0-y, y0, x+1); } } static void u8g2_draw_disc(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rad, uint8_t option) { u8g2_int_t f; u8g2_int_t ddF_x; u8g2_int_t ddF_y; u8g2_uint_t x; u8g2_uint_t y; f = 1; f -= rad; ddF_x = 1; ddF_y = 0; ddF_y -= rad; ddF_y *= 2; x = 0; y = rad; u8g2_draw_disc_section(u8g2, x, y, x0, y0, option); while ( x < y ) { if (f >= 0) { y--; ddF_y += 2; f += ddF_y; } x++; ddF_x += 2; f += ddF_x; u8g2_draw_disc_section(u8g2, x, y, x0, y0, option); } } void u8g2_DrawDisc(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rad, uint8_t option) { /* check for bounding box */ #ifdef U8G2_WITH_INTERSECTION { if ( u8g2_IsIntersection(u8g2, x0-rad, y0-rad, x0+rad+1, y0+rad+1) == 0 ) return; } #endif /* U8G2_WITH_INTERSECTION */ /* draw disc */ u8g2_draw_disc(u8g2, x0, y0, rad, option); } /*==============================================*/ /* Ellipse */ /* Source: Foley, Computer Graphics, p 90 */ static void u8g2_draw_ellipse_section(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t x0, u8g2_uint_t y0, uint8_t option) U8G2_NOINLINE; static void u8g2_draw_ellipse_section(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t x0, u8g2_uint_t y0, uint8_t option) { /* upper right */ if ( option & U8G2_DRAW_UPPER_RIGHT ) { u8g2_DrawPixel(u8g2, x0 + x, y0 - y); } /* upper left */ if ( option & U8G2_DRAW_UPPER_LEFT ) { u8g2_DrawPixel(u8g2, x0 - x, y0 - y); } /* lower right */ if ( option & U8G2_DRAW_LOWER_RIGHT ) { u8g2_DrawPixel(u8g2, x0 + x, y0 + y); } /* lower left */ if ( option & U8G2_DRAW_LOWER_LEFT ) { u8g2_DrawPixel(u8g2, x0 - x, y0 + y); } } static void u8g2_draw_ellipse(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rx, u8g2_uint_t ry, uint8_t option) { u8g2_uint_t x, y; u8g2_long_t xchg, ychg; u8g2_long_t err; u8g2_long_t rxrx2; u8g2_long_t ryry2; u8g2_long_t stopx, stopy; rxrx2 = rx; rxrx2 *= rx; rxrx2 *= 2; ryry2 = ry; ryry2 *= ry; ryry2 *= 2; x = rx; y = 0; xchg = 1; xchg -= rx; xchg -= rx; xchg *= ry; xchg *= ry; ychg = rx; ychg *= rx; err = 0; stopx = ryry2; stopx *= rx; stopy = 0; while( stopx >= stopy ) { u8g2_draw_ellipse_section(u8g2, x, y, x0, y0, option); y++; stopy += rxrx2; err += ychg; ychg += rxrx2; if ( 2*err+xchg > 0 ) { x--; stopx -= ryry2; err += xchg; xchg += ryry2; } } x = 0; y = ry; xchg = ry; xchg *= ry; ychg = 1; ychg -= ry; ychg -= ry; ychg *= rx; ychg *= rx; err = 0; stopx = 0; stopy = rxrx2; stopy *= ry; while( stopx <= stopy ) { u8g2_draw_ellipse_section(u8g2, x, y, x0, y0, option); x++; stopx += ryry2; err += xchg; xchg += ryry2; if ( 2*err+ychg > 0 ) { y--; stopy -= rxrx2; err += ychg; ychg += rxrx2; } } } void u8g2_DrawEllipse(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rx, u8g2_uint_t ry, uint8_t option) { /* check for bounding box */ #ifdef U8G2_WITH_INTERSECTION { if ( u8g2_IsIntersection(u8g2, x0-rx, y0-ry, x0+rx+1, y0+ry+1) == 0 ) return; } #endif /* U8G2_WITH_INTERSECTION */ u8g2_draw_ellipse(u8g2, x0, y0, rx, ry, option); } /*==============================================*/ /* Filled Ellipse */ static void u8g2_draw_filled_ellipse_section(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t x0, u8g2_uint_t y0, uint8_t option) U8G2_NOINLINE; static void u8g2_draw_filled_ellipse_section(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t x0, u8g2_uint_t y0, uint8_t option) { /* upper right */ if ( option & U8G2_DRAW_UPPER_RIGHT ) { u8g2_DrawVLine(u8g2, x0+x, y0-y, y+1); } /* upper left */ if ( option & U8G2_DRAW_UPPER_LEFT ) { u8g2_DrawVLine(u8g2, x0-x, y0-y, y+1); } /* lower right */ if ( option & U8G2_DRAW_LOWER_RIGHT ) { u8g2_DrawVLine(u8g2, x0+x, y0, y+1); } /* lower left */ if ( option & U8G2_DRAW_LOWER_LEFT ) { u8g2_DrawVLine(u8g2, x0-x, y0, y+1); } } static void u8g2_draw_filled_ellipse(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rx, u8g2_uint_t ry, uint8_t option) { u8g2_uint_t x, y; u8g2_long_t xchg, ychg; u8g2_long_t err; u8g2_long_t rxrx2; u8g2_long_t ryry2; u8g2_long_t stopx, stopy; rxrx2 = rx; rxrx2 *= rx; rxrx2 *= 2; ryry2 = ry; ryry2 *= ry; ryry2 *= 2; x = rx; y = 0; xchg = 1; xchg -= rx; xchg -= rx; xchg *= ry; xchg *= ry; ychg = rx; ychg *= rx; err = 0; stopx = ryry2; stopx *= rx; stopy = 0; while( stopx >= stopy ) { u8g2_draw_filled_ellipse_section(u8g2, x, y, x0, y0, option); y++; stopy += rxrx2; err += ychg; ychg += rxrx2; if ( 2*err+xchg > 0 ) { x--; stopx -= ryry2; err += xchg; xchg += ryry2; } } x = 0; y = ry; xchg = ry; xchg *= ry; ychg = 1; ychg -= ry; ychg -= ry; ychg *= rx; ychg *= rx; err = 0; stopx = 0; stopy = rxrx2; stopy *= ry; while( stopx <= stopy ) { u8g2_draw_filled_ellipse_section(u8g2, x, y, x0, y0, option); x++; stopx += ryry2; err += xchg; xchg += ryry2; if ( 2*err+ychg > 0 ) { y--; stopy -= rxrx2; err += ychg; ychg += rxrx2; } } } void u8g2_DrawFilledEllipse(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rx, u8g2_uint_t ry, uint8_t option) { /* check for bounding box */ #ifdef U8G2_WITH_INTERSECTION { if ( u8g2_IsIntersection(u8g2, x0-rx, y0-ry, x0+rx+1, y0+ry+1) == 0 ) return; } #endif /* U8G2_WITH_INTERSECTION */ u8g2_draw_filled_ellipse(u8g2, x0, y0, rx, ry, option); } ================================================ FILE: Drivers/u8g2/Src/u8g2_cleardisplay.c ================================================ /* u8g2_cleardisplay.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8g2.h" /* Clear screen buffer & display reliable for all u8g2 displays. */ /* This is done with u8g2 picture loop, because we can not use the u8x8 function in all cases */ void u8g2_ClearDisplay(u8g2_t *u8g2) { u8g2_FirstPage(u8g2); do { } while ( u8g2_NextPage(u8g2) ); /* This function is usually called during startup (u8g2.begin()). However the user might want to use full buffer mode with clear and send commands. This will not work because the current tile row is modified by the picture loop above. To fix this, reset the tile row to 0, issue #370 A workaround would be, that the user sets the current tile row to 0 manually. */ u8g2_SetBufferCurrTileRow(u8g2, 0); } ================================================ FILE: Drivers/u8g2/Src/u8g2_d_memory.c ================================================ /* u8g2_d_memory.c */ /* generated code, codebuild, u8g2 project */ #include "u8g2.h" uint8_t *u8g2_m_16_4_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[128]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_16_4_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[256]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_16_4_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 4; return 0; #else static uint8_t buf[512]; *page_cnt = 4; return buf; #endif } uint8_t *u8g2_m_16_8_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[128]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_16_8_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[256]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_16_8_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 8; return 0; #else static uint8_t buf[1024]; *page_cnt = 8; return buf; #endif } uint8_t *u8g2_m_9_5_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[72]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_9_5_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[144]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_9_5_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 5; return 0; #else static uint8_t buf[360]; *page_cnt = 5; return buf; #endif } uint8_t *u8g2_m_8_4_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[64]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_8_4_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[128]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_8_4_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 4; return 0; #else static uint8_t buf[256]; *page_cnt = 4; return buf; #endif } uint8_t *u8g2_m_8_16_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[64]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_8_16_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[128]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_8_16_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 16; return 0; #else static uint8_t buf[1024]; *page_cnt = 16; return buf; #endif } uint8_t *u8g2_m_12_12_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[96]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_12_12_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[192]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_12_12_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 12; return 0; #else static uint8_t buf[1152]; *page_cnt = 12; return buf; #endif } uint8_t *u8g2_m_16_16_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[128]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_16_16_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[256]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_16_16_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 16; return 0; #else static uint8_t buf[2048]; *page_cnt = 16; return buf; #endif } uint8_t *u8g2_m_20_20_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[160]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_20_20_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[320]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_20_20_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 20; return 0; #else static uint8_t buf[3200]; *page_cnt = 20; return buf; #endif } uint8_t *u8g2_m_32_8_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[256]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_32_8_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[512]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_32_8_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 8; return 0; #else static uint8_t buf[2048]; *page_cnt = 8; return buf; #endif } uint8_t *u8g2_m_8_6_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[64]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_8_6_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[128]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_8_6_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 6; return 0; #else static uint8_t buf[384]; *page_cnt = 6; return buf; #endif } uint8_t *u8g2_m_6_8_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[48]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_6_8_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[96]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_6_8_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 8; return 0; #else static uint8_t buf[384]; *page_cnt = 8; return buf; #endif } uint8_t *u8g2_m_12_2_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[96]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_12_2_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[192]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_12_2_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[192]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_16_12_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[128]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_16_12_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[256]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_16_12_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 12; return 0; #else static uint8_t buf[1536]; *page_cnt = 12; return buf; #endif } uint8_t *u8g2_m_32_4_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[256]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_32_4_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[512]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_32_4_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 4; return 0; #else static uint8_t buf[1024]; *page_cnt = 4; return buf; #endif } uint8_t *u8g2_m_24_4_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[192]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_24_4_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[384]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_24_4_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 4; return 0; #else static uint8_t buf[768]; *page_cnt = 4; return buf; #endif } uint8_t *u8g2_m_50_30_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[400]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_50_30_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[800]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_50_30_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 30; return 0; #else static uint8_t buf[12000]; *page_cnt = 30; return buf; #endif } uint8_t *u8g2_m_18_21_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[144]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_18_21_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[288]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_18_21_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 21; return 0; #else static uint8_t buf[3024]; *page_cnt = 21; return buf; #endif } uint8_t *u8g2_m_13_8_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[104]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_13_8_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[208]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_13_8_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 8; return 0; #else static uint8_t buf[832]; *page_cnt = 8; return buf; #endif } uint8_t *u8g2_m_11_6_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[88]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_11_6_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[176]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_11_6_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 6; return 0; #else static uint8_t buf[528]; *page_cnt = 6; return buf; #endif } uint8_t *u8g2_m_12_9_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[96]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_12_9_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[192]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_12_9_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 9; return 0; #else static uint8_t buf[864]; *page_cnt = 9; return buf; #endif } uint8_t *u8g2_m_24_8_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[192]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_24_8_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[384]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_24_8_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 8; return 0; #else static uint8_t buf[1536]; *page_cnt = 8; return buf; #endif } uint8_t *u8g2_m_30_8_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[240]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_30_8_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[480]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_30_8_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 8; return 0; #else static uint8_t buf[1920]; *page_cnt = 8; return buf; #endif } uint8_t *u8g2_m_30_15_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[240]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_30_15_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[480]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_30_15_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 15; return 0; #else static uint8_t buf[3600]; *page_cnt = 15; return buf; #endif } uint8_t *u8g2_m_30_16_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[240]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_30_16_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[480]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_30_16_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 16; return 0; #else static uint8_t buf[3840]; *page_cnt = 16; return buf; #endif } uint8_t *u8g2_m_20_16_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[160]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_20_16_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[320]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_20_16_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 16; return 0; #else static uint8_t buf[2560]; *page_cnt = 16; return buf; #endif } uint8_t *u8g2_m_20_13_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[160]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_20_13_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[320]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_20_13_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 13; return 0; #else static uint8_t buf[2080]; *page_cnt = 13; return buf; #endif } uint8_t *u8g2_m_30_20_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[240]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_30_20_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[480]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_30_20_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 20; return 0; #else static uint8_t buf[4800]; *page_cnt = 20; return buf; #endif } uint8_t *u8g2_m_40_30_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[320]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_40_30_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[640]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_40_30_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 30; return 0; #else static uint8_t buf[9600]; *page_cnt = 30; return buf; #endif } uint8_t *u8g2_m_17_4_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[136]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_17_4_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[272]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_17_4_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 4; return 0; #else static uint8_t buf[544]; *page_cnt = 4; return buf; #endif } uint8_t *u8g2_m_17_8_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[136]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_17_8_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[272]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_17_8_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 8; return 0; #else static uint8_t buf[1088]; *page_cnt = 8; return buf; #endif } uint8_t *u8g2_m_48_17_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[384]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_48_17_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[768]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_48_17_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 17; return 0; #else static uint8_t buf[6528]; *page_cnt = 17; return buf; #endif } uint8_t *u8g2_m_32_16_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[256]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_32_16_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[512]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_32_16_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 16; return 0; #else static uint8_t buf[4096]; *page_cnt = 16; return buf; #endif } uint8_t *u8g2_m_32_20_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[256]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_32_20_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[512]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_32_20_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 20; return 0; #else static uint8_t buf[5120]; *page_cnt = 20; return buf; #endif } uint8_t *u8g2_m_22_13_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[176]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_22_13_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[352]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_22_13_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 13; return 0; #else static uint8_t buf[2288]; *page_cnt = 13; return buf; #endif } uint8_t *u8g2_m_24_12_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[192]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_24_12_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[384]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_24_12_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 12; return 0; #else static uint8_t buf[2304]; *page_cnt = 12; return buf; #endif } uint8_t *u8g2_m_20_10_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[160]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_20_10_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[320]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_20_10_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 10; return 0; #else static uint8_t buf[1600]; *page_cnt = 10; return buf; #endif } uint8_t *u8g2_m_22_9_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[176]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_22_9_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[352]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_22_9_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 9; return 0; #else static uint8_t buf[1584]; *page_cnt = 9; return buf; #endif } uint8_t *u8g2_m_25_25_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[200]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_25_25_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[400]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_25_25_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 25; return 0; #else static uint8_t buf[5000]; *page_cnt = 25; return buf; #endif } uint8_t *u8g2_m_37_16_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[296]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_37_16_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[592]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_37_16_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 16; return 0; #else static uint8_t buf[4736]; *page_cnt = 16; return buf; #endif } uint8_t *u8g2_m_8_1_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[64]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_8_1_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[128]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_8_1_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[64]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_4_1_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[32]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_4_1_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[64]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_4_1_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[32]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_1_1_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[8]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_1_1_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[16]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_1_1_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[8]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_48_30_1(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 1; return 0; #else static uint8_t buf[384]; *page_cnt = 1; return buf; #endif } uint8_t *u8g2_m_48_30_2(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 2; return 0; #else static uint8_t buf[768]; *page_cnt = 2; return buf; #endif } uint8_t *u8g2_m_48_30_f(uint8_t *page_cnt) { #ifdef U8G2_USE_DYNAMIC_ALLOC *page_cnt = 30; return 0; #else static uint8_t buf[11520]; *page_cnt = 30; return buf; #endif } /* end of generated code */ ================================================ FILE: Drivers/u8g2/Src/u8g2_d_setup.c ================================================ /* u8g2_d_setup.c */ /* generated code, codebuild, u8g2 project */ #include "u8g2.h" /* ssd1305 */ /* ssd1305 1 */ void u8g2_Setup_ssd1305_128x32_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x32_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1305_128x32_adafruit_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x32_adafruit, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1305 2 */ void u8g2_Setup_ssd1305_128x32_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x32_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1305_128x32_adafruit_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x32_adafruit, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1305 f */ void u8g2_Setup_ssd1305_128x32_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x32_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1305_128x32_adafruit_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x32_adafruit, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1305 */ /* ssd1305 1 */ void u8g2_Setup_ssd1305_i2c_128x32_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x32_noname, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1305_i2c_128x32_adafruit_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x32_adafruit, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1305 2 */ void u8g2_Setup_ssd1305_i2c_128x32_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x32_noname, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1305_i2c_128x32_adafruit_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x32_adafruit, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1305 f */ void u8g2_Setup_ssd1305_i2c_128x32_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x32_noname, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1305_i2c_128x32_adafruit_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x32_adafruit, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1305 */ /* ssd1305 1 */ void u8g2_Setup_ssd1305_128x64_adafruit_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x64_adafruit, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1305 2 */ void u8g2_Setup_ssd1305_128x64_adafruit_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x64_adafruit, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1305 f */ void u8g2_Setup_ssd1305_128x64_adafruit_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x64_adafruit, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1305 */ /* ssd1305 1 */ void u8g2_Setup_ssd1305_i2c_128x64_adafruit_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x64_adafruit, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1305 2 */ void u8g2_Setup_ssd1305_i2c_128x64_adafruit_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x64_adafruit, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1305 f */ void u8g2_Setup_ssd1305_i2c_128x64_adafruit_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1305_128x64_adafruit, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 */ /* ssd1306 1 */ void u8g2_Setup_ssd1306_128x64_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_128x64_vcomh0_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_vcomh0, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_128x64_alt0_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_alt0, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 2 */ void u8g2_Setup_ssd1306_128x64_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_128x64_vcomh0_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_vcomh0, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_128x64_alt0_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_alt0, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 f */ void u8g2_Setup_ssd1306_128x64_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_128x64_vcomh0_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_vcomh0, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_128x64_alt0_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_alt0, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 */ /* ssd1306 1 */ void u8g2_Setup_ssd1306_i2c_128x64_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_noname, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_i2c_128x64_vcomh0_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_vcomh0, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_i2c_128x64_alt0_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_alt0, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 2 */ void u8g2_Setup_ssd1306_i2c_128x64_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_noname, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_i2c_128x64_vcomh0_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_vcomh0, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_i2c_128x64_alt0_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_alt0, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 f */ void u8g2_Setup_ssd1306_i2c_128x64_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_noname, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_i2c_128x64_vcomh0_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_vcomh0, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_i2c_128x64_alt0_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x64_alt0, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 */ /* sh1106 1 */ void u8g2_Setup_sh1106_128x64_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1106_128x64_vcomh0_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_vcomh0, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1106_128x64_winstar_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_winstar, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 2 */ void u8g2_Setup_sh1106_128x64_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1106_128x64_vcomh0_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_vcomh0, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1106_128x64_winstar_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_winstar, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 f */ void u8g2_Setup_sh1106_128x64_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1106_128x64_vcomh0_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_vcomh0, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1106_128x64_winstar_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_winstar, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 */ /* sh1106 1 */ void u8g2_Setup_sh1106_i2c_128x64_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_noname, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1106_i2c_128x64_vcomh0_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_vcomh0, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1106_i2c_128x64_winstar_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_winstar, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 2 */ void u8g2_Setup_sh1106_i2c_128x64_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_noname, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1106_i2c_128x64_vcomh0_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_vcomh0, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1106_i2c_128x64_winstar_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_winstar, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 f */ void u8g2_Setup_sh1106_i2c_128x64_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_noname, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1106_i2c_128x64_vcomh0_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_vcomh0, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1106_i2c_128x64_winstar_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_128x64_winstar, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 */ /* sh1106 1 */ void u8g2_Setup_sh1106_72x40_wise_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_72x40_wise, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_9_5_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 2 */ void u8g2_Setup_sh1106_72x40_wise_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_72x40_wise, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_9_5_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 f */ void u8g2_Setup_sh1106_72x40_wise_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_72x40_wise, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_9_5_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 */ /* sh1106 1 */ void u8g2_Setup_sh1106_i2c_72x40_wise_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_72x40_wise, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_9_5_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 2 */ void u8g2_Setup_sh1106_i2c_72x40_wise_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_72x40_wise, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_9_5_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 f */ void u8g2_Setup_sh1106_i2c_72x40_wise_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_72x40_wise, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_9_5_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 */ /* sh1106 1 */ void u8g2_Setup_sh1106_64x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_64x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 2 */ void u8g2_Setup_sh1106_64x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_64x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 f */ void u8g2_Setup_sh1106_64x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_64x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 */ /* sh1106 1 */ void u8g2_Setup_sh1106_i2c_64x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_64x32, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 2 */ void u8g2_Setup_sh1106_i2c_64x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_64x32, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1106 f */ void u8g2_Setup_sh1106_i2c_64x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1106_64x32, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 */ /* sh1107 1 */ void u8g2_Setup_sh1107_64x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_64x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 2 */ void u8g2_Setup_sh1107_64x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_64x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 f */ void u8g2_Setup_sh1107_64x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_64x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 */ /* sh1107 1 */ void u8g2_Setup_sh1107_i2c_64x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_64x128, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 2 */ void u8g2_Setup_sh1107_i2c_64x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_64x128, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 f */ void u8g2_Setup_sh1107_i2c_64x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_64x128, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 */ /* sh1107 1 */ void u8g2_Setup_sh1107_seeed_96x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_seeed_96x96, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 2 */ void u8g2_Setup_sh1107_seeed_96x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_seeed_96x96, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 f */ void u8g2_Setup_sh1107_seeed_96x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_seeed_96x96, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 */ /* sh1107 1 */ void u8g2_Setup_sh1107_i2c_seeed_96x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_seeed_96x96, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 2 */ void u8g2_Setup_sh1107_i2c_seeed_96x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_seeed_96x96, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 f */ void u8g2_Setup_sh1107_i2c_seeed_96x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_seeed_96x96, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 */ /* sh1107 1 */ void u8g2_Setup_sh1107_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_pimoroni_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_pimoroni_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_seeed_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_seeed_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 2 */ void u8g2_Setup_sh1107_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_pimoroni_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_pimoroni_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_seeed_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_seeed_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 f */ void u8g2_Setup_sh1107_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_pimoroni_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_pimoroni_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_seeed_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_seeed_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 */ /* sh1107 1 */ void u8g2_Setup_sh1107_i2c_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_128x128, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_i2c_pimoroni_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_pimoroni_128x128, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_i2c_seeed_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_seeed_128x128, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 2 */ void u8g2_Setup_sh1107_i2c_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_128x128, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_i2c_pimoroni_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_pimoroni_128x128, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_i2c_seeed_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_seeed_128x128, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1107 f */ void u8g2_Setup_sh1107_i2c_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_128x128, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_i2c_pimoroni_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_pimoroni_128x128, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_sh1107_i2c_seeed_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1107_seeed_128x128, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1108 */ /* sh1108 1 */ void u8g2_Setup_sh1108_160x160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1108_160x160, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1108 2 */ void u8g2_Setup_sh1108_160x160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1108_160x160, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1108 f */ void u8g2_Setup_sh1108_160x160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1108_160x160, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1108 */ /* sh1108 1 */ void u8g2_Setup_sh1108_i2c_160x160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1108_160x160, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1108 2 */ void u8g2_Setup_sh1108_i2c_160x160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1108_160x160, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1108 f */ void u8g2_Setup_sh1108_i2c_160x160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1108_160x160, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sh1122 */ /* sh1122 1 */ void u8g2_Setup_sh1122_256x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1122_256x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* sh1122 2 */ void u8g2_Setup_sh1122_256x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1122_256x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* sh1122 f */ void u8g2_Setup_sh1122_256x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1122_256x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* sh1122 */ /* sh1122 1 */ void u8g2_Setup_sh1122_i2c_256x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1122_256x64, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* sh1122 2 */ void u8g2_Setup_sh1122_i2c_256x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1122_256x64, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* sh1122 f */ void u8g2_Setup_sh1122_i2c_256x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sh1122_256x64, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ssd1306 */ /* ssd1306 1 */ void u8g2_Setup_ssd1306_128x32_univision_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x32_univision, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_128x32_winstar_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x32_winstar, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 2 */ void u8g2_Setup_ssd1306_128x32_univision_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x32_univision, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_128x32_winstar_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x32_winstar, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 f */ void u8g2_Setup_ssd1306_128x32_univision_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x32_univision, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_128x32_winstar_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x32_winstar, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 */ /* ssd1306 1 */ void u8g2_Setup_ssd1306_i2c_128x32_univision_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x32_univision, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_i2c_128x32_winstar_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x32_winstar, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 2 */ void u8g2_Setup_ssd1306_i2c_128x32_univision_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x32_univision, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_i2c_128x32_winstar_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x32_winstar, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 f */ void u8g2_Setup_ssd1306_i2c_128x32_univision_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x32_univision, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_i2c_128x32_winstar_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_128x32_winstar, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 */ /* ssd1306 1 */ void u8g2_Setup_ssd1306_64x48_er_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x48_er, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_6_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 2 */ void u8g2_Setup_ssd1306_64x48_er_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x48_er, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_6_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 f */ void u8g2_Setup_ssd1306_64x48_er_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x48_er, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_6_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 */ /* ssd1306 1 */ void u8g2_Setup_ssd1306_i2c_64x48_er_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x48_er, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_6_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 2 */ void u8g2_Setup_ssd1306_i2c_64x48_er_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x48_er, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_6_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 f */ void u8g2_Setup_ssd1306_i2c_64x48_er_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x48_er, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_6_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 */ /* ssd1306 1 */ void u8g2_Setup_ssd1306_48x64_winstar_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_48x64_winstar, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_6_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 2 */ void u8g2_Setup_ssd1306_48x64_winstar_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_48x64_winstar, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_6_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 f */ void u8g2_Setup_ssd1306_48x64_winstar_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_48x64_winstar, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_6_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 */ /* ssd1306 1 */ void u8g2_Setup_ssd1306_i2c_48x64_winstar_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_48x64_winstar, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_6_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 2 */ void u8g2_Setup_ssd1306_i2c_48x64_winstar_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_48x64_winstar, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_6_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 f */ void u8g2_Setup_ssd1306_i2c_48x64_winstar_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_48x64_winstar, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_6_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 */ /* ssd1306 1 */ void u8g2_Setup_ssd1306_64x32_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x32_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_64x32_1f_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x32_1f, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 2 */ void u8g2_Setup_ssd1306_64x32_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x32_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_64x32_1f_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x32_1f, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 f */ void u8g2_Setup_ssd1306_64x32_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x32_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_64x32_1f_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x32_1f, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 */ /* ssd1306 1 */ void u8g2_Setup_ssd1306_i2c_64x32_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x32_noname, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_i2c_64x32_1f_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x32_1f, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 2 */ void u8g2_Setup_ssd1306_i2c_64x32_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x32_noname, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_i2c_64x32_1f_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x32_1f, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 f */ void u8g2_Setup_ssd1306_i2c_64x32_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x32_noname, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1306_i2c_64x32_1f_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_64x32_1f, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 */ /* ssd1306 1 */ void u8g2_Setup_ssd1306_96x16_er_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_96x16_er, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_2_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 2 */ void u8g2_Setup_ssd1306_96x16_er_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_96x16_er, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_2_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 f */ void u8g2_Setup_ssd1306_96x16_er_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_96x16_er, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_2_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 */ /* ssd1306 1 */ void u8g2_Setup_ssd1306_i2c_96x16_er_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_96x16_er, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_2_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 2 */ void u8g2_Setup_ssd1306_i2c_96x16_er_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_96x16_er, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_2_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1306 f */ void u8g2_Setup_ssd1306_i2c_96x16_er_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1306_96x16_er, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_2_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1309 */ /* ssd1309 1 */ void u8g2_Setup_ssd1309_128x64_noname2_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1309_128x64_noname2, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1309 2 */ void u8g2_Setup_ssd1309_128x64_noname2_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1309_128x64_noname2, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1309 f */ void u8g2_Setup_ssd1309_128x64_noname2_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1309_128x64_noname2, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1309 */ /* ssd1309 1 */ void u8g2_Setup_ssd1309_i2c_128x64_noname2_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1309_128x64_noname2, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1309 2 */ void u8g2_Setup_ssd1309_i2c_128x64_noname2_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1309_128x64_noname2, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1309 f */ void u8g2_Setup_ssd1309_i2c_128x64_noname2_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1309_128x64_noname2, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1309 */ /* ssd1309 1 */ void u8g2_Setup_ssd1309_128x64_noname0_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1309_128x64_noname0, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1309 2 */ void u8g2_Setup_ssd1309_128x64_noname0_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1309_128x64_noname0, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1309 f */ void u8g2_Setup_ssd1309_128x64_noname0_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1309_128x64_noname0, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1309 */ /* ssd1309 1 */ void u8g2_Setup_ssd1309_i2c_128x64_noname0_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1309_128x64_noname0, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1309 2 */ void u8g2_Setup_ssd1309_i2c_128x64_noname0_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1309_128x64_noname0, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1309 f */ void u8g2_Setup_ssd1309_i2c_128x64_noname0_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1309_128x64_noname0, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1316 */ /* ssd1316 1 */ void u8g2_Setup_ssd1316_128x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1316_128x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1316 2 */ void u8g2_Setup_ssd1316_128x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1316_128x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1316 f */ void u8g2_Setup_ssd1316_128x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1316_128x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1316 */ /* ssd1316 1 */ void u8g2_Setup_ssd1316_i2c_128x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1316_128x32, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1316 2 */ void u8g2_Setup_ssd1316_i2c_128x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1316_128x32, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1316 f */ void u8g2_Setup_ssd1316_i2c_128x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1316_128x32, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1317 */ /* ssd1317 1 */ void u8g2_Setup_ssd1317_96x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1317_96x96, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1317 2 */ void u8g2_Setup_ssd1317_96x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1317_96x96, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1317 f */ void u8g2_Setup_ssd1317_96x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1317_96x96, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1317 */ /* ssd1317 1 */ void u8g2_Setup_ssd1317_i2c_96x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1317_96x96, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1317 2 */ void u8g2_Setup_ssd1317_i2c_96x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1317_96x96, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1317 f */ void u8g2_Setup_ssd1317_i2c_96x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1317_96x96, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1318 */ /* ssd1318 1 */ void u8g2_Setup_ssd1318_128x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1318_128x96, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1318_128x96_xcp_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1318_128x96_xcp, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1318 2 */ void u8g2_Setup_ssd1318_128x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1318_128x96, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1318_128x96_xcp_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1318_128x96_xcp, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1318 f */ void u8g2_Setup_ssd1318_128x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1318_128x96, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1318_128x96_xcp_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1318_128x96_xcp, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1318 */ /* ssd1318 1 */ void u8g2_Setup_ssd1318_i2c_128x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1318_128x96, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1318_i2c_128x96_xcp_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1318_128x96_xcp, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1318 2 */ void u8g2_Setup_ssd1318_i2c_128x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1318_128x96, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1318_i2c_128x96_xcp_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1318_128x96_xcp, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1318 f */ void u8g2_Setup_ssd1318_i2c_128x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1318_128x96, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1318_i2c_128x96_xcp_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1318_128x96_xcp, u8x8_cad_ssd13xx_fast_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1325 */ /* ssd1325 1 */ void u8g2_Setup_ssd1325_nhd_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1325_nhd_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1325 2 */ void u8g2_Setup_ssd1325_nhd_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1325_nhd_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1325 f */ void u8g2_Setup_ssd1325_nhd_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1325_nhd_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1325 */ /* ssd1325 1 */ void u8g2_Setup_ssd1325_i2c_nhd_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1325_nhd_128x64, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1325 2 */ void u8g2_Setup_ssd1325_i2c_nhd_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1325_nhd_128x64, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1325 f */ void u8g2_Setup_ssd1325_i2c_nhd_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1325_nhd_128x64, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd0323 */ /* ssd0323 1 */ void u8g2_Setup_ssd0323_os128064_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd0323_os128064, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd0323 2 */ void u8g2_Setup_ssd0323_os128064_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd0323_os128064, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd0323 f */ void u8g2_Setup_ssd0323_os128064_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd0323_os128064, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd0323 */ /* ssd0323 1 */ void u8g2_Setup_ssd0323_i2c_os128064_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd0323_os128064, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd0323 2 */ void u8g2_Setup_ssd0323_i2c_os128064_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd0323_os128064, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd0323 f */ void u8g2_Setup_ssd0323_i2c_os128064_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd0323_os128064, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1326 */ /* ssd1326 1 */ void u8g2_Setup_ssd1326_er_256x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1326_er_256x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1326 2 */ void u8g2_Setup_ssd1326_er_256x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1326_er_256x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1326 f */ void u8g2_Setup_ssd1326_er_256x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1326_er_256x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1326 */ /* ssd1326 1 */ void u8g2_Setup_ssd1326_i2c_er_256x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1326_er_256x32, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1326 2 */ void u8g2_Setup_ssd1326_i2c_er_256x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1326_er_256x32, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1326 f */ void u8g2_Setup_ssd1326_i2c_er_256x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1326_er_256x32, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 */ /* ssd1327 1 */ void u8g2_Setup_ssd1327_seeed_96x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_seeed_96x96, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 2 */ void u8g2_Setup_ssd1327_seeed_96x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_seeed_96x96, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 f */ void u8g2_Setup_ssd1327_seeed_96x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_seeed_96x96, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 */ /* ssd1327 1 */ void u8g2_Setup_ssd1327_i2c_seeed_96x96_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_seeed_96x96, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 2 */ void u8g2_Setup_ssd1327_i2c_seeed_96x96_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_seeed_96x96, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 f */ void u8g2_Setup_ssd1327_i2c_seeed_96x96_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_seeed_96x96, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 */ /* ssd1327 1 */ void u8g2_Setup_ssd1327_ea_w128128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_ea_w128128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1327_midas_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_midas_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1327_ws_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_ws_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 2 */ void u8g2_Setup_ssd1327_ea_w128128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_ea_w128128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1327_midas_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_midas_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1327_ws_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_ws_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 f */ void u8g2_Setup_ssd1327_ea_w128128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_ea_w128128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1327_midas_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_midas_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1327_ws_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_ws_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 */ /* ssd1327 1 */ void u8g2_Setup_ssd1327_i2c_ea_w128128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_ea_w128128, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1327_i2c_midas_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_midas_128x128, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1327_i2c_ws_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_ws_128x128, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 2 */ void u8g2_Setup_ssd1327_i2c_ea_w128128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_ea_w128128, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1327_i2c_midas_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_midas_128x128, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1327_i2c_ws_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_ws_128x128, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1327 f */ void u8g2_Setup_ssd1327_i2c_ea_w128128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_ea_w128128, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1327_i2c_midas_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_midas_128x128, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1327_i2c_ws_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1327_ws_128x128, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1329 */ /* ssd1329 1 */ void u8g2_Setup_ssd1329_128x96_noname_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1329_128x96_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1329 2 */ void u8g2_Setup_ssd1329_128x96_noname_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1329_128x96_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1329 f */ void u8g2_Setup_ssd1329_128x96_noname_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1329_128x96_noname, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ld7032 */ /* ld7032 1 */ void u8g2_Setup_ld7032_60x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ld7032_60x32, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ld7032 2 */ void u8g2_Setup_ld7032_60x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ld7032_60x32, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ld7032 f */ void u8g2_Setup_ld7032_60x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ld7032_60x32, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ld7032 */ /* ld7032 1 */ void u8g2_Setup_ld7032_i2c_60x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ld7032_60x32, u8x8_cad_ld7032_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ld7032 2 */ void u8g2_Setup_ld7032_i2c_60x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ld7032_60x32, u8x8_cad_ld7032_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ld7032 f */ void u8g2_Setup_ld7032_i2c_60x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ld7032_60x32, u8x8_cad_ld7032_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 */ /* st7920 1 */ void u8g2_Setup_st7920_p_192x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_192x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 2 */ void u8g2_Setup_st7920_p_192x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_192x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 f */ void u8g2_Setup_st7920_p_192x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_192x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 */ /* st7920 1 */ void u8g2_Setup_st7920_192x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_192x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 2 */ void u8g2_Setup_st7920_192x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_192x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 f */ void u8g2_Setup_st7920_192x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_192x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 */ /* st7920 1 */ void u8g2_Setup_st7920_s_192x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_192x32, u8x8_cad_st7920_spi, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 2 */ void u8g2_Setup_st7920_s_192x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_192x32, u8x8_cad_st7920_spi, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 f */ void u8g2_Setup_st7920_s_192x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_192x32, u8x8_cad_st7920_spi, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 */ /* st7920 1 */ void u8g2_Setup_st7920_p_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 2 */ void u8g2_Setup_st7920_p_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 f */ void u8g2_Setup_st7920_p_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 */ /* st7920 1 */ void u8g2_Setup_st7920_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 2 */ void u8g2_Setup_st7920_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 f */ void u8g2_Setup_st7920_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 */ /* st7920 1 */ void u8g2_Setup_st7920_s_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_128x64, u8x8_cad_st7920_spi, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 2 */ void u8g2_Setup_st7920_s_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_128x64, u8x8_cad_st7920_spi, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7920 f */ void u8g2_Setup_st7920_s_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7920_128x64, u8x8_cad_st7920_spi, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ls013b7dh03 */ /* ls013b7dh03 1 */ void u8g2_Setup_ls013b7dh03_128x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ls013b7dh03_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ls013b7dh03 2 */ void u8g2_Setup_ls013b7dh03_128x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ls013b7dh03_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ls013b7dh03 f */ void u8g2_Setup_ls013b7dh03_128x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ls013b7dh03_128x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ls027b7dh01 */ /* ls027b7dh01 1 */ void u8g2_Setup_ls027b7dh01_400x240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ls027b7dh01_400x240, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_50_30_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ls027b7dh01 2 */ void u8g2_Setup_ls027b7dh01_400x240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ls027b7dh01_400x240, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_50_30_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ls027b7dh01 f */ void u8g2_Setup_ls027b7dh01_400x240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ls027b7dh01_400x240, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_50_30_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ls013b7dh05 */ /* ls013b7dh05 1 */ void u8g2_Setup_ls013b7dh05_144x168_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ls013b7dh05_144x168, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_18_21_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ls013b7dh05 2 */ void u8g2_Setup_ls013b7dh05_144x168_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ls013b7dh05_144x168, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_18_21_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ls013b7dh05 f */ void u8g2_Setup_ls013b7dh05_144x168_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ls013b7dh05_144x168, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_18_21_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* uc1701 */ /* uc1701 1 */ void u8g2_Setup_uc1701_ea_dogs102_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1701_ea_dogs102, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_13_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1701 2 */ void u8g2_Setup_uc1701_ea_dogs102_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1701_ea_dogs102, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_13_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1701 f */ void u8g2_Setup_uc1701_ea_dogs102_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1701_ea_dogs102, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_13_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1701 */ /* uc1701 1 */ void u8g2_Setup_uc1701_mini12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1701_mini12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1701 2 */ void u8g2_Setup_uc1701_mini12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1701_mini12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1701 f */ void u8g2_Setup_uc1701_mini12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1701_mini12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* pcd8544 */ /* pcd8544 1 */ void u8g2_Setup_pcd8544_84x48_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_pcd8544_84x48, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_11_6_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* pcd8544 2 */ void u8g2_Setup_pcd8544_84x48_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_pcd8544_84x48, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_11_6_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* pcd8544 f */ void u8g2_Setup_pcd8544_84x48_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_pcd8544_84x48, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_11_6_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* pcf8812 */ /* pcf8812 1 */ void u8g2_Setup_pcf8812_96x65_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_pcf8812_96x65, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_9_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* pcf8812 2 */ void u8g2_Setup_pcf8812_96x65_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_pcf8812_96x65, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_9_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* pcf8812 f */ void u8g2_Setup_pcf8812_96x65_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_pcf8812_96x65, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_9_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* hx1230 */ /* hx1230 1 */ void u8g2_Setup_hx1230_96x68_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_hx1230_96x68, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_9_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* hx1230 2 */ void u8g2_Setup_hx1230_96x68_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_hx1230_96x68, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_9_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* hx1230 f */ void u8g2_Setup_hx1230_96x68_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_hx1230_96x68, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_12_9_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1604 */ /* uc1604 1 */ void u8g2_Setup_uc1604_jlx19264_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1604_jlx19264, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1604 2 */ void u8g2_Setup_uc1604_jlx19264_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1604_jlx19264, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1604 f */ void u8g2_Setup_uc1604_jlx19264_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1604_jlx19264, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1604 */ /* uc1604 1 */ void u8g2_Setup_uc1604_i2c_jlx19264_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1604_jlx19264, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1604 2 */ void u8g2_Setup_uc1604_i2c_jlx19264_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1604_jlx19264, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1604 f */ void u8g2_Setup_uc1604_i2c_jlx19264_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1604_jlx19264, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 */ /* uc1608 1 */ void u8g2_Setup_uc1608_erc24064_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_erc24064, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 2 */ void u8g2_Setup_uc1608_erc24064_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_erc24064, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 f */ void u8g2_Setup_uc1608_erc24064_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_erc24064, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 */ /* uc1608 1 */ void u8g2_Setup_uc1608_i2c_erc24064_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_erc24064, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 2 */ void u8g2_Setup_uc1608_i2c_erc24064_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_erc24064, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 f */ void u8g2_Setup_uc1608_i2c_erc24064_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_erc24064, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 */ /* uc1608 1 */ void u8g2_Setup_uc1608_erc240120_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_erc240120, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_15_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 2 */ void u8g2_Setup_uc1608_erc240120_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_erc240120, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_15_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 f */ void u8g2_Setup_uc1608_erc240120_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_erc240120, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_15_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 */ /* uc1608 1 */ void u8g2_Setup_uc1608_i2c_erc240120_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_erc240120, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_15_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 2 */ void u8g2_Setup_uc1608_i2c_erc240120_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_erc240120, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_15_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 f */ void u8g2_Setup_uc1608_i2c_erc240120_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_erc240120, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_15_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 */ /* uc1608 1 */ void u8g2_Setup_uc1608_240x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_240x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 2 */ void u8g2_Setup_uc1608_240x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_240x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 f */ void u8g2_Setup_uc1608_240x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_240x128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 */ /* uc1608 1 */ void u8g2_Setup_uc1608_i2c_240x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_240x128, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 2 */ void u8g2_Setup_uc1608_i2c_240x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_240x128, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1608 f */ void u8g2_Setup_uc1608_i2c_240x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1608_240x128, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1638 */ /* uc1638 1 */ void u8g2_Setup_uc1638_160x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1638_160x128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1638 2 */ void u8g2_Setup_uc1638_160x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1638_160x128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1638 f */ void u8g2_Setup_uc1638_160x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1638_160x128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1610 */ /* uc1610 1 */ void u8g2_Setup_uc1610_ea_dogxl160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1610_ea_dogxl160, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_13_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1610 2 */ void u8g2_Setup_uc1610_ea_dogxl160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1610_ea_dogxl160, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_13_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1610 f */ void u8g2_Setup_uc1610_ea_dogxl160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1610_ea_dogxl160, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_13_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1610 */ /* uc1610 1 */ void u8g2_Setup_uc1610_i2c_ea_dogxl160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1610_ea_dogxl160, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_13_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1610 2 */ void u8g2_Setup_uc1610_i2c_ea_dogxl160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1610_ea_dogxl160, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_13_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1610 f */ void u8g2_Setup_uc1610_i2c_ea_dogxl160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1610_ea_dogxl160, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_13_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 */ /* uc1611 1 */ void u8g2_Setup_uc1611_ea_dogm240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ea_dogm240, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 2 */ void u8g2_Setup_uc1611_ea_dogm240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ea_dogm240, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 f */ void u8g2_Setup_uc1611_ea_dogm240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ea_dogm240, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 */ /* uc1611 1 */ void u8g2_Setup_uc1611_i2c_ea_dogm240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ea_dogm240, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 2 */ void u8g2_Setup_uc1611_i2c_ea_dogm240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ea_dogm240, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 f */ void u8g2_Setup_uc1611_i2c_ea_dogm240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ea_dogm240, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 */ /* uc1611 1 */ void u8g2_Setup_uc1611_ea_dogxl240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ea_dogxl240, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 2 */ void u8g2_Setup_uc1611_ea_dogxl240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ea_dogxl240, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 f */ void u8g2_Setup_uc1611_ea_dogxl240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ea_dogxl240, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 */ /* uc1611 1 */ void u8g2_Setup_uc1611_i2c_ea_dogxl240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ea_dogxl240, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 2 */ void u8g2_Setup_uc1611_i2c_ea_dogxl240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ea_dogxl240, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 f */ void u8g2_Setup_uc1611_i2c_ea_dogxl240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ea_dogxl240, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 */ /* uc1611 1 */ void u8g2_Setup_uc1611_ew50850_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ew50850, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 2 */ void u8g2_Setup_uc1611_ew50850_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ew50850, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 f */ void u8g2_Setup_uc1611_ew50850_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ew50850, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 */ /* uc1611 1 */ void u8g2_Setup_uc1611_i2c_ew50850_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ew50850, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 2 */ void u8g2_Setup_uc1611_i2c_ew50850_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ew50850, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 f */ void u8g2_Setup_uc1611_i2c_ew50850_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_ew50850, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 */ /* uc1611 1 */ void u8g2_Setup_uc1611_cg160160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_cg160160, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 2 */ void u8g2_Setup_uc1611_cg160160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_cg160160, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 f */ void u8g2_Setup_uc1611_cg160160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_cg160160, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 */ /* uc1611 1 */ void u8g2_Setup_uc1611_i2c_cg160160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_cg160160, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 2 */ void u8g2_Setup_uc1611_i2c_cg160160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_cg160160, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1611 f */ void u8g2_Setup_uc1611_i2c_cg160160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1611_cg160160, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7511 */ /* st7511 1 */ void u8g2_Setup_st7511_avd_320x240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7511_avd_320x240, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_40_30_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7511 2 */ void u8g2_Setup_st7511_avd_320x240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7511_avd_320x240, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_40_30_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7511 f */ void u8g2_Setup_st7511_avd_320x240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7511_avd_320x240, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_40_30_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7565 */ /* st7565 1 */ void u8g2_Setup_st7565_ea_dogm128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_ea_dogm128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_lm6063_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_lm6063, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_64128n_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_64128n, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_zolen_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_zolen_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_lm6059_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_lm6059, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_lx12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_lx12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_erc12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_erc12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_erc12864_alt_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_erc12864_alt, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_nhd_c12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_nhd_c12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_jlx12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_jlx12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7565 2 */ void u8g2_Setup_st7565_ea_dogm128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_ea_dogm128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_lm6063_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_lm6063, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_64128n_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_64128n, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_zolen_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_zolen_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_lm6059_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_lm6059, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_lx12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_lx12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_erc12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_erc12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_erc12864_alt_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_erc12864_alt, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_nhd_c12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_nhd_c12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_jlx12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_jlx12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7565 f */ void u8g2_Setup_st7565_ea_dogm128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_ea_dogm128, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_lm6063_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_lm6063, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_64128n_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_64128n, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_zolen_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_zolen_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_lm6059_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_lm6059, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_lx12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_lx12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_erc12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_erc12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_erc12864_alt_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_erc12864_alt, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_nhd_c12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_nhd_c12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7565_jlx12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_jlx12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7565 */ /* st7565 1 */ void u8g2_Setup_st7565_nhd_c12832_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_nhd_c12832, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7565 2 */ void u8g2_Setup_st7565_nhd_c12832_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_nhd_c12832, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7565 f */ void u8g2_Setup_st7565_nhd_c12832_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_nhd_c12832, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1601 */ /* uc1601 1 */ void u8g2_Setup_uc1601_128x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1601_128x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1601 2 */ void u8g2_Setup_uc1601_128x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1601_128x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1601 f */ void u8g2_Setup_uc1601_128x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1601_128x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1601 */ /* uc1601 1 */ void u8g2_Setup_uc1601_i2c_128x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1601_128x32, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1601 2 */ void u8g2_Setup_uc1601_i2c_128x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1601_128x32, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* uc1601 f */ void u8g2_Setup_uc1601_i2c_128x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_uc1601_128x32, u8x8_cad_uc16xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7565 */ /* st7565 1 */ void u8g2_Setup_st7565_ea_dogm132_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_ea_dogm132, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_17_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7565 2 */ void u8g2_Setup_st7565_ea_dogm132_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_ea_dogm132, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_17_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7565 f */ void u8g2_Setup_st7565_ea_dogm132_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7565_ea_dogm132, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_17_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 */ /* st7567 1 */ void u8g2_Setup_st7567_pi_132x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_pi_132x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_17_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 2 */ void u8g2_Setup_st7567_pi_132x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_pi_132x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_17_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 f */ void u8g2_Setup_st7567_pi_132x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_pi_132x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_17_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 */ /* st7567 1 */ void u8g2_Setup_st7567_jlx12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_jlx12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7567_enh_dg128064_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_enh_dg128064, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7567_enh_dg128064i_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_enh_dg128064i, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 2 */ void u8g2_Setup_st7567_jlx12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_jlx12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7567_enh_dg128064_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_enh_dg128064, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7567_enh_dg128064i_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_enh_dg128064i, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 f */ void u8g2_Setup_st7567_jlx12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_jlx12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7567_enh_dg128064_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_enh_dg128064, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st7567_enh_dg128064i_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_enh_dg128064i, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 */ /* st7567 1 */ void u8g2_Setup_st7567_64x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_64x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 2 */ void u8g2_Setup_st7567_64x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_64x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 f */ void u8g2_Setup_st7567_64x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_64x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 */ /* st7567 1 */ void u8g2_Setup_st7567_i2c_64x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_64x32, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 2 */ void u8g2_Setup_st7567_i2c_64x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_64x32, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7567 f */ void u8g2_Setup_st7567_i2c_64x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7567_64x32, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7586s */ /* st7586s 1 */ void u8g2_Setup_st7586s_s028hn118a_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7586s_s028hn118a, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_48_17_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7586s 2 */ void u8g2_Setup_st7586s_s028hn118a_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7586s_s028hn118a, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_48_17_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7586s f */ void u8g2_Setup_st7586s_s028hn118a_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7586s_s028hn118a, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_48_17_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7586s */ /* st7586s 1 */ void u8g2_Setup_st7586s_erc240160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7586s_erc240160, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7586s 2 */ void u8g2_Setup_st7586s_erc240160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7586s_erc240160, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7586s f */ void u8g2_Setup_st7586s_erc240160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7586s_erc240160, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* st7588 */ /* st7588 1 */ void u8g2_Setup_st7588_jlx12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7588_jlx12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7588 2 */ void u8g2_Setup_st7588_jlx12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7588_jlx12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7588 f */ void u8g2_Setup_st7588_jlx12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7588_jlx12864, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7588 */ /* st7588 1 */ void u8g2_Setup_st7588_i2c_jlx12864_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7588_jlx12864, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7588 2 */ void u8g2_Setup_st7588_i2c_jlx12864_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7588_jlx12864, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st7588 f */ void u8g2_Setup_st7588_i2c_jlx12864_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st7588_jlx12864, u8x8_cad_ssd13xx_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 */ /* st75256 1 */ void u8g2_Setup_st75256_jlx256128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_wo256x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_wo256x128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 2 */ void u8g2_Setup_st75256_jlx256128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_wo256x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_wo256x128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 f */ void u8g2_Setup_st75256_jlx256128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_wo256x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_wo256x128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 */ /* st75256 1 */ void u8g2_Setup_st75256_i2c_jlx256128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256128, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_i2c_wo256x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_wo256x128, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 2 */ void u8g2_Setup_st75256_i2c_jlx256128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256128, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_i2c_wo256x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_wo256x128, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 f */ void u8g2_Setup_st75256_i2c_jlx256128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256128, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_i2c_wo256x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_wo256x128, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 */ /* st75256 1 */ void u8g2_Setup_st75256_jlx256160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_jlx256160m_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160m, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_jlx256160_alt_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160_alt, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 2 */ void u8g2_Setup_st75256_jlx256160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_jlx256160m_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160m, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_jlx256160_alt_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160_alt, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 f */ void u8g2_Setup_st75256_jlx256160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_jlx256160m_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160m, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_jlx256160_alt_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160_alt, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 */ /* st75256 1 */ void u8g2_Setup_st75256_i2c_jlx256160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_i2c_jlx256160m_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160m, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_i2c_jlx256160_alt_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160_alt, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 2 */ void u8g2_Setup_st75256_i2c_jlx256160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_i2c_jlx256160m_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160m, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_i2c_jlx256160_alt_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160_alt, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 f */ void u8g2_Setup_st75256_i2c_jlx256160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_i2c_jlx256160m_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160m, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_st75256_i2c_jlx256160_alt_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx256160_alt, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 */ /* st75256 1 */ void u8g2_Setup_st75256_jlx240160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx240160, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 2 */ void u8g2_Setup_st75256_jlx240160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx240160, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 f */ void u8g2_Setup_st75256_jlx240160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx240160, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 */ /* st75256 1 */ void u8g2_Setup_st75256_i2c_jlx240160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx240160, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 2 */ void u8g2_Setup_st75256_i2c_jlx240160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx240160, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 f */ void u8g2_Setup_st75256_i2c_jlx240160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx240160, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 */ /* st75256 1 */ void u8g2_Setup_st75256_jlx25664_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx25664, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 2 */ void u8g2_Setup_st75256_jlx25664_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx25664, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 f */ void u8g2_Setup_st75256_jlx25664_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx25664, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 */ /* st75256 1 */ void u8g2_Setup_st75256_i2c_jlx25664_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx25664, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 2 */ void u8g2_Setup_st75256_i2c_jlx25664_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx25664, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 f */ void u8g2_Setup_st75256_i2c_jlx25664_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx25664, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 */ /* st75256 1 */ void u8g2_Setup_st75256_jlx172104_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx172104, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_22_13_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 2 */ void u8g2_Setup_st75256_jlx172104_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx172104, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_22_13_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 f */ void u8g2_Setup_st75256_jlx172104_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx172104, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_22_13_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 */ /* st75256 1 */ void u8g2_Setup_st75256_i2c_jlx172104_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx172104, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_22_13_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 2 */ void u8g2_Setup_st75256_i2c_jlx172104_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx172104, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_22_13_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 f */ void u8g2_Setup_st75256_i2c_jlx172104_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx172104, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_22_13_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 */ /* st75256 1 */ void u8g2_Setup_st75256_jlx19296_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx19296, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 2 */ void u8g2_Setup_st75256_jlx19296_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx19296, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 f */ void u8g2_Setup_st75256_jlx19296_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx19296, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 */ /* st75256 1 */ void u8g2_Setup_st75256_i2c_jlx19296_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx19296, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_12_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 2 */ void u8g2_Setup_st75256_i2c_jlx19296_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx19296, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_12_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75256 f */ void u8g2_Setup_st75256_i2c_jlx19296_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75256_jlx19296, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_12_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75320 */ /* st75320 1 */ void u8g2_Setup_st75320_jlx320240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75320_jlx320240, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_40_30_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75320 2 */ void u8g2_Setup_st75320_jlx320240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75320_jlx320240, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_40_30_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75320 f */ void u8g2_Setup_st75320_jlx320240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75320_jlx320240, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_40_30_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75320 */ /* st75320 1 */ void u8g2_Setup_st75320_i2c_jlx320240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75320_jlx320240, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_40_30_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75320 2 */ void u8g2_Setup_st75320_i2c_jlx320240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75320_jlx320240, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_40_30_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* st75320 f */ void u8g2_Setup_st75320_i2c_jlx320240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_st75320_jlx320240, u8x8_cad_st75256_i2c, byte_cb, gpio_and_delay_cb); buf = u8g2_m_40_30_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* nt7534 */ /* nt7534 1 */ void u8g2_Setup_nt7534_tg12864r_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_nt7534_tg12864r, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* nt7534 2 */ void u8g2_Setup_nt7534_tg12864r_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_nt7534_tg12864r, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* nt7534 f */ void u8g2_Setup_nt7534_tg12864r_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_nt7534_tg12864r, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ist3020 */ /* ist3020 1 */ void u8g2_Setup_ist3020_erc19264_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ist3020_erc19264, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ist3020 2 */ void u8g2_Setup_ist3020_erc19264_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ist3020_erc19264, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ist3020 f */ void u8g2_Setup_ist3020_erc19264_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ist3020_erc19264, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sbn1661 */ /* sbn1661 1 */ void u8g2_Setup_sbn1661_122x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sbn1661_122x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sbn1661 2 */ void u8g2_Setup_sbn1661_122x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sbn1661_122x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sbn1661 f */ void u8g2_Setup_sbn1661_122x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sbn1661_122x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sed1520 */ /* sed1520 1 */ void u8g2_Setup_sed1520_122x32_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sed1520_122x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sed1520 2 */ void u8g2_Setup_sed1520_122x32_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sed1520_122x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sed1520 f */ void u8g2_Setup_sed1520_122x32_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sed1520_122x32, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_4_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ks0108 */ /* ks0108 1 */ void u8g2_Setup_ks0108_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ks0108_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ks0108 2 */ void u8g2_Setup_ks0108_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ks0108_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ks0108 f */ void u8g2_Setup_ks0108_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ks0108_128x64, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ks0108 */ /* ks0108 1 */ void u8g2_Setup_ks0108_erm19264_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ks0108_erm19264, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ks0108 2 */ void u8g2_Setup_ks0108_erm19264_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ks0108_erm19264, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ks0108 f */ void u8g2_Setup_ks0108_erm19264_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ks0108_erm19264, u8x8_cad_001, byte_cb, gpio_and_delay_cb); buf = u8g2_m_24_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* lc7981 */ /* lc7981 1 */ void u8g2_Setup_lc7981_160x80_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_lc7981_160x80, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_10_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* lc7981 2 */ void u8g2_Setup_lc7981_160x80_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_lc7981_160x80, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_10_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* lc7981 f */ void u8g2_Setup_lc7981_160x80_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_lc7981_160x80, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_10_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* lc7981 */ /* lc7981 1 */ void u8g2_Setup_lc7981_160x160_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_lc7981_160x160, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_20_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* lc7981 2 */ void u8g2_Setup_lc7981_160x160_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_lc7981_160x160, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_20_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* lc7981 f */ void u8g2_Setup_lc7981_160x160_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_lc7981_160x160, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_20_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* lc7981 */ /* lc7981 1 */ void u8g2_Setup_lc7981_240x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_lc7981_240x128, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* lc7981 2 */ void u8g2_Setup_lc7981_240x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_lc7981_240x128, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* lc7981 f */ void u8g2_Setup_lc7981_240x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_lc7981_240x128, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* lc7981 */ /* lc7981 1 */ void u8g2_Setup_lc7981_240x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_lc7981_240x64, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* lc7981 2 */ void u8g2_Setup_lc7981_240x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_lc7981_240x64, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* lc7981 f */ void u8g2_Setup_lc7981_240x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_lc7981_240x64, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* t6963 */ /* t6963 1 */ void u8g2_Setup_t6963_240x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_240x128, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* t6963 2 */ void u8g2_Setup_t6963_240x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_240x128, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* t6963 f */ void u8g2_Setup_t6963_240x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_240x128, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* t6963 */ /* t6963 1 */ void u8g2_Setup_t6963_240x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_240x64, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* t6963 2 */ void u8g2_Setup_t6963_240x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_240x64, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* t6963 f */ void u8g2_Setup_t6963_240x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_240x64, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* t6963 */ /* t6963 1 */ void u8g2_Setup_t6963_256x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_256x64, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* t6963 2 */ void u8g2_Setup_t6963_256x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_256x64, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* t6963 f */ void u8g2_Setup_t6963_256x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_256x64, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* t6963 */ /* t6963 1 */ void u8g2_Setup_t6963_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_128x64, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } void u8g2_Setup_t6963_128x64_alt_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_128x64_alt, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* t6963 2 */ void u8g2_Setup_t6963_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_128x64, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } void u8g2_Setup_t6963_128x64_alt_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_128x64_alt, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* t6963 f */ void u8g2_Setup_t6963_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_128x64, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } void u8g2_Setup_t6963_128x64_alt_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_128x64_alt, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* t6963 */ /* t6963 1 */ void u8g2_Setup_t6963_160x80_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_160x80, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_10_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* t6963 2 */ void u8g2_Setup_t6963_160x80_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_160x80, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_10_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* t6963 f */ void u8g2_Setup_t6963_160x80_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_t6963_160x80, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_20_10_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ssd1322 */ /* ssd1322 1 */ void u8g2_Setup_ssd1322_nhd_256x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1322_nhd_256x64, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1322 2 */ void u8g2_Setup_ssd1322_nhd_256x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1322_nhd_256x64, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1322 f */ void u8g2_Setup_ssd1322_nhd_256x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1322_nhd_256x64, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_32_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1322 */ /* ssd1322 1 */ void u8g2_Setup_ssd1322_nhd_128x64_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1322_nhd_128x64, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1322 2 */ void u8g2_Setup_ssd1322_nhd_128x64_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1322_nhd_128x64, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1322 f */ void u8g2_Setup_ssd1322_nhd_128x64_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1322_nhd_128x64, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_16_8_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1606 */ /* ssd1606 1 */ void u8g2_Setup_ssd1606_172x72_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1606_172x72, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_22_9_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1606 2 */ void u8g2_Setup_ssd1606_172x72_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1606_172x72, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_22_9_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1606 f */ void u8g2_Setup_ssd1606_172x72_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1606_172x72, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_22_9_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1607 */ /* ssd1607 1 */ void u8g2_Setup_ssd1607_200x200_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1607_200x200, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_25_25_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1607_gd_200x200_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1607_gd_200x200, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_25_25_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1607_ws_200x200_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1607_ws_200x200, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_25_25_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1607 2 */ void u8g2_Setup_ssd1607_200x200_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1607_200x200, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_25_25_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1607_gd_200x200_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1607_gd_200x200, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_25_25_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1607_ws_200x200_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1607_ws_200x200, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_25_25_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* ssd1607 f */ void u8g2_Setup_ssd1607_200x200_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1607_200x200, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_25_25_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1607_gd_200x200_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1607_gd_200x200, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_25_25_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_ssd1607_ws_200x200_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ssd1607_ws_200x200, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_25_25_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* il3820 */ /* il3820 1 */ void u8g2_Setup_il3820_296x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_il3820_296x128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_37_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_il3820_v2_296x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_il3820_v2_296x128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_37_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* il3820 2 */ void u8g2_Setup_il3820_296x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_il3820_296x128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_37_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_il3820_v2_296x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_il3820_v2_296x128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_37_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* il3820 f */ void u8g2_Setup_il3820_296x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_il3820_296x128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_37_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } void u8g2_Setup_il3820_v2_296x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_il3820_v2_296x128, u8x8_cad_011, byte_cb, gpio_and_delay_cb); buf = u8g2_m_37_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_vertical_top_lsb, rotation); } /* sed1330 */ /* sed1330 1 */ void u8g2_Setup_sed1330_240x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sed1330_240x128, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* sed1330 2 */ void u8g2_Setup_sed1330_240x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sed1330_240x128, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* sed1330 f */ void u8g2_Setup_sed1330_240x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_sed1330_240x128, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ra8835 */ /* ra8835 1 */ void u8g2_Setup_ra8835_nhd_240x128_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ra8835_nhd_240x128, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ra8835 2 */ void u8g2_Setup_ra8835_nhd_240x128_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ra8835_nhd_240x128, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ra8835 f */ void u8g2_Setup_ra8835_nhd_240x128_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ra8835_nhd_240x128, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_30_16_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ra8835 */ /* ra8835 1 */ void u8g2_Setup_ra8835_320x240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ra8835_320x240, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_40_30_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ra8835 2 */ void u8g2_Setup_ra8835_320x240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ra8835_320x240, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_40_30_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* ra8835 f */ void u8g2_Setup_ra8835_320x240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_ra8835_320x240, u8x8_cad_100, byte_cb, gpio_and_delay_cb); buf = u8g2_m_40_30_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* max7219 */ /* max7219 1 */ void u8g2_Setup_max7219_64x8_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_max7219_64x8, u8x8_cad_empty, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_1_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* max7219 2 */ void u8g2_Setup_max7219_64x8_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_max7219_64x8, u8x8_cad_empty, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_1_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* max7219 f */ void u8g2_Setup_max7219_64x8_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_max7219_64x8, u8x8_cad_empty, byte_cb, gpio_and_delay_cb); buf = u8g2_m_8_1_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* max7219 */ /* max7219 1 */ void u8g2_Setup_max7219_32x8_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_max7219_32x8, u8x8_cad_empty, byte_cb, gpio_and_delay_cb); buf = u8g2_m_4_1_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* max7219 2 */ void u8g2_Setup_max7219_32x8_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_max7219_32x8, u8x8_cad_empty, byte_cb, gpio_and_delay_cb); buf = u8g2_m_4_1_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* max7219 f */ void u8g2_Setup_max7219_32x8_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_max7219_32x8, u8x8_cad_empty, byte_cb, gpio_and_delay_cb); buf = u8g2_m_4_1_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* max7219 */ /* max7219 1 */ void u8g2_Setup_max7219_8x8_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_max7219_8x8, u8x8_cad_empty, byte_cb, gpio_and_delay_cb); buf = u8g2_m_1_1_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* max7219 2 */ void u8g2_Setup_max7219_8x8_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_max7219_8x8, u8x8_cad_empty, byte_cb, gpio_and_delay_cb); buf = u8g2_m_1_1_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* max7219 f */ void u8g2_Setup_max7219_8x8_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_max7219_8x8, u8x8_cad_empty, byte_cb, gpio_and_delay_cb); buf = u8g2_m_1_1_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* a2printer */ /* a2printer 1 */ void u8g2_Setup_a2printer_384x240_1(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_a2printer_384x240, u8x8_cad_empty, byte_cb, gpio_and_delay_cb); buf = u8g2_m_48_30_1(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* a2printer 2 */ void u8g2_Setup_a2printer_384x240_2(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_a2printer_384x240, u8x8_cad_empty, byte_cb, gpio_and_delay_cb); buf = u8g2_m_48_30_2(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* a2printer f */ void u8g2_Setup_a2printer_384x240_f(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { uint8_t tile_buf_height; uint8_t *buf; u8g2_SetupDisplay(u8g2, u8x8_d_a2printer_384x240, u8x8_cad_empty, byte_cb, gpio_and_delay_cb); buf = u8g2_m_48_30_f(&tile_buf_height); u8g2_SetupBuffer(u8g2, buf, tile_buf_height, u8g2_ll_hvline_horizontal_right_lsb, rotation); } /* end of generated code */ ================================================ FILE: Drivers/u8g2/Src/u8g2_font.c ================================================ /* u8g2_font.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8g2.h" /* size of the font data structure, there is no struct or class... */ /* this is the size for the new font format */ #define U8G2_FONT_DATA_STRUCT_SIZE 23 /* font data: offset bytes description 0 1 glyph_cnt number of glyphs 1 1 bbx_mode 0: proportional, 1: common height, 2: monospace, 3: multiple of 8 2 1 bits_per_0 glyph rle parameter 3 1 bits_per_1 glyph rle parameter 4 1 bits_per_char_width glyph rle parameter 5 1 bits_per_char_height glyph rle parameter 6 1 bits_per_char_x glyph rle parameter 7 1 bits_per_char_y glyph rle parameter 8 1 bits_per_delta_x glyph rle parameter 9 1 max_char_width 10 1 max_char_height 11 1 x offset 12 1 y offset (descent) 13 1 ascent (capital A) 14 1 descent (lower g) 15 1 ascent '(' 16 1 descent ')' 17 1 start pos 'A' high byte 18 1 start pos 'A' low byte 19 1 start pos 'a' high byte 20 1 start pos 'a' low byte 21 1 start pos unicode high byte 22 1 start pos unicode low byte Font build mode, 0: proportional, 1: common height, 2: monospace, 3: multiple of 8 Font build mode 0: - "t" - Ref height mode: U8G2_FONT_HEIGHT_MODE_TEXT, U8G2_FONT_HEIGHT_MODE_XTEXT or U8G2_FONT_HEIGHT_MODE_ALL - use in transparent mode only (does not look good in solid mode) - most compact format - different font heights possible Font build mode 1: - "h" - Ref height mode: U8G2_FONT_HEIGHT_MODE_ALL - transparent or solid mode - The height of the glyphs depend on the largest glyph in the font. This means font height depends on postfix "r", "f" and "n". */ /* use case: What is the width and the height of the minimal box into which string s fints? */ void u8g2_font_GetStrSize(const void *font, const char *s, u8g2_uint_t *width, u8g2_uint_t *height); void u8g2_font_GetStrSizeP(const void *font, const char *s, u8g2_uint_t *width, u8g2_uint_t *height); /* use case: lower left edge of a minimal box is known, what is the correct x, y position for the string draw procedure */ void u8g2_font_AdjustXYToDraw(const void *font, const char *s, u8g2_uint_t *x, u8g2_uint_t *y); void u8g2_font_AdjustXYToDrawP(const void *font, const char *s, u8g2_uint_t *x, u8g2_uint_t *y); /* use case: Baseline origin known, return minimal box */ void u8g2_font_GetStrMinBox(u8g2_t *u8g2, const void *font, const char *s, u8g2_uint_t *x, u8g2_uint_t *y, u8g2_uint_t *width, u8g2_uint_t *height); /* procedures */ /*========================================================================*/ /* low level byte and word access */ /* removed NOINLINE, because it leads to smaller code, might also be faster */ //static uint8_t u8g2_font_get_byte(const uint8_t *font, uint8_t offset) U8G2_NOINLINE; static uint8_t u8g2_font_get_byte(const uint8_t *font, uint8_t offset) { font += offset; return u8x8_pgm_read( font ); } static uint16_t u8g2_font_get_word(const uint8_t *font, uint8_t offset) U8G2_NOINLINE; static uint16_t u8g2_font_get_word(const uint8_t *font, uint8_t offset) { uint16_t pos; font += offset; pos = u8x8_pgm_read( font ); font++; pos <<= 8; pos += u8x8_pgm_read( font); return pos; } /*========================================================================*/ /* new font format */ void u8g2_read_font_info(u8g2_font_info_t *font_info, const uint8_t *font) { /* offset 0 */ font_info->glyph_cnt = u8g2_font_get_byte(font, 0); font_info->bbx_mode = u8g2_font_get_byte(font, 1); font_info->bits_per_0 = u8g2_font_get_byte(font, 2); font_info->bits_per_1 = u8g2_font_get_byte(font, 3); /* offset 4 */ font_info->bits_per_char_width = u8g2_font_get_byte(font, 4); font_info->bits_per_char_height = u8g2_font_get_byte(font, 5); font_info->bits_per_char_x = u8g2_font_get_byte(font, 6); font_info->bits_per_char_y = u8g2_font_get_byte(font, 7); font_info->bits_per_delta_x = u8g2_font_get_byte(font, 8); /* offset 9 */ font_info->max_char_width = u8g2_font_get_byte(font, 9); font_info->max_char_height = u8g2_font_get_byte(font, 10); font_info->x_offset = u8g2_font_get_byte(font, 11); font_info->y_offset = u8g2_font_get_byte(font, 12); /* offset 13 */ font_info->ascent_A = u8g2_font_get_byte(font, 13); font_info->descent_g = u8g2_font_get_byte(font, 14); font_info->ascent_para = u8g2_font_get_byte(font, 15); font_info->descent_para = u8g2_font_get_byte(font, 16); /* offset 17 */ font_info->start_pos_upper_A = u8g2_font_get_word(font, 17); font_info->start_pos_lower_a = u8g2_font_get_word(font, 19); /* offset 21 */ #ifdef U8G2_WITH_UNICODE font_info->start_pos_unicode = u8g2_font_get_word(font, 21); #endif } /* calculate the overall length of the font, only used to create the picture for the google wiki */ size_t u8g2_GetFontSize(const uint8_t *font_arg) { uint16_t e; const uint8_t *font = font_arg; font += U8G2_FONT_DATA_STRUCT_SIZE; for(;;) { if ( u8x8_pgm_read( font + 1 ) == 0 ) break; font += u8x8_pgm_read( font + 1 ); } /* continue with unicode section */ font += 2; /* skip unicode lookup table */ font += u8g2_font_get_word(font, 0); for(;;) { e = u8x8_pgm_read( font ); e <<= 8; e |= u8x8_pgm_read( font + 1 ); if ( e == 0 ) break; font += u8x8_pgm_read( font + 2 ); } return (font - font_arg) + 2; } /*========================================================================*/ /* u8g2 interface, font access */ uint8_t u8g2_GetFontBBXWidth(u8g2_t *u8g2) { return u8g2->font_info.max_char_width; /* new font info structure */ } uint8_t u8g2_GetFontBBXHeight(u8g2_t *u8g2) { return u8g2->font_info.max_char_height; /* new font info structure */ } int8_t u8g2_GetFontBBXOffX(u8g2_t *u8g2) U8G2_NOINLINE; int8_t u8g2_GetFontBBXOffX(u8g2_t *u8g2) { return u8g2->font_info.x_offset; /* new font info structure */ } int8_t u8g2_GetFontBBXOffY(u8g2_t *u8g2) U8G2_NOINLINE; int8_t u8g2_GetFontBBXOffY(u8g2_t *u8g2) { return u8g2->font_info.y_offset; /* new font info structure */ } uint8_t u8g2_GetFontCapitalAHeight(u8g2_t *u8g2) U8G2_NOINLINE; uint8_t u8g2_GetFontCapitalAHeight(u8g2_t *u8g2) { return u8g2->font_info.ascent_A; /* new font info structure */ } /*========================================================================*/ /* glyph handling */ /* optimized */ uint8_t u8g2_font_decode_get_unsigned_bits(u8g2_font_decode_t *f, uint8_t cnt) { uint8_t val; uint8_t bit_pos = f->decode_bit_pos; uint8_t bit_pos_plus_cnt; //val = *(f->decode_ptr); val = u8x8_pgm_read( f->decode_ptr ); val >>= bit_pos; bit_pos_plus_cnt = bit_pos; bit_pos_plus_cnt += cnt; if ( bit_pos_plus_cnt >= 8 ) { uint8_t s = 8; s -= bit_pos; f->decode_ptr++; //val |= *(f->decode_ptr) << (8-bit_pos); val |= u8x8_pgm_read( f->decode_ptr ) << (s); //bit_pos -= 8; bit_pos_plus_cnt -= 8; } val &= (1U<decode_bit_pos = bit_pos_plus_cnt; return val; } /* 2 bit --> cnt = 2 -2,-1,0. 1 3 bit --> cnt = 3 -2,-1,0. 1 -4,-3,-2,-1,0,1,2,3 if ( x < 0 ) r = bits(x-1)+1; else r = bits(x)+1; */ /* optimized */ int8_t u8g2_font_decode_get_signed_bits(u8g2_font_decode_t *f, uint8_t cnt) { int8_t v, d; v = (int8_t)u8g2_font_decode_get_unsigned_bits(f, cnt); d = 1; cnt--; d <<= cnt; v -= d; return v; //return (int8_t)u8g2_font_decode_get_unsigned_bits(f, cnt) - ((1<>1); } #ifdef U8G2_WITH_FONT_ROTATION static u8g2_uint_t u8g2_add_vector_y(u8g2_uint_t dy, int8_t x, int8_t y, uint8_t dir) U8G2_NOINLINE; static u8g2_uint_t u8g2_add_vector_y(u8g2_uint_t dy, int8_t x, int8_t y, uint8_t dir) { switch(dir) { case 0: dy += y; break; case 1: dy += x; break; case 2: dy -= y; break; default: dy -= x; break; } return dy; } static u8g2_uint_t u8g2_add_vector_x(u8g2_uint_t dx, int8_t x, int8_t y, uint8_t dir) U8G2_NOINLINE; static u8g2_uint_t u8g2_add_vector_x(u8g2_uint_t dx, int8_t x, int8_t y, uint8_t dir) { switch(dir) { case 0: dx += x; break; case 1: dx -= y; break; case 2: dx -= x; break; default: dx += y; break; } return dx; } #endif /* Description: Draw a run-length area of the glyph. "len" can have any size and the line length has to be wrapped at the glyph border. Args: len: Length of the line is_foreground foreground/background? u8g2->font_decode.target_x X position u8g2->font_decode.target_y Y position u8g2->font_decode.is_transparent Transparent mode Return: - Calls: u8g2_Draw90Line() Called by: u8g2_font_decode_glyph() */ /* optimized */ void u8g2_font_decode_len(u8g2_t *u8g2, uint8_t len, uint8_t is_foreground) { uint8_t cnt; /* total number of remaining pixels, which have to be drawn */ uint8_t rem; /* remaining pixel to the right edge of the glyph */ uint8_t current; /* number of pixels, which need to be drawn for the draw procedure */ /* current is either equal to cnt or equal to rem */ /* local coordinates of the glyph */ uint8_t lx,ly; /* target position on the screen */ u8g2_uint_t x, y; u8g2_font_decode_t *decode = &(u8g2->font_decode); cnt = len; /* get the local position */ lx = decode->x; ly = decode->y; for(;;) { /* calculate the number of pixel to the right edge of the glyph */ rem = decode->glyph_width; rem -= lx; /* calculate how many pixel to draw. This is either to the right edge */ /* or lesser, if not enough pixel are left */ current = rem; if ( cnt < rem ) current = cnt; /* now draw the line, but apply the rotation around the glyph target position */ //u8g2_font_decode_draw_pixel(u8g2, lx,ly,current, is_foreground); /* get target position */ x = decode->target_x; y = decode->target_y; /* apply rotation */ #ifdef U8G2_WITH_FONT_ROTATION x = u8g2_add_vector_x(x, lx, ly, decode->dir); y = u8g2_add_vector_y(y, lx, ly, decode->dir); #else x += lx; y += ly; #endif /* draw foreground and background (if required) */ if ( is_foreground ) { u8g2->draw_color = decode->fg_color; /* draw_color will be restored later */ u8g2_DrawHVLine(u8g2, x, y, current, #ifdef U8G2_WITH_FONT_ROTATION /* dir */ decode->dir #else 0 #endif ); } else if ( decode->is_transparent == 0 ) { u8g2->draw_color = decode->bg_color; /* draw_color will be restored later */ u8g2_DrawHVLine(u8g2, x, y, current, #ifdef U8G2_WITH_FONT_ROTATION /* dir */ decode->dir #else 0 #endif ); } /* check, whether the end of the run length code has been reached */ if ( cnt < rem ) break; cnt -= rem; lx = 0; ly++; } lx += cnt; decode->x = lx; decode->y = ly; } static void u8g2_font_setup_decode(u8g2_t *u8g2, const uint8_t *glyph_data) { u8g2_font_decode_t *decode = &(u8g2->font_decode); decode->decode_ptr = glyph_data; decode->decode_bit_pos = 0; /* 8 Nov 2015, this is already done in the glyph data search procedure */ /* decode->decode_ptr += 1; decode->decode_ptr += 1; */ decode->glyph_width = u8g2_font_decode_get_unsigned_bits(decode, u8g2->font_info.bits_per_char_width); decode->glyph_height = u8g2_font_decode_get_unsigned_bits(decode,u8g2->font_info.bits_per_char_height); decode->fg_color = u8g2->draw_color; decode->bg_color = (decode->fg_color == 0 ? 1 : 0); } /* Description: Decode and draw a glyph. Args: glyph_data: Pointer to the compressed glyph data of the font u8g2->font_decode.target_x X position u8g2->font_decode.target_y Y position u8g2->font_decode.is_transparent Transparent mode Return: Width (delta x advance) of the glyph. Calls: u8g2_font_decode_len() */ /* optimized */ int8_t u8g2_font_decode_glyph(u8g2_t *u8g2, const uint8_t *glyph_data) { uint8_t a, b; int8_t x, y; int8_t d; int8_t h; u8g2_font_decode_t *decode = &(u8g2->font_decode); u8g2_font_setup_decode(u8g2, glyph_data); h = u8g2->font_decode.glyph_height; x = u8g2_font_decode_get_signed_bits(decode, u8g2->font_info.bits_per_char_x); y = u8g2_font_decode_get_signed_bits(decode, u8g2->font_info.bits_per_char_y); d = u8g2_font_decode_get_signed_bits(decode, u8g2->font_info.bits_per_delta_x); if ( decode->glyph_width > 0 ) { #ifdef U8G2_WITH_FONT_ROTATION decode->target_x = u8g2_add_vector_x(decode->target_x, x, -(h+y), decode->dir); decode->target_y = u8g2_add_vector_y(decode->target_y, x, -(h+y), decode->dir); #else decode->target_x += x; decode->target_y -= h+y; #endif //u8g2_add_vector(&(decode->target_x), &(decode->target_y), x, -(h+y), decode->dir); #ifdef U8G2_WITH_INTERSECTION { u8g2_uint_t x0, x1, y0, y1; x0 = decode->target_x; y0 = decode->target_y; x1 = x0; y1 = y0; #ifdef U8G2_WITH_FONT_ROTATION switch(decode->dir) { case 0: x1 += decode->glyph_width; y1 += h; break; case 1: x0 -= h; x0++; /* shift down, because of assymetric boundaries for the interseciton test */ x1++; y1 += decode->glyph_width; break; case 2: x0 -= decode->glyph_width; x0++; /* shift down, because of assymetric boundaries for the interseciton test */ x1++; y0 -= h; y0++; /* shift down, because of assymetric boundaries for the interseciton test */ y1++; break; case 3: x1 += h; y0 -= decode->glyph_width; y0++; /* shift down, because of assymetric boundaries for the interseciton test */ y1++; break; } #else /* U8G2_WITH_FONT_ROTATION */ x1 += decode->glyph_width; y1 += h; #endif if ( u8g2_IsIntersection(u8g2, x0, y0, x1, y1) == 0 ) return d; } #endif /* U8G2_WITH_INTERSECTION */ /* reset local x/y position */ decode->x = 0; decode->y = 0; /* decode glyph */ for(;;) { a = u8g2_font_decode_get_unsigned_bits(decode, u8g2->font_info.bits_per_0); b = u8g2_font_decode_get_unsigned_bits(decode, u8g2->font_info.bits_per_1); do { u8g2_font_decode_len(u8g2, a, 0); u8g2_font_decode_len(u8g2, b, 1); } while( u8g2_font_decode_get_unsigned_bits(decode, 1) != 0 ); if ( decode->y >= h ) break; } /* restore the u8g2 draw color, because this is modified by the decode algo */ u8g2->draw_color = decode->fg_color; } return d; } /* Description: Find the starting point of the glyph data. Args: encoding: Encoding (ASCII or Unicode) of the glyph Return: Address of the glyph data or NULL, if the encoding is not avialable in the font. */ const uint8_t *u8g2_font_get_glyph_data(u8g2_t *u8g2, uint16_t encoding) { const uint8_t *font = u8g2->font; font += U8G2_FONT_DATA_STRUCT_SIZE; if ( encoding <= 255 ) { if ( encoding >= 'a' ) { font += u8g2->font_info.start_pos_lower_a; } else if ( encoding >= 'A' ) { font += u8g2->font_info.start_pos_upper_A; } for(;;) { if ( u8x8_pgm_read( font + 1 ) == 0 ) break; if ( u8x8_pgm_read( font ) == encoding ) { return font+2; /* skip encoding and glyph size */ } font += u8x8_pgm_read( font + 1 ); } } #ifdef U8G2_WITH_UNICODE else { uint16_t e; const uint8_t *unicode_lookup_table; // removed, there is now the new index table //#ifdef __unix__ // if ( u8g2->last_font_data != NULL && encoding >= u8g2->last_unicode ) // { // font = u8g2->last_font_data; // } // else //#endif font += u8g2->font_info.start_pos_unicode; unicode_lookup_table = font; /* issue 596: search for the glyph start in the unicode lookup table */ do { font += u8g2_font_get_word(unicode_lookup_table, 0); e = u8g2_font_get_word(unicode_lookup_table, 2); unicode_lookup_table+=4; } while( e < encoding ); for(;;) { e = u8x8_pgm_read( font ); e <<= 8; e |= u8x8_pgm_read( font + 1 ); // removed, there is now the new index table //#ifdef __unix__ // if ( encoding < e ) // break; //#endif if ( e == 0 ) break; if ( e == encoding ) { // removed, there is now the new index table //#ifdef __unix__ // u8g2->last_font_data = font; // u8g2->last_unicode = encoding; //#endif return font+3; /* skip encoding and glyph size */ } font += u8x8_pgm_read( font + 2 ); } } #endif return NULL; } static u8g2_uint_t u8g2_font_draw_glyph(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, uint16_t encoding) { u8g2_uint_t dx = 0; u8g2->font_decode.target_x = x; u8g2->font_decode.target_y = y; //u8g2->font_decode.is_transparent = is_transparent; this is already set //u8g2->font_decode.dir = dir; const uint8_t *glyph_data = u8g2_font_get_glyph_data(u8g2, encoding); if ( glyph_data != NULL ) { dx = u8g2_font_decode_glyph(u8g2, glyph_data); } return dx; } uint8_t u8g2_IsGlyph(u8g2_t *u8g2, uint16_t requested_encoding) { /* updated to new code */ if ( u8g2_font_get_glyph_data(u8g2, requested_encoding) != NULL ) return 1; return 0; } /* side effect: updates u8g2->font_decode and u8g2->glyph_x_offset */ int8_t u8g2_GetGlyphWidth(u8g2_t *u8g2, uint16_t requested_encoding) { const uint8_t *glyph_data = u8g2_font_get_glyph_data(u8g2, requested_encoding); if ( glyph_data == NULL ) return 0; u8g2_font_setup_decode(u8g2, glyph_data); u8g2->glyph_x_offset = u8g2_font_decode_get_signed_bits(&(u8g2->font_decode), u8g2->font_info.bits_per_char_x); u8g2_font_decode_get_signed_bits(&(u8g2->font_decode), u8g2->font_info.bits_per_char_y); /* glyph width is here: u8g2->font_decode.glyph_width */ return u8g2_font_decode_get_signed_bits(&(u8g2->font_decode), u8g2->font_info.bits_per_delta_x); } /* set one of: U8G2_FONT_MODE_TRANSPARENT U8G2_FONT_MODE_SOLID U8G2_FONT_MODE_NONE This has been changed for the new font procedures */ void u8g2_SetFontMode(u8g2_t *u8g2, uint8_t is_transparent) { u8g2->font_decode.is_transparent = is_transparent; // new font procedures } u8g2_uint_t u8g2_DrawGlyph(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, uint16_t encoding) { #ifdef U8G2_WITH_FONT_ROTATION switch(u8g2->font_decode.dir) { case 0: y += u8g2->font_calc_vref(u8g2); break; case 1: x -= u8g2->font_calc_vref(u8g2); break; case 2: y -= u8g2->font_calc_vref(u8g2); break; case 3: x += u8g2->font_calc_vref(u8g2); break; } #else y += u8g2->font_calc_vref(u8g2); #endif return u8g2_font_draw_glyph(u8g2, x, y, encoding); } static u8g2_uint_t u8g2_draw_string(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, const char *str) U8G2_NOINLINE; static u8g2_uint_t u8g2_draw_string(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, const char *str) { uint16_t e; u8g2_uint_t delta, sum; u8x8_utf8_init(u8g2_GetU8x8(u8g2)); sum = 0; for(;;) { e = u8g2->u8x8.next_cb(u8g2_GetU8x8(u8g2), (uint8_t)*str); if ( e == 0x0ffff ) break; str++; if ( e != 0x0fffe ) { delta = u8g2_DrawGlyph(u8g2, x, y, e); #ifdef U8G2_WITH_FONT_ROTATION switch(u8g2->font_decode.dir) { case 0: x += delta; break; case 1: y += delta; break; case 2: x -= delta; break; case 3: y -= delta; break; } #else x += delta; #endif sum += delta; } } return sum; } u8g2_uint_t u8g2_DrawStr(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, const char *str) { u8g2->u8x8.next_cb = u8x8_ascii_next; return u8g2_draw_string(u8g2, x, y, str); } /* source: https://en.wikipedia.org/wiki/UTF-8 Bits from to bytes Byte 1 Byte 2 Byte 3 Byte 4 Byte 5 Byte 6 7 U+0000 U+007F 1 0xxxxxxx 11 U+0080 U+07FF 2 110xxxxx 10xxxxxx 16 U+0800 U+FFFF 3 1110xxxx 10xxxxxx 10xxxxxx 21 U+10000 U+1FFFFF 4 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 26 U+200000 U+3FFFFFF 5 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 31 U+4000000 U+7FFFFFFF 6 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx */ u8g2_uint_t u8g2_DrawUTF8(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, const char *str) { u8g2->u8x8.next_cb = u8x8_utf8_next; return u8g2_draw_string(u8g2, x, y, str); } u8g2_uint_t u8g2_DrawExtendedUTF8(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, uint8_t to_left, u8g2_kerning_t *kerning, const char *str) { u8g2->u8x8.next_cb = u8x8_utf8_next; uint16_t e_prev = 0x0ffff; uint16_t e; u8g2_uint_t delta, sum, k; u8x8_utf8_init(u8g2_GetU8x8(u8g2)); sum = 0; for(;;) { e = u8g2->u8x8.next_cb(u8g2_GetU8x8(u8g2), (uint8_t)*str); if ( e == 0x0ffff ) break; str++; if ( e != 0x0fffe ) { delta = u8g2_GetGlyphWidth(u8g2, e); if ( to_left ) { k = u8g2_GetKerning(u8g2, kerning, e, e_prev); delta -= k; x -= delta; } else { k = u8g2_GetKerning(u8g2, kerning, e_prev, e); delta -= k; } e_prev = e; u8g2_DrawGlyph(u8g2, x, y, e); if ( to_left ) { } else { x += delta; x -= k; } sum += delta; } } return sum; } u8g2_uint_t u8g2_DrawExtUTF8(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, uint8_t to_left, const uint16_t *kerning_table, const char *str) { u8g2->u8x8.next_cb = u8x8_utf8_next; uint16_t e_prev = 0x0ffff; uint16_t e; u8g2_uint_t delta, sum, k; u8x8_utf8_init(u8g2_GetU8x8(u8g2)); sum = 0; for(;;) { e = u8g2->u8x8.next_cb(u8g2_GetU8x8(u8g2), (uint8_t)*str); if ( e == 0x0ffff ) break; str++; if ( e != 0x0fffe ) { delta = u8g2_GetGlyphWidth(u8g2, e); if ( to_left ) { k = u8g2_GetKerningByTable(u8g2, kerning_table, e, e_prev); delta -= k; x -= delta; } else { k = u8g2_GetKerningByTable(u8g2, kerning_table, e_prev, e); delta -= k; } e_prev = e; if ( to_left ) { } else { x += delta; } u8g2_DrawGlyph(u8g2, x, y, e); if ( to_left ) { } else { //x += delta; //x -= k; } sum += delta; } } return sum; } /*===============================================*/ /* set ascent/descent for reference point calculation */ void u8g2_UpdateRefHeight(u8g2_t *u8g2) { if ( u8g2->font == NULL ) return; u8g2->font_ref_ascent = u8g2->font_info.ascent_A; u8g2->font_ref_descent = u8g2->font_info.descent_g; if ( u8g2->font_height_mode == U8G2_FONT_HEIGHT_MODE_TEXT ) { } else if ( u8g2->font_height_mode == U8G2_FONT_HEIGHT_MODE_XTEXT ) { if ( u8g2->font_ref_ascent < u8g2->font_info.ascent_para ) u8g2->font_ref_ascent = u8g2->font_info.ascent_para; if ( u8g2->font_ref_descent > u8g2->font_info.descent_para ) u8g2->font_ref_descent = u8g2->font_info.descent_para; } else { if ( u8g2->font_ref_ascent < u8g2->font_info.max_char_height+u8g2->font_info.y_offset ) u8g2->font_ref_ascent = u8g2->font_info.max_char_height+u8g2->font_info.y_offset; if ( u8g2->font_ref_descent > u8g2->font_info.y_offset ) u8g2->font_ref_descent = u8g2->font_info.y_offset; } } void u8g2_SetFontRefHeightText(u8g2_t *u8g2) { u8g2->font_height_mode = U8G2_FONT_HEIGHT_MODE_TEXT; u8g2_UpdateRefHeight(u8g2); } void u8g2_SetFontRefHeightExtendedText(u8g2_t *u8g2) { u8g2->font_height_mode = U8G2_FONT_HEIGHT_MODE_XTEXT; u8g2_UpdateRefHeight(u8g2); } void u8g2_SetFontRefHeightAll(u8g2_t *u8g2) { u8g2->font_height_mode = U8G2_FONT_HEIGHT_MODE_ALL; u8g2_UpdateRefHeight(u8g2); } /*===============================================*/ /* callback procedures to correct the y position */ u8g2_uint_t u8g2_font_calc_vref_font(U8X8_UNUSED u8g2_t *u8g2) { return 0; } void u8g2_SetFontPosBaseline(u8g2_t *u8g2) { u8g2->font_calc_vref = u8g2_font_calc_vref_font; } u8g2_uint_t u8g2_font_calc_vref_bottom(u8g2_t *u8g2) { return (u8g2_uint_t)(u8g2->font_ref_descent); } void u8g2_SetFontPosBottom(u8g2_t *u8g2) { u8g2->font_calc_vref = u8g2_font_calc_vref_bottom; } u8g2_uint_t u8g2_font_calc_vref_top(u8g2_t *u8g2) { u8g2_uint_t tmp; /* reference pos is one pixel above the upper edge of the reference glyph */ tmp = (u8g2_uint_t)(u8g2->font_ref_ascent); tmp++; return tmp; } void u8g2_SetFontPosTop(u8g2_t *u8g2) { u8g2->font_calc_vref = u8g2_font_calc_vref_top; } u8g2_uint_t u8g2_font_calc_vref_center(u8g2_t *u8g2) { int8_t tmp; tmp = u8g2->font_ref_ascent; tmp -= u8g2->font_ref_descent; tmp /= 2; tmp += u8g2->font_ref_descent; return tmp; } void u8g2_SetFontPosCenter(u8g2_t *u8g2) { u8g2->font_calc_vref = u8g2_font_calc_vref_center; } /*===============================================*/ void u8g2_SetFont(u8g2_t *u8g2, const uint8_t *font) { if ( u8g2->font != font ) { //#ifdef __unix__ // u8g2->last_font_data = NULL; // u8g2->last_unicode = 0x0ffff; //#endif u8g2->font = font; u8g2_read_font_info(&(u8g2->font_info), font); u8g2_UpdateRefHeight(u8g2); /* u8g2_SetFontPosBaseline(u8g2); */ /* removed with issue 195 */ } } /*===============================================*/ static uint8_t u8g2_is_all_valid(u8g2_t *u8g2, const char *str) U8G2_NOINLINE; static uint8_t u8g2_is_all_valid(u8g2_t *u8g2, const char *str) { uint16_t e; u8x8_utf8_init(u8g2_GetU8x8(u8g2)); for(;;) { e = u8g2->u8x8.next_cb(u8g2_GetU8x8(u8g2), (uint8_t)*str); if ( e == 0x0ffff ) break; str++; if ( e != 0x0fffe ) { if ( u8g2_font_get_glyph_data(u8g2, e) == NULL ) return 0; } } return 1; } uint8_t u8g2_IsAllValidUTF8(u8g2_t *u8g2, const char *str) { u8g2->u8x8.next_cb = u8x8_utf8_next; return u8g2_is_all_valid(u8g2, str); } /* string calculation is stilll not 100% perfect as it addes the initial string offset to the overall size */ static u8g2_uint_t u8g2_string_width(u8g2_t *u8g2, const char *str) U8G2_NOINLINE; static u8g2_uint_t u8g2_string_width(u8g2_t *u8g2, const char *str) { uint16_t e; u8g2_uint_t w, dx; u8g2->font_decode.glyph_width = 0; u8x8_utf8_init(u8g2_GetU8x8(u8g2)); /* reset the total width to zero, this will be expanded during calculation */ w = 0; dx = 0; // printf("str=<%s>\n", str); for(;;) { e = u8g2->u8x8.next_cb(u8g2_GetU8x8(u8g2), (uint8_t)*str); if ( e == 0x0ffff ) break; str++; if ( e != 0x0fffe ) { dx = u8g2_GetGlyphWidth(u8g2, e); /* delta x value of the glyph */ w += dx; } } /* adjust the last glyph, check for issue #16: do not adjust if width is 0 */ if ( u8g2->font_decode.glyph_width != 0 ) { w -= dx; w += u8g2->font_decode.glyph_width; /* the real pixel width of the glyph, sideeffect of GetGlyphWidth */ /* issue #46: we have to add the x offset also */ w += u8g2->glyph_x_offset; /* this value is set as a side effect of u8g2_GetGlyphWidth() */ } // printf("w=%d \n", w); return w; } static void u8g2_GetGlyphHorizontalProperties(u8g2_t *u8g2, uint16_t requested_encoding, uint8_t *w, int8_t *ox, int8_t *dx) { const uint8_t *glyph_data = u8g2_font_get_glyph_data(u8g2, requested_encoding); if ( glyph_data == NULL ) return; u8g2_font_setup_decode(u8g2, glyph_data); *w = u8g2->font_decode.glyph_width; *ox = u8g2_font_decode_get_signed_bits(&(u8g2->font_decode), u8g2->font_info.bits_per_char_x); u8g2_font_decode_get_signed_bits(&(u8g2->font_decode), u8g2->font_info.bits_per_char_y); *dx = u8g2_font_decode_get_signed_bits(&(u8g2->font_decode), u8g2->font_info.bits_per_delta_x); } /* u8g compatible GetStrX function */ int8_t u8g2_GetStrX(u8g2_t *u8g2, const char *s) { uint8_t w; int8_t ox, dx; u8g2_GetGlyphHorizontalProperties(u8g2, *s, &w, &ox, &dx); return ox; } static u8g2_uint_t u8g2_calculate_exact_string_width(u8g2_t *u8g2, const char *str) { u8g2_uint_t w; uint16_t enc; uint8_t gw; int8_t ox, dx; /* reset the total minimal width to zero, this will be expanded during calculation */ w = 0; /* check for empty string, width is already 0 */ do { enc = u8g2->u8x8.next_cb(u8g2_GetU8x8(u8g2), (uint8_t)*str); str++; } while( enc == 0x0fffe ); if ( enc== 0x0ffff ) return w; /* get the glyph information of the first char. This must be valid, because we already checked for the empty string */ /* if *s is not inside the font, then the cached parameters of the glyph are all zero */ u8g2_GetGlyphHorizontalProperties(u8g2, enc, &gw, &ox, &dx); /* strlen(s) == 1: width = width(s[0]) */ /* strlen(s) == 2: width = - offx(s[0]) + deltax(s[0]) + offx(s[1]) + width(s[1]) */ /* strlen(s) == 3: width = - offx(s[0]) + deltax(s[0]) + deltax(s[1]) + offx(s[2]) + width(s[2]) */ /* assume that the string has size 2 or more, than start with negative offset-x */ /* for string with size 1, this will be nullified after the loop */ w = -ox; for(;;) { /* check and stop if the end of the string is reached */ do { enc = u8g2->u8x8.next_cb(u8g2_GetU8x8(u8g2), (uint8_t)*str); str++; } while( enc == 0x0fffe ); if ( enc== 0x0ffff ) break; u8g2_GetGlyphHorizontalProperties(u8g2, enc, &gw, &ox, &dx); /* if there are still more characters, add the delta to the next glyph */ w += dx; } /* finally calculate the width of the last char */ /* here is another exception, if the last char is a black, use the dx value instead */ if ( enc != ' ' ) { /* if g was not updated in the for loop (strlen() == 1), then the initial offset x gets removed */ w += gw; w += ox; } else { w += dx; } return w; } u8g2_uint_t u8g2_GetStrWidth(u8g2_t *u8g2, const char *s) { u8g2->u8x8.next_cb = u8x8_ascii_next; return u8g2_string_width(u8g2, s); } u8g2_uint_t u8g2_GetExactStrWidth(u8g2_t *u8g2, const char *s) { u8g2->u8x8.next_cb = u8x8_ascii_next; return u8g2_calculate_exact_string_width(u8g2, s); } /* source: https://en.wikipedia.org/wiki/UTF-8 Bits from to bytes Byte 1 Byte 2 Byte 3 Byte 4 Byte 5 Byte 6 7 U+0000 U+007F 1 0xxxxxxx 11 U+0080 U+07FF 2 110xxxxx 10xxxxxx 16 U+0800 U+FFFF 3 1110xxxx 10xxxxxx 10xxxxxx 21 U+10000 U+1FFFFF 4 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 26 U+200000 U+3FFFFFF 5 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 31 U+4000000 U+7FFFFFFF 6 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx */ u8g2_uint_t u8g2_GetUTF8Width(u8g2_t *u8g2, const char *str) { u8g2->u8x8.next_cb = u8x8_utf8_next; return u8g2_string_width(u8g2, str); } void u8g2_SetFontDirection(u8g2_t *u8g2, uint8_t dir) { #ifdef U8G2_WITH_FONT_ROTATION u8g2->font_decode.dir = dir; #endif } ================================================ FILE: Drivers/u8g2/Src/u8g2_fonts.c ================================================ [File too large to display: 25.0 MB] ================================================ FILE: Drivers/u8g2/Src/u8g2_hvline.c ================================================ /* u8g2_hvline.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Calltree void u8g2_DrawHVLine(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir) u8g2->cb->draw_l90 u8g2_draw_hv_line_2dir u8g2->ll_hvline(u8g2, x, y, len, dir); */ #include "u8g2.h" #include /*==========================================================*/ /* intersection procedure */ /* Description: clip range from pos a (included) with line len (a+len excluded) agains c (included) to d (excluded) Assumptions: len > 0 c <= d (this is not checked) will return 0 if there is no intersection and if a > b */ static uint8_t u8g2_clip_intersection2(u8g2_uint_t *ap, u8g2_uint_t *len, u8g2_uint_t c, u8g2_uint_t d) { u8g2_uint_t a = *ap; u8g2_uint_t b; b = a; b += *len; /* Description: clip range from a (included) to b (excluded) agains c (included) to d (excluded) Assumptions: a <= b (violation is checked and handled correctly) c <= d (this is not checked) will return 0 if there is no intersection and if a > b optimized clipping: c is set to 0 --> 27 Oct 2018: again removed the c==0 assumption replaced by uint8_t u8g2_clip_intersection2 */ /* handle the a>b case correctly. If code and time is critical, this could */ /* be removed completly (be aware about memory curruption for wrong */ /* arguments) or return 0 for a>b (will lead to skipped lines for wrong */ /* arguments) */ /* removing the following if clause completly may lead to memory corruption of a>b */ if ( a > b ) { /* replacing this if with a simple "return 0;" will not handle the case with negative a */ if ( a < d ) { b = d; b--; } else { a = c; } } /* from now on, the asumption a <= b is ok */ if ( a >= d ) return 0; if ( b <= c ) return 0; if ( a < c ) a = c; if ( b > d ) b = d; *ap = a; b -= a; *len = b; return 1; } /*==========================================================*/ /* draw procedures */ /* x,y Upper left position of the line within the pixel buffer len length of the line in pixel, len must not be 0 dir 0: horizontal line (left to right) 1: vertical line (top to bottom) This function first adjusts the y position to the local buffer. Then it will clip the line and call u8g2_draw_low_level_hv_line() */ void u8g2_draw_hv_line_2dir(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir) { /* clipping happens before the display rotation */ /* transform to pixel buffer coordinates */ y -= u8g2->pixel_curr_row; u8g2->ll_hvline(u8g2, x, y, len, dir); } /* This is the toplevel function for the hv line draw procedures. This function should be called by the user. "dir" may have 4 directions: 0 (left to right), 1, 2, 3 (down up) */ void u8g2_DrawHVLine(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir) { /* Make a call to the callback function (e.g. u8g2_draw_l90_r0). */ /* The callback may rotate the hv line */ /* after rotation this will call u8g2_draw_hv_line_4dir() */ #ifdef U8G2_WITH_CLIP_WINDOW_SUPPORT if ( u8g2->is_page_clip_window_intersection != 0 ) #endif /* U8G2_WITH_CLIP_WINDOW_SUPPORT */ if ( len != 0 ) { /* convert to two directions */ if ( len > 1 ) { if ( dir == 2 ) { x -= len; x++; } else if ( dir == 3 ) { y -= len; y++; } } dir &= 1; /* clip against the user window */ if ( dir == 0 ) { if ( y < u8g2->user_y0 ) return; if ( y >= u8g2->user_y1 ) return; if ( u8g2_clip_intersection2(&x, &len, u8g2->user_x0, u8g2->user_x1) == 0 ) return; } else { if ( x < u8g2->user_x0 ) return; if ( x >= u8g2->user_x1 ) return; if ( u8g2_clip_intersection2(&y, &len, u8g2->user_y0, u8g2->user_y1) == 0 ) return; } u8g2->cb->draw_l90(u8g2, x, y, len, dir); } } void u8g2_DrawHLine(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len) { // #ifdef U8G2_WITH_INTERSECTION // if ( u8g2_IsIntersection(u8g2, x, y, x+len, y+1) == 0 ) // return; // #endif /* U8G2_WITH_INTERSECTION */ u8g2_DrawHVLine(u8g2, x, y, len, 0); } void u8g2_DrawVLine(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len) { // #ifdef U8G2_WITH_INTERSECTION // if ( u8g2_IsIntersection(u8g2, x, y, x+1, y+len) == 0 ) // return; // #endif /* U8G2_WITH_INTERSECTION */ u8g2_DrawHVLine(u8g2, x, y, len, 1); } void u8g2_DrawPixel(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y) { #ifdef U8G2_WITH_INTERSECTION if ( y < u8g2->user_y0 ) return; if ( y >= u8g2->user_y1 ) return; if ( x < u8g2->user_x0 ) return; if ( x >= u8g2->user_x1 ) return; #endif /* U8G2_WITH_INTERSECTION */ u8g2_DrawHVLine(u8g2, x, y, 1, 0); } /* Assign the draw color for all drawing functions. color may be 0 or 1. The actual color is defined by the display. With color = 1 the drawing function will set the display memory to 1. For OLEDs this ususally means, that the pixel is enabled and the LED at the pixel is turned on. On an LCD it usually means that the LCD segment of the pixel is enabled, which absorbs the light. For eInk/ePaper it means black ink. 7 Jan 2017: Allow color value 2 for XOR operation. */ void u8g2_SetDrawColor(u8g2_t *u8g2, uint8_t color) { u8g2->draw_color = color; /* u8g2_SetDrawColor: just assign the argument */ if ( color >= 3 ) u8g2->draw_color = 1; /* u8g2_SetDrawColor: make color as one if arg is invalid */ } ================================================ FILE: Drivers/u8g2/Src/u8g2_input_value.c ================================================ /* u8g2_input_value.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8g2.h" /* return: 0: value is not changed (HOME/Break Button pressed) 1: value has been updated */ uint8_t u8g2_UserInterfaceInputValue(u8g2_t *u8g2, const char *title, const char *pre, uint8_t *value, uint8_t lo, uint8_t hi, uint8_t digits, const char *post) { uint8_t line_height; uint8_t height; u8g2_uint_t pixel_height; u8g2_uint_t y, yy; u8g2_uint_t pixel_width; u8g2_uint_t x, xx; uint8_t local_value = *value; //uint8_t r; /* not used ??? */ uint8_t event; /* only horizontal strings are supported, so force this here */ u8g2_SetFontDirection(u8g2, 0); /* force baseline position */ u8g2_SetFontPosBaseline(u8g2); /* calculate line height */ line_height = u8g2_GetAscent(u8g2); line_height -= u8g2_GetDescent(u8g2); /* calculate overall height of the input value box */ height = 1; /* value input line */ height += u8x8_GetStringLineCnt(title); /* calculate the height in pixel */ pixel_height = height; pixel_height *= line_height; /* calculate offset from top */ y = 0; if ( pixel_height < u8g2_GetDisplayHeight(u8g2) ) { y = u8g2_GetDisplayHeight(u8g2); y -= pixel_height; y /= 2; } /* calculate offset from left for the label */ x = 0; pixel_width = u8g2_GetUTF8Width(u8g2, pre); pixel_width += u8g2_GetUTF8Width(u8g2, "0") * digits; pixel_width += u8g2_GetUTF8Width(u8g2, post); if ( pixel_width < u8g2_GetDisplayWidth(u8g2) ) { x = u8g2_GetDisplayWidth(u8g2); x -= pixel_width; x /= 2; } /* event loop */ for(;;) { u8g2_FirstPage(u8g2); do { /* render */ yy = y; yy += u8g2_DrawUTF8Lines(u8g2, 0, yy, u8g2_GetDisplayWidth(u8g2), line_height, title); xx = x; xx += u8g2_DrawUTF8(u8g2, xx, yy, pre); xx += u8g2_DrawUTF8(u8g2, xx, yy, u8x8_u8toa(local_value, digits)); u8g2_DrawUTF8(u8g2, xx, yy, post); } while( u8g2_NextPage(u8g2) ); #ifdef U8G2_REF_MAN_PIC return 0; #endif for(;;) { event = u8x8_GetMenuEvent(u8g2_GetU8x8(u8g2)); if ( event == U8X8_MSG_GPIO_MENU_SELECT ) { *value = local_value; return 1; } else if ( event == U8X8_MSG_GPIO_MENU_HOME ) { return 0; } else if ( event == U8X8_MSG_GPIO_MENU_NEXT || event == U8X8_MSG_GPIO_MENU_UP ) { if ( local_value >= hi ) local_value = lo; else local_value++; break; } else if ( event == U8X8_MSG_GPIO_MENU_PREV || event == U8X8_MSG_GPIO_MENU_DOWN ) { if ( local_value <= lo ) local_value = hi; else local_value--; break; } } } /* never reached */ //return r; } ================================================ FILE: Drivers/u8g2/Src/u8g2_intersection.c ================================================ /* u8g2_intersection.c Intersection calculation, code taken from u8g_clip.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8g2.h" #ifdef __GNUC__ #define U8G2_ALWAYS_INLINE __inline__ __attribute__((always_inline)) #else #define U8G2_ALWAYS_INLINE #endif #if defined(U8G2_WITH_INTERSECTION) || defined(U8G2_WITH_CLIP_WINDOW_SUPPORT) #ifdef OLD_VERSION_WITH_SYMETRIC_BOUNDARIES /* intersection assumptions: a1 <= a2 is always true minimized version ---1----0 1 b1 <= a2 && b1 > b2 -----1--0 1 b2 >= a1 && b1 > b2 ---1-1--- 1 b1 <= a2 && b2 >= a1 */ /* calculate the intersection between a0/a1 and v0/v1 The intersection check returns one if the range of a0/a1 has an intersection with v0/v1. The intersection check includes the boundary values v1 and a1. The following asserts will succeed: assert( u8g2_is_intersection_decision_tree(4, 6, 7, 9) == 0 ); assert( u8g2_is_intersection_decision_tree(4, 6, 6, 9) != 0 ); assert( u8g2_is_intersection_decision_tree(6, 9, 4, 6) != 0 ); assert( u8g2_is_intersection_decision_tree(7, 9, 4, 6) == 0 ); */ //static uint8_t U8G2_ALWAYS_INLINE u8g2_is_intersection_decision_tree(u8g_uint_t a0, u8g_uint_t a1, u8g_uint_t v0, u8g_uint_t v1) static uint8_t u8g2_is_intersection_decision_tree(u8g2_uint_t a0, u8g2_uint_t a1, u8g2_uint_t v0, u8g2_uint_t v1) { if ( v0 <= a1 ) { if ( v1 >= a0 ) { return 1; } else { if ( v0 > v1 ) { return 1; } else { return 0; } } } else { if ( v1 >= a0 ) { if ( v0 > v1 ) { return 1; } else { return 0; } } else { return 0; } } } #endif /* OLD_VERSION_WITH_SYMETRIC_BOUNDARIES */ /* version with asymetric boundaries. a1 and v1 are excluded v0 == v1 is not support end return 1 */ uint8_t u8g2_is_intersection_decision_tree(u8g2_uint_t a0, u8g2_uint_t a1, u8g2_uint_t v0, u8g2_uint_t v1) { if ( v0 < a1 ) // v0 <= a1 { if ( v1 > a0 ) // v1 >= a0 { return 1; } else { if ( v0 > v1 ) // v0 > v1 { return 1; } else { return 0; } } } else { if ( v1 > a0 ) // v1 >= a0 { if ( v0 > v1 ) // v0 > v1 { return 1; } else { return 0; } } else { return 0; } } } /* upper limits are not included (asymetric boundaries) */ uint8_t u8g2_IsIntersection(u8g2_t *u8g2, u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t x1, u8g2_uint_t y1) { if ( u8g2_is_intersection_decision_tree(u8g2->user_y0, u8g2->user_y1, y0, y1) == 0 ) return 0; return u8g2_is_intersection_decision_tree(u8g2->user_x0, u8g2->user_x1, x0, x1); } #endif /* U8G2_WITH_INTERSECTION */ ================================================ FILE: Drivers/u8g2/Src/u8g2_kerning.c ================================================ /* u8g2_kerning.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8g2.h" /* this function is used as "u8g2_get_kerning_cb" */ /* uint8_t u8g2_GetNullKerning(u8g2_t *u8g2, uint16_t e1, uint16_t e2) { return 0; } */ /* this function is used as "u8g2_get_kerning_cb" */ uint8_t u8g2_GetKerning(U8X8_UNUSED u8g2_t *u8g2, u8g2_kerning_t *kerning, uint16_t e1, uint16_t e2) { uint16_t i1, i2, cnt, end; if ( kerning == NULL ) return 0; /* search for the encoding in the first table */ cnt = kerning->first_table_cnt; cnt--; /* ignore the last element of the table, which is 0x0ffff */ for( i1 = 0; i1 < cnt; i1++ ) { if ( kerning->first_encoding_table[i1] == e1 ) break; } if ( i1 >= cnt ) return 0; /* e1 not part of the kerning table, return 0 */ /* get the upper index for i2 */ end = kerning->index_to_second_table[i1+1]; for( i2 = kerning->index_to_second_table[i1]; i2 < end; i2++ ) { if ( kerning->second_encoding_table[i2] == e2 ) break; } if ( i2 >= end ) return 0; /* e2 not part of any pair with e1, return 0 */ return kerning->kerning_values[i2]; } uint8_t u8g2_GetKerningByTable(U8X8_UNUSED u8g2_t *u8g2, const uint16_t *kt, uint16_t e1, uint16_t e2) { uint16_t i; i = 0; if ( kt == NULL ) return 0; for(;;) { if ( kt[i] == 0x0ffff ) break; if ( kt[i] == e1 && kt[i+1] == e2 ) return kt[i+2]; i+=3; } return 0; } ================================================ FILE: Drivers/u8g2/Src/u8g2_line.c ================================================ /* u8g2_box.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8g2.h" void u8g2_DrawLine(u8g2_t *u8g2, u8g2_uint_t x1, u8g2_uint_t y1, u8g2_uint_t x2, u8g2_uint_t y2) { u8g2_uint_t tmp; u8g2_uint_t x,y; u8g2_uint_t dx, dy; u8g2_int_t err; u8g2_int_t ystep; uint8_t swapxy = 0; /* no intersection check at the moment, should be added... */ if ( x1 > x2 ) dx = x1-x2; else dx = x2-x1; if ( y1 > y2 ) dy = y1-y2; else dy = y2-y1; if ( dy > dx ) { swapxy = 1; tmp = dx; dx =dy; dy = tmp; tmp = x1; x1 =y1; y1 = tmp; tmp = x2; x2 =y2; y2 = tmp; } if ( x1 > x2 ) { tmp = x1; x1 =x2; x2 = tmp; tmp = y1; y1 =y2; y2 = tmp; } err = dx >> 1; if ( y2 > y1 ) ystep = 1; else ystep = -1; y = y1; #ifndef U8G2_16BIT if ( x2 == 255 ) x2--; #else if ( x2 == 0xffff ) x2--; #endif for( x = x1; x <= x2; x++ ) { if ( swapxy == 0 ) u8g2_DrawPixel(u8g2, x, y); else u8g2_DrawPixel(u8g2, y, x); err -= (uint8_t)dy; if ( err < 0 ) { y += (u8g2_uint_t)ystep; err += (u8g2_uint_t)dx; } } } ================================================ FILE: Drivers/u8g2/Src/u8g2_ll_hvline.c ================================================ /* u8g2_ll_hvline.c low level hvline Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *ptr |= or_mask *ptr ^= xor_mask color = 0: or_mask = 1, xor_mask = 1 color = 1: or_mask = 1, xor_mask = 0 color = 2: or_mask = 0, xor_mask = 1 if ( color <= 1 ) or_mask = mask; if ( color != 1 ) xor_mask = mask; */ #include "u8g2.h" #include /*=================================================*/ /* u8g2_ll_hvline_vertical_top_lsb SSD13xx UC1701 */ #ifdef U8G2_WITH_HVLINE_SPEED_OPTIMIZATION /* x,y Upper left position of the line within the local buffer (not the display!) len length of the line in pixel, len must not be 0 dir 0: horizontal line (left to right) 1: vertical line (top to bottom) asumption: all clipping done */ void u8g2_ll_hvline_vertical_top_lsb(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir) { uint16_t offset; uint8_t *ptr; uint8_t bit_pos, mask; uint8_t or_mask, xor_mask; #ifdef __unix uint8_t *max_ptr = u8g2->tile_buf_ptr + u8g2_GetU8x8(u8g2)->display_info->tile_width*u8g2->tile_buf_height*8; #endif //assert(x >= u8g2->buf_x0); //assert(x < u8g2_GetU8x8(u8g2)->display_info->tile_width*8); //assert(y >= u8g2->buf_y0); //assert(y < u8g2_GetU8x8(u8g2)->display_info->tile_height*8); /* bytes are vertical, lsb on top (y=0), msb at bottom (y=7) */ bit_pos = y; /* overflow truncate is ok here... */ bit_pos &= 7; /* ... because only the lowest 3 bits are needed */ mask = 1; mask <<= bit_pos; or_mask = 0; xor_mask = 0; if ( u8g2->draw_color <= 1 ) or_mask = mask; if ( u8g2->draw_color != 1 ) xor_mask = mask; offset = y; /* y might be 8 or 16 bit, but we need 16 bit, so use a 16 bit variable */ offset &= ~7; offset *= u8g2_GetU8x8(u8g2)->display_info->tile_width; ptr = u8g2->tile_buf_ptr; ptr += offset; ptr += x; if ( dir == 0 ) { do { #ifdef __unix assert(ptr < max_ptr); #endif *ptr |= or_mask; *ptr ^= xor_mask; ptr++; len--; } while( len != 0 ); } else { do { #ifdef __unix assert(ptr < max_ptr); #endif *ptr |= or_mask; *ptr ^= xor_mask; bit_pos++; bit_pos &= 7; len--; if ( bit_pos == 0 ) { ptr+=u8g2->pixel_buf_width; /* 6 Jan 17: Changed u8g2->width to u8g2->pixel_buf_width, issue #148 */ if ( u8g2->draw_color <= 1 ) or_mask = 1; if ( u8g2->draw_color != 1 ) xor_mask = 1; } else { or_mask <<= 1; xor_mask <<= 1; } } while( len != 0 ); } } #else /* U8G2_WITH_HVLINE_SPEED_OPTIMIZATION */ /* x,y position within the buffer */ static void u8g2_draw_pixel_vertical_top_lsb(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y) { uint16_t offset; uint8_t *ptr; uint8_t bit_pos, mask; //assert(x >= u8g2->buf_x0); //assert(x < u8g2_GetU8x8(u8g2)->display_info->tile_width*8); //assert(y >= u8g2->buf_y0); //assert(y < u8g2_GetU8x8(u8g2)->display_info->tile_height*8); /* bytes are vertical, lsb on top (y=0), msb at bottom (y=7) */ bit_pos = y; /* overflow truncate is ok here... */ bit_pos &= 7; /* ... because only the lowest 3 bits are needed */ mask = 1; mask <<= bit_pos; offset = y; /* y might be 8 or 16 bit, but we need 16 bit, so use a 16 bit variable */ offset &= ~7; offset *= u8g2_GetU8x8(u8g2)->display_info->tile_width; ptr = u8g2->tile_buf_ptr; ptr += offset; ptr += x; if ( u8g2->draw_color <= 1 ) *ptr |= mask; if ( u8g2->draw_color != 1 ) *ptr ^= mask; } /* x,y Upper left position of the line within the local buffer (not the display!) len length of the line in pixel, len must not be 0 dir 0: horizontal line (left to right) 1: vertical line (top to bottom) asumption: all clipping done */ void u8g2_ll_hvline_vertical_top_lsb(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir) { if ( dir == 0 ) { do { u8g2_draw_pixel_vertical_top_lsb(u8g2, x, y); x++; len--; } while( len != 0 ); } else { do { u8g2_draw_pixel_vertical_top_lsb(u8g2, x, y); y++; len--; } while( len != 0 ); } } #endif /* U8G2_WITH_HVLINE_SPEED_OPTIMIZATION */ /*=================================================*/ /* u8g2_ll_hvline_horizontal_right_lsb ST7920 */ #ifdef U8G2_WITH_HVLINE_SPEED_OPTIMIZATION /* x,y Upper left position of the line within the local buffer (not the display!) len length of the line in pixel, len must not be 0 dir 0: horizontal line (left to right) 1: vertical line (top to bottom) asumption: all clipping done */ void u8g2_ll_hvline_horizontal_right_lsb(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir) { uint16_t offset; uint8_t *ptr; uint8_t bit_pos; uint8_t mask; uint8_t tile_width = u8g2_GetU8x8(u8g2)->display_info->tile_width; bit_pos = x; /* overflow truncate is ok here... */ bit_pos &= 7; /* ... because only the lowest 3 bits are needed */ mask = 128; mask >>= bit_pos; offset = y; /* y might be 8 or 16 bit, but we need 16 bit, so use a 16 bit variable */ offset *= tile_width; offset += x>>3; ptr = u8g2->tile_buf_ptr; ptr += offset; if ( dir == 0 ) { do { if ( u8g2->draw_color <= 1 ) *ptr |= mask; if ( u8g2->draw_color != 1 ) *ptr ^= mask; mask >>= 1; if ( mask == 0 ) { mask = 128; ptr++; } //x++; len--; } while( len != 0 ); } else { do { if ( u8g2->draw_color <= 1 ) *ptr |= mask; if ( u8g2->draw_color != 1 ) *ptr ^= mask; ptr += tile_width; //y++; len--; } while( len != 0 ); } } #else /* U8G2_WITH_HVLINE_SPEED_OPTIMIZATION */ /* x,y position within the buffer */ static void u8g2_draw_pixel_horizontal_right_lsb(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y) { uint16_t offset; uint8_t *ptr; uint8_t bit_pos, mask; //assert(x >= u8g2->buf_x0); //assert(x < u8g2_GetU8x8(u8g2)->display_info->tile_width*8); //assert(y >= u8g2->buf_y0); //assert(y < u8g2_GetU8x8(u8g2)->display_info->tile_height*8); /* bytes are vertical, lsb on top (y=0), msb at bottom (y=7) */ bit_pos = x; /* overflow truncate is ok here... */ bit_pos &= 7; /* ... because only the lowest 3 bits are needed */ mask = 128; mask >>= bit_pos; x >>= 3; offset = y; /* y might be 8 or 16 bit, but we need 16 bit, so use a 16 bit variable */ offset *= u8g2_GetU8x8(u8g2)->display_info->tile_width; offset += x; ptr = u8g2->tile_buf_ptr; ptr += offset; if ( u8g2->draw_color <= 1 ) *ptr |= mask; if ( u8g2->draw_color != 1 ) *ptr ^= mask; } /* x,y Upper left position of the line within the local buffer (not the display!) len length of the line in pixel, len must not be 0 dir 0: horizontal line (left to right) 1: vertical line (top to bottom) asumption: all clipping done */ void u8g2_ll_hvline_horizontal_right_lsb(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir) { if ( dir == 0 ) { do { u8g2_draw_pixel_horizontal_right_lsb(u8g2, x, y); x++; len--; } while( len != 0 ); } else { do { u8g2_draw_pixel_horizontal_right_lsb(u8g2, x, y); y++; len--; } while( len != 0 ); } } #endif /* U8G2_WITH_HVLINE_SPEED_OPTIMIZATION */ ================================================ FILE: Drivers/u8g2/Src/u8g2_message.c ================================================ /* u8g2_message.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8g2.h" #define SPACE_BETWEEN_BUTTONS_IN_PIXEL 6 #define SPACE_BETWEEN_TEXT_AND_BUTTONS_IN_PIXEL 3 uint8_t u8g2_draw_button_line(u8g2_t *u8g2, u8g2_uint_t y, u8g2_uint_t w, uint8_t cursor, const char *s) { u8g2_uint_t button_line_width; uint8_t i; uint8_t cnt; uint8_t is_invert; u8g2_uint_t d; u8g2_uint_t x; cnt = u8x8_GetStringLineCnt(s); /* calculate the width of the button line */ button_line_width = 0; for( i = 0; i < cnt; i++ ) { button_line_width += u8g2_GetUTF8Width(u8g2, u8x8_GetStringLineStart(i, s)); } button_line_width += (cnt-1)*SPACE_BETWEEN_BUTTONS_IN_PIXEL; /* add some space between the buttons */ /* calculate the left offset */ d = 0; if ( button_line_width < w ) { d = w; d -= button_line_width; d /= 2; } /* draw the buttons */ x = d; for( i = 0; i < cnt; i++ ) { is_invert = 0; if ( i == cursor ) is_invert = 1; u8g2_DrawUTF8Line(u8g2, x, y, 0, u8x8_GetStringLineStart(i, s), 1, is_invert); x += u8g2_GetUTF8Width(u8g2, u8x8_GetStringLineStart(i, s)); x += SPACE_BETWEEN_BUTTONS_IN_PIXEL; } /* return the number of buttons */ return cnt; } /* title1: Multiple lines,separated by '\n' title2: A single line/string which is terminated by '\0' or '\n' . "title2" accepts the return value from u8x8_GetStringLineStart() title3: Multiple lines,separated by '\n' buttons: one more more buttons separated by '\n' and terminated with '\0' side effects: u8g2_SetFontDirection(u8g2, 0); u8g2_SetFontPosBaseline(u8g2); */ uint8_t u8g2_UserInterfaceMessage(u8g2_t *u8g2, const char *title1, const char *title2, const char *title3, const char *buttons) { uint8_t height; uint8_t line_height; u8g2_uint_t pixel_height; u8g2_uint_t y, yy; uint8_t cursor = 0; uint8_t button_cnt; uint8_t event; /* only horizontal strings are supported, so force this here */ u8g2_SetFontDirection(u8g2, 0); /* force baseline position */ u8g2_SetFontPosBaseline(u8g2); /* calculate line height */ line_height = u8g2_GetAscent(u8g2); line_height -= u8g2_GetDescent(u8g2); /* calculate overall height of the message box in lines*/ height = 1; /* button line */ height += u8x8_GetStringLineCnt(title1); if ( title2 != NULL ) height++; height += u8x8_GetStringLineCnt(title3); /* calculate the height in pixel */ pixel_height = height; pixel_height *= line_height; /* ... and add the space between the text and the buttons */ pixel_height +=SPACE_BETWEEN_TEXT_AND_BUTTONS_IN_PIXEL; /* calculate offset from top */ y = 0; if ( pixel_height < u8g2_GetDisplayHeight(u8g2) ) { y = u8g2_GetDisplayHeight(u8g2); y -= pixel_height; y /= 2; } y += u8g2_GetAscent(u8g2); for(;;) { u8g2_FirstPage(u8g2); do { yy = y; /* draw message box */ yy += u8g2_DrawUTF8Lines(u8g2, 0, yy, u8g2_GetDisplayWidth(u8g2), line_height, title1); if ( title2 != NULL ) { u8g2_DrawUTF8Line(u8g2, 0, yy, u8g2_GetDisplayWidth(u8g2), title2, 0, 0); yy+=line_height; } yy += u8g2_DrawUTF8Lines(u8g2, 0, yy, u8g2_GetDisplayWidth(u8g2), line_height, title3); yy += SPACE_BETWEEN_TEXT_AND_BUTTONS_IN_PIXEL; button_cnt = u8g2_draw_button_line(u8g2, yy, u8g2_GetDisplayWidth(u8g2), cursor, buttons); } while( u8g2_NextPage(u8g2) ); #ifdef U8G2_REF_MAN_PIC return 0; #endif for(;;) { event = u8x8_GetMenuEvent(u8g2_GetU8x8(u8g2)); if ( event == U8X8_MSG_GPIO_MENU_SELECT ) return cursor+1; else if ( event == U8X8_MSG_GPIO_MENU_HOME ) return 0; else if ( event == U8X8_MSG_GPIO_MENU_NEXT || event == U8X8_MSG_GPIO_MENU_DOWN ) { cursor++; if ( cursor >= button_cnt ) cursor = 0; break; } else if ( event == U8X8_MSG_GPIO_MENU_PREV || event == U8X8_MSG_GPIO_MENU_UP ) { if ( cursor == 0 ) cursor = button_cnt; cursor--; break; } } } /* never reached */ //return 0; } ================================================ FILE: Drivers/u8g2/Src/u8g2_polygon.c ================================================ /* u8g22_polygon.c */ #include "u8g2.h" /*===========================================*/ /* local definitions */ typedef int16_t pg_word_t; struct pg_point_struct { pg_word_t x; pg_word_t y; }; typedef struct _pg_struct pg_struct; /* forward declaration */ struct pg_edge_struct { pg_word_t x_direction; /* 1, if x2 is greater than x1, -1 otherwise */ pg_word_t height; pg_word_t current_x_offset; pg_word_t error_offset; /* --- line loop --- */ pg_word_t current_y; pg_word_t max_y; pg_word_t current_x; pg_word_t error; /* --- outer loop --- */ uint8_t (*next_idx_fn)(pg_struct *pg, uint8_t i); uint8_t curr_idx; }; /* maximum number of points in the polygon */ /* can be redefined, but highest possible value is 254 */ #define PG_MAX_POINTS 6 /* index numbers for the pge structures below */ #define PG_LEFT 0 #define PG_RIGHT 1 struct _pg_struct { struct pg_point_struct list[PG_MAX_POINTS]; uint8_t cnt; uint8_t is_min_y_not_flat; pg_word_t total_scan_line_cnt; struct pg_edge_struct pge[2]; /* left and right line draw structures */ }; /*===========================================*/ /* procedures, which should not be inlined (save as much flash ROM as possible */ #define PG_NOINLINE U8G2_NOINLINE static uint8_t pge_Next(struct pg_edge_struct *pge) PG_NOINLINE; static uint8_t pg_inc(pg_struct *pg, uint8_t i) PG_NOINLINE; static uint8_t pg_dec(pg_struct *pg, uint8_t i) PG_NOINLINE; static void pg_expand_min_y(pg_struct *pg, pg_word_t min_y, uint8_t pge_idx) PG_NOINLINE; static void pg_line_init(pg_struct * const pg, uint8_t pge_index) PG_NOINLINE; /*===========================================*/ /* line draw algorithm */ static uint8_t pge_Next(struct pg_edge_struct *pge) { if ( pge->current_y >= pge->max_y ) return 0; pge->current_x += pge->current_x_offset; pge->error += pge->error_offset; if ( pge->error > 0 ) { pge->current_x += pge->x_direction; pge->error -= pge->height; } pge->current_y++; return 1; } /* assumes y2 > y1 */ static void pge_Init(struct pg_edge_struct *pge, pg_word_t x1, pg_word_t y1, pg_word_t x2, pg_word_t y2) { pg_word_t dx = x2 - x1; pg_word_t width; pge->height = y2 - y1; pge->max_y = y2; pge->current_y = y1; pge->current_x = x1; if ( dx >= 0 ) { pge->x_direction = 1; width = dx; pge->error = 0; } else { pge->x_direction = -1; width = -dx; pge->error = 1 - pge->height; } pge->current_x_offset = dx / pge->height; pge->error_offset = width % pge->height; } /*===========================================*/ /* convex polygon algorithm */ static uint8_t pg_inc(pg_struct *pg, uint8_t i) { i++; if ( i >= pg->cnt ) i = 0; return i; } static uint8_t pg_dec(pg_struct *pg, uint8_t i) { i--; if ( i >= pg->cnt ) i = pg->cnt-1; return i; } static void pg_expand_min_y(pg_struct *pg, pg_word_t min_y, uint8_t pge_idx) { uint8_t i = pg->pge[pge_idx].curr_idx; for(;;) { i = pg->pge[pge_idx].next_idx_fn(pg, i); if ( pg->list[i].y != min_y ) break; pg->pge[pge_idx].curr_idx = i; } } static uint8_t pg_prepare(pg_struct *pg) { pg_word_t max_y; pg_word_t min_y; uint8_t i; /* setup the next index procedures */ pg->pge[PG_RIGHT].next_idx_fn = pg_inc; pg->pge[PG_LEFT].next_idx_fn = pg_dec; /* search for highest and lowest point */ max_y = pg->list[0].y; min_y = pg->list[0].y; pg->pge[PG_LEFT].curr_idx = 0; for( i = 1; i < pg->cnt; i++ ) { if ( max_y < pg->list[i].y ) { max_y = pg->list[i].y; } if ( min_y > pg->list[i].y ) { pg->pge[PG_LEFT].curr_idx = i; min_y = pg->list[i].y; } } /* calculate total number of scan lines */ pg->total_scan_line_cnt = max_y; pg->total_scan_line_cnt -= min_y; /* exit if polygon height is zero */ if ( pg->total_scan_line_cnt == 0 ) return 0; /* if the minimum y side is flat, try to find the lowest and highest x points */ pg->pge[PG_RIGHT].curr_idx = pg->pge[PG_LEFT].curr_idx; pg_expand_min_y(pg, min_y, PG_RIGHT); pg_expand_min_y(pg, min_y, PG_LEFT); /* check if the min side is really flat (depends on the x values) */ pg->is_min_y_not_flat = 1; if ( pg->list[pg->pge[PG_LEFT].curr_idx].x != pg->list[pg->pge[PG_RIGHT].curr_idx].x ) { pg->is_min_y_not_flat = 0; } else { pg->total_scan_line_cnt--; if ( pg->total_scan_line_cnt == 0 ) return 0; } return 1; } static void pg_hline(pg_struct *pg, u8g2_t *u8g2) { pg_word_t x1, x2, y; x1 = pg->pge[PG_LEFT].current_x; x2 = pg->pge[PG_RIGHT].current_x; y = pg->pge[PG_RIGHT].current_y; if ( y < 0 ) return; if ( y >= u8g2_GetDisplayHeight(u8g2) ) // does not work for 256x64 display??? return; if ( x1 < x2 ) { if ( x2 < 0 ) return; if ( x1 >= u8g2_GetDisplayWidth(u8g2) ) return; if ( x1 < 0 ) x1 = 0; if ( x2 >= u8g2_GetDisplayWidth(u8g2) ) x2 = u8g2_GetDisplayWidth(u8g2); u8g2_DrawHLine(u8g2, x1, y, x2 - x1); } else { if ( x1 < 0 ) return; if ( x2 >= u8g2_GetDisplayWidth(u8g2) ) return; if ( x2 < 0 ) x1 = 0; if ( x1 >= u8g2_GetDisplayWidth(u8g2) ) x1 = u8g2_GetDisplayWidth(u8g2); u8g2_DrawHLine(u8g2, x2, y, x1 - x2); } } static void pg_line_init(pg_struct * const pg, uint8_t pge_index) { struct pg_edge_struct *pge = pg->pge+pge_index; uint8_t idx; pg_word_t x1; pg_word_t y1; pg_word_t x2; pg_word_t y2; idx = pge->curr_idx; y1 = pg->list[idx].y; x1 = pg->list[idx].x; idx = pge->next_idx_fn(pg, idx); y2 = pg->list[idx].y; x2 = pg->list[idx].x; pge->curr_idx = idx; pge_Init(pge, x1, y1, x2, y2); } static void pg_exec(pg_struct *pg, u8g2_t *u8g2) { pg_word_t i = pg->total_scan_line_cnt; /* first line is skipped if the min y line is not flat */ pg_line_init(pg, PG_LEFT); pg_line_init(pg, PG_RIGHT); if ( pg->is_min_y_not_flat != 0 ) { pge_Next(&(pg->pge[PG_LEFT])); pge_Next(&(pg->pge[PG_RIGHT])); } do { pg_hline(pg, u8g2); while ( pge_Next(&(pg->pge[PG_LEFT])) == 0 ) { pg_line_init(pg, PG_LEFT); } while ( pge_Next(&(pg->pge[PG_RIGHT])) == 0 ) { pg_line_init(pg, PG_RIGHT); } i--; } while( i > 0 ); } /*===========================================*/ /* API procedures */ static void pg_ClearPolygonXY(pg_struct *pg) { pg->cnt = 0; } static void pg_AddPolygonXY(pg_struct *pg, int16_t x, int16_t y) { if ( pg->cnt < PG_MAX_POINTS ) { pg->list[pg->cnt].x = x; pg->list[pg->cnt].y = y; pg->cnt++; } } static void pg_DrawPolygon(pg_struct *pg, u8g2_t *u8g2) { if ( pg_prepare(pg) == 0 ) return; pg_exec(pg, u8g2); } pg_struct u8g2_pg; void u8g2_ClearPolygonXY(void) { pg_ClearPolygonXY(&u8g2_pg); } void u8g2_AddPolygonXY(U8X8_UNUSED u8g2_t *u8g2, int16_t x, int16_t y) { pg_AddPolygonXY(&u8g2_pg, x, y); } void u8g2_DrawPolygon(u8g2_t *u8g2) { pg_DrawPolygon(&u8g2_pg, u8g2); } void u8g2_DrawTriangle(u8g2_t *u8g2, int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2) { u8g2_ClearPolygonXY(); u8g2_AddPolygonXY(u8g2, x0, y0); u8g2_AddPolygonXY(u8g2, x1, y1); u8g2_AddPolygonXY(u8g2, x2, y2); u8g2_DrawPolygon(u8g2); } ================================================ FILE: Drivers/u8g2/Src/u8g2_selection_list.c ================================================ /* u8g2_selection_list.c selection list with scroll option Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8g2.h" #define MY_BORDER_SIZE 1 /* Draw a string at x,y Center string within w (left adjust if w < pixel len of s) Side effects: u8g2_SetFontDirection(u8g2, 0); u8g2_SetFontPosBaseline(u8g2); */ void u8g2_DrawUTF8Line(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, const char *s, uint8_t border_size, uint8_t is_invert) { u8g2_uint_t d, str_width; u8g2_uint_t fx, fy, fw, fh; /* only horizontal strings are supported, so force this here */ u8g2_SetFontDirection(u8g2, 0); /* revert y position back to baseline ref */ y += u8g2->font_calc_vref(u8g2); /* calculate the width of the string in pixel */ str_width = u8g2_GetUTF8Width(u8g2, s); /* calculate delta d within the box */ d = 0; if ( str_width < w ) { d = w; d -=str_width; d /= 2; } else { w = str_width; } /* caluclate text box */ fx = x; fy = y - u8g2_GetAscent(u8g2) ; fw = w; fh = u8g2_GetAscent(u8g2) - u8g2_GetDescent(u8g2) ; /* draw the box, if inverted */ u8g2_SetDrawColor(u8g2, 1); if ( is_invert ) { u8g2_DrawBox(u8g2, fx, fy, fw, fh); } /* draw the frame */ while( border_size > 0 ) { fx--; fy--; fw +=2; fh +=2; u8g2_DrawFrame(u8g2, fx, fy, fw, fh ); border_size--; } if ( is_invert ) { u8g2_SetDrawColor(u8g2, 0); } else { u8g2_SetDrawColor(u8g2, 1); } /* draw the text */ u8g2_DrawUTF8(u8g2, x+d, y, s); /* revert draw color */ u8g2_SetDrawColor(u8g2, 1); } /* draw several lines at position x,y. lines are stored in s and must be separated with '\n'. lines can be centered with respect to "w" if s == NULL nothing is drawn and 0 is returned returns the number of lines in s multiplied with line_height */ u8g2_uint_t u8g2_DrawUTF8Lines(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t line_height, const char *s) { uint8_t i; uint8_t cnt; u8g2_uint_t yy = 0; cnt = u8x8_GetStringLineCnt(s); //printf("str=%s\n", s); //printf("cnt=%d, y=%d, line_height=%d\n", cnt, y, line_height); for( i = 0; i < cnt; i++ ) { //printf(" i=%d, y=%d, line_height=%d\n", i, y, line_height); u8g2_DrawUTF8Line(u8g2, x, y, w, u8x8_GetStringLineStart(i, s), 0, 0); y+=line_height; yy+=line_height; } return yy; } /* selection list with string line returns line height */ static u8g2_uint_t u8g2_draw_selection_list_line(u8g2_t *u8g2, u8sl_t *u8sl, u8g2_uint_t y, uint8_t idx, const char *s) U8G2_NOINLINE; static u8g2_uint_t u8g2_draw_selection_list_line(u8g2_t *u8g2, u8sl_t *u8sl, u8g2_uint_t y, uint8_t idx, const char *s) { u8g2_uint_t yy; uint8_t border_size = 0; uint8_t is_invert = 0; u8g2_uint_t line_height = u8g2_GetAscent(u8g2) - u8g2_GetDescent(u8g2)+MY_BORDER_SIZE; /* calculate offset from display upper border */ yy = idx; yy -= u8sl->first_pos; yy *= line_height; yy += y; /* check whether this is the current cursor line */ if ( idx == u8sl->current_pos ) { border_size = MY_BORDER_SIZE; is_invert = 1; } /* get the line from the array */ s = u8x8_GetStringLineStart(idx, s); /* draw the line */ if ( s == NULL ) s = ""; u8g2_DrawUTF8Line(u8g2, MY_BORDER_SIZE, y, u8g2_GetDisplayWidth(u8g2)-2*MY_BORDER_SIZE, s, border_size, is_invert); return line_height; } void u8g2_DrawSelectionList(u8g2_t *u8g2, u8sl_t *u8sl, u8g2_uint_t y, const char *s) { uint8_t i; for( i = 0; i < u8sl->visible; i++ ) { y += u8g2_draw_selection_list_line(u8g2, u8sl, y, i+u8sl->first_pos, s); } } /* title: NULL for no title, valid str for title line. Can contain mutliple lines, separated by '\n' start_pos: default position for the cursor, first line is 1. sl: string list (list of strings separated by \n) returns 0 if user has pressed the home key returns the selected line if user has pressed the select key side effects: u8g2_SetFontDirection(u8g2, 0); u8g2_SetFontPosBaseline(u8g2); */ uint8_t u8g2_UserInterfaceSelectionList(u8g2_t *u8g2, const char *title, uint8_t start_pos, const char *sl) { u8sl_t u8sl; u8g2_uint_t yy; uint8_t event; u8g2_uint_t line_height = u8g2_GetAscent(u8g2) - u8g2_GetDescent(u8g2)+MY_BORDER_SIZE; uint8_t title_lines = u8x8_GetStringLineCnt(title); uint8_t display_lines; if ( start_pos > 0 ) /* issue 112 */ start_pos--; /* issue 112 */ if ( title_lines > 0 ) { display_lines = (u8g2_GetDisplayHeight(u8g2)-3) / line_height; u8sl.visible = display_lines; u8sl.visible -= title_lines; } else { display_lines = u8g2_GetDisplayHeight(u8g2) / line_height; u8sl.visible = display_lines; } u8sl.total = u8x8_GetStringLineCnt(sl); u8sl.first_pos = 0; u8sl.current_pos = start_pos; if ( u8sl.current_pos >= u8sl.total ) u8sl.current_pos = u8sl.total-1; if ( u8sl.first_pos+u8sl.visible <= u8sl.current_pos ) u8sl.first_pos = u8sl.current_pos-u8sl.visible+1; u8g2_SetFontPosBaseline(u8g2); for(;;) { u8g2_FirstPage(u8g2); do { yy = u8g2_GetAscent(u8g2); if ( title_lines > 0 ) { yy += u8g2_DrawUTF8Lines(u8g2, 0, yy, u8g2_GetDisplayWidth(u8g2), line_height, title); u8g2_DrawHLine(u8g2, 0, yy-line_height- u8g2_GetDescent(u8g2) + 1, u8g2_GetDisplayWidth(u8g2)); yy += 3; } u8g2_DrawSelectionList(u8g2, &u8sl, yy, sl); } while( u8g2_NextPage(u8g2) ); #ifdef U8G2_REF_MAN_PIC return 0; #endif for(;;) { event = u8x8_GetMenuEvent(u8g2_GetU8x8(u8g2)); if ( event == U8X8_MSG_GPIO_MENU_SELECT ) return u8sl.current_pos+1; /* +1, issue 112 */ else if ( event == U8X8_MSG_GPIO_MENU_HOME ) return 0; /* issue 112: return 0 instead of start_pos */ else if ( event == U8X8_MSG_GPIO_MENU_NEXT || event == U8X8_MSG_GPIO_MENU_DOWN ) { u8sl_Next(&u8sl); break; } else if ( event == U8X8_MSG_GPIO_MENU_PREV || event == U8X8_MSG_GPIO_MENU_UP ) { u8sl_Prev(&u8sl); break; } } } } ================================================ FILE: Drivers/u8g2/Src/u8g2_setup.c ================================================ /* u8g2_setup.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8g2.h" #include #include /*============================================*/ #ifdef U8G2_WITH_CLIP_WINDOW_SUPPORT void u8g2_SetMaxClipWindow(u8g2_t *u8g2) { u8g2->clip_x0 = 0; u8g2->clip_y0 = 0; u8g2->clip_x1 = (u8g2_uint_t)~(u8g2_uint_t)0; u8g2->clip_y1 = (u8g2_uint_t)~(u8g2_uint_t)0; u8g2->cb->update_page_win(u8g2); } void u8g2_SetClipWindow(u8g2_t *u8g2, u8g2_uint_t clip_x0, u8g2_uint_t clip_y0, u8g2_uint_t clip_x1, u8g2_uint_t clip_y1 ) { u8g2->clip_x0 = clip_x0; u8g2->clip_y0 = clip_y0; u8g2->clip_x1 = clip_x1; u8g2->clip_y1 = clip_y1; u8g2->cb->update_page_win(u8g2); } #endif /*============================================*/ /* This procedure is called after setting up the display (u8x8 structure). --> This is the central init procedure for u8g2 object */ void u8g2_SetupBuffer(u8g2_t *u8g2, uint8_t *buf, uint8_t tile_buf_height, u8g2_draw_ll_hvline_cb ll_hvline_cb, const u8g2_cb_t *u8g2_cb) { u8g2->font = NULL; //u8g2->kerning = NULL; //u8g2->get_kerning_cb = u8g2_GetNullKerning; //u8g2->ll_hvline = u8g2_ll_hvline_vertical_top_lsb; u8g2->ll_hvline = ll_hvline_cb; u8g2->tile_buf_ptr = buf; u8g2->tile_buf_height = tile_buf_height; u8g2->tile_curr_row = 0; u8g2->font_decode.is_transparent = 0; /* issue 443 */ u8g2->bitmap_transparency = 0; u8g2->draw_color = 1; u8g2->is_auto_page_clear = 1; u8g2->cb = u8g2_cb; u8g2->cb->update_dimension(u8g2); #ifdef U8G2_WITH_CLIP_WINDOW_SUPPORT u8g2_SetMaxClipWindow(u8g2); /* assign a clip window and call the update() procedure */ #else u8g2->cb->update_page_win(u8g2); #endif u8g2_SetFontPosBaseline(u8g2); /* issue 195 */ #ifdef U8G2_WITH_FONT_ROTATION u8g2->font_decode.dir = 0; #endif } /* Usually the display rotation is set initially, but it could be done later also u8g2_cb can be U8G2_R0..U8G2_R3 */ void u8g2_SetDisplayRotation(u8g2_t *u8g2, const u8g2_cb_t *u8g2_cb) { u8g2->cb = u8g2_cb; u8g2->cb->update_dimension(u8g2); u8g2->cb->update_page_win(u8g2); } /*============================================*/ /* update dimension: calculate the following variables: u8g2_uint_t buf_x0; left corner of the buffer u8g2_uint_t buf_x1; right corner of the buffer (excluded) u8g2_uint_t buf_y0; u8g2_uint_t buf_y1; */ static void u8g2_update_dimension_common(u8g2_t *u8g2) { const u8x8_display_info_t *display_info = u8g2_GetU8x8(u8g2)->display_info; u8g2_uint_t t; t = u8g2->tile_buf_height; t *= 8; u8g2->pixel_buf_height = t; t = display_info->tile_width; #ifndef U8G2_16BIT if ( t >= 32 ) t = 31; #endif t *= 8; u8g2->pixel_buf_width = t; t = u8g2->tile_curr_row; t *= 8; u8g2->pixel_curr_row = t; t = u8g2->tile_buf_height; /* handle the case, where the buffer is larger than the (remaining) part of the display */ if ( t + u8g2->tile_curr_row > display_info->tile_height ) t = display_info->tile_height - u8g2->tile_curr_row; t *= 8; u8g2->buf_y0 = u8g2->pixel_curr_row; u8g2->buf_y1 = u8g2->buf_y0; u8g2->buf_y1 += t; #ifdef U8G2_16BIT u8g2->width = display_info->pixel_width; u8g2->height = display_info->pixel_height; #else u8g2->width = 240; if ( display_info->pixel_width <= 240 ) u8g2->width = display_info->pixel_width; u8g2->height = display_info->pixel_height; #endif } /*==========================================================*/ /* apply clip window */ #ifdef U8G2_WITH_CLIP_WINDOW_SUPPORT static void u8g2_apply_clip_window(u8g2_t *u8g2) { /* check aganst the current user_??? window */ if ( u8g2_IsIntersection(u8g2, u8g2->clip_x0, u8g2->clip_y0, u8g2->clip_x1, u8g2->clip_y1) == 0 ) { u8g2->is_page_clip_window_intersection = 0; } else { u8g2->is_page_clip_window_intersection = 1; if ( u8g2->user_x0 < u8g2->clip_x0 ) u8g2->user_x0 = u8g2->clip_x0; if ( u8g2->user_x1 > u8g2->clip_x1 ) u8g2->user_x1 = u8g2->clip_x1; if ( u8g2->user_y0 < u8g2->clip_y0 ) u8g2->user_y0 = u8g2->clip_y0; if ( u8g2->user_y1 > u8g2->clip_y1 ) u8g2->user_y1 = u8g2->clip_y1; } } #endif /* U8G2_WITH_CLIP_WINDOW_SUPPORT */ /*==========================================================*/ void u8g2_update_dimension_r0(u8g2_t *u8g2) { u8g2_update_dimension_common(u8g2); } void u8g2_update_page_win_r0(u8g2_t *u8g2) { u8g2->user_x0 = 0; u8g2->user_x1 = u8g2->width; /* pixel_buf_width replaced with width */ u8g2->user_y0 = u8g2->buf_y0; u8g2->user_y1 = u8g2->buf_y1; #ifdef U8G2_WITH_CLIP_WINDOW_SUPPORT u8g2_apply_clip_window(u8g2); #endif /* U8G2_WITH_CLIP_WINDOW_SUPPORT */ } void u8g2_update_dimension_r1(u8g2_t *u8g2) { u8g2_update_dimension_common(u8g2); u8g2->height = u8g2_GetU8x8(u8g2)->display_info->pixel_width; u8g2->width = u8g2_GetU8x8(u8g2)->display_info->pixel_height; } void u8g2_update_page_win_r1(u8g2_t *u8g2) { u8g2->user_x0 = u8g2->buf_y0; u8g2->user_x1 = u8g2->buf_y1; u8g2->user_y0 = 0; u8g2->user_y1 = u8g2->height; /* pixel_buf_width replaced with height (which is the real pixel width) */ #ifdef U8G2_WITH_CLIP_WINDOW_SUPPORT u8g2_apply_clip_window(u8g2); #endif /* U8G2_WITH_CLIP_WINDOW_SUPPORT */ } void u8g2_update_dimension_r2(u8g2_t *u8g2) { u8g2_update_dimension_common(u8g2); } void u8g2_update_page_win_r2(u8g2_t *u8g2) { u8g2->user_x0 = 0; u8g2->user_x1 = u8g2->width; /* pixel_buf_width replaced with width */ /* there are ases where the height is not a multiple of 8. */ /* in such a case u8g2->buf_y1 might be heigher than u8g2->height */ u8g2->user_y0 = 0; if ( u8g2->height >= u8g2->buf_y1 ) u8g2->user_y0 = u8g2->height - u8g2->buf_y1; u8g2->user_y1 = u8g2->height - u8g2->buf_y0; #ifdef U8G2_WITH_CLIP_WINDOW_SUPPORT u8g2_apply_clip_window(u8g2); #endif /* U8G2_WITH_CLIP_WINDOW_SUPPORT */ } void u8g2_update_dimension_r3(u8g2_t *u8g2) { u8g2_update_dimension_common(u8g2); u8g2->height = u8g2_GetU8x8(u8g2)->display_info->pixel_width; u8g2->width = u8g2_GetU8x8(u8g2)->display_info->pixel_height; } void u8g2_update_page_win_r3(u8g2_t *u8g2) { /* there are ases where the height is not a multiple of 8. */ /* in such a case u8g2->buf_y1 might be heigher than u8g2->width */ u8g2->user_x0 = 0; if ( u8g2->width >= u8g2->buf_y1 ) u8g2->user_x0 = u8g2->width - u8g2->buf_y1; u8g2->user_x1 = u8g2->width - u8g2->buf_y0; u8g2->user_y0 = 0; u8g2->user_y1 = u8g2->height; /* pixel_buf_width replaced with height (pixel_width) */ #ifdef U8G2_WITH_CLIP_WINDOW_SUPPORT u8g2_apply_clip_window(u8g2); #endif /* U8G2_WITH_CLIP_WINDOW_SUPPORT */ } /*============================================*/ extern void u8g2_draw_hv_line_2dir(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir); void u8g2_draw_l90_r0(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir) { #ifdef __unix assert( dir <= 1 ); #endif u8g2_draw_hv_line_2dir(u8g2, x, y, len, dir); } void u8g2_draw_l90_mirrorr_r0(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir) { u8g2_uint_t xx; xx = u8g2->width; xx -= x; if ( (dir & 1) == 0 ) { xx -= len; } else { xx--; } u8g2_draw_hv_line_2dir(u8g2, xx, y, len, dir); } /* dir = 0 or 1 */ void u8g2_draw_l90_r1(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir) { u8g2_uint_t xx, yy; #ifdef __unix assert( dir <= 1 ); #endif yy = x; xx = u8g2->height; xx -= y; xx--; dir ++; if ( dir == 2 ) { xx -= len; xx++; dir = 0; } u8g2_draw_hv_line_2dir(u8g2, xx, yy, len, dir); } void u8g2_draw_l90_r2(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir) { u8g2_uint_t xx, yy; /* yy = u8g2->height; yy -= y; yy--; xx = u8g2->width; xx -= x; xx--; if ( dir == 0 ) { xx -= len; xx++; } else if ( dir == 1 ) { yy -= len; yy++; } */ yy = u8g2->height; yy -= y; xx = u8g2->width; xx -= x; if ( dir == 0 ) { yy--; xx -= len; } else if ( dir == 1 ) { xx--; yy -= len; } u8g2_draw_hv_line_2dir(u8g2, xx, yy, len, dir); } void u8g2_draw_l90_r3(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir) { u8g2_uint_t xx, yy; xx = y; yy = u8g2->width; yy -= x; if ( dir == 0 ) { yy--; yy -= len; yy++; dir = 1; } else { yy--; dir = 0; } u8g2_draw_hv_line_2dir(u8g2, xx, yy, len, dir); } /*============================================*/ const u8g2_cb_t u8g2_cb_r0 = { u8g2_update_dimension_r0, u8g2_update_page_win_r0, u8g2_draw_l90_r0 }; const u8g2_cb_t u8g2_cb_r1 = { u8g2_update_dimension_r1, u8g2_update_page_win_r1, u8g2_draw_l90_r1 }; const u8g2_cb_t u8g2_cb_r2 = { u8g2_update_dimension_r2, u8g2_update_page_win_r2, u8g2_draw_l90_r2 }; const u8g2_cb_t u8g2_cb_r3 = { u8g2_update_dimension_r3, u8g2_update_page_win_r3, u8g2_draw_l90_r3 }; const u8g2_cb_t u8g2_cb_mirror = { u8g2_update_dimension_r0, u8g2_update_page_win_r0, u8g2_draw_l90_mirrorr_r0 }; /*============================================*/ /* setup for the null device */ /* setup for the null (empty) device */ void u8g2_Setup_null(u8g2_t *u8g2, const u8g2_cb_t *rotation, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { static uint8_t buf[8]; u8g2_SetupDisplay(u8g2, u8x8_d_null_cb, u8x8_cad_empty, byte_cb, gpio_and_delay_cb); u8g2_SetupBuffer(u8g2, buf, 1, u8g2_ll_hvline_vertical_top_lsb, rotation); } ================================================ FILE: Drivers/u8g2/Src/u8log.c ================================================ /* u8log.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2018, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include #include "u8x8.h" /* static uint8_t u8log_is_on_screen(u8log_t *u8log, uint8_t x, uint8_t y) { if ( x >= u8log->width ) return 0; if ( y >= u8log->height ) return 0; return 1; } */ static void u8log_clear_screen(u8log_t *u8log) { uint8_t *dest = u8log->screen_buffer; uint16_t cnt = u8log->height; cnt *= u8log->width; do { *dest++ = ' '; cnt--; } while( cnt > 0 ); } /* scroll the content of the complete buffer, set redraw_line to 255 */ static void u8log_scroll_up(u8log_t *u8log) { uint8_t *dest = u8log->screen_buffer; uint8_t *src = dest+u8log->width; uint16_t cnt = u8log->height; cnt--; cnt *= u8log->width; do { *dest++ = *src++; cnt--; } while( cnt > 0 ); cnt = u8log->width; do { *dest++ = ' '; cnt--; } while(cnt > 0); if ( u8log->is_redraw_line_for_each_char ) u8log->is_redraw_all = 1; else u8log->is_redraw_all_required_for_next_nl = 1; } /* Place the cursor on the screen. This will also scroll, if required */ static void u8log_cursor_on_screen(u8log_t *u8log) { //printf("u8log_cursor_on_screen, cursor_y=%d\n", u8log->cursor_y); if ( u8log->cursor_x >= u8log->width ) { u8log->cursor_x = 0; u8log->cursor_y++; } while ( u8log->cursor_y >= u8log->height ) { u8log_scroll_up(u8log); u8log->cursor_y--; } } /* Write a printable, single char on the screen, do any kind of scrolling */ static void u8log_write_to_screen(u8log_t *u8log, uint8_t c) { u8log_cursor_on_screen(u8log); u8log->screen_buffer[u8log->cursor_y * u8log->width + u8log->cursor_x] = c; u8log->cursor_x++; if ( u8log->is_redraw_line_for_each_char ) { u8log->is_redraw_line = 1; u8log->redraw_line = u8log->cursor_y; } } /* Handle control codes or write the char to the screen. Supported control codes are: \n 10 Goto first position of the next line. Line is marked for redraw. \r 13 Goto first position in the same line. Line is marked for redraw. \t 9 Jump to the next tab position \f 12 Clear the screen and mark redraw for whole screen any other char Write char to screen. Line redraw mark depends on is_redraw_line_for_each_char flag. */ void u8log_write_char(u8log_t *u8log, uint8_t c) { switch(c) { case '\n': // 10 u8log->is_redraw_line = 1; u8log->redraw_line = u8log->cursor_y; if ( u8log->is_redraw_all_required_for_next_nl ) u8log->is_redraw_all = 1; u8log->is_redraw_all_required_for_next_nl = 0; u8log->cursor_y++; u8log->cursor_x = 0; break; case '\r': // 13 u8log->is_redraw_line = 1; u8log->redraw_line = u8log->cursor_y; u8log->cursor_x = 0; break; case '\t': // 9 u8log->cursor_x = (u8log->cursor_x + 8) & 0xf8; break; case '\f': // 12 u8log_clear_screen(u8log); u8log->is_redraw_all = 1; u8log->cursor_x = 0; u8log->cursor_y = 0; break; default: u8log_write_to_screen(u8log, c); break; } } void u8log_Init(u8log_t *u8log, uint8_t width, uint8_t height, uint8_t *buf) { memset(u8log, 0, sizeof(u8log_t)); u8log->width = width; u8log->height = height; u8log->screen_buffer = buf; u8log_clear_screen(u8log); } void u8log_SetCallback(u8log_t *u8log, u8log_cb cb, void *aux_data) { u8log->cb = cb; u8log->aux_data = aux_data; } void u8log_SetRedrawMode(u8log_t *u8log, uint8_t is_redraw_line_for_each_char) { u8log->is_redraw_line_for_each_char = is_redraw_line_for_each_char; } /* offset can be negative or positive, it is 0 by default */ void u8log_SetLineHeightOffset(u8log_t *u8log, int8_t line_height_offset) { u8log->line_height_offset = line_height_offset; } void u8log_WriteChar(u8log_t *u8log, uint8_t c) { u8log_write_char(u8log, c); if ( u8log->is_redraw_line || u8log->is_redraw_all ) { if ( u8log->cb != 0 ) { u8log->cb(u8log); } u8log->is_redraw_line = 0; u8log->is_redraw_all = 0; } } void u8log_WriteString(u8log_t *u8log, const char *s) { while( *s != '\0' ) { u8log_WriteChar(u8log, *s); s++; } } static void u8log_WriteHexHalfByte(u8log_t *u8log, uint8_t b) U8X8_NOINLINE; static void u8log_WriteHexHalfByte(u8log_t *u8log, uint8_t b) { b &= 0x0f; if ( b < 10 ) u8log_WriteChar(u8log, b+'0'); else u8log_WriteChar(u8log, b+'a'-10); } void u8log_WriteHex8(u8log_t *u8log, uint8_t b) { u8log_WriteHexHalfByte(u8log, b >> 4); u8log_WriteHexHalfByte(u8log, b); } void u8log_WriteHex16(u8log_t *u8log, uint16_t v) { u8log_WriteHex8(u8log, v>>8); u8log_WriteHex8(u8log, v); } void u8log_WriteHex32(u8log_t *u8log, uint32_t v) { u8log_WriteHex16(u8log, v>>16); u8log_WriteHex16(u8log, v); } /* v = value, d = number of digits (1..3) */ void u8log_WriteDec8(u8log_t *u8log, uint8_t v, uint8_t d) { u8log_WriteString(u8log, u8x8_u8toa(v, d)); } /* v = value, d = number of digits (1..5) */ void u8log_WriteDec16(u8log_t *u8log, uint16_t v, uint8_t d) { u8log_WriteString(u8log, u8x8_u16toa(v, d)); } ================================================ FILE: Drivers/u8g2/Src/u8log_u8g2.c ================================================ /* u8log_u8g2.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2018, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8g2.h" /* Draw the u8log text at the specified x/y position. x/y position is the reference position of the first char of the first line. the line height is u8g2_GetAscent(u8g2) - u8g2_GetDescent(u8g2) + line_height_offset; line_height_offset can be set with u8log_SetLineHeightOffset() Use u8g2_SetFontRefHeightText(u8g2_t *u8g2); u8g2_SetFontRefHeightExtendedText(u8g2_t *u8g2); u8g2_SetFontRefHeightAll(u8g2_t *u8g2); to change the return values for u8g2_GetAscent and u8g2_GetDescent */ void u8g2_DrawLog(u8g2_t *u8g2, u8g2_uint_t x, u8g2_uint_t y, u8log_t *u8log) { u8g2_uint_t disp_x, disp_y; uint8_t buf_x, buf_y; uint8_t c; disp_y = y; u8g2_SetFontDirection(u8g2, 0); for( buf_y = 0; buf_y < u8log->height; buf_y++ ) { disp_x = x; for( buf_x = 0; buf_x < u8log->width; buf_x++ ) { c = u8log->screen_buffer[buf_y * u8log->width + buf_x]; disp_x += u8g2_DrawGlyph(u8g2, disp_x, disp_y, c); } disp_y += u8g2_GetAscent(u8g2) - u8g2_GetDescent(u8g2); disp_y += u8log->line_height_offset; } } /* u8lib callback for u8g2 Only font direction 0 is supported: u8g2_SetFontDirection(u8g2, 0) Use u8g2_SetFontRefHeightText(u8g2_t *u8g2); u8g2_SetFontRefHeightExtendedText(u8g2_t *u8g2); u8g2_SetFontRefHeightAll(u8g2_t *u8g2); to change the top offset and the line height and u8log_SetLineHeightOffset(u8log_t *u8log, int8_t line_height_offset) to change the line height. */ void u8log_u8g2_cb(u8log_t * u8log) { u8g2_t *u8g2 = (u8g2_t *)(u8log->aux_data); if ( u8log->is_redraw_line || u8log->is_redraw_all ) { u8g2_FirstPage(u8g2); do { u8g2_DrawLog( u8g2, 0, u8g2_GetAscent(u8g2), u8log); } while( u8g2_NextPage(u8g2) ); } } ================================================ FILE: Drivers/u8g2/Src/u8log_u8x8.c ================================================ /* u8log_u8x8.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2018, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static void u8x8_DrawLogLine(u8x8_t *u8x8, uint8_t disp_x, uint8_t disp_y, uint8_t buf_y, u8log_t *u8log) U8X8_NOINLINE; static void u8x8_DrawLogLine(u8x8_t *u8x8, uint8_t disp_x, uint8_t disp_y, uint8_t buf_y, u8log_t *u8log) { uint8_t buf_x; uint8_t c; for( buf_x = 0; buf_x < u8log->width; buf_x++ ) { c = u8log->screen_buffer[buf_y * u8log->width + buf_x]; u8x8_DrawGlyph(u8x8, disp_x, disp_y, c); disp_x++; } } void u8x8_DrawLog(u8x8_t *u8x8, uint8_t x, uint8_t y, u8log_t *u8log) { uint8_t buf_y; for( buf_y = 0; buf_y < u8log->height; buf_y++ ) { u8x8_DrawLogLine(u8x8, x, y, buf_y, u8log); y++; } } void u8log_u8x8_cb(u8log_t * u8log) { u8x8_t *u8x8 = (u8x8_t *)(u8log->aux_data); if ( u8log->is_redraw_all ) { u8x8_DrawLog(u8x8, 0, 0, u8log); } else if ( u8log->is_redraw_line ) { u8x8_DrawLogLine(u8x8, 0, u8log->redraw_line, u8log->redraw_line, u8log); } } ================================================ FILE: Drivers/u8g2/Src/u8x8_8x8.c ================================================ /* u8x8_8x8.c font procedures, directly interfaces display procedures Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" #if defined(ESP8266) uint8_t u8x8_pgm_read_esp(const uint8_t * addr) { uint32_t bytes; bytes = *(uint32_t*)((uint32_t)addr & ~3); return ((uint8_t*)&bytes)[(uint32_t)addr & 3]; } #endif void u8x8_SetFont(u8x8_t *u8x8, const uint8_t *font_8x8) { u8x8->font = font_8x8; } /* Args: u8x8: ptr to u8x8 structure encoding: glyph for which the data is requested (must be between 0 and 255) buf: pointer to 8 bytes */ static void u8x8_get_glyph_data(u8x8_t *u8x8, uint8_t encoding, uint8_t *buf, uint8_t tile_offset) U8X8_NOINLINE; static void u8x8_get_glyph_data(u8x8_t *u8x8, uint8_t encoding, uint8_t *buf, uint8_t tile_offset) { uint8_t first, last, tiles, i; uint16_t offset; first = u8x8_pgm_read(u8x8->font+0); last = u8x8_pgm_read(u8x8->font+1); tiles = u8x8_pgm_read(u8x8->font+2); /* new 2019 format */ tiles *= u8x8_pgm_read(u8x8->font+3); /* new 2019 format */ /* get the glyph bitmap from the font */ if ( first <= encoding && encoding <= last ) { offset = encoding; offset -= first; offset *= tiles; /* new 2019 format */ offset += tile_offset; /* new 2019 format */ offset *= 8; offset +=4; /* changed from 2 to 4, new 2019 format */ for( i = 0; i < 8; i++ ) { buf[i] = u8x8_pgm_read(u8x8->font+offset); offset++; } } else { for( i = 0; i < 8; i++ ) { buf[i] = 0; } } /* invert the bitmap if required */ if ( u8x8->is_font_inverse_mode ) { for( i = 0; i < 8; i++ ) { buf[i] ^= 255; } } } void u8x8_DrawGlyph(u8x8_t *u8x8, uint8_t x, uint8_t y, uint8_t encoding) { uint8_t th = u8x8_pgm_read(u8x8->font+2); /* new 2019 format */ uint8_t tv = u8x8_pgm_read(u8x8->font+3); /* new 2019 format */ uint8_t xx, tile; uint8_t buf[8]; th += x; tv += y; tile = 0; do { xx = x; do { u8x8_get_glyph_data(u8x8, encoding, buf, tile); u8x8_DrawTile(u8x8, xx, y, 1, buf); tile++; xx++; } while( xx < th ); y++; } while( y < tv ); } /* Source: http://graphics.stanford.edu/~seander/bithacks.html Section: Interleave bits by Binary Magic Numbers Original codes is here: static const unsigned int B[] = {0x55555555, 0x33333333, 0x0F0F0F0F, 0x00FF00FF}; static const unsigned int S[] = {1, 2, 4, 8}; unsigned int x; // Interleave lower 16 bits of x and y, so the bits of x unsigned int y; // are in the even positions and bits from y in the odd; unsigned int z; // z gets the resulting 32-bit Morton Number. // x and y must initially be less than 65536. x = (x | (x << S[3])) & B[3]; x = (x | (x << S[2])) & B[2]; x = (x | (x << S[1])) & B[1]; x = (x | (x << S[0])) & B[0]; y = (y | (y << S[3])) & B[3]; y = (y | (y << S[2])) & B[2]; y = (y | (y << S[1])) & B[1]; y = (y | (y << S[0])) & B[0]; z = x | (y << 1); */ uint16_t u8x8_upscale_byte(uint8_t x) { uint16_t y = x; y |= (y << 4); // x = (x | (x << S[2])) & B[2]; y &= 0x0f0f; y |= (y << 2); // x = (x | (x << S[1])) & B[1]; y &= 0x3333; y |= (y << 1); // x = (x | (x << S[0])) & B[0]; y &= 0x5555; y |= (y << 1); // z = x | (y << 1); return y; } static void u8x8_upscale_buf(uint8_t *src, uint8_t *dest) U8X8_NOINLINE; static void u8x8_upscale_buf(uint8_t *src, uint8_t *dest) { uint8_t i = 4; do { *dest++ = *src; *dest++ = *src++; i--; } while( i > 0 ); } static void u8x8_draw_2x2_subglyph(u8x8_t *u8x8, uint8_t x, uint8_t y, uint8_t encoding, uint8_t tile) { uint8_t i; uint16_t t; uint8_t buf[8]; uint8_t buf1[8]; uint8_t buf2[8]; u8x8_get_glyph_data(u8x8, encoding, buf, tile); for( i = 0; i < 8; i ++ ) { t = u8x8_upscale_byte(buf[i]); buf1[i] = t >> 8; buf2[i] = t & 255; } u8x8_upscale_buf(buf2, buf); u8x8_DrawTile(u8x8, x, y, 1, buf); u8x8_upscale_buf(buf2+4, buf); u8x8_DrawTile(u8x8, x+1, y, 1, buf); u8x8_upscale_buf(buf1, buf); u8x8_DrawTile(u8x8, x, y+1, 1, buf); u8x8_upscale_buf(buf1+4, buf); u8x8_DrawTile(u8x8, x+1, y+1, 1, buf); } void u8x8_Draw2x2Glyph(u8x8_t *u8x8, uint8_t x, uint8_t y, uint8_t encoding) { uint8_t th = u8x8_pgm_read(u8x8->font+2); /* new 2019 format */ uint8_t tv = u8x8_pgm_read(u8x8->font+3); /* new 2019 format */ uint8_t xx, tile; th *= 2; th += x; tv *= 2; tv += y; tile = 0; do { xx = x; do { u8x8_draw_2x2_subglyph(u8x8, xx, y, encoding, tile); tile++; xx+=2; } while( xx < th ); y+=2; } while( y < tv ); } /* https://github.com/olikraus/u8g2/issues/474 */ static void u8x8_draw_1x2_subglyph(u8x8_t *u8x8, uint8_t x, uint8_t y, uint8_t encoding, uint8_t tile) { uint8_t i; uint16_t t; uint8_t buf[8]; uint8_t buf1[8]; uint8_t buf2[8]; u8x8_get_glyph_data(u8x8, encoding, buf, tile); for( i = 0; i < 8; i ++ ) { t = u8x8_upscale_byte(buf[i]); buf1[i] = t >> 8; buf2[i] = t & 255; } u8x8_DrawTile(u8x8, x, y, 1, buf2); u8x8_DrawTile(u8x8, x, y+1, 1, buf1); } void u8x8_Draw1x2Glyph(u8x8_t *u8x8, uint8_t x, uint8_t y, uint8_t encoding) { uint8_t th = u8x8_pgm_read(u8x8->font+2); /* new 2019 format */ uint8_t tv = u8x8_pgm_read(u8x8->font+3); /* new 2019 format */ uint8_t xx, tile; th += x; tv *= 2; tv += y; tile = 0; do { xx = x; do { u8x8_draw_1x2_subglyph(u8x8, xx, y, encoding, tile); tile++; xx++; } while( xx < th ); y+=2; } while( y < tv ); } /* source: https://en.wikipedia.org/wiki/UTF-8 Bits from to bytes Byte 1 Byte 2 Byte 3 Byte 4 Byte 5 Byte 6 7 U+0000 U+007F 1 0xxxxxxx 11 U+0080 U+07FF 2 110xxxxx 10xxxxxx 16 U+0800 U+FFFF 3 1110xxxx 10xxxxxx 10xxxxxx 21 U+10000 U+1FFFFF 4 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 26 U+200000 U+3FFFFFF 5 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 31 U+4000000 U+7FFFFFFF 6 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx */ /* reset the internal state machine */ void u8x8_utf8_init(u8x8_t *u8x8) { u8x8->utf8_state = 0; /* also reset during u8x8_SetupDefaults() */ } uint16_t u8x8_ascii_next(U8X8_UNUSED u8x8_t *u8x8, uint8_t b) { if ( b == 0 || b == '\n' ) /* '\n' terminates the string to support the string list procedures */ return 0x0ffff; /* end of string detected*/ return b; } /* pass a byte from an utf8 encoded string to the utf8 decoder state machine returns 0x0fffe: no glyph, just continue 0x0ffff: end of string anything else: The decoded encoding */ uint16_t u8x8_utf8_next(u8x8_t *u8x8, uint8_t b) { if ( b == 0 || b == '\n' ) /* '\n' terminates the string to support the string list procedures */ return 0x0ffff; /* end of string detected, pending UTF8 is discarded */ if ( u8x8->utf8_state == 0 ) { if ( b >= 0xfc ) /* 6 byte sequence */ { u8x8->utf8_state = 5; b &= 1; } else if ( b >= 0xf8 ) { u8x8->utf8_state = 4; b &= 3; } else if ( b >= 0xf0 ) { u8x8->utf8_state = 3; b &= 7; } else if ( b >= 0xe0 ) { u8x8->utf8_state = 2; b &= 15; } else if ( b >= 0xc0 ) { u8x8->utf8_state = 1; b &= 0x01f; } else { /* do nothing, just use the value as encoding */ return b; } u8x8->encoding = b; return 0x0fffe; } else { u8x8->utf8_state--; /* The case b < 0x080 (an illegal UTF8 encoding) is not checked here. */ u8x8->encoding<<=6; b &= 0x03f; u8x8->encoding |= b; if ( u8x8->utf8_state != 0 ) return 0x0fffe; /* nothing to do yet */ } return u8x8->encoding; } static uint8_t u8x8_draw_string(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s) U8X8_NOINLINE; static uint8_t u8x8_draw_string(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s) { uint16_t e; uint8_t cnt = 0; uint8_t th = u8x8_pgm_read(u8x8->font+2); /* new 2019 format */ u8x8_utf8_init(u8x8); for(;;) { e = u8x8->next_cb(u8x8, (uint8_t)*s); if ( e == 0x0ffff ) break; s++; if ( e != 0x0fffe ) { u8x8_DrawGlyph(u8x8, x, y, e); x+=th; cnt++; } } return cnt; } uint8_t u8x8_DrawString(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s) { u8x8->next_cb = u8x8_ascii_next; return u8x8_draw_string(u8x8, x, y, s); } uint8_t u8x8_DrawUTF8(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s) { u8x8->next_cb = u8x8_utf8_next; return u8x8_draw_string(u8x8, x, y, s); } static uint8_t u8x8_draw_2x2_string(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s) U8X8_NOINLINE; static uint8_t u8x8_draw_2x2_string(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s) { uint16_t e; uint8_t cnt = 0; u8x8_utf8_init(u8x8); for(;;) { e = u8x8->next_cb(u8x8, (uint8_t)*s); if ( e == 0x0ffff ) break; s++; if ( e != 0x0fffe ) { u8x8_Draw2x2Glyph(u8x8, x, y, e); x+=2; cnt++; } } return cnt; } uint8_t u8x8_Draw2x2String(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s) { u8x8->next_cb = u8x8_ascii_next; return u8x8_draw_2x2_string(u8x8, x, y, s); } uint8_t u8x8_Draw2x2UTF8(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s) { u8x8->next_cb = u8x8_utf8_next; return u8x8_draw_2x2_string(u8x8, x, y, s); } static uint8_t u8x8_draw_1x2_string(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s) U8X8_NOINLINE; static uint8_t u8x8_draw_1x2_string(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s) { uint16_t e; uint8_t cnt = 0; u8x8_utf8_init(u8x8); for(;;) { e = u8x8->next_cb(u8x8, (uint8_t)*s); if ( e == 0x0ffff ) break; s++; if ( e != 0x0fffe ) { u8x8_Draw1x2Glyph(u8x8, x, y, e); x++; cnt++; } } return cnt; } uint8_t u8x8_Draw1x2String(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s) { u8x8->next_cb = u8x8_ascii_next; return u8x8_draw_1x2_string(u8x8, x, y, s); } uint8_t u8x8_Draw1x2UTF8(u8x8_t *u8x8, uint8_t x, uint8_t y, const char *s) { u8x8->next_cb = u8x8_utf8_next; return u8x8_draw_1x2_string(u8x8, x, y, s); } uint8_t u8x8_GetUTF8Len(u8x8_t *u8x8, const char *s) { uint16_t e; uint8_t cnt = 0; u8x8_utf8_init(u8x8); for(;;) { e = u8x8_utf8_next(u8x8, *s); if ( e == 0x0ffff ) break; s++; if ( e != 0x0fffe ) cnt++; } return cnt; } ================================================ FILE: Drivers/u8g2/Src/u8x8_byte.c ================================================ /* u8x8_byte.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" uint8_t u8x8_byte_SetDC(u8x8_t *u8x8, uint8_t dc) { return u8x8->byte_cb(u8x8, U8X8_MSG_BYTE_SET_DC, dc, NULL); } uint8_t u8x8_byte_SendBytes(u8x8_t *u8x8, uint8_t cnt, uint8_t *data) { return u8x8->byte_cb(u8x8, U8X8_MSG_BYTE_SEND, cnt, (void *)data); } uint8_t u8x8_byte_SendByte(u8x8_t *u8x8, uint8_t byte) { return u8x8_byte_SendBytes(u8x8, 1, &byte); } uint8_t u8x8_byte_StartTransfer(u8x8_t *u8x8) { return u8x8->byte_cb(u8x8, U8X8_MSG_BYTE_START_TRANSFER, 0, NULL); } uint8_t u8x8_byte_EndTransfer(u8x8_t *u8x8) { return u8x8->byte_cb(u8x8, U8X8_MSG_BYTE_END_TRANSFER, 0, NULL); } /*=========================================*/ uint8_t u8x8_byte_empty(U8X8_UNUSED u8x8_t *u8x8, uint8_t msg, U8X8_UNUSED uint8_t arg_int, U8X8_UNUSED void *arg_ptr) { switch(msg) { case U8X8_MSG_BYTE_SEND: case U8X8_MSG_BYTE_INIT: case U8X8_MSG_BYTE_SET_DC: case U8X8_MSG_BYTE_START_TRANSFER: case U8X8_MSG_BYTE_END_TRANSFER: break; /* do nothing */ } return 1; /* always succeed */ } /*=========================================*/ /* Uses: u8x8->display_info->sda_setup_time_ns u8x8->display_info->sck_pulse_width_ns u8x8->display_info->spi_mode u8x8->display_info->chip_disable_level u8x8->display_info->chip_enable_level u8x8->display_info->post_chip_enable_wait_ns u8x8->display_info->pre_chip_disable_wait_ns Calls to GPIO and DELAY: U8X8_MSG_DELAY_NANO U8X8_MSG_GPIO_DC U8X8_MSG_GPIO_CS U8X8_MSG_GPIO_CLOCK U8X8_MSG_GPIO_DATA Handles: U8X8_MSG_BYTE_INIT U8X8_MSG_BYTE_SEND U8X8_MSG_BYTE_SET_DC U8X8_MSG_BYTE_START_TRANSFER U8X8_MSG_BYTE_END_TRANSFER */ uint8_t u8x8_byte_4wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t i, b; uint8_t *data; uint8_t takeover_edge = u8x8_GetSPIClockPhase(u8x8); uint8_t not_takeover_edge = 1 - takeover_edge; switch(msg) { case U8X8_MSG_BYTE_SEND: data = (uint8_t *)arg_ptr; while( arg_int > 0 ) { b = *data; data++; arg_int--; for( i = 0; i < 8; i++ ) { if ( b & 128 ) u8x8_gpio_SetSPIData(u8x8, 1); else u8x8_gpio_SetSPIData(u8x8, 0); b <<= 1; u8x8_gpio_SetSPIClock(u8x8, not_takeover_edge); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->sda_setup_time_ns); u8x8_gpio_SetSPIClock(u8x8, takeover_edge); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->sck_pulse_width_ns); } } break; case U8X8_MSG_BYTE_INIT: /* disable chipselect */ u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); /* no wait required here */ /* for SPI: setup correct level of the clock signal */ u8x8_gpio_SetSPIClock(u8x8, u8x8_GetSPIClockPhase(u8x8)); break; case U8X8_MSG_BYTE_SET_DC: u8x8_gpio_SetDC(u8x8, arg_int); break; case U8X8_MSG_BYTE_START_TRANSFER: u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_enable_level); u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->post_chip_enable_wait_ns, NULL); break; case U8X8_MSG_BYTE_END_TRANSFER: u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->pre_chip_disable_wait_ns, NULL); u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); break; default: return 0; } return 1; } /*=========================================*/ uint8_t u8x8_byte_8bit_6800mode(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t i, b; uint8_t *data; switch(msg) { case U8X8_MSG_BYTE_SEND: data = (uint8_t *)arg_ptr; while( arg_int > 0 ) { b = *data; data++; arg_int--; for( i = U8X8_MSG_GPIO_D0; i <= U8X8_MSG_GPIO_D7; i++ ) { u8x8_gpio_call(u8x8, i, b&1); b >>= 1; } u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->data_setup_time_ns); u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_E, 1); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->write_pulse_width_ns); u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_E, 0); } break; case U8X8_MSG_BYTE_INIT: /* disable chipselect */ u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); /* ensure that the enable signal is high */ u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_E, 0); break; case U8X8_MSG_BYTE_SET_DC: u8x8_gpio_SetDC(u8x8, arg_int); break; case U8X8_MSG_BYTE_START_TRANSFER: u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_enable_level); u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->post_chip_enable_wait_ns, NULL); break; case U8X8_MSG_BYTE_END_TRANSFER: u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->pre_chip_disable_wait_ns, NULL); u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); break; default: return 0; } return 1; } uint8_t u8x8_byte_8bit_8080mode(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t i, b; uint8_t *data; switch(msg) { case U8X8_MSG_BYTE_SEND: data = (uint8_t *)arg_ptr; while( arg_int > 0 ) { b = *data; data++; arg_int--; for( i = U8X8_MSG_GPIO_D0; i <= U8X8_MSG_GPIO_D7; i++ ) { u8x8_gpio_call(u8x8, i, b&1); b >>= 1; } u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->data_setup_time_ns); u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_E, 0); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->write_pulse_width_ns); u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_E, 1); } break; case U8X8_MSG_BYTE_INIT: /* disable chipselect */ u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); /* ensure that the enable signal is high */ u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_E, 1); break; case U8X8_MSG_BYTE_SET_DC: u8x8_gpio_SetDC(u8x8, arg_int); break; case U8X8_MSG_BYTE_START_TRANSFER: u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_enable_level); u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->post_chip_enable_wait_ns, NULL); break; case U8X8_MSG_BYTE_END_TRANSFER: u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->pre_chip_disable_wait_ns, NULL); u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); break; default: return 0; } return 1; } /*=========================================*/ uint8_t u8x8_byte_3wire_sw_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t i; uint8_t *data; uint8_t takeover_edge = u8x8_GetSPIClockPhase(u8x8); uint8_t not_takeover_edge = 1 - takeover_edge; uint16_t b; static uint8_t last_dc; switch(msg) { case U8X8_MSG_BYTE_SEND: data = (uint8_t *)arg_ptr; while( arg_int > 0 ) { b = *data; if ( last_dc != 0 ) b |= 256; data++; arg_int--; for( i = 0; i < 9; i++ ) { if ( b & 256 ) u8x8_gpio_SetSPIData(u8x8, 1); else u8x8_gpio_SetSPIData(u8x8, 0); b <<= 1; u8x8_gpio_SetSPIClock(u8x8, not_takeover_edge); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->sda_setup_time_ns); u8x8_gpio_SetSPIClock(u8x8, takeover_edge); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->sck_pulse_width_ns); } } break; case U8X8_MSG_BYTE_INIT: /* disable chipselect */ u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); /* no wait required here */ /* for SPI: setup correct level of the clock signal */ u8x8_gpio_SetSPIClock(u8x8, u8x8_GetSPIClockPhase(u8x8)); break; case U8X8_MSG_BYTE_SET_DC: last_dc = arg_int; break; case U8X8_MSG_BYTE_START_TRANSFER: u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_enable_level); u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->post_chip_enable_wait_ns, NULL); break; case U8X8_MSG_BYTE_END_TRANSFER: u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->pre_chip_disable_wait_ns, NULL); u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); break; default: return 0; } return 1; } /*=========================================*/ void u8x8_byte_set_ks0108_cs(u8x8_t *u8x8, uint8_t arg) { u8x8_gpio_SetCS(u8x8, arg&1); arg = arg >> 1; u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_CS1, arg&1); arg = arg >> 1; u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_CS2, arg&1); } /* 6800 mode */ uint8_t u8x8_byte_ks0108(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t i, b; uint8_t *data; switch(msg) { case U8X8_MSG_BYTE_SEND: data = (uint8_t *)arg_ptr; while( arg_int > 0 ) { b = *data; data++; arg_int--; for( i = U8X8_MSG_GPIO_D0; i <= U8X8_MSG_GPIO_D7; i++ ) { u8x8_gpio_call(u8x8, i, b&1); b >>= 1; } u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->data_setup_time_ns); u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_E, 1); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->write_pulse_width_ns); u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_E, 0); } break; case U8X8_MSG_BYTE_INIT: /* disable chipselect */ u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); /* ensure that the enable signal is low */ u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_E, 0); break; case U8X8_MSG_BYTE_SET_DC: u8x8_gpio_SetDC(u8x8, arg_int); break; case U8X8_MSG_BYTE_START_TRANSFER: /* expects 3 bits in arg_int for the chip select lines */ u8x8_byte_set_ks0108_cs(u8x8, arg_int); u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->post_chip_enable_wait_ns, NULL); break; case U8X8_MSG_BYTE_END_TRANSFER: u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->pre_chip_disable_wait_ns, NULL); u8x8_byte_set_ks0108_cs(u8x8, arg_int); break; default: return 0; } return 1; } /* sed1520 or sbn1661 U8X8_MSG_GPIO_E --> E1 U8X8_MSG_GPIO_CS --> E2 */ uint8_t u8x8_byte_sed1520(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t i, b; uint8_t *data; static uint8_t enable_pin; switch(msg) { case U8X8_MSG_BYTE_SEND: data = (uint8_t *)arg_ptr; while( arg_int > 0 ) { b = *data; data++; arg_int--; for( i = U8X8_MSG_GPIO_D0; i <= U8X8_MSG_GPIO_D7; i++ ) { u8x8_gpio_call(u8x8, i, b&1); b >>= 1; } u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->data_setup_time_ns); u8x8_gpio_call(u8x8, enable_pin, 1); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, 200); /* KS0108 requires 450 ns, use 200 here */ u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, u8x8->display_info->write_pulse_width_ns); /* expect 250 here */ u8x8_gpio_call(u8x8, enable_pin, 0); } break; case U8X8_MSG_BYTE_INIT: /* disable chipselect */ u8x8_gpio_SetCS(u8x8, u8x8->display_info->chip_disable_level); /* ensure that the enable signals are low */ u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_E, 0); u8x8_gpio_call(u8x8, U8X8_MSG_GPIO_CS, 0); enable_pin = U8X8_MSG_GPIO_E; break; case U8X8_MSG_BYTE_SET_DC: u8x8_gpio_SetDC(u8x8, arg_int); break; case U8X8_MSG_BYTE_START_TRANSFER: /* cs lines are not supported for the SED1520/SBN1661 */ /* instead, this will select the E1 or E2 line */ enable_pin = U8X8_MSG_GPIO_E; if ( arg_int != 0 ) enable_pin = U8X8_MSG_GPIO_CS; break; case U8X8_MSG_BYTE_END_TRANSFER: break; default: return 0; } return 1; } /*=========================================*/ /* software i2c, ignores ACK response (which is anyway not provided by some displays) also does not allow reading from the device */ static void i2c_delay(u8x8_t *u8x8) U8X8_NOINLINE; static void i2c_delay(u8x8_t *u8x8) { //u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_10MICRO, u8x8->display_info->i2c_bus_clock_100kHz); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_I2C, u8x8->display_info->i2c_bus_clock_100kHz); } static void i2c_init(u8x8_t *u8x8) { u8x8_gpio_SetI2CClock(u8x8, 1); u8x8_gpio_SetI2CData(u8x8, 1); i2c_delay(u8x8); } /* actually, the scl line is not observed, so this procedure does not return a value */ static void i2c_read_scl_and_delay(u8x8_t *u8x8) { /* set as input (line will be high) */ u8x8_gpio_SetI2CClock(u8x8, 1); i2c_delay(u8x8); } static void i2c_clear_scl(u8x8_t *u8x8) { u8x8_gpio_SetI2CClock(u8x8, 0); } static void i2c_read_sda(u8x8_t *u8x8) { /* set as input (line will be high) */ u8x8_gpio_SetI2CData(u8x8, 1); } static void i2c_clear_sda(u8x8_t *u8x8) { /* set open collector and drive low */ u8x8_gpio_SetI2CData(u8x8, 0); } static void i2c_start(u8x8_t *u8x8) { if ( u8x8->i2c_started != 0 ) { /* if already started: do restart */ i2c_read_sda(u8x8); /* SDA = 1 */ i2c_delay(u8x8); i2c_read_scl_and_delay(u8x8); } i2c_read_sda(u8x8); /* send the start condition, both lines go from 1 to 0 */ i2c_clear_sda(u8x8); i2c_delay(u8x8); i2c_clear_scl(u8x8); u8x8->i2c_started = 1; } static void i2c_stop(u8x8_t *u8x8) { /* set SDA to 0 */ i2c_clear_sda(u8x8); i2c_delay(u8x8); /* now release all lines */ i2c_read_scl_and_delay(u8x8); /* set SDA to 1 */ i2c_read_sda(u8x8); i2c_delay(u8x8); u8x8->i2c_started = 0; } static void i2c_write_bit(u8x8_t *u8x8, uint8_t val) { if (val) i2c_read_sda(u8x8); else i2c_clear_sda(u8x8); i2c_delay(u8x8); i2c_read_scl_and_delay(u8x8); i2c_clear_scl(u8x8); } static void i2c_read_bit(u8x8_t *u8x8) { //uint8_t val; /* do not drive SDA */ i2c_read_sda(u8x8); i2c_delay(u8x8); i2c_read_scl_and_delay(u8x8); i2c_read_sda(u8x8); i2c_delay(u8x8); i2c_clear_scl(u8x8); //return val; } static void i2c_write_byte(u8x8_t *u8x8, uint8_t b) { i2c_write_bit(u8x8, b & 128); i2c_write_bit(u8x8, b & 64); i2c_write_bit(u8x8, b & 32); i2c_write_bit(u8x8, b & 16); i2c_write_bit(u8x8, b & 8); i2c_write_bit(u8x8, b & 4); i2c_write_bit(u8x8, b & 2); i2c_write_bit(u8x8, b & 1); /* read ack from client */ /* 0: ack was given by client */ /* 1: nothing happend during ack cycle */ i2c_read_bit(u8x8); } uint8_t u8x8_byte_sw_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t *data; switch(msg) { case U8X8_MSG_BYTE_SEND: data = (uint8_t *)arg_ptr; while( arg_int > 0 ) { i2c_write_byte(u8x8, *data); data++; arg_int--; } break; case U8X8_MSG_BYTE_INIT: i2c_init(u8x8); break; case U8X8_MSG_BYTE_SET_DC: break; case U8X8_MSG_BYTE_START_TRANSFER: i2c_start(u8x8); i2c_write_byte(u8x8, u8x8_GetI2CAddress(u8x8)); //i2c_write_byte(u8x8, 0x078); break; case U8X8_MSG_BYTE_END_TRANSFER: i2c_stop(u8x8); break; default: return 0; } return 1; } /*=========================================*/ /* alternative i2c byte procedure */ #ifdef ALTERNATIVE_I2C_BYTE_PROCEDURE void i2c_transfer(u8x8_t *u8x8, uint8_t adr, uint8_t cnt, uint8_t *data) { uint8_t i; i2c_start(u8x8); i2c_write_byte(u8x8, adr); for( i = 0; i < cnt; i++ ) i2c_write_byte(u8x8, data[i]); i2c_stop(u8x8); } uint8_t u8x8_byte_sw_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { static uint8_t buffer[32]; /* u8g2/u8x8 will never send more than 32 bytes */ static uint8_t buf_idx; uint8_t *data; switch(msg) { case U8X8_MSG_BYTE_SEND: data = (uint8_t *)arg_ptr; while( arg_int > 0 ) { buffer[buf_idx++] = *data; data++; arg_int--; } break; case U8X8_MSG_BYTE_INIT: i2c_init(u8x8); /* init i2c communication */ break; case U8X8_MSG_BYTE_SET_DC: /* ignored for i2c */ break; case U8X8_MSG_BYTE_START_TRANSFER: buf_idx = 0; break; case U8X8_MSG_BYTE_END_TRANSFER: i2c_transfer(u8x8, u8x8_GetI2CAddress(u8x8), buf_idx, buffer); break; default: return 0; } return 1; } #endif ================================================ FILE: Drivers/u8g2/Src/u8x8_cad.c ================================================ /* u8x8_cad.c "command arg data" interface to the graphics controller Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. The following sequence must be used for any data, which is set to the display: uint8_t u8x8_cad_StartTransfer(u8x8_t *u8x8) any of the following calls uint8_t u8x8_cad_SendCmd(u8x8_t *u8x8, uint8_t cmd) uint8_t u8x8_cad_SendArg(u8x8_t *u8x8, uint8_t arg) uint8_t u8x8_cad_SendData(u8x8_t *u8x8, uint8_t cnt, uint8_t *data) uint8_t u8x8_cad_EndTransfer(u8x8_t *u8x8) */ /* uint8_t u8x8_cad_template(u8x8_t *u8x8, uint8_t msg, uint16_t arg_int, void *arg_ptr) { uint8_t i; switch(msg) { case U8X8_MSG_CAD_SEND_CMD: u8x8_mcd_byte_SetDC(mcd->next, 1); u8x8_mcd_byte_Send(mcd->next, arg_int); break; case U8X8_MSG_CAD_SEND_ARG: u8x8_mcd_byte_SetDC(mcd->next, 1); u8x8_mcd_byte_Send(mcd->next, arg_int); break; case U8X8_MSG_CAD_SEND_DATA: u8x8_mcd_byte_SetDC(mcd->next, 0); for( i = 0; i < 8; i++ ) u8x8_mcd_byte_Send(mcd->next, ((uint8_t *)arg_ptr)[i]); break; case U8X8_MSG_CAD_RESET: return mcd->next->cb(mcd->next, msg, arg_int, arg_ptr); case U8X8_MSG_CAD_START_TRANSFER: return mcd->next->cb(mcd->next, msg, arg_int, arg_ptr); case U8X8_MSG_CAD_END_TRANSFER: return mcd->next->cb(mcd->next, msg, arg_int, arg_ptr); default: break; } return 1; } */ #include "u8x8.h" uint8_t u8x8_cad_SendCmd(u8x8_t *u8x8, uint8_t cmd) { return u8x8->cad_cb(u8x8, U8X8_MSG_CAD_SEND_CMD, cmd, NULL); } uint8_t u8x8_cad_SendArg(u8x8_t *u8x8, uint8_t arg) { return u8x8->cad_cb(u8x8, U8X8_MSG_CAD_SEND_ARG, arg, NULL); } uint8_t u8x8_cad_SendMultipleArg(u8x8_t *u8x8, uint8_t cnt, uint8_t arg) { while( cnt > 0 ) { u8x8->cad_cb(u8x8, U8X8_MSG_CAD_SEND_ARG, arg, NULL); cnt--; } return 1; } uint8_t u8x8_cad_SendData(u8x8_t *u8x8, uint8_t cnt, uint8_t *data) { return u8x8->cad_cb(u8x8, U8X8_MSG_CAD_SEND_DATA, cnt, data); } uint8_t u8x8_cad_StartTransfer(u8x8_t *u8x8) { return u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 0, NULL); } uint8_t u8x8_cad_EndTransfer(u8x8_t *u8x8) { return u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 0, NULL); } void u8x8_cad_vsendf(u8x8_t * u8x8, const char *fmt, va_list va) { uint8_t d; u8x8_cad_StartTransfer(u8x8); while( *fmt != '\0' ) { d = (uint8_t)va_arg(va, int); switch(*fmt) { case 'a': u8x8_cad_SendArg(u8x8, d); break; case 'c': u8x8_cad_SendCmd(u8x8, d); break; case 'd': u8x8_cad_SendData(u8x8, 1, &d); break; } fmt++; } u8x8_cad_EndTransfer(u8x8); } void u8x8_SendF(u8x8_t * u8x8, const char *fmt, ...) { va_list va; va_start(va, fmt); u8x8_cad_vsendf(u8x8, fmt, va); va_end(va); } /* 21 c send command c 22 a send arg a 23 d send data d 24 CS on 25 CS off 254 milli delay by milliseconds 255 end of sequence */ void u8x8_cad_SendSequence(u8x8_t *u8x8, uint8_t const *data) { uint8_t cmd; uint8_t v; for(;;) { cmd = *data; data++; switch( cmd ) { case U8X8_MSG_CAD_SEND_CMD: case U8X8_MSG_CAD_SEND_ARG: v = *data; u8x8->cad_cb(u8x8, cmd, v, NULL); data++; break; case U8X8_MSG_CAD_SEND_DATA: v = *data; u8x8_cad_SendData(u8x8, 1, &v); data++; break; case U8X8_MSG_CAD_START_TRANSFER: case U8X8_MSG_CAD_END_TRANSFER: u8x8->cad_cb(u8x8, cmd, 0, NULL); break; case 0x0fe: v = *data; u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_MILLI, v); data++; break; default: return; } } } uint8_t u8x8_cad_empty(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_CAD_SEND_CMD: u8x8_byte_SendByte(u8x8, arg_int); break; case U8X8_MSG_CAD_SEND_ARG: u8x8_byte_SendByte(u8x8, arg_int); break; case U8X8_MSG_CAD_SEND_DATA: case U8X8_MSG_CAD_INIT: case U8X8_MSG_CAD_START_TRANSFER: case U8X8_MSG_CAD_END_TRANSFER: return u8x8->byte_cb(u8x8, msg, arg_int, arg_ptr); default: return 0; } return 1; } /* convert to bytes by using dc = 1 for commands and args and dc = 0 for data */ uint8_t u8x8_cad_110(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_CAD_SEND_CMD: u8x8_byte_SetDC(u8x8, 1); u8x8_byte_SendByte(u8x8, arg_int); break; case U8X8_MSG_CAD_SEND_ARG: u8x8_byte_SetDC(u8x8, 1); u8x8_byte_SendByte(u8x8, arg_int); break; case U8X8_MSG_CAD_SEND_DATA: u8x8_byte_SetDC(u8x8, 0); //u8x8_byte_SendBytes(u8x8, arg_int, arg_ptr); //break; /* fall through */ case U8X8_MSG_CAD_INIT: case U8X8_MSG_CAD_START_TRANSFER: case U8X8_MSG_CAD_END_TRANSFER: return u8x8->byte_cb(u8x8, msg, arg_int, arg_ptr); default: return 0; } return 1; } /* convert to bytes by using dc = 1 for commands and args and dc = 0 for data t6963 */ uint8_t u8x8_cad_100(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_CAD_SEND_CMD: u8x8_byte_SetDC(u8x8, 1); u8x8_byte_SendByte(u8x8, arg_int); break; case U8X8_MSG_CAD_SEND_ARG: u8x8_byte_SetDC(u8x8, 0); u8x8_byte_SendByte(u8x8, arg_int); break; case U8X8_MSG_CAD_SEND_DATA: u8x8_byte_SetDC(u8x8, 0); //u8x8_byte_SendBytes(u8x8, arg_int, arg_ptr); //break; /* fall through */ case U8X8_MSG_CAD_INIT: case U8X8_MSG_CAD_START_TRANSFER: case U8X8_MSG_CAD_END_TRANSFER: return u8x8->byte_cb(u8x8, msg, arg_int, arg_ptr); default: return 0; } return 1; } /* convert to bytes by using dc = 0 for commands and args and dc = 1 for data */ uint8_t u8x8_cad_001(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_CAD_SEND_CMD: u8x8_byte_SetDC(u8x8, 0); u8x8_byte_SendByte(u8x8, arg_int); break; case U8X8_MSG_CAD_SEND_ARG: u8x8_byte_SetDC(u8x8, 0); u8x8_byte_SendByte(u8x8, arg_int); break; case U8X8_MSG_CAD_SEND_DATA: u8x8_byte_SetDC(u8x8, 1); //u8x8_byte_SendBytes(u8x8, arg_int, arg_ptr); //break; /* fall through */ case U8X8_MSG_CAD_INIT: case U8X8_MSG_CAD_START_TRANSFER: case U8X8_MSG_CAD_END_TRANSFER: return u8x8->byte_cb(u8x8, msg, arg_int, arg_ptr); default: return 0; } return 1; } /* convert to bytes by using dc = 0 for commands dc = 1 for args and data */ uint8_t u8x8_cad_011(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_CAD_SEND_CMD: u8x8_byte_SetDC(u8x8, 0); u8x8_byte_SendByte(u8x8, arg_int); break; case U8X8_MSG_CAD_SEND_ARG: u8x8_byte_SetDC(u8x8, 1); u8x8_byte_SendByte(u8x8, arg_int); break; case U8X8_MSG_CAD_SEND_DATA: u8x8_byte_SetDC(u8x8, 1); //u8x8_byte_SendBytes(u8x8, arg_int, arg_ptr); //break; /* fall through */ case U8X8_MSG_CAD_INIT: case U8X8_MSG_CAD_START_TRANSFER: case U8X8_MSG_CAD_END_TRANSFER: return u8x8->byte_cb(u8x8, msg, arg_int, arg_ptr); default: return 0; } return 1; } /* cad procedure for the ST7920 in SPI mode */ /* u8x8_byte_SetDC is not used */ uint8_t u8x8_cad_st7920_spi(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t *data; uint8_t b; uint8_t i; static uint8_t buf[16]; uint8_t *ptr; switch(msg) { case U8X8_MSG_CAD_SEND_CMD: u8x8_byte_SendByte(u8x8, 0x0f8); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, 1); u8x8_byte_SendByte(u8x8, arg_int & 0x0f0); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, 1); u8x8_byte_SendByte(u8x8, arg_int << 4); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, 1); break; case U8X8_MSG_CAD_SEND_ARG: u8x8_byte_SendByte(u8x8, 0x0f8); u8x8_byte_SendByte(u8x8, arg_int & 0x0f0); u8x8_byte_SendByte(u8x8, arg_int << 4); break; case U8X8_MSG_CAD_SEND_DATA: u8x8_byte_SendByte(u8x8, 0x0fa); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, 1); /* this loop should be optimized: multiple bytes should be sent */ /* u8x8_byte_SendBytes(u8x8, arg_int, arg_ptr); */ data = (uint8_t *)arg_ptr; /* the following loop increases speed by 20% */ while( arg_int >= 8 ) { i = 8; ptr = buf; do { b = *data++; *ptr++= b & 0x0f0; b <<= 4; *ptr++= b; i--; } while( i > 0 ); arg_int -= 8; u8x8_byte_SendBytes(u8x8, 16, buf); } while( arg_int > 0 ) { b = *data; u8x8_byte_SendByte(u8x8, b & 0x0f0); u8x8_byte_SendByte(u8x8, b << 4); data++; arg_int--; } u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_NANO, 1); break; case U8X8_MSG_CAD_INIT: case U8X8_MSG_CAD_START_TRANSFER: case U8X8_MSG_CAD_END_TRANSFER: return u8x8->byte_cb(u8x8, msg, arg_int, arg_ptr); default: return 0; } return 1; } /* cad procedure for the SSD13xx family in I2C mode */ /* this procedure is also used by the ST7588 */ /* u8x8_byte_SetDC is not used */ /* U8X8_MSG_BYTE_START_TRANSFER starts i2c transfer, U8X8_MSG_BYTE_END_TRANSFER stops transfer */ /* After transfer start, a full byte indicates command or data mode */ static void u8x8_i2c_data_transfer(u8x8_t *u8x8, uint8_t arg_int, void *arg_ptr) U8X8_NOINLINE; static void u8x8_i2c_data_transfer(u8x8_t *u8x8, uint8_t arg_int, void *arg_ptr) { u8x8_byte_StartTransfer(u8x8); u8x8_byte_SendByte(u8x8, 0x040); u8x8->byte_cb(u8x8, U8X8_MSG_CAD_SEND_DATA, arg_int, arg_ptr); u8x8_byte_EndTransfer(u8x8); } /* classic version: will put a start/stop condition around each command and arg */ uint8_t u8x8_cad_ssd13xx_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t *p; switch(msg) { case U8X8_MSG_CAD_SEND_CMD: case U8X8_MSG_CAD_SEND_ARG: /* 7 Nov 2016: Can this be improved? */ //u8x8_byte_SetDC(u8x8, 0); u8x8_byte_StartTransfer(u8x8); //u8x8_byte_SendByte(u8x8, u8x8_GetI2CAddress(u8x8)); u8x8_byte_SendByte(u8x8, 0x000); u8x8_byte_SendByte(u8x8, arg_int); u8x8_byte_EndTransfer(u8x8); break; case U8X8_MSG_CAD_SEND_DATA: //u8x8_byte_SetDC(u8x8, 1); /* the FeatherWing OLED with the 32u4 transfer of long byte */ /* streams was not possible. This is broken down to */ /* smaller streams, 32 seems to be the limit... */ /* I guess this is related to the size of the Wire buffers in Arduino */ /* Unfortunately, this can not be handled in the byte level drivers, */ /* so this is done here. Even further, only 24 bytes will be sent, */ /* because there will be another byte (DC) required during the transfer */ p = arg_ptr; while( arg_int > 24 ) { u8x8_i2c_data_transfer(u8x8, 24, p); arg_int-=24; p+=24; } u8x8_i2c_data_transfer(u8x8, arg_int, p); break; case U8X8_MSG_CAD_INIT: /* apply default i2c adr if required so that the start transfer msg can use this */ if ( u8x8->i2c_address == 255 ) u8x8->i2c_address = 0x078; return u8x8->byte_cb(u8x8, msg, arg_int, arg_ptr); case U8X8_MSG_CAD_START_TRANSFER: case U8X8_MSG_CAD_END_TRANSFER: /* cad transfer commands are ignored */ break; default: return 0; } return 1; } /* fast version with reduced data start/stops, issue 735 */ uint8_t u8x8_cad_ssd13xx_fast_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { static uint8_t in_transfer = 0; uint8_t *p; switch(msg) { case U8X8_MSG_CAD_SEND_CMD: /* improved version, takeover from ld7032 */ /* assumes, that the args of a command is not longer than 31 bytes */ /* speed improvement is about 4% compared to the classic version */ if ( in_transfer != 0 ) u8x8_byte_EndTransfer(u8x8); u8x8_byte_StartTransfer(u8x8); u8x8_byte_SendByte(u8x8, 0x000); /* cmd byte for ssd13xx controller */ u8x8_byte_SendByte(u8x8, arg_int); in_transfer = 1; /* lightning version: can replace the improved version from above */ /* the drawback of the lightning version is this: The complete init sequence */ /* must fit into the 32 byte Arduino Wire buffer, which might not always be the case */ /* speed improvement is about 6% compared to the classic version */ // if ( in_transfer == 0 ) // { // u8x8_byte_StartTransfer(u8x8); // u8x8_byte_SendByte(u8x8, 0x000); /* cmd byte for ssd13xx controller */ // in_transfer = 1; // } //u8x8_byte_SendByte(u8x8, arg_int); break; case U8X8_MSG_CAD_SEND_ARG: u8x8_byte_SendByte(u8x8, arg_int); break; case U8X8_MSG_CAD_SEND_DATA: if ( in_transfer != 0 ) u8x8_byte_EndTransfer(u8x8); /* the FeatherWing OLED with the 32u4 transfer of long byte */ /* streams was not possible. This is broken down to */ /* smaller streams, 32 seems to be the limit... */ /* I guess this is related to the size of the Wire buffers in Arduino */ /* Unfortunately, this can not be handled in the byte level drivers, */ /* so this is done here. Even further, only 24 bytes will be sent, */ /* because there will be another byte (DC) required during the transfer */ p = arg_ptr; while( arg_int > 24 ) { u8x8_i2c_data_transfer(u8x8, 24, p); arg_int-=24; p+=24; } u8x8_i2c_data_transfer(u8x8, arg_int, p); in_transfer = 0; break; case U8X8_MSG_CAD_INIT: /* apply default i2c adr if required so that the start transfer msg can use this */ if ( u8x8->i2c_address == 255 ) u8x8->i2c_address = 0x078; return u8x8->byte_cb(u8x8, msg, arg_int, arg_ptr); case U8X8_MSG_CAD_START_TRANSFER: in_transfer = 0; break; case U8X8_MSG_CAD_END_TRANSFER: if ( in_transfer != 0 ) u8x8_byte_EndTransfer(u8x8); in_transfer = 0; break; default: return 0; } return 1; } /* the st75256 i2c driver is a copy of the ssd13xx driver, but with arg=1 */ /* modified from cad001 (ssd13xx) to cad011 */ uint8_t u8x8_cad_st75256_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t *p; switch(msg) { case U8X8_MSG_CAD_SEND_CMD: u8x8_byte_StartTransfer(u8x8); u8x8_byte_SendByte(u8x8, 0x000); u8x8_byte_SendByte(u8x8, arg_int); u8x8_byte_EndTransfer(u8x8); break; case U8X8_MSG_CAD_SEND_ARG: u8x8_byte_StartTransfer(u8x8); u8x8_byte_SendByte(u8x8, 0x040); u8x8_byte_SendByte(u8x8, arg_int); u8x8_byte_EndTransfer(u8x8); break; case U8X8_MSG_CAD_SEND_DATA: /* see ssd13xx driver */ p = arg_ptr; while( arg_int > 24 ) { u8x8_i2c_data_transfer(u8x8, 24, p); arg_int-=24; p+=24; } u8x8_i2c_data_transfer(u8x8, arg_int, p); break; case U8X8_MSG_CAD_INIT: /* apply default i2c adr if required so that the start transfer msg can use this */ if ( u8x8->i2c_address == 255 ) u8x8->i2c_address = 0x078; /* ST75256, often this is 0x07e */ return u8x8->byte_cb(u8x8, msg, arg_int, arg_ptr); case U8X8_MSG_CAD_START_TRANSFER: case U8X8_MSG_CAD_END_TRANSFER: /* cad transfer commands are ignored */ break; default: return 0; } return 1; } /* cad i2c procedure for the ld7032 controller */ /* Issue https://github.com/olikraus/u8g2/issues/865 mentiones, that I2C does not work */ /* Workaround is to remove the while loop (or increase the value in the condition) */ uint8_t u8x8_cad_ld7032_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { static uint8_t in_transfer = 0; uint8_t *p; switch(msg) { case U8X8_MSG_CAD_SEND_CMD: if ( in_transfer != 0 ) u8x8_byte_EndTransfer(u8x8); u8x8_byte_StartTransfer(u8x8); u8x8_byte_SendByte(u8x8, arg_int); in_transfer = 1; break; case U8X8_MSG_CAD_SEND_ARG: u8x8_byte_SendByte(u8x8, arg_int); break; case U8X8_MSG_CAD_SEND_DATA: //u8x8_byte_SetDC(u8x8, 1); /* the FeatherWing OLED with the 32u4 transfer of long byte */ /* streams was not possible. This is broken down to */ /* smaller streams, 32 seems to be the limit... */ /* I guess this is related to the size of the Wire buffers in Arduino */ /* Unfortunately, this can not be handled in the byte level drivers, */ /* so this is done here. Even further, only 24 bytes will be sent, */ /* because there will be another byte (DC) required during the transfer */ p = arg_ptr; while( arg_int > 24 ) { u8x8->byte_cb(u8x8, U8X8_MSG_CAD_SEND_DATA, 24, p); arg_int-=24; p+=24; u8x8_byte_EndTransfer(u8x8); u8x8_byte_StartTransfer(u8x8); u8x8_byte_SendByte(u8x8, 0x08); /* data write for LD7032 */ } u8x8->byte_cb(u8x8, U8X8_MSG_CAD_SEND_DATA, arg_int, p); break; case U8X8_MSG_CAD_INIT: /* apply default i2c adr if required so that the start transfer msg can use this */ if ( u8x8->i2c_address == 255 ) u8x8->i2c_address = 0x060; return u8x8->byte_cb(u8x8, msg, arg_int, arg_ptr); case U8X8_MSG_CAD_START_TRANSFER: in_transfer = 0; break; case U8X8_MSG_CAD_END_TRANSFER: if ( in_transfer != 0 ) u8x8_byte_EndTransfer(u8x8); break; default: return 0; } return 1; } /* cad procedure for the UC16xx family in I2C mode */ /* u8x8_byte_SetDC is not used */ /* DC bit is encoded into the adr byte */ uint8_t u8x8_cad_uc16xx_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { static uint8_t in_transfer = 0; static uint8_t is_data = 0; uint8_t *p; switch(msg) { case U8X8_MSG_CAD_SEND_CMD: case U8X8_MSG_CAD_SEND_ARG: if ( in_transfer != 0 ) { if ( is_data != 0 ) { /* transfer mode is active, but data transfer */ u8x8_byte_EndTransfer(u8x8); /* clear the lowest two bits of the adr */ u8x8_SetI2CAddress( u8x8, u8x8_GetI2CAddress(u8x8)&0x0fc ); u8x8_byte_StartTransfer(u8x8); } } else { /* clear the lowest two bits of the adr */ u8x8_SetI2CAddress( u8x8, u8x8_GetI2CAddress(u8x8)&0x0fc ); u8x8_byte_StartTransfer(u8x8); } u8x8_byte_SendByte(u8x8, arg_int); in_transfer = 1; break; case U8X8_MSG_CAD_SEND_DATA: if ( in_transfer != 0 ) { if ( is_data == 0 ) { /* transfer mode is active, but data transfer */ u8x8_byte_EndTransfer(u8x8); /* clear the lowest two bits of the adr */ u8x8_SetI2CAddress( u8x8, (u8x8_GetI2CAddress(u8x8)&0x0fc)|2 ); u8x8_byte_StartTransfer(u8x8); } } else { /* clear the lowest two bits of the adr */ u8x8_SetI2CAddress( u8x8, (u8x8_GetI2CAddress(u8x8)&0x0fc)|2 ); u8x8_byte_StartTransfer(u8x8); } in_transfer = 1; p = arg_ptr; while( arg_int > 24 ) { u8x8->byte_cb(u8x8, U8X8_MSG_CAD_SEND_DATA, 24, p); arg_int-=24; p+=24; u8x8_byte_EndTransfer(u8x8); u8x8_byte_StartTransfer(u8x8); } u8x8->byte_cb(u8x8, U8X8_MSG_CAD_SEND_DATA, arg_int, p); break; case U8X8_MSG_CAD_INIT: /* apply default i2c adr if required so that the start transfer msg can use this */ if ( u8x8->i2c_address == 255 ) u8x8->i2c_address = 0x070; return u8x8->byte_cb(u8x8, msg, arg_int, arg_ptr); case U8X8_MSG_CAD_START_TRANSFER: in_transfer = 0; /* actual start is delayed, because we do not whether this is data or cmd transfer */ break; case U8X8_MSG_CAD_END_TRANSFER: if ( in_transfer != 0 ) u8x8_byte_EndTransfer(u8x8); in_transfer = 0; break; default: return 0; } return 1; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_a2printer.c ================================================ /* u8x8_d_a2printer.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Use DC2 bitmap command of the A2 Micro panel termal printer double stroke */ #include "u8x8.h" #define LINE_MIN_DELAY_MS 15 /* higher values improve quality */ /* however if the value is too high (>=5) then form feed does not work any more */ #define LINE_EXTRA_8PIXEL_DELAY_MS 3 /* this must be a power of two and between 1 and 8 */ /* best quality only with 1 */ #define NO_OF_LINES_TO_SEND_WITHOUT_DELAY 1 /* calculates the delay, based on the number of black pixel */ /* actually only "none-zero" bytes are calculated which is, of course not so accurate, but should be good enough */ uint16_t get_delay_in_milliseconds(uint8_t cnt, uint8_t *data) { uint8_t i; uint16_t time = LINE_MIN_DELAY_MS; for ( i = 0; i < cnt; i++ ) if ( data[i] != 0 ) time += LINE_EXTRA_8PIXEL_DELAY_MS; return time; } uint8_t u8x8_d_a2printer_common(u8x8_t *u8x8, uint8_t msg, U8X8_UNUSED uint8_t arg_int, void *arg_ptr) { uint8_t c, i, j; uint8_t *ptr; uint16_t delay_in_milliseconds; switch(msg) { /* U8X8_MSG_DISPLAY_SETUP_MEMORY is handled by the calling function */ /* case U8X8_MSG_DISPLAY_SETUP_MEMORY: break; */ case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); // no setup required // u8x8_cad_SendSequence(u8x8, u8x8_d_a2printer_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: // no powersave break; case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 27); /* ESC */ u8x8_cad_SendCmd(u8x8, 55 ); /* parameter command */ /* increasing the "max printing dots" requires a good power supply, but LINE_EXTRA_8PIXEL_DELAY_MS could be reduced then */ u8x8_cad_SendCmd(u8x8, 0); /* Max printing dots,Unit(8dots),Default:7(64 dots) 8*(x+1) ... lower values improve, probably my current supply is not sufficient */ u8x8_cad_SendCmd(u8x8, 200); /* 3-255 Heating time,Unit(10us),Default:80(800us) */ u8x8_cad_SendCmd(u8x8, 2); /* 0-255 Heating interval,Unit(10us),Default:2(20us) ... does not have much influence */ //c = ((u8x8_tile_t *)arg_ptr)->cnt; /* number of tiles */ c = u8x8->display_info->tile_width; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* data ptr to the tiles */ u8x8_cad_SendCmd(u8x8, 18); /* DC2 */ u8x8_cad_SendCmd(u8x8, 42 ); /* * */ u8x8_cad_SendCmd(u8x8, 8 ); /* height */ u8x8_cad_SendCmd(u8x8, c ); /* c, u8x8->display_info->tile_width */ for( j = 0; j < 8 / NO_OF_LINES_TO_SEND_WITHOUT_DELAY; j ++ ) { delay_in_milliseconds = 0; for( i = 0; i < NO_OF_LINES_TO_SEND_WITHOUT_DELAY; i++ ) { u8x8_cad_SendData(u8x8, c, ptr); /* c, note: SendData can not handle more than 255 bytes, send one line of data */ delay_in_milliseconds += get_delay_in_milliseconds(c, ptr); ptr += c; } while( delay_in_milliseconds > 200 ) { u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_MILLI, 200, NULL); delay_in_milliseconds -= 200; } u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_MILLI, delay_in_milliseconds, NULL); } /* set parameters back to their default values */ u8x8_cad_SendCmd(u8x8, 27); /* ESC */ u8x8_cad_SendCmd(u8x8, 55 ); /* parameter command */ u8x8_cad_SendCmd(u8x8, 7); /* Max printing dots,Unit(8dots),Default:7(64 dots) 8*(x+1)*/ u8x8_cad_SendCmd(u8x8, 80); /* 3-255 Heating time,Unit(10us),Default:80(800us) */ u8x8_cad_SendCmd(u8x8, 2); /* 0-255 Heating interval,Unit(10us),Default:2(20us)*/ u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_a2printer_384x240_display_info = { /* most of the settings are not required, because this is a serial RS232 printer */ /* chip_enable_level = */ 1, /* chip_disable_level = */ 0, /* post_chip_enable_wait_ns = */ 5, /* pre_chip_disable_wait_ns = */ 5, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 20, /* sck_pulse_width_ns = */ 140, /* sck_clock_hz = */ 1000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* old: sck_takeover_edge, new: active high (bit 1), rising edge (bit 0) */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* write_pulse_width_ns = */ 40, /* tile_width = */ 48, /* tile_hight = */ 30, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 384, /* pixel_height = */ 240 }; uint8_t u8x8_d_a2printer_384x240(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_a2printer_384x240_display_info); break; default: return u8x8_d_a2printer_common(u8x8, msg, arg_int, arg_ptr); } return 1; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_il3820_296x128.c ================================================ /* u8x8_d_il3820_296x128.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2017, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. il3820: 200x300x1 command 0x22: assign actions 0x20: execute actions action for command 0x022 are (more or less guessed) bit 7: Enable Clock bit 6: Enable Charge Pump bit 5: Load Temparture Value (???) bit 4: Load LUT (???) bit 3: Initial Display (???) bit 2: Pattern Display --> Requires about 945ms with the LUT from below bit 1: Disable Charge Pump bit 0: Disable Clock Disable Charge Pump and Clock require about 10ms Enable Charge Pump and Clock require about 100 to 300ms Notes: - Introduced a refresh display message, which copies RAM to display - Charge pump is always enabled. Charge pump can be enabled/disabled via power save message - U8x8 will not really work because of the two buffers in the SSD1606, however U8g2 should be ok. LUT for the 296x128 device (IL3820) LUT (cmd: 0x032 has 30 bytes) section 6.8 of the datasheet mentions 256 bits = 32 bytes for the LUT chapter 7 tells 30 bytes according to section 6.8: 20 bytes waveform 10 bytes timing 1 byte named as VSH/VSL 1 empty byte according to the command table, the lut has 240 bits (=30 bytes * 8 bits) LUT / Refresh time total_refresh_time = (refresh_lines + dummy_lines*2)*TGate*TS_Sum/f_OSC f_OSC=1MHz (according to the datasheets) refreh_lines = 296 (for the waveshare display, 0x045 cmd) dummy_lines = 22 (for the upcoming u8g2 code, 0x03a cmd) TGate = 62 (POR default, 0x03b cmd) TS_Sum: Sum of all TS entries of the second part of the LUT f_OSC: 1MHz according to the datasheet. so we have total_refresh_time = 21080*TS_Sum/1000000 = 21ms * TS_Sum This file includes two devices: u8x8_d_il3820_296x128 --> includes LUT which is probably from the WaveShare 2.9 Vendor u8x8_d_il3820_v2_296x128 --> includes LUT which was optimized for faster speed and lesser flicker */ /* Waveform part of the LUT (20 bytes) */ /* bit 7/6: 1 - 1 transition */ /* bit 5/4: 1 - 0 transition */ /* bit 3/2: 0 - 1 transition */ /* bit 1/0: 0 - 0 transition */ /* 00 – VSS */ /* 01 – VSH */ /* 10 – VSL */ /* 11 – NA */ #include "u8x8.h" /*=================================================*/ /* common code for all devices */ static const uint8_t u8x8_d_il3820_296x128_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x22, 0xc0), /* enable clock and charge pump */ U8X8_C(0x20), /* execute sequence */ U8X8_DLY(200), /* according to my measures it may take up to 150ms */ U8X8_DLY(100), /* but it might take longer */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_il3820_296x128_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ /* disable clock and charge pump only, deep sleep is not entered, because we will loose RAM content */ U8X8_CA(0x22, 0x02), /* only disable charge pump, HW reset seems to be required if the clock is disabled */ U8X8_C(0x20), /* execute sequence */ U8X8_DLY(20), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; // static const uint8_t u8x8_d_il3820_296x128_flip0_seq[] = { // U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ // U8X8_END_TRANSFER(), /* disable chip */ // U8X8_END() /* end of sequence */ // }; // static const uint8_t u8x8_d_il3820_296x128_flip1_seq[] = { // U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ // U8X8_END_TRANSFER(), /* disable chip */ // U8X8_END() /* end of sequence */ // }; static const u8x8_display_info_t u8x8_il3820_296x128_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 120, /* pre_chip_disable_wait_ns = */ 60, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /* sda_setup_time_ns = */ 50, /* IL3820 */ /* sck_pulse_width_ns = */ 125, /* IL3820: 125ns, clock cycle = 250ns */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* tile_width = */ 37, /* 37*8 = 296 */ /* tile_hight = */ 16, /* 16*8 = 128 */ /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 296, /* pixel_height = */ 128 }; static uint8_t *u8x8_convert_tile_for_il3820(uint8_t *t) { uint8_t i; static uint8_t buf[8]; uint8_t *pbuf = buf; for( i = 0; i < 8; i++ ) { *pbuf++ = ~(*t++); } return buf; } static void u8x8_d_il3820_draw_tile(u8x8_t *u8x8, uint8_t arg_int, void *arg_ptr) U8X8_NOINLINE; static void u8x8_d_il3820_draw_tile(u8x8_t *u8x8, uint8_t arg_int, void *arg_ptr) { uint16_t x; uint8_t c, page; uint8_t *ptr; u8x8_cad_StartTransfer(u8x8); page = u8x8->display_info->tile_height; page --; page -= (((u8x8_tile_t *)arg_ptr)->y_pos); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; //u8x8_cad_SendCmd(u8x8, 0x011 ); /* cursor increment mode */ //u8x8_cad_SendArg(u8x8, 7); u8x8_cad_SendCmd(u8x8, 0x04f ); /* set cursor column */ u8x8_cad_SendArg(u8x8, x&255); u8x8_cad_SendArg(u8x8, x>>8); u8x8_cad_SendCmd(u8x8, 0x04e ); /* set cursor row */ u8x8_cad_SendArg(u8x8, page); u8x8_cad_SendCmd(u8x8, 0x024 ); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendData(u8x8, 8, u8x8_convert_tile_for_il3820(ptr)); ptr += 8; x += 8; c--; } while( c > 0 ); arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); } static const uint8_t u8x8_d_il3820_exec_1000dly_seq[] = { // assumes, that the start transfer has happend U8X8_CA(0x22, 0x04), /* display update seq. option: pattern display */ U8X8_C(0x20), /* execute sequence */ U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static void u8x8_d_il3820_first_init(u8x8_t *u8x8) { u8x8_ClearDisplay(u8x8); u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x032); // program update sequence u8x8_cad_SendMultipleArg(u8x8, 8, 0x055); // all black u8x8_cad_SendMultipleArg(u8x8, 12, 0x0aa); // all white u8x8_cad_SendMultipleArg(u8x8, 10, 0x022); // 830ms u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_exec_1000dly_seq); } #ifdef OBSOLETE static void u8x8_d_il3820_second_init(u8x8_t *u8x8) { u8x8_ClearDisplay(u8x8); u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x032); // program update sequence u8x8_cad_SendMultipleArg(u8x8, 20, 0x000); // do nothing u8x8_cad_SendMultipleArg(u8x8, 10, 0x011); // 414ms dly /* reuse sequence from above, ok some time is wasted here, */ /* delay could be lesser */ u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_exec_1000dly_seq); } #endif /*=================================================*/ /* first version, LUT from WaveShare */ /* http://www.waveshare.com/wiki/File:2.9inch_e-Paper_Module_code.7z */ static const uint8_t u8x8_d_il3820_296x128_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x10, 0x00), /* Deep Sleep mode Control: Disable */ U8X8_C(0x01), U8X8_A(295 % 256), U8X8_A(295/256), U8X8_A(0), U8X8_CA(0x03, 0x00), /* Gate Driving voltage: 15V (lowest value)*/ U8X8_CA(0x04, 0x0a), /* Source Driving voltage: 15V (mid value and POR)*/ //U8X8_CA(0x22, 0xc0), /* display update seq. option: enable clk, enable CP, .... todo: this is never activated */ //U8X8_CA(0x0b, 7), /* Set Delay of gate and source non overlap period, POR = 7 */ U8X8_CA(0x2c, 0xa8), /* write vcom value*/ U8X8_CA(0x3a, 0x16), /* dummy lines POR=22 (0x016) */ U8X8_CA(0x3b, 0x08), /* gate time POR=0x08*/ U8X8_CA(0x3c, 0x33), /* select boarder waveform */ //U8X8_CA(0x22, 0xc4), /* display update seq. option: clk -> CP -> LUT -> initial display -> pattern display */ U8X8_CA(0x11, 0x07), /* Define data entry mode, x&y inc, x first*/ U8X8_CAA(0x44, 0, 29), /* RAM x start & end, issue 920: end should be (128/8)-1=15. */ U8X8_CAAAA(0x45, 0, 0, 295&255, 295>>8), /* RAM y start & end */ //U8X8_CA(0x4e, 0), /* set x pos, 0..29? */ //U8X8_CAA(0x4f, 0, 0), /* set y pos, 0...320??? */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_il3820_to_display_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ /* 0x50, 0xAA, 0x55, 0xAA, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 measured 1582 ms */ U8X8_C(0x32), /* write LUT register*/ /* original values */ U8X8_A(0x50), U8X8_A(0xaa), U8X8_A(0x55), U8X8_A(0xaa), U8X8_A(0x11), U8X8_A(0x11), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), /* Timing part of the LUT, 20 Phases with 4 bit each: 10 bytes */ U8X8_A(0xff), U8X8_A(0xff), U8X8_A(0x3f), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_CA(0x22, 0x04), /* display update seq. option: pattern display, assumes clk and charge pump are enabled */ U8X8_C(0x20), /* execute sequence */ U8X8_DLY(250), /* delay for 1620ms. The current sequence takes 1582ms */ U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(120), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_il3820_296x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_il3820_296x128_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_296x128_init_seq); u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_296x128_powersave0_seq); u8x8_d_il3820_first_init(u8x8); /* usually the DISPLAY_INIT message leaves the display in power save state */ /* however this is not done for e-paper devices, see: */ /* https://github.com/olikraus/u8g2/wiki/internal#powersave-mode */ break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_296x128_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_296x128_powersave1_seq); break; case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_d_il3820_draw_tile(u8x8, arg_int, arg_ptr); break; case U8X8_MSG_DISPLAY_REFRESH: u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_to_display_seq); break; default: return 0; } return 1; } /*=================================================*/ /* second version for the IL3820 display */ /* http://www.waveshare.com/wiki/File:2.9inch_e-Paper_Module_code.7z */ static const uint8_t u8x8_d_il3820_v2_296x128_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ // U8X8_CA(0x10, 0x00), /* Deep Sleep mode Control: POR: Normal mode */ U8X8_C(0x01), U8X8_A(295 % 256), U8X8_A(295/256), U8X8_A(0), /* the driving voltagesmust not be that high, in order to aviod level change after */ /* some seconds (which happens with 0xea */ U8X8_CA(0x03, 0x75), /* Gate Driving voltage: +/-15V =0x00 POR (+22/-20V) = 0x0ea*/ U8X8_CA(0x04, 0x0a), /* Source Driving voltage: (POR=0x0a=15V), max=0x0e*/ U8X8_CA(0x0b, 7), /* Set Delay of gate and source non overlap period, POR = 7 */ U8X8_CA(0x2c, 0xa8), /* write vcom value*/ U8X8_CA(0x3a, 0x16), /* dummy lines POR=22 (0x016) */ U8X8_CA(0x3b, 0x08), /* gate time POR=0x08*/ U8X8_CA(0x3c, 0x33), /* select boarder waveform */ U8X8_CA(0x11, 0x07), /* Define data entry mode, x&y inc, x first*/ U8X8_CAA(0x44, 0, 29), /* RAM x start & end, 32*4=128 */ U8X8_CAAAA(0x45, 0, 0, 295&255, 295>>8), /* RAM y start & end, 0..295 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_il3820_v2_to_display_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ /* 0xaa, 0x09, 0x09, 0x19, 0x19, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x77, 0x77, 0x77, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00 measured 1240 ms */ U8X8_C(0x32), /* write LUT register*/ /* https://github.com/olikraus/u8g2/issues/347 */ U8X8_A(0xaa), U8X8_A(0x09), U8X8_A(0x09), U8X8_A(0x19), U8X8_A(0x19), U8X8_A(0x11), U8X8_A(0x11), U8X8_A(0x11), U8X8_A(0x11), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), /* Timing part of the LUT, 20 Phases with 4 bit each: 10 bytes */ U8X8_A(0x75), U8X8_A(0x77), U8X8_A(0x77), U8X8_A(0x77), U8X8_A(0x07), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_CA(0x22, 0x04), /* display update seq. option: pattern display */ U8X8_C(0x20), /* execute sequence */ U8X8_DLY(250), /* delay for 1400ms. The current sequence takes 1240ms, it was reported, that longer delays are better */ U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(150), /* extended, #318 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_il3820_v2_296x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_il3820_296x128_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_v2_296x128_init_seq); u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_296x128_powersave0_seq); u8x8_d_il3820_first_init(u8x8); /* u8x8_d_il3820_second_init(u8x8); */ /* not required, u8g2.begin() will also clear the display once more */ /* usually the DISPLAY_INIT message leaves the display in power save state */ /* however this is not done for e-paper devices, see: */ /* https://github.com/olikraus/u8g2/wiki/internal#powersave-mode */ break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_296x128_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_296x128_powersave1_seq); break; case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_d_il3820_draw_tile(u8x8, arg_int, arg_ptr); break; case U8X8_MSG_DISPLAY_REFRESH: u8x8_cad_SendSequence(u8x8, u8x8_d_il3820_v2_to_display_seq); break; default: return 0; } return 1; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_ist3020.c ================================================ /* u8x8_d_ist3020.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2017, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_ist3020_erc19264_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a4), /* all pixel off, issue 142 */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ist3020_erc19264_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ist3020_erc19264_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ist3020_erc19264_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_ist3020_erc19264_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* IST3020 datasheet, page 56 */ /* pre_chip_disable_wait_ns = */ 150, /* IST3020 datasheet, page 56 */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 1, /* sda_setup_time_ns = */ 100, /* IST3020 datasheet, page 56 */ /* sck_pulse_width_ns = */ 100, /* IST3020 datasheet, page 56 */ /* sck_clock_hz = */ 4000000UL, /* */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* IST3020 datasheet, page 54 */ /* write_pulse_width_ns = */ 60, /* IST3020 datasheet, page 54 */ /* tile_width = */ 24, /* width of 24*8=192 pixel */ /* tile_hight = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 64, /* pixel_width = */ 192, /* pixel_height = */ 64 }; static const uint8_t u8x8_d_ist3020_erc19264_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ab), /* build in osc on, used in ER code, but not mentioned in data sheet */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x0a0), /* ADC set to reverse */ U8X8_C(0x0c8), /* common output mode */ // Flipmode //U8X8_C(0x0a0), /* ADC set to reverse */ //U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a3), /* FIX: LCD bias 1/7, old value was 1/9 (0x0a2) */ U8X8_C(0x028|4), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x028|6), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x028|7), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x020), /* v0 voltage resistor ratio */ U8X8_CA(0x081, 0x019), /* set contrast, contrast value (from ER code: 45) */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ist3020_erc19264(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ist3020_erc19264_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ist3020_erc19264_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ist3020_erc19264_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ist3020_erc19264_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ist3020_erc19264_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ist3020_erc19264_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int >> 2 ); /* st7567 has range from 0 to 63 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_ks0108.c ================================================ /* u8x8_d_ks0108.c The classic 5V LCD Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_ks0108_init_seq[] = { U8X8_C(0x0c0), /* satart at the top */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ks0108_powersave0_seq[] = { U8X8_C(0x03f), /* display on */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ks0108_powersave1_seq[] = { U8X8_C(0x03e), /* display off */ U8X8_END() /* end of sequence */ }; struct u8x8_ks0108_vars { uint8_t *ptr; uint8_t x; uint8_t c; uint8_t arg_int; }; static void u8x8_ks0108_out(u8x8_t *u8x8, struct u8x8_ks0108_vars *v, void *arg_ptr) { uint8_t cnt; u8x8_cad_SendCmd(u8x8, 0x040 | ((v->x << 3) & 63) ); u8x8_cad_SendCmd(u8x8, 0x0b8 | (((u8x8_tile_t *)arg_ptr)->y_pos)); while( v->arg_int > 0 ) { /* calculate tiles to next boundary (end or chip limit) */ cnt = v->x; cnt += 8; cnt &= 0x0f8; cnt -= v->x; if ( cnt > v->c ) cnt = v->c; /* of cours we still could use cnt=1 here... */ /* but setting cnt to 1 is not very efficient */ //cnt = 1; v->x +=cnt; v->c-=cnt; cnt<<=3; u8x8_cad_SendData(u8x8, cnt, v->ptr); /* note: SendData can not handle more than 255 bytes */ v->ptr += cnt; if ( v->c == 0 ) { v->ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; v->c = ((u8x8_tile_t *)arg_ptr)->cnt; v->arg_int--; } if ( ((v->x) & 7) == 0 ) break; } } static const u8x8_display_info_t u8x8_ks0108_128x64_display_info = { /* chip_enable_level = */ 0, /* KS0108: Not used */ /* chip_disable_level = */ 1, /* KS0108: Not used */ /* post_chip_enable_wait_ns = */ 100, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* could be faster for the KS0108 */ /* sda_setup_time_ns = */ 12, /* sck_pulse_width_ns = */ 75, /* KS0108: Not used */ /* sck_clock_hz = */ 4000000UL, /* KS0108: Not used */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* KS0108: Not used */ /* data_setup_time_ns = */ 200, /* write_pulse_width_ns = */ 250, /* KS0108: actially 450 ns, but additional 200 ns are added by the byte transfer function */ /* tile_width = */ 16, /* width of 16*8=128 pixel */ /* tile_hight = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 64 }; uint8_t u8x8_d_ks0108_128x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { struct u8x8_ks0108_vars v; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ks0108_128x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 1, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_ks0108_init_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 0, NULL); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 2, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_ks0108_init_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 0, NULL); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) { u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 1, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_ks0108_powersave0_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 0, NULL); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 2, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_ks0108_powersave0_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 0, NULL); } else { u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 1, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_ks0108_powersave1_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 0, NULL); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 2, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_ks0108_powersave1_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 0, NULL); } break; // The KS0108 can not mirror the cols and rows, use U8g2 for rotation // case U8X8_MSG_DISPLAY_SET_FLIP_MODE: // break; // The KS0108 has no internal contrast command // case U8X8_MSG_DISPLAY_SET_CONTRAST: // break; case U8X8_MSG_DISPLAY_DRAW_TILE: v.ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; v.x = ((u8x8_tile_t *)arg_ptr)->x_pos; v.c = ((u8x8_tile_t *)arg_ptr)->cnt; v.arg_int = arg_int; if ( v.x < 8 ) { u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 1, NULL); u8x8_ks0108_out(u8x8, &v, arg_ptr); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 0, NULL); } if ( v.x < 16 ) { u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 2, NULL); u8x8_ks0108_out(u8x8, &v, arg_ptr); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 0, NULL); } //if ( v.x < 24 ) //{ //u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 4, NULL); //u8x8_ks0108_out(u8x8, &v, arg_ptr); //u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 0, NULL); //} break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_ks0108_192x64_display_info = { /* chip_enable_level = */ 0, /* KS0108: Not used */ /* chip_disable_level = */ 1, /* KS0108: Not used */ /* post_chip_enable_wait_ns = */ 100, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* could be faster for the KS0108 */ /* sda_setup_time_ns = */ 12, /* sck_pulse_width_ns = */ 75, /* KS0108: Not used */ /* sck_clock_hz = */ 4000000UL, /* KS0108: Not used */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* KS0108: Not used */ /* data_setup_time_ns = */ 200, /* write_pulse_width_ns = */ 250, /* KS0108: actially 450 ns, but additional 200 ns are added by the byte transfer function */ /* tile_width = */ 24, /* width of 24*8=192 pixel */ /* tile_hight = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 192, /* pixel_height = */ 64 }; /* east rising (buydisplay.com) ERM19264 */ /* left: 011, middle: 101, right: 110, no chip select: 111 */ uint8_t u8x8_d_ks0108_erm19264(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { struct u8x8_ks0108_vars v; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ks0108_192x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 3, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_ks0108_init_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 7, NULL); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 5, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_ks0108_init_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 7, NULL); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 6, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_ks0108_init_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 7, NULL); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) { u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 3, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_ks0108_powersave0_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 7, NULL); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 5, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_ks0108_powersave0_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 7, NULL); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 6, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_ks0108_powersave0_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 7, NULL); } else { u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 3, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_ks0108_powersave1_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 7, NULL); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 5, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_ks0108_powersave1_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 7, NULL); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 6, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_ks0108_powersave1_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 7, NULL); } break; // The KS0108 can not mirror the cols and rows, use U8g2 for rotation // case U8X8_MSG_DISPLAY_SET_FLIP_MODE: // break; // The KS0108 has no internal contrast command // case U8X8_MSG_DISPLAY_SET_CONTRAST: // break; case U8X8_MSG_DISPLAY_DRAW_TILE: v.ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; v.x = ((u8x8_tile_t *)arg_ptr)->x_pos; v.c = ((u8x8_tile_t *)arg_ptr)->cnt; v.arg_int = arg_int; /* 3-bit CS value: In u8x8_byte_set_ks0108_cs(u8x8_t *u8x8, uint8_t arg) the lowest bit is assigned to CS and highest bit if the 3-bit value to CS2 CS: left part of the display --> 6 CS1: middle part --> 5 CS2: right part of the display --> 3 Reference: https://github.com/olikraus/u8g2/issues/631 */ if ( v.x < 8 ) { u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 6, NULL); // 3-->6, issue 631 u8x8_ks0108_out(u8x8, &v, arg_ptr); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 7, NULL); } if ( v.x < 16 ) { u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 5, NULL); u8x8_ks0108_out(u8x8, &v, arg_ptr); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 7, NULL); } if ( v.x < 24 ) { u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 3, NULL); // 6-->3, // issue 631 u8x8_ks0108_out(u8x8, &v, arg_ptr); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 7, NULL); } break; default: return 0; } return 1; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_lc7981.c ================================================ /* u8x8_d_lc7981.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" /* no powersave mode for the LC7981 */ // static const uint8_t u8x8_d_lc7981_powersave0_seq[] = { // U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ // U8X8_END_TRANSFER(), /* disable chip */ // U8X8_END() /* end of sequence */ // }; // static const uint8_t u8x8_d_lc7981_powersave1_seq[] = { // U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ // U8X8_END_TRANSFER(), /* disable chip */ // U8X8_END() /* end of sequence */ // }; /* no hardware flip for the LC7981 */ // static const uint8_t u8x8_d_lc7981_flip0_seq[] = { // U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ // U8X8_END_TRANSFER(), /* disable chip */ // U8X8_END() /* end of sequence */ // }; // static const uint8_t u8x8_d_lc7981_flip1_seq[] = { // U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ // U8X8_END_TRANSFER(), /* disable chip */ // U8X8_END() /* end of sequence */ // }; /* http://graphics.stanford.edu/~seander/bithacks.html */ static uint8_t reverse_byte(uint8_t v) { // if ( v != 0 && v != 255 ) does not help much { // swap odd and even bits v = ((v >> 1) & 0x055) | ((v & 0x055) << 1); // swap consecutive pairs v = ((v >> 2) & 0x033) | ((v & 0x033) << 2); // swap nibbles ... v = ((v >> 4) & 0x00F) | ((v & 0x00F) << 4); } return v; } static uint8_t u8x8_d_lc7981_common(u8x8_t *u8x8, uint8_t msg, U8X8_UNUSED uint8_t arg_int, void *arg_ptr) { uint8_t c, i, j; uint16_t y; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: y = (((u8x8_tile_t *)arg_ptr)->y_pos); y*=8; y*= u8x8->display_info->tile_width; /* x = ((u8x8_tile_t *)arg_ptr)->x_pos; x is ignored... no u8x8 support */ u8x8_cad_StartTransfer(u8x8); /* Tile structure is reused here for the t6963, however u8x8 is not supported tile_ptr points to data which has cnt*8 bytes (same as SSD1306 tiles) Buffer is expected to have 8 lines of code fitting to the t6963 internal memory "cnt" includes the number of horizontal bytes. width is equal to cnt*8 x is assumed to be zero TODO: Consider arg_int, however arg_int is not used by u8g2 */ c = ((u8x8_tile_t *)arg_ptr)->cnt; /* number of tiles */ ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* data ptr to the tiles */ for( i = 0; i < 8; i++ ) { u8x8_cad_SendCmd(u8x8, 0x0a ); /* display ram (cursor) address low byte */ u8x8_cad_SendArg(u8x8, y&255); u8x8_cad_SendCmd(u8x8, 0x0b ); /* display ram (cursor) address high byte */ u8x8_cad_SendArg(u8x8, y>>8); u8x8_cad_SendCmd(u8x8, 0x0c ); /* write start */ /* The LC7981 has the MSB at the right position, which is exactly the opposite to the T6963. Instead of writing a third hvline procedure for this device, we just revert the bytes before transmit. This is slow because: - the bit reverse itself - the single byte transfer The one byte is transmitted via SendArg, which is ok, because CAD = 100 */ for( j = 0; j < c; j++ ) u8x8_cad_SendArg(u8x8, reverse_byte(*ptr++)); //u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes, send one line of data */ //ptr += u8x8->display_info->tile_width; y += u8x8->display_info->tile_width; } u8x8_cad_EndTransfer(u8x8); break; /* handled in the calling procedure case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_lc7981_128x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1701_dogs102_init_seq); break; */ /* power save is not there... case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_lc7981_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_lc7981_powersave1_seq); break; */ /* hardware flip not is not available case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_lc7981_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_lc7981_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; */ #ifdef U8X8_WITH_SET_CONTRAST /* no contrast setting :-( case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); u8x8_cad_EndTransfer(u8x8); break; */ #endif default: return 0; } return 1; } /*================================================*/ /* LC7981 160x80 LCD*/ static const u8x8_display_info_t u8x8_lc7981_160x80_display_info = { /* chip_enable_level = */ 0, /* LC7981 has a low active CS*/ /* chip_disable_level = */ 1, /* from here... */ /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 10, /* sda_setup_time_ns = */ 30, /* sck_pulse_width_ns = */ 65, /* half of cycle time */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* ... to here, values are ignored, because this is a parallel interface only */ /* data_setup_time_ns = */ 220, /* write_pulse_width_ns = */ 20, /* tile_width = */ 20, /* width of 20*8=160 pixel */ /* tile_hight = */ 10, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 160, /* pixel_height = */ 80 }; static const uint8_t u8x8_d_lc7981_160x80_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(50), U8X8_CA(0x00, 0x32), /* display on (bit 5), master mode on (bit 4), graphics mode on (bit 1) */ U8X8_CA(0x01, 0x07), /* character/bits per pixel pitch */ U8X8_CA(0x02, 160/8-1), /* number of chars/byte width of the screen */ U8X8_CA(0x03, 0x50), /* time division: 50 (1/80 duty cycle) */ U8X8_CA(0x08, 0x00), /* display start low */ U8X8_CA(0x09, 0x00), /* display start high */ U8X8_DLY(10), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_lc7981_160x80(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_lc7981_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_lc7981_160x80_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_lc7981_160x80_init_seq); break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* LC7981 160x160 LCD*/ static const u8x8_display_info_t u8x8_lc7981_160x160_display_info = { /* chip_enable_level = */ 0, /* LC7981 has a low active CS*/ /* chip_disable_level = */ 1, /* from here... */ /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 10, /* sda_setup_time_ns = */ 30, /* sck_pulse_width_ns = */ 65, /* half of cycle time */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* ... to here, values are ignored, because this is a parallel interface only */ /* data_setup_time_ns = */ 220, /* write_pulse_width_ns = */ 20, /* tile_width = */ 20, /* width of 20*8=160 pixel */ /* tile_hight = */ 20, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 160, /* pixel_height = */ 160 }; static const uint8_t u8x8_d_lc7981_160x160_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(50), U8X8_CA(0x00, 0x32), /* display on (bit 5), master mode on (bit 4), graphics mode on (bit 1) */ U8X8_CA(0x01, 0x07), /* character/bits per pixel pitch */ U8X8_CA(0x02, 160/8-1), /* number of chars/byte width of the screen */ U8X8_CA(0x03, 159), /* time division */ U8X8_CA(0x08, 0x00), /* display start low */ U8X8_CA(0x09, 0x00), /* display start high */ U8X8_DLY(10), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_lc7981_160x160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_lc7981_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_lc7981_160x160_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_lc7981_160x160_init_seq); break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* LC7981 240x128 LCD*/ static const u8x8_display_info_t u8x8_lc7981_240x128_display_info = { /* chip_enable_level = */ 0, /* LC7981 has a low active CS*/ /* chip_disable_level = */ 1, /* from here... */ /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 10, /* sda_setup_time_ns = */ 30, /* sck_pulse_width_ns = */ 65, /* half of cycle time */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* ... to here, values are ignored, because this is a parallel interface only */ /* data_setup_time_ns = */ 220, /* write_pulse_width_ns = */ 20, /* tile_width = */ 30, /* width of 30*8=240 pixel */ /* tile_hight = */ 16, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 240, /* pixel_height = */ 128 }; static const uint8_t u8x8_d_lc7981_240x128_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(50), U8X8_CA(0x00, 0x32), /* display on (bit 5), master mode on (bit 4), graphics mode on (bit 1) */ U8X8_CA(0x01, 0x07), /* character/bits per pixel pitch */ U8X8_CA(0x02, 240/8-1), /* number of chars/byte width of the screen */ U8X8_CA(0x03, 0x7f), /* time division */ U8X8_CA(0x08, 0x00), /* display start low */ U8X8_CA(0x09, 0x00), /* display start high */ U8X8_DLY(10), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_lc7981_240x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_lc7981_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_lc7981_240x128_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_lc7981_240x128_init_seq); break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* LC7981 240x64 LCD*/ /* https://github.com/olikraus/u8g2/issues/642 */ static const u8x8_display_info_t u8x8_lc7981_240x64_display_info = { /* chip_enable_level = */ 0, /* LC7981 has a low active CS*/ /* chip_disable_level = */ 1, /* from here... */ /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 10, /* sda_setup_time_ns = */ 30, /* sck_pulse_width_ns = */ 65, /* half of cycle time */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* ... to here, values are ignored, because this is a parallel interface only */ /* data_setup_time_ns = */ 220, /* write_pulse_width_ns = */ 20, /* tile_width = */ 30, /* width of 30*8=240 pixel */ /* tile_hight = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 240, /* pixel_height = */ 64 }; static const uint8_t u8x8_d_lc7981_240x64_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(50), U8X8_CA(0x00, 0x32), /* display on (bit 5), master mode on (bit 4), graphics mode on (bit 1) */ U8X8_CA(0x01, 0x07), /* character/bits per pixel pitch */ U8X8_CA(0x02, 240/8-1), /* number of chars/byte width of the screen */ U8X8_CA(0x03, 0x7f), /* time division */ U8X8_CA(0x08, 0x00), /* display start low */ U8X8_CA(0x09, 0x00), /* display start high */ U8X8_DLY(10), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_lc7981_240x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_lc7981_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_lc7981_240x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_lc7981_240x64_init_seq); break; default: return 0; /* msg unknown */ } } return 1; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_ld7032_60x32.c ================================================ /* u8x8_d_ld7032_60x32.c Note: Flip Mode is NOT supported Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" /* testboard U8GLIB_LD7032_60x32 u8g(11, 12, 9, 10, 8); // SPI Com: SCK = 11, MOSI = 12, CS = 9, A0 = 10, RST = 8 (SW SPI Nano Board) */ /* http://www.seeedstudio.com/document/pdf/0.5OLED%20SPEC.pdf */ static const uint8_t u8x8_d_ld7032_60x32_init_seq_old[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ //U8X8_CA(0x002, 0x001), /* Dot Matrix Display ON */ U8X8_CA(0x014, 0x000), /* Stand-by OFF */ U8X8_CA(0x01a, 0x004), /* Dot Matrix Frame Rate, special value for this OLED from manual*/ U8X8_CA(0x01d, 0x000), /* Graphics Memory Writing Direction: reset default (right down, horizontal) */ U8X8_CA(0x009, 0x000), /* Display Direction: reset default (x,y: min --> max) */ U8X8_CAA(0x030, 0x000, 0x03b), /* Display Size X, Column Start - End*/ U8X8_CAA(0x032, 0x000, 0x01f), /* Display Size Y, Row Start - End*/ U8X8_CA(0x010, 0x000), /* Peak Pulse Width Set: 0 SCLK */ U8X8_CA(0x016, 0x000), /* Peak Pulse Delay Set: 0 SCLK */ U8X8_CA(0x012, 0x040), /* Dot Matrix Current Level Set: 0x050 * 1 uA = 80 uA */ U8X8_CA(0x018, 0x003), /* Pre-Charge Pulse Width: 3 SCLK */ U8X8_CA(0x044, 0x002), /* Pre-Charge Mode: Every Time */ U8X8_CA(0x048, 0x003), /* Row overlap timing: Pre-Charge + Peak Delay + Peak boot Timing */ U8X8_CA(0x03f, 0x011), /* VCC_R_SEL: ??? */ U8X8_CA(0x03d, 0x000), /* VSS selection: 2.8V */ //U8X8_CA(0x002, 0x001), /* Dot Matrix Display ON */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* new sequence https://github.com/olikraus/u8g2/issues/865 */ static const uint8_t u8x8_d_ld7032_60x32_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x02, 0x00), /* Dot Matrix Display OFF */ U8X8_CA(0x14, 0x00), /* Stand-by OFF, OSCA Start */ U8X8_CA(0x1a, 0x04), /* Dot Matrix Frame Rate, special value for this OLED from manual 4 => 120Hz*/ U8X8_CA(0x1d, 0x00), /* Graphics Memory Writing Direction: reset default (right down, horizontal) */ U8X8_CA(0x09, 0x00), /* Display Direction: reset default (x,y: min --> max) */ U8X8_CAA(0x30, 0x00, 0x3B), /* Display Size X, Column Start - End 0-0x3b(59)*/ U8X8_CAA(0x32, 0x00, 0x1F), /* Display Size Y, Row Start - End 0-0x1f(31)*/ U8X8_CA(0x34, 0x00), /* Data Reading/Writing Box X start */ U8X8_CA(0x35, 0x07), /* Data Reading/Writing Box X end */ U8X8_CA(0x36, 0x00), /* Data Reading/Writing Box Y start */ U8X8_CA(0x37, 0x1F), /* Data Reading/Writing Box Y end */ U8X8_CA(0x38, 0x00), /* Display Start Address X */ U8X8_CA(0x39, 0x00), /* Display Start Address Y */ U8X8_CA(0x10, 0x00), /* Peak Pulse Width Set: 0 SCLK */ U8X8_CA(0x16, 0x00), /* Peak Pulse Delay Set: 0 SCLK */ U8X8_CA(0x12, 0x40), /* 0x32, 0x50 or 0x40 Dot Matrix Current Level Set: 0x050 * 1 uA = 80 uA */ U8X8_CA(0x18, 0x03), /* Pre-Charge Pulse Width: 3 SCLK */ U8X8_CA(0x44, 0x02), /* Pre-Charge Mode: Every Time */ U8X8_CA(0x48, 0x03), /* Row overlap timing: Pre-Charge + Peak Delay + Peak boot Timing */ U8X8_CA(0x17, 0x00), /* Row Scan */ U8X8_CA(0x13, 0x00), /* Row Scan Sequence Setting */ U8X8_CA(0x1C, 0x00), /* Data Reverse */ U8X8_CA(0x3f, 0x11), /* VCC_R_SEL: Internal Regulator enabled(D4=1) and VCC_R=VCC_C*0.7(D0=1) */ U8X8_CA(0x3d, 0x00), /* VSS selection: 2.8V */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ld7032_60x32_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x002, 0x001), /* Dot Matrix Display ON */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ld7032_60x32_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x002, 0x000), /* Dot Matrix Display ON */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ld7032_60x32_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x009, 0x000), /* Display Direction: reset default (x,y: min --> max) */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ld7032_60x32_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ //U8X8_CA(0x009, 0x002), /* Display Direction: reset default (x,y: min --> max) */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_ld7032_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ld7032_60x32_display_info); break; */ case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ld7032_60x32_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ld7032_60x32_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ld7032_60x32_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ld7032_60x32_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ld7032_60x32_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x012 ); if ( arg_int > 0x07f ) /* default is 0x040, limit to 0x07f to be on the safe side (hopefully) */ arg_int= 0x07f; u8x8_cad_SendArg(u8x8, arg_int ); /* values from 0x00 to 0x0ff are allowed, bit will all values be safe??? */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x += u8x8->x_offset/8; u8x8_cad_SendCmd(u8x8, 0x034 ); u8x8_cad_SendArg(u8x8, x ); u8x8_cad_SendCmd(u8x8, 0x035 ); u8x8_cad_SendArg(u8x8, 0x007 ); u8x8_cad_SendCmd(u8x8, 0x036 ); u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)*8 ); u8x8_cad_SendCmd(u8x8, 0x037 ); u8x8_cad_SendArg(u8x8, 0x01f ); u8x8_cad_SendCmd(u8x8, 0x008 ); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_ld7032_60x32_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 15, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /* sda_setup_time_ns = */ 30, /* 20ns, but cycle time is 60ns, so use 60/2 */ /* sck_pulse_width_ns = */ 30, /* 20ns, but cycle time is 60ns, so use 60/2 */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 20, /* write_pulse_width_ns = */ 40, /* tile_width = */ 8, /* tile_hight = */ 4, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 60, /* pixel_height = */ 32 }; uint8_t u8x8_d_ld7032_60x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ld7032_60x32_display_info); return 1; } return u8x8_d_ld7032_generic(u8x8, msg, arg_int, arg_ptr); } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_ls013b7dh03.c ================================================ /* u8x8_d_ls013b7dh03.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. The LS013B7DH02 is a simple display and controller --> no support for contrast adjustment, flip and power down. */ #include "u8x8.h" #define SWAP8(a) ((((a) & 0x80) >> 7) | (((a) & 0x40) >> 5) | (((a) & 0x20) >> 3) | (((a) & 0x10) >> 1) | (((a) & 0x08) << 1) | (((a) & 0x04) << 3) | (((a) & 0x02) << 5) | (((a) & 0x01) << 7)) #define LS013B7DH03_CMD_UPDATE (0x01) #define LS013B7DH03_CMD_ALL_CLEAR (0x04) #define LS013B7DH03_VAL_TRAILER (0x00) static const u8x8_display_info_t u8x8_ls013b7dh03_128x128_display_info = { /* chip_enable_level = */ 1, /* chip_disable_level = */ 0, /* post_chip_enable_wait_ns = */ 50, /* pre_chip_disable_wait_ns = */ 50, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 227, /* 227 nsec according to the datasheet */ /* sck_pulse_width_ns = */ 255, /* 450 nsec according to the datasheet */ /* sck_clock_hz = */ 1000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 2, /* active low, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 100, /* write_pulse_width_ns = */ 100, /* tile_width = */ 16, /* tile_hight = */ 16, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 128 }; uint8_t u8x8_d_ls013b7dh03_128x128(u8x8_t *u8x8, uint8_t msg, U8X8_UNUSED uint8_t arg_int, void *arg_ptr) { uint8_t y, c, i; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ls013b7dh03_128x128_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); /* clear screen */ u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, SWAP8(LS013B7DH03_CMD_ALL_CLEAR) ); u8x8_cad_SendCmd(u8x8, LS013B7DH03_VAL_TRAILER); u8x8_cad_EndTransfer(u8x8); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: /* not available for the ls013b7dh03 */ break; case U8X8_MSG_DISPLAY_DRAW_TILE: /* each tile is 8 lines, with the data starting at the left edge */ y = ((((u8x8_tile_t *)arg_ptr)->y_pos) * 8) + 1; c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* send data mode byte */ u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, SWAP8(LS013B7DH03_CMD_UPDATE) ); /* send 8 lines of 16 bytes (=128 pixels) */ for( i = 0; i < 8; i++ ) { u8x8_cad_SendCmd(u8x8, SWAP8(y + i) ); u8x8_cad_SendData(u8x8, c, ptr); u8x8_cad_SendCmd(u8x8, LS013B7DH03_VAL_TRAILER); ptr += c; } /* finish with a trailing byte */ u8x8_cad_SendCmd(u8x8, LS013B7DH03_VAL_TRAILER); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_ls027b7dh01_400x240_display_info = { /* chip_enable_level = */ 1, /* chip_disable_level = */ 0, /* post_chip_enable_wait_ns = */ 50, /* pre_chip_disable_wait_ns = */ 50, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 227, /* 227 nsec according to the datasheet */ /* sck_pulse_width_ns = */ 255, /* 450 nsec according to the datasheet */ /* sck_clock_hz = */ 1000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 2, /* active low, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 100, /* write_pulse_width_ns = */ 100, /* tile_width = */ 50, /* tile_hight = */ 30, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 400, /* pixel_height = */ 240 }; uint8_t u8x8_d_ls027b7dh01_400x240(u8x8_t *u8x8, uint8_t msg, U8X8_UNUSED uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ls027b7dh01_400x240_display_info); break; default: return u8x8_d_ls013b7dh03_128x128(u8x8, msg, arg_int, arg_ptr); } return 1; } static const u8x8_display_info_t u8x8_ls013b7dh05_144x168_display_info = { /* chip_enable_level = */ 1, /* chip_disable_level = */ 0, /* post_chip_enable_wait_ns = */ 50, /* pre_chip_disable_wait_ns = */ 50, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 227, /* 227 nsec according to the datasheet */ /* sck_pulse_width_ns = */ 255, /* 450 nsec according to the datasheet */ /* sck_clock_hz = */ 1000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 2, /* active low, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 100, /* write_pulse_width_ns = */ 100, /* tile_width = */ 18, /* tile_hight = */ 21, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 144, /* pixel_height = */ 168 }; uint8_t u8x8_d_ls013b7dh05_144x168(u8x8_t *u8x8, uint8_t msg, U8X8_UNUSED uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ls013b7dh05_144x168_display_info); break; default: return u8x8_d_ls013b7dh03_128x128(u8x8, msg, arg_int, arg_ptr); } return 1; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_max7219.c ================================================ /* u8x8_d_max7219.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2017, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_max7219_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(15, 0), /* test mode off */ U8X8_CA(15, 0), /* test mode off */ U8X8_CA(15, 0), /* test mode off */ U8X8_CA(15, 0), /* test mode off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(12, 0), /* */ U8X8_CA(12, 0), /* */ U8X8_CA(12, 0), /* */ U8X8_CA(12, 0), /* */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(9, 0), /* decode mode: graphics */ U8X8_CA(9, 0), /* decode mode: graphics */ U8X8_CA(9, 0), /* decode mode: graphics */ U8X8_CA(9, 0), /* decode mode: graphics */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(10, 10), /* medium high intensity */ U8X8_CA(10, 10), /* medium high intensity */ U8X8_CA(10, 10), /* medium high intensity */ U8X8_CA(10, 10), /* medium high intensity */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(11, 7), /* scan limit: display all digits (assuming a 8x8 matrix) */ U8X8_CA(11, 7), /* scan limit: display all digits (assuming a 8x8 matrix) */ U8X8_CA(11, 7), /* scan limit: display all digits (assuming a 8x8 matrix) */ U8X8_CA(11, 7), /* scan limit: display all digits (assuming a 8x8 matrix) */ U8X8_END_TRANSFER(), /* disable chip */ //U8X8_CA(12, 0), /* shutdown */ //U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_max7219_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(12, 1), /* display on */ U8X8_CA(12, 1), /* display on */ U8X8_CA(12, 1), /* display on */ U8X8_CA(12, 1), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_max7219_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(12, 0), /* shutdown */ U8X8_CA(12, 0), /* shutdown */ U8X8_CA(12, 0), /* shutdown */ U8X8_CA(12, 0), /* shutdown */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_max7219_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t c, j, i; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_pcf8812_96x65_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_max7219_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_max7219_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_max7219_powersave1_seq); break; */ /* not supported by MAX7219 case U8X8_MSG_DISPLAY_SET_FLIP_MODE: break; */ #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); for( i = 0; i < u8x8->display_info->tile_width; i++ ) { u8x8_cad_SendCmd(u8x8, 10 ); /* brightness */ u8x8_cad_SendArg(u8x8, (arg_int>>4) ); /* 0..15 for contrast */ } u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: /* transfer always has to start at x pos 0 (u8x8 is not supported) */ /* also y pos has to be 0 */ /* arg_int is ignored */ //x = ((u8x8_tile_t *)arg_ptr)->x_pos; c = ((u8x8_tile_t *)arg_ptr)->cnt; /* number of tiles */ ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* data ptr to the tiles */ for( i = 0; i < 8; i++ ) { u8x8_cad_StartTransfer(u8x8); for( j = 0; j < c; j++ ) { u8x8_cad_SendCmd(u8x8, i+1); u8x8_cad_SendArg(u8x8, *ptr ); ptr++; } u8x8_cad_EndTransfer(u8x8); } break; default: return 0; } return 1; } /*==============================*/ static const u8x8_display_info_t u8x8_max7219_32x8_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 100, /* pre_chip_disable_wait_ns = */ 100, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /* sda_setup_time_ns = */ 100, /* sck_pulse_width_ns = */ 100, /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* tile_width = */ 4, /* tile_hight = */ 1, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 32, /* pixel_height = */ 8 }; uint8_t u8x8_d_max7219_32x8(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY : u8x8_d_helper_display_setup_memory(u8x8, &u8x8_max7219_32x8_display_info); return 1; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_max7219_init_seq); return 1; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_max7219_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_max7219_powersave1_seq); return 1; } return u8x8_d_max7219_generic(u8x8, msg, arg_int, arg_ptr); } /*==============================*/ static const u8x8_display_info_t u8x8_max7219_8x8_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 100, /* pre_chip_disable_wait_ns = */ 100, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /* sda_setup_time_ns = */ 100, /* sck_pulse_width_ns = */ 100, /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* tile_width = */ 1, /* tile_hight = */ 1, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 8, /* pixel_height = */ 8 }; uint8_t u8x8_d_max7219_8x8(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY : u8x8_d_helper_display_setup_memory(u8x8, &u8x8_max7219_8x8_display_info); return 1; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_max7219_init_seq); return 1; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_max7219_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_max7219_powersave1_seq); return 1; } return u8x8_d_max7219_generic(u8x8, msg, arg_int, arg_ptr); } /*==============================*/ static const uint8_t u8x8_d_max7219_8_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(15, 0), /* test mode off */ U8X8_CA(15, 0), /* test mode off */ U8X8_CA(15, 0), /* test mode off */ U8X8_CA(15, 0), /* test mode off */ U8X8_CA(15, 0), /* test mode off */ U8X8_CA(15, 0), /* test mode off */ U8X8_CA(15, 0), /* test mode off */ U8X8_CA(15, 0), /* test mode off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(12, 0), /* */ U8X8_CA(12, 0), /* */ U8X8_CA(12, 0), /* */ U8X8_CA(12, 0), /* */ U8X8_CA(12, 0), /* */ U8X8_CA(12, 0), /* */ U8X8_CA(12, 0), /* */ U8X8_CA(12, 0), /* */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(9, 0), /* decode mode: graphics */ U8X8_CA(9, 0), /* decode mode: graphics */ U8X8_CA(9, 0), /* decode mode: graphics */ U8X8_CA(9, 0), /* decode mode: graphics */ U8X8_CA(9, 0), /* decode mode: graphics */ U8X8_CA(9, 0), /* decode mode: graphics */ U8X8_CA(9, 0), /* decode mode: graphics */ U8X8_CA(9, 0), /* decode mode: graphics */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(10, 10), /* medium high intensity */ U8X8_CA(10, 10), /* medium high intensity */ U8X8_CA(10, 10), /* medium high intensity */ U8X8_CA(10, 10), /* medium high intensity */ U8X8_CA(10, 10), /* medium high intensity */ U8X8_CA(10, 10), /* medium high intensity */ U8X8_CA(10, 10), /* medium high intensity */ U8X8_CA(10, 10), /* medium high intensity */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(11, 7), /* scan limit: display all digits (assuming a 8x8 matrix) */ U8X8_CA(11, 7), /* scan limit: display all digits (assuming a 8x8 matrix) */ U8X8_CA(11, 7), /* scan limit: display all digits (assuming a 8x8 matrix) */ U8X8_CA(11, 7), /* scan limit: display all digits (assuming a 8x8 matrix) */ U8X8_CA(11, 7), /* scan limit: display all digits (assuming a 8x8 matrix) */ U8X8_CA(11, 7), /* scan limit: display all digits (assuming a 8x8 matrix) */ U8X8_CA(11, 7), /* scan limit: display all digits (assuming a 8x8 matrix) */ U8X8_CA(11, 7), /* scan limit: display all digits (assuming a 8x8 matrix) */ U8X8_END_TRANSFER(), /* disable chip */ //U8X8_CA(12, 0), /* shutdown */ //U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_max7219_8_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(12, 1), /* display on */ U8X8_CA(12, 1), /* display on */ U8X8_CA(12, 1), /* display on */ U8X8_CA(12, 1), /* display on */ U8X8_CA(12, 1), /* display on */ U8X8_CA(12, 1), /* display on */ U8X8_CA(12, 1), /* display on */ U8X8_CA(12, 1), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_max7219_8_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(12, 0), /* shutdown */ U8X8_CA(12, 0), /* shutdown */ U8X8_CA(12, 0), /* shutdown */ U8X8_CA(12, 0), /* shutdown */ U8X8_CA(12, 0), /* shutdown */ U8X8_CA(12, 0), /* shutdown */ U8X8_CA(12, 0), /* shutdown */ U8X8_CA(12, 0), /* shutdown */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_max7219_64x8_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 100, /* pre_chip_disable_wait_ns = */ 100, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /* sda_setup_time_ns = */ 100, /* sck_pulse_width_ns = */ 100, /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* tile_width = */ 8, /* tile_hight = */ 1, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 64, /* pixel_height = */ 8 }; uint8_t u8x8_d_max7219_64x8(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY : u8x8_d_helper_display_setup_memory(u8x8, &u8x8_max7219_64x8_display_info); return 1; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_max7219_8_init_seq); return 1; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_max7219_8_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_max7219_8_powersave1_seq); return 1; } return u8x8_d_max7219_generic(u8x8, msg, arg_int, arg_ptr); } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_pcd8544_84x48.c ================================================ /* u8x8_d_pcd8544_84x48.c (so called "Nokia 5110" displays) Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_pcd8544_84x48_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x021), /* activate chip (PD=0), horizontal increment (V=0), enter extended command set (H=1) */ U8X8_C(0x006), /* temp. control: b10 = 2 */ U8X8_C(0x013), /* bias system 1:48 */ U8X8_C(0x0c0), /* medium Vop */ U8X8_C(0x020), /* activate chip (PD=0), horizontal increment (V=0), enter normal command set (H=0) */ U8X8_C(0x008), /* blank */ U8X8_C(0x024), /* power down (PD=1), horizontal increment (V=0), enter normal command set (H=0) */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_pcd8544_84x48_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x020), /* activate chip (PD=0), horizontal increment (V=0), enter normal command set (H=0) */ U8X8_C(0x00c), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_pcd8544_84x48_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x020), /* activate chip (PD=0), horizontal increment (V=0), enter normal command set (H=0) */ U8X8_C(0x008), /* blank */ U8X8_C(0x024), /* power down (PD=1), horizontal increment (V=0), enter normal command set (H=0) */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_pcd8544_84x48_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 5, /* pre_chip_disable_wait_ns = */ 5, /* reset_pulse_width_ms = */ 2, /* post_reset_wait_ms = */ 2, /* sda_setup_time_ns = */ 12, /* sck_pulse_width_ns = */ 75, /* half of cycle time (100ns according to datasheet), AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* write_pulse_width_ns = */ 40, /* tile_width = */ 11, /* width of 11*8=88 pixel */ /* tile_hight = */ 6, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 84, /* pixel_height = */ 48 }; uint8_t u8x8_d_pcd8544_84x48(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_pcd8544_84x48_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_pcd8544_84x48_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_pcd8544_84x48_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_pcd8544_84x48_powersave1_seq); break; // case U8X8_MSG_DISPLAY_SET_FLIP_MODE: // break; NOT SUPPORTED #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x021 ); /* command mode, extended function set */ u8x8_cad_SendCmd(u8x8, 0x080 | (arg_int >> 1) ); u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x020 ); /* activate chip (PD=0), horizontal increment (V=0), enter normal command set (H=0) */ u8x8_cad_SendCmd(u8x8, 0x080 | (x) ); /* set X address */ u8x8_cad_SendCmd(u8x8, 0x040 | (((u8x8_tile_t *)arg_ptr)->y_pos) ); /* set Y address */ ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; do { if ( c + x > 84u ) { if ( x >= 84u ) break; c = 84u; c -= x; } u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ x += c; arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_pcf8812.c ================================================ /* u8x8_d_pcf8812.c pcf8812: 65x102 pcf8814: 65x96 Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2017, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_pcf8812_96x65_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x020), /* activate chip (PD=0), horizontal increment (V=0), enter normal command set (H=0) */ U8X8_C(0x008), /* blank display */ U8X8_C(0x021), /* activate chip (PD=0), horizontal increment (V=0), enter extended command set (H=1) */ U8X8_C(0x006), /* temp. control: b10 = 2 */ U8X8_C(0x013), /* bias system, 0x010..0x07 1:48 */ U8X8_C(0x09f), /* contrast setting, 0..127 */ //U8X8_CA(0x020 | 2, 0x080 | 0), /* contrast setting, pcf8814 */ U8X8_C(0x024), /* deactivate chip (PD=1), horizontal increment (V=0), enter normal command set (H=0) */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_pcf8812_96x65_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x020), /* power on */ U8X8_C(0x00c), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_pcf8812_96x65_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x020), /* power on */ U8X8_C(0x008), /* blank display */ U8X8_C(0x024), /* power down */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_pcf8812_96x65_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_pcf8812_96x65_display_info); break; */ case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_pcf8812_96x65_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_pcf8812_96x65_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_pcf8812_96x65_powersave1_seq); break; /* case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_pcf8812_96x65_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_pcf8812_96x65_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; */ #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x021 ); /* command mode, extended function set */ u8x8_cad_SendArg(u8x8, (arg_int>>1)|0x80 ); /* 0..127 for contrast */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x020 ); /* activate chip (PD=0), horizontal increment (V=0), enter normal command set (H=0) */ u8x8_cad_SendCmd(u8x8, 0x080 | x); u8x8_cad_SendCmd(u8x8, 0x040 | ((u8x8_tile_t *)arg_ptr)->y_pos); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ /* do { u8x8_cad_SendData(u8x8, 8, ptr); ptr += 8; c--; } while( c > 0 ); */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_pcf8812_96x65_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 100, /* pre_chip_disable_wait_ns = */ 100, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /* sda_setup_time_ns = */ 100, /* sck_pulse_width_ns = */ 100, /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* tile_width = */ 12, /* tile_hight = */ 9, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 96, /* pixel_height = */ 65 }; uint8_t u8x8_d_pcf8812_96x65(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_pcf8812_96x65_display_info); return 1; } return u8x8_d_pcf8812_96x65_generic(u8x8, msg, arg_int, arg_ptr); } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_pcf8814_hx1230.c ================================================ /* u8x8_d_pcf8814_hc1230.c pcf8814: 65x96 hx1230: 68x96 pcf8814 and hc1230 are almost identical. Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2017, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_hx1230_96x68_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x020), /* power off */ U8X8_C(0x080), /* contrast setting, 0..31, set to 0 */ U8X8_C(0x0a6), /* not inverted display */ U8X8_C(0x0a4), /* normal display mode */ U8X8_C(0x0a0), /* */ U8X8_C(0x0c0), /* */ U8X8_C(0x040), /* start at scanline 0 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_hx1230_96x68_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x02f), /* power on */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_hx1230_96x68_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* All pixels on = powersave */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_hx1230_96x68_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* */ U8X8_C(0x0c0), /* */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_hx1230_96x68_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* */ U8X8_C(0x0c8), /* */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_hx1230_96x68_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_hx1230_96x68_display_info); break; */ case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_hx1230_96x68_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_hx1230_96x68_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_hx1230_96x68_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_hx1230_96x68_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_hx1230_96x68_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, (arg_int>>3)|0x80 ); /* 0..31 for contrast */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, x&15); u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4)); u8x8_cad_SendCmd(u8x8, 0x0b0 | ((u8x8_tile_t *)arg_ptr)->y_pos); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_hx1230_96x68_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 100, /* pre_chip_disable_wait_ns = */ 100, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /* sda_setup_time_ns = */ 100, /* sck_pulse_width_ns = */ 100, /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* tile_width = */ 12, /* tile_hight = */ 9, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 96, /* pixel_height = */ 68 }; uint8_t u8x8_d_hx1230_96x68(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_hx1230_96x68_display_info); return 1; } return u8x8_d_hx1230_96x68_generic(u8x8, msg, arg_int, arg_ptr); } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_sbn1661.c ================================================ /* u8x8_d_sbn1661.c SED1520 / SBN1661 122x32 5V LCD Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_sbn1661_init_seq[] = { U8X8_C(0x0c0), /* display start at line 0 */ U8X8_C(0x0a0), /* a0: ADC forward, a1: ADC reverse */ U8X8_C(0x0a4), /* a4: normal driving, a5: power save */ U8X8_C(0x0a9), /* a8: 1/16, a9: 1/32 duty */ //U8X8_C(0x0af), /* display on */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sbn1661_powersave0_seq[] = { U8X8_C(0x0af), /* display on */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sbn1661_powersave1_seq[] = { U8X8_C(0x0ae), /* display off */ U8X8_END() /* end of sequence */ }; struct u8x8_sbn1661_vars { uint8_t *ptr; uint8_t x; uint8_t c; uint8_t arg_int; }; #ifdef NOT_USED static void u8x8_sbn1661_out(u8x8_t *u8x8, struct u8x8_sbn1661_vars *v, void *arg_ptr) { uint8_t cnt; u8x8_cad_SendCmd(u8x8, 0x000 | ((v->x << 3) & 63) ); u8x8_cad_SendCmd(u8x8, 0x0b8 | (((u8x8_tile_t *)arg_ptr)->y_pos)); while( v->arg_int > 0 ) { /* calculate tiles to next boundary (end or chip limit) */ cnt = v->x; cnt += 8; cnt &= 0x0f8; cnt -= v->x; if ( cnt > v->c ) cnt = v->c; /* of course we still could use cnt=1 here... */ /* but setting cnt to 1 is not very efficient */ //cnt = 1; v->x +=cnt; v->c-=cnt; cnt<<=3; u8x8_cad_SendData(u8x8, cnt, v->ptr); /* note: SendData can not handle more than 255 bytes */ v->ptr += cnt; if ( v->c == 0 ) { v->ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; v->c = ((u8x8_tile_t *)arg_ptr)->cnt; v->arg_int--; } if ( ((v->x) & 7) == 0 ) break; } } #endif /* NOT_USED */ static const u8x8_display_info_t u8x8_sbn1661_122x32_display_info = { /* chip_enable_level = */ 0, /* sbn1661: Not used */ /* chip_disable_level = */ 1, /* sbn1661: Not used */ /* post_chip_enable_wait_ns = */ 100, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* */ /* sda_setup_time_ns = */ 12, /* sck_pulse_width_ns = */ 75, /* sbn1661: Not used */ /* sck_clock_hz = */ 4000000UL, /* sbn1661: Not used */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* sbn1661: Not used */ /* data_setup_time_ns = */ 200, /* write_pulse_width_ns = */ 200, /* */ /* tile_width = */ 16, /* width of 16*8=128 pixel */ /* tile_hight = */ 4, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 122, /* pixel_height = */ 32 }; uint8_t u8x8_d_sbn1661_122x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t *ptr; //uint8_t x; //uint8_t c; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sbn1661_122x32_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 0, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_sbn1661_init_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 0, NULL); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 1, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_sbn1661_init_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 1, NULL); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) { u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 0, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_sbn1661_powersave0_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 0, NULL); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 1, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_sbn1661_powersave0_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 1, NULL); } else { u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 0, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_sbn1661_powersave1_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 0, NULL); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 1, NULL); u8x8_cad_SendSequence(u8x8, u8x8_d_sbn1661_powersave1_seq); u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 1, NULL); } break; case U8X8_MSG_DISPLAY_DRAW_TILE: ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; // x and c are ignored (u8g2 only) //x = ((u8x8_tile_t *)arg_ptr)->x_pos; //c = ((u8x8_tile_t *)arg_ptr)->cnt; u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 0, NULL); u8x8_cad_SendCmd(u8x8, 0x000 | 0); // column 0 u8x8_cad_SendCmd(u8x8, 0x0b8 | (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendData(u8x8, 61, ptr); /* note: SendData can not handle more than 255 bytes */ u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 0, NULL); ptr += 61; u8x8->cad_cb(u8x8, U8X8_MSG_CAD_START_TRANSFER, 1, NULL); u8x8_cad_SendCmd(u8x8, 0x000 | 0); // column 0 u8x8_cad_SendCmd(u8x8, 0x0b8 | (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendData(u8x8, 61, ptr); /* note: SendData can not handle more than 255 bytes */ u8x8->cad_cb(u8x8, U8X8_MSG_CAD_END_TRANSFER, 1, NULL); break; default: return 0; } return 1; } uint8_t u8x8_d_sed1520_122x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { return u8x8_d_sbn1661_122x32(u8x8, msg, arg_int, arg_ptr); } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_sed1330.c ================================================ /* u8x8_d_sed1330.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. The device might also work with the RA8835, SED1335 and SED1336 controller. The following devices might be compatible: RA8835 SED1330 SED1335 S1D13700 */ #include "u8x8.h" static const uint8_t u8x8_d_sed1330_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x040, 0x030), /* sys init (0x040) with one arg, where 0x030 is a wild guess */ U8X8_CA(0x059, 0x004), /* send display on command (hex 0x059, see p37 ) */ /* display cmd has one arg: 01010100 should enable all three blocks, but disable the cursor*/ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sed1330_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x058, 0x000), /* send display off command (hex 0x059, see p37) and turn of all banks */ /* maybe send a sleep in cmd */ //U8X8_C(0x053) /* sleep in: 0x053 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_sed1330_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t c, i; uint16_t y; uint8_t *ptr; switch(msg) { /* U8X8_MSG_DISPLAY_SETUP_MEMORY is handled by the calling function */ /* case U8X8_MSG_DISPLAY_SETUP_MEMORY: break; case U8X8_MSG_DISPLAY_INIT: break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_sed1330_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_sed1330_powersave1_seq); break; case U8X8_MSG_DISPLAY_DRAW_TILE: y = (((u8x8_tile_t *)arg_ptr)->y_pos); y*=8; y*= u8x8->display_info->tile_width; u8x8_cad_StartTransfer(u8x8); c = ((u8x8_tile_t *)arg_ptr)->cnt; /* number of tiles */ ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* data ptr to the tiles */ for( i = 0; i < 8; i++ ) { u8x8_cad_SendCmd(u8x8, 0x046 ); /* CSRW command*/ u8x8_cad_SendArg(u8x8, y&255); /* CSRW low adr byte */ u8x8_cad_SendArg(u8x8, y>>8); /* CSRW high adr byte */ u8x8_cad_SendCmd(u8x8, 0x042 ); /* MWRITE */ u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes, send one line of data */ ptr += u8x8->display_info->tile_width; y += u8x8->display_info->tile_width; } /* sometimes the display switches off... so just sent a display on command */ u8x8_cad_SendCmd(u8x8, 0x059 ); /* display on */ u8x8_cad_SendArg(u8x8, 0x004); /* arg for display on */ u8x8_cad_EndTransfer(u8x8); //u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, 200, NULL); /* extra dely required */ break; default: return 0; } return 1; } /*=============================================*/ static const u8x8_display_info_t u8x8_sed1330_240x128_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 30, /* G242CX Datasheet p5 */ /* pre_chip_disable_wait_ns = */ 10, /* G242CX Datasheet p5 */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 20, /* sck_pulse_width_ns = */ 140, /* sck_clock_hz = */ 1000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 120, /* G242CX Datasheet p5 */ /* write_pulse_width_ns = */ 220, /* G242CX Datasheet p5 */ /* tile_width = */ 0x01e, /* tile_hight = */ 16, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 240, /* pixel_height = */ 128 }; /* 240x128 Seiko G242C */ static const uint8_t u8x8_d_sed1330_240x128_init_seq[] = { U8X8_DLY(100), U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(100), /* system init command, see also u8x8_d_sed1330_powersave0_seq */ U8X8_CA(0x040, 0x030), /* sys init (0x040) with one arg, where 0x030 is a wild guess */ /* system init has total 8 parameters, so 7 more are here */ U8X8_A(0x087), /* no idea here... WF (topmost bit) is set to one because it is suggested in the datasheet, lowest 3 bits refer to text mode only */ U8X8_A(0x007), /* FY: height of a char+1, does not matter here (hopefully), because we use graphics mode only */ U8X8_A(0x01d), /* C/R: this could be the number of horizontal bytes - 1 (Value confirmed with app notes p41) */ U8X8_A(0x050), /* TC/R: According to app notes fOSC=6Mhz fFF=70Hz --> TC/R = 74d*/ U8X8_A(0x080), /* L/F: Lines per frame - 1, probably this is the height of the display - 1 (value confirmed with app notes p41)*/ U8X8_A(0x01e), /* Low byte of the virtual screen size. (Value confirmed with app notes p41) */ U8X8_A(0), /* High byte of the virtual screen size, see also section 9.1.2 */ U8X8_C(0x044), /* SCROLL */ U8X8_A(0x000), U8X8_A(0x000), U8X8_A(0x080), U8X8_A(0x000), U8X8_A(0x040), U8X8_A(0x080), U8X8_A(0x000), U8X8_A(0x000), U8X8_A(0x000), U8X8_A(0x000), U8X8_CA(0x05a, 0), /* HDOT SCR: Horizontal dotwise scroll... set to 0 */ U8X8_CA(0x05b, 0x0c), /* OVLAY: 2-layer, all graphics, OR between layer 1 and 2 */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_DLY(100), }; /* RA8835 NHD-240128BZ */ static const uint8_t u8x8_d_rh8835_nhd_240128_init_seq[] = { U8X8_DLY(100), U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(100), /* system init command, see also u8x8_d_sed1330_powersave0_seq */ U8X8_CA(0x040, 0x030), /* sys init (0x040) with one arg, where 0x030 is a wild guess */ /* system init has total 8 parameters, so 7 more are here */ U8X8_A(0x087), /* no idea here... WF (topmost bit) is set to one because it is suggested in the datasheet, lowest 3 bits refer to text mode only */ U8X8_A(0x007), /* FY: height of a char+1, does not matter here (hopefully), because we use graphics mode only */ U8X8_A(0x01d), /* C/R: this could be the number of horizontal bytes - 1 (Value confirmed with app notes p41) */ U8X8_A(0x050), /* TC/R: According to app notes fOSC=6Mhz fFF=70Hz --> TC/R = 74d*/ U8X8_A(0x080), /* L/F: Lines per frame - 1, probably this is the height of the display - 1 (value confirmed with app notes p41)*/ U8X8_A(0x01e), /* Low byte of the virtual screen size. (Value confirmed with app notes p41) */ U8X8_A(0), /* High byte of the virtual screen size, see also section 9.1.2 */ U8X8_C(0x044), /* SCROLL */ U8X8_A(0x000), U8X8_A(0x000), U8X8_A(0x080), U8X8_A(0x000), U8X8_A(0x040), U8X8_A(0x080), U8X8_A(0x000), U8X8_A(0x000), U8X8_A(0x000), U8X8_A(0x000), //U8X8_CA(0x05a, 0), /* HDOT SCR: Horizontal dotwise scroll... set to 0 */ U8X8_CA(0x05b, 0x0c), /* OVLAY: 2-layer, all graphics, OR between layer 1 and 2 */ //U8X8_CA(0x059, 0x04), /* send display on command (hex 0x059, see p37 ) */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_DLY(100), }; uint8_t u8x8_d_sed1330_240x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sed1330_240x128_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sed1330_240x128_init_seq); break; default: return u8x8_d_sed1330_common(u8x8, msg, arg_int, arg_ptr); } return 1; } uint8_t u8x8_d_ra8835_nhd_240x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sed1330_240x128_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_rh8835_nhd_240128_init_seq); break; default: return u8x8_d_sed1330_common(u8x8, msg, arg_int, arg_ptr); } return 1; } /*=============================================*/ static const u8x8_display_info_t u8x8_sed1330_320x240_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 30, /* G242CX Datasheet p5 */ /* pre_chip_disable_wait_ns = */ 10, /* G242CX Datasheet p5 */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 20, /* sck_pulse_width_ns = */ 140, /* sck_clock_hz = */ 1000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 120, /* G242CX Datasheet p5 */ /* write_pulse_width_ns = */ 220, /* G242CX Datasheet p5 */ /* tile_width = */ 40, /* tile_hight = */ 30, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 320, /* pixel_height = */ 240 }; static const uint8_t u8x8_d_sed1330_320x240_init_seq[] = { U8X8_DLY(100), U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(100), /* system init command, see also u8x8_d_sed1330_powersave0_seq */ U8X8_CA(0x040, 0x030), /* sys init (0x040) with one arg, where 0x030 is a wild guess */ /* system init has total 8 parameters, so 7 more are here */ U8X8_A(0x087), /* no idea here... WF (topmost bit) is set to one because it is suggested in the datasheet, lowest 3 bits refer to text mode only */ U8X8_A(0x007), /* FY: height of a char+1, does not matter here (hopefully), because we use graphics mode only */ U8X8_A(0x027), /* 40-1 */ /* C/R: this could be the number of horizontal bytes - 1 (Value confirmed with app notes p41) */ U8X8_A(0x039), /* TC/R: According to app notes fOSC=6Mhz fFF=70Hz --> TC/R = 74d*/ U8X8_A(0x0ef), /* L/F: Lines per frame - 1, probably this is the height of the display - 1 (value confirmed with app notes p41)*/ U8X8_A(0x028), /* Low byte of the virtual screen size. (Value confirmed with app notes p41) */ U8X8_A(0), /* High byte of the virtual screen size, see also section 9.1.2 */ U8X8_C(0x044), /* SCROLL */ U8X8_A(0x000), U8X8_A(0x000), U8X8_A(0x0ef), U8X8_A(0x0b0), U8X8_A(0x004), U8X8_A(0x0ef), U8X8_A(0x000), U8X8_A(0x000), U8X8_A(0x000), U8X8_A(0x000), U8X8_CA(0x05a, 0), /* HDOT SCR: Horizontal dotwise scroll... set to 0 */ U8X8_CA(0x05b, 0x0c), /* OVLAY: 2-layer, all graphics, OR between layer 1 and 2 */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_DLY(100), }; uint8_t u8x8_d_ra8835_320x240(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sed1330_320x240_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sed1330_320x240_init_seq); break; default: return u8x8_d_sed1330_common(u8x8, msg, arg_int, arg_ptr); } return 1; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_sh1106_64x32.c ================================================ /* u8x8_d_sh1106_64x32.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2018, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" /* issue 568 */ static const uint8_t u8x8_d_sh1106_64x32_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x080), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0a8, 0x01f), /* multiplex ratio, 0.42 OLED */ U8X8_CA(0x0d3, 0x000), /* display offset, 0.42 OLED */ U8X8_C(0x040), /* set display start line to 0, 0.42 OLED */ U8X8_CA(0xad, 0x8b), /* DC-DC ON/OFF Mode Set: Built-in DC-DC is used, Normal Display (POR = 0x8b) */ U8X8_C(0x33), /* set charge pump voltage 0x30 (POR) .. 0x33 */ U8X8_CA(0x020, 0x000), /* page addressing mode */ U8X8_C(0x0a1), /* segment remap a0/a1, 0.66 OLED */ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse, 0.66 OLED */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5), 0.66 OLED */ U8X8_CA(0x081, 0x080), /* [2] set contrast control, 0.42 OLED datasheet: 0xcf */ U8X8_CA(0x0d9, 0x022), /* [2] pre-charge period 0x022/f1, 0.42 OLED datasheet: 0x22 */ U8X8_CA(0x0db, 0x028), /* vcomh deselect level, 0.42 OLED datasheet: 0x00 */ U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sh1106_64x32_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sh1106_64x32_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sh1106_64x32_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0d3, 0), /* display offset, 0.42 OLED */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sh1106_64x32_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0d3, 0), /* What is the correct offset in flip 1 mode? --> Issue 547 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_sh1106_64x32_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sh1106_64x32_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1106_64x32_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_sh1106_64x32_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_sh1106_64x32_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_sh1106_64x32_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_sh1106_64x32_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1306 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /* copied from SSD1306 */ static const u8x8_display_info_t u8x8_sh1106_64x32_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns, increased to 8MHz (issue 215) */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 8, /* tile_hight = */ 4, /* default_x_offset = */ 32, /* flipmode_x_offset = */ 36, /* pixel_width = */ 64, /* pixel_height = */ 32 }; uint8_t u8x8_d_sh1106_64x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sh1106_64x32_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1106_64x32_init_seq); return 1; } return u8x8_d_sh1106_64x32_generic(u8x8, msg, arg_int, arg_ptr); } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_sh1106_72x40.c ================================================ /* u8x8_d_sh1106_72x40.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2018, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" /* WiseChip 0.42 OLED, issue 547 */ static const uint8_t u8x8_d_sh1106_72x40_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x080), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0a8, 0x027), /* multiplex ratio, 0.42 OLED */ U8X8_CA(0x0d3, 0x00c), /* display offset, 0.42 OLED */ U8X8_C(0x040), /* set display start line to 0, 0.42 OLED */ U8X8_CA(0xad, 0x8b), /* DC-DC ON/OFF Mode Set: Built-in DC-DC is used, Normal Display (POR = 0x8b) */ U8X8_C(0x33), /* set charge pump voltage 0x30 (POR) .. 0x33 */ U8X8_CA(0x020, 0x000), /* page addressing mode */ U8X8_C(0x0a1), /* segment remap a0/a1, 0.66 OLED */ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse, 0.66 OLED */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5), 0.66 OLED */ U8X8_CA(0x081, 0x080), /* [2] set contrast control, 0.42 OLED datasheet: 0xcf */ U8X8_CA(0x0d9, 0x022), /* [2] pre-charge period 0x022/f1, 0.42 OLED datasheet: 0x22 */ U8X8_CA(0x0db, 0x028), /* vcomh deselect level, 0.42 OLED datasheet: 0x00 */ U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sh1106_72x40_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sh1106_72x40_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sh1106_72x40_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0d3, 12), /* display offset, 0.42 OLED */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sh1106_72x40_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0d3, 52), /* What is the correct offset in flip 1 mode? --> Issue 547 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_sh1106_72x40_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sh1106_72x40_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1106_72x40_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_sh1106_72x40_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_sh1106_72x40_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_sh1106_72x40_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_sh1106_72x40_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1306 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /* copied from SSD1306 */ static const u8x8_display_info_t u8x8_sh1106_72x40_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns, increased to 8MHz (issue 215) */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 9, /* tile_hight = */ 5, /* default_x_offset = */ 30, /* flipmode_x_offset = */ 30, /* pixel_width = */ 72, /* pixel_height = */ 40 }; /* WiseChip 0.42" OLED */ uint8_t u8x8_d_sh1106_72x40_wise(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sh1106_72x40_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1106_72x40_init_seq); return 1; } return u8x8_d_sh1106_72x40_generic(u8x8, msg, arg_int, arg_ptr); } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_sh1107.c ================================================ /* u8x8_d_sh1107.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2017, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" /* code copyied from SSD1306 */ static const uint8_t u8x8_d_sh1107_64x128_noname_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sh1107_64x128_noname_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sh1107_64x128_noname_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sh1107_64x128_noname_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_sh1107_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sh1107_64x128_noname_display_info); break; */ /* handled by the calling function case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1107_64x128_noname_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_sh1107_64x128_noname_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_sh1107_64x128_noname_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_sh1107_64x128_noname_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_sh1107_64x128_noname_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* sh1107 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; //u8x8_cad_SendCmd(u8x8, 0x040 ); /* set line offset to 0 */ // set column address u8x8_cad_SendCmd(u8x8, 0x010 | (x >> 4)); u8x8_cad_SendCmd(u8x8, 0x000 | ((x & 15))); /* probably wrong, should be SendCmd */ // set page address u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); /* probably wrong, should be SendCmd */ do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ /* do { u8x8_cad_SendData(u8x8, 8, ptr); ptr += 8; c--; } while( c > 0 ); */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*==================================================*/ /* QG-6428TSWKG01 */ static const uint8_t u8x8_d_sh1107_64x128_noname_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0dc, 0x000), /* start line */ U8X8_CA(0x081, 0x02f), /* [2] set contrast control */ U8X8_C(0x020), /* use page addressing mode */ // U8X8_C(0x0a1), /* segment remap a0/a1*/ // U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ // Flipmode U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0a8, 0x7f), /* 0x03f) multiplex ratio */ U8X8_CA(0x0d3, 0x060), /* display offset */ U8X8_CA(0x0d5, 0x051), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0d9, 0x022), /* [2] pre-charge period 0x022/f1*/ U8X8_CA(0x0db, 0x035), /* vcomh deselect level */ U8X8_C(0x0b0), /* set page address */ U8X8_CA(0x0da, 0x012), /* set com pins */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_sh1107_64x128_noname_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* sh1107: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* sh1107: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* sh1107: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* sh1107: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 8, /* tile_height = */ 16, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 64, /* pixel_height = */ 128 }; uint8_t u8x8_d_sh1107_64x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_sh1107_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1107_64x128_noname_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sh1107_64x128_noname_display_info); break; default: return 0; } return 1; } /*==================================================*/ /* init sequence from Grove OLED 96x96 */ static const uint8_t u8x8_d_sh1107_seeed_96x96_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x050), /* clock divide ratio (0x00=1) and oscillator frequency (0x5) */ U8X8_C(0x020), /* use page addressing mode */ //U8X8_CA(0x0a8, 0x03f), /* multiplex ratio */ U8X8_CA(0x0d3, 0x000), /* display offset */ U8X8_CA(0x0dc, 0x000), /* start line */ //U8X8_CA(0x020, 0x000), /* page addressing mode */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ //U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */ U8X8_CA(0x081, 0x080), /* [2] set contrast control */ U8X8_CA(0x0ad, 0x080), /* */ U8X8_CA(0x0d9, 0x01f), /* [2] pre-charge period 0x022/f1*/ U8X8_CA(0x0db, 0x027), /* vcomh deselect level */ // if vcomh is 0, then this will give the biggest range for contrast control issue #98 // restored the old values for the noname constructor, because vcomh=0 will not work for all OLEDs, #116 //U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_sh1107_seeed_96x96_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 100, /* cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 100, /* cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* sh1107: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 12, /* tile_hight = */ 12, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 96, /* pixel_height = */ 96 }; uint8_t u8x8_d_sh1107_seeed_96x96(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_sh1107_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1107_seeed_96x96_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sh1107_seeed_96x96_display_info); break; default: return 0; } return 1; } /*==================================================*/ /* 128x128 OLED: this display has a very strange x offset */ /* sequence taken over from 64x128 sequence, because it seems to work mostly */ static const uint8_t u8x8_d_sh1107_128x128_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0dc, 0x000), /* start line */ U8X8_CA(0x081, 0x02f), /* [2] set contrast control */ U8X8_C(0x020), /* use page addressing mode */ // U8X8_C(0x0a1), /* segment remap a0/a1*/ // U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ // Flipmode U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0a8, 0x7f), /* 0x03f multiplex ratio */ //U8X8_CA(0x0d3, 0x060), /* display offset (removed, not in datasheet ) */ U8X8_CA(0x0d5, 0x050), /* clock divide ratio (0x00=1) and oscillator frequency (0x8), changed to 0x051, issue 501 */ U8X8_CA(0x0d9, 0x022), /* [2] pre-charge period 0x022/f1*/ U8X8_CA(0x0db, 0x035), /* vcomh deselect level */ U8X8_C(0x0b0), /* set page address */ U8X8_CA(0x0da, 0x012), /* set com pins */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_sh1107_128x128_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 100, /* cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 100, /* cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* sh1107: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 16, /* tile_hight = */ 16, /* default_x_offset = */ 96, /* flipmode_x_offset = */ 96, /* pixel_width = */ 128, /* pixel_height = */ 128 }; uint8_t u8x8_d_sh1107_128x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_sh1107_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1107_128x128_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sh1107_128x128_display_info); break; default: return 0; } return 1; } /*==================================================*/ /* pimoroni_128x128_display */ static const u8x8_display_info_t u8x8_sh1107_pimoroni_128x128_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 100, /* cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 100, /* cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* sh1107: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 16, /* tile_hight = */ 16, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 128 }; uint8_t u8x8_d_sh1107_pimoroni_128x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_sh1107_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1107_128x128_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sh1107_pimoroni_128x128_display_info); break; default: return 0; } return 1; } /*==================================================*/ /* Name: SH1107_seeed_128x128 URL: https://www.seeedstudio.com/Grove-OLED-Display-1-12-V2.html Display is there in my lab. Backside PCB label: "OLED Display 1.12 inch v1.0" Tookover code from SSD1327_SEEED_96X96 because none of the other displays did work and at least the 96x96 driver did show something. */ static const u8x8_display_info_t u8x8_seeed_128x128_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 100, /* cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 100, /* cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 2, // 400kHz does not work, but 200kHz seems to be ok /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* sh1107: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 16, /* tile_hight = */ 16, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 128 }; uint8_t u8x8_d_sh1107_seeed_128x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_sh1107_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1107_128x128_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_seeed_128x128_display_info); break; default: return 0; } return 1; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_sh1108.c ================================================ /* u8x8_d_sh1108.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2018, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" /* code copyied from sh1107 SH1108: 160x160 controller from Sino Wealth */ static const uint8_t u8x8_d_sh1108_noname_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sh1108_noname_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sh1108_160x160_noname_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sh1108_160x160_noname_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_sh1108_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sh1108_64x128_noname_display_info); break; */ /* handled by the calling function case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1108_64x128_noname_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_sh1108_noname_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_sh1108_noname_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_sh1108_160x160_noname_powersave0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_sh1108_160x160_noname_powersave1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* sh1108 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; //u8x8_cad_SendCmd(u8x8, 0x040 ); /* set line offset to 0 */ // set column address u8x8_cad_SendCmd(u8x8, 0x010 | (x >> 4)); u8x8_cad_SendCmd(u8x8, 0x000 | ((x & 15))); // set page address u8x8_cad_SendCmd(u8x8, 0x0b0 ); // page cmd is a two byte command u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*==================================================*/ /* issue #619, 160x160 OLED */ static const uint8_t u8x8_d_sh1108_160x160_noname_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x060), /* clock divide ratio and oscillator frequency */ U8X8_CA(0x0a9, 0x003), /* set display resolution, 0=64x160, 1=96x160, 2=128x160, 3=160x160 */ U8X8_C(0x020), /* use page addressing mode */ U8X8_CA(0x081, 0x01f), /* set contrast control */ U8X8_CA(0x0ad, 0x80), /* DC/DC control 80=Use external Vpp, 89=Use internal DC/DC*/ U8X8_C(0x030), /* set discharge VSL level, 0x030..0x03f */ U8X8_CA(0x0d9, 0x028), /* pre-charge period */ U8X8_CA(0x0db, 0x035), /* vcomh deselect level */ U8X8_CA(0x0dc, 0x035), /* VSEGM Deselect Level */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_sh1108_160x160_noname_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 60, /* pre_chip_disable_wait_ns = */ 120, /* reset_pulse_width_ms = */ 100, /* sh1108: 3 us */ /* post_reset_wait_ms = */ 100, /* sometimes OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 100, /* sh1108: 100ns */ /* sck_pulse_width_ns = */ 100, /* sh1108: 100ns */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* sh1108: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 20, /* tile_height = */ 20, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 160, /* pixel_height = */ 160 }; uint8_t u8x8_d_sh1108_160x160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_sh1108_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1108_160x160_noname_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sh1108_160x160_noname_display_info); break; default: return 0; } return 1; } /*==================================================*/ ================================================ FILE: Drivers/u8g2/Src/u8x8_d_sh1122.c ================================================ /* u8x8_d_sh1122.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Copied from sh1122 mostly because of the similar RAM architecture. However: Commands are very different! */ #include "u8x8.h" static const uint8_t u8x8_d_sh1122_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* sh1122: display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sh1122_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* sh1122: display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* input: one tile (8 Bytes) output: Tile for SH1122 (32 Bytes) */ /* static uint8_t u8x8_sh1122_to32_dest_buf[32]; static uint8_t *u8x8_sh1122_8to32(U8X8_UNUSED u8x8_t *u8x8, uint8_t *ptr) { uint8_t v; uint8_t a,b; uint8_t i, j; uint8_t *dest; for( j = 0; j < 4; j++ ) { dest = u8x8_sh1122_to32_dest_buf; dest += j; a =*ptr; ptr++; b = *ptr; ptr++; for( i = 0; i < 8; i++ ) { v = 0; if ( a&1 ) v |= 0xf0; if ( b&1 ) v |= 0x0f; *dest = v; dest+=4; a >>= 1; b >>= 1; } } return u8x8_sh1122_to32_dest_buf; } */ static uint8_t u8x8_write_byte_to_16gr_device(u8x8_t *u8x8, uint8_t b) { static uint8_t buf[4]; static uint8_t map[4] = { 0, 0x00f, 0x0f0, 0x0ff }; buf [3] = map[b & 3]; b>>=2; buf [2] = map[b & 3]; b>>=2; buf [1] = map[b & 3]; b>>=2; buf [0] = map[b & 3]; return u8x8_cad_SendData(u8x8, 4, buf); } uint8_t u8x8_d_sh1122_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x; uint8_t y, c, i; uint8_t *ptr; switch(msg) { /* U8X8_MSG_DISPLAY_SETUP_MEMORY is handled by the calling function */ /* case U8X8_MSG_DISPLAY_SETUP_MEMORY: break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1122_256x64_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_sh1122_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_sh1122_powersave1_seq); break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* sh1122 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 2; // only every 4th col can be addressed x += u8x8->x_offset; y = (((u8x8_tile_t *)arg_ptr)->y_pos); y *= 8; c = ((u8x8_tile_t *)arg_ptr)->cnt; /* number of tiles */ ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* data ptr to the tiles */ for( i = 0; i < 8; i++ ) { u8x8_cad_SendCmd(u8x8, 0x0b0 ); /* set row address */ u8x8_cad_SendArg(u8x8, y); u8x8_cad_SendCmd(u8x8, x & 15 ); /* lower 4 bit*/ u8x8_cad_SendCmd(u8x8, 0x010 | (x >> 4) ); /* higher 3 bit */ c = ((u8x8_tile_t *)arg_ptr)->cnt; /* number of tiles */ while ( c > 0 ) { u8x8_write_byte_to_16gr_device(u8x8, *ptr); c--; ptr++; } y++; } u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*=========================================================*/ static const uint8_t u8x8_d_sh1122_256x64_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* remap */ U8X8_C(0x0c8), /* remap */ U8X8_C(0x060), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_sh1122_256x64_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* remap */ U8X8_C(0x0c0), /* remap */ U8X8_C(0x040), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_sh1122_256x64_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 10, /* sh1122: 10 us */ /* post_reset_wait_ms = */ 20, /* */ /* sda_setup_time_ns = */ 125, /* sh1122: cycle time is 250ns, so use 250/2 */ /* sck_pulse_width_ns = */ 125, /* sh1122: cycle time is 250ns, so use 250/2 */ /* sck_clock_hz = */ 40000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 10, /* write_pulse_width_ns = */ 150, /* sh1122: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 32, /* 256 pixel, so we require 32 bytes for this */ /* tile_hight = */ 8, /* default_x_offset = */ 0, /* this is the byte offset (there are two pixel per byte with 4 bit per pixel) */ /* flipmode_x_offset = */ 0, /* pixel_width = */ 256, /* pixel_height = */ 64 }; static const uint8_t u8x8_d_sh1122_256x64_init_seq[] = { U8X8_DLY(1), U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(1), U8X8_C(0xae), /* display off */ U8X8_C(0x40), /* display start line */ U8X8_C(0x0a0), /* remap */ U8X8_C(0x0c0), /* remap */ U8X8_CA(0x81, 0x80), /* set display contrast */ U8X8_CA(0xa8, 0x3f), /* multiplex ratio 1/64 Duty (0x0F~0x3F) */ U8X8_CA(0xad, 0x81), /* use buildin DC-DC with 0.6 * 500 kHz */ U8X8_CA(0xd5, 0x50), /* set display clock divide ratio (lower 4 bit)/oscillator frequency (upper 4 bit) */ U8X8_CA(0xd3, 0x00), /* display offset, shift mapping ram counter */ U8X8_CA(0xd9, 0x22), /* pre charge (lower 4 bit) and discharge(higher 4 bit) period */ U8X8_CA(0xdb, 0x35), /* VCOM deselect level */ U8X8_CA(0xdc, 0x35), /* Pre Charge output voltage */ U8X8_C(0x030), /* discharge level */ U8X8_DLY(1), /* delay */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_sh1122_256x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sh1122_256x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1122_256x64_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_sh1122_256x64_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_sh1122_256x64_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return u8x8_d_sh1122_common(u8x8, msg, arg_int, arg_ptr); } return 1; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_ssd1305.c ================================================ /* u8x8_d_ssd1305.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2017, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_ssd1305_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1305_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1305_128x32_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0d3, 32), /* display offset to 32 */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1305_128x32_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0d3, 0), /* display offset to */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_ssd1305_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x040 ); /* set line offset to 0 */ u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendArg(u8x8, 0x000 | ((x&15))); u8x8_cad_SendArg(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos) ); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ /* do { u8x8_cad_SendData(u8x8, 8, ptr); ptr += 8; c--; } while( c > 0 ); */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1305_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1305_powersave1_seq); break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1305 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif default: return 0; } return 1; } /* timing from SSD1306 */ static const u8x8_display_info_t u8x8_ssd1305_128x32_noname_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 16, /* tile_hight = */ 4, /* default_x_offset = */ 2, /* flipmode_x_offset = */ 2, /* pixel_width = */ 128, /* pixel_height = */ 32 }; static const uint8_t u8x8_d_ssd1305_128x32_noname_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x080), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0a8, 0x03f), /* multiplex ratio */ U8X8_CA(0x0d3, 32), /* display offset to 32 */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_CA(0x020, 0x000), /* page addressing mode */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */ U8X8_CA(0x081, 0x0cf), /* [2] set contrast control */ U8X8_CA(0x0d9, 0x0f1), /* [2] pre-charge period 0x022/f1*/ U8X8_CA(0x0db, 0x040), /* vcomh deselect level */ // if vcomh is 0, then this will give the biggest range for contrast control issue #98 // restored the old values for the noname constructor, because vcomh=0 will not work for all OLEDs, #116 U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1305_128x32_noname(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1305_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1305_128x32_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1305_128x32_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1305_128x32_noname_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1305_128x32_noname_display_info); break; default: return 0; } return 1; } /*================================================*/ /* adafruit 128x32 SSD1305 OLED, https://www.adafruit.com/product/2675 */ /* issue 724 */ /* timing from SSD1306 */ static const u8x8_display_info_t u8x8_ssd1305_128x32_adafruit_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 16, /* tile_hight = */ 4, /* default_x_offset = */ 4, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 32 }; uint8_t u8x8_d_ssd1305_128x32_adafruit(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1305_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1305_128x32_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1305_128x32_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1305_128x32_noname_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1305_128x32_adafruit_display_info); break; default: return 0; } return 1; } /*================================================*/ /* adafruit SSD1305 OLED */ /* timing from SSD1306 */ static const u8x8_display_info_t u8x8_ssd1305_128x64_adafruit_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 16, /* tile_hight = */ 8, /* default_x_offset = */ 2, /* flipmode_x_offset = */ 2, /* pixel_width = */ 128, /* pixel_height = */ 64 }; static const uint8_t u8x8_d_ssd1305_128x64_adafruit_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x0f0), /* clock divide ratio (0x00=1) and oscillator frequency */ U8X8_CA(0x0a8, 0x03f), /* multiplex ratio */ U8X8_CA(0x0d3, 0x040), /* display offset to 32 */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_CA(0x020, 0x000), /* page addressing mode */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */ U8X8_CA(0x081, 0x032), /* [2] set contrast control */ U8X8_CA(0x082, 0x080), /* set area brightness (reset=0x080) */ U8X8_CA(0x0d9, 0x0f1), /* [2] pre-charge period 0x022/f1*/ U8X8_CA(0x0db, 0x040), /* vcomh deselect level */ // if vcomh is 0, then this will give the biggest range for contrast control issue #98 // restored the old values for the noname constructor, because vcomh=0 will not work for all OLEDs, #116 U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1305_128x64_adafruit(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1305_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1305_128x32_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1305_128x32_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1305_128x64_adafruit_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1305_128x64_adafruit_display_info); break; default: return 0; } return 1; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_ssd1306_128x32.c ================================================ /* u8x8_d_ssd1306_128x32.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" /* UG-2832HSWEG02 Datasheet, Section 4.4 */ static const uint8_t u8x8_d_ssd1306_128x32_univision_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x080), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0a8, 0x01f), /* multiplex ratio */ U8X8_CA(0x0d3, 0x000), /* display offset */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_CA(0x08d, 0x014), /* [2] charge pump setting (p62): 0x014 enable, 0x010 disable */ U8X8_CA(0x020, 0x000), /* page addressing mode */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x002), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */ U8X8_CA(0x081, 0x08f), /* [2] set contrast control */ U8X8_CA(0x0d9, 0x0f1), /* [2] pre-charge period 0x022/f1*/ U8X8_CA(0x0db, 0x040), /* vcomh deselect level */ U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_128x32_univision_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_128x32_univision_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_128x32_univision_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_128x32_univision_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_ssd1306_128x32_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_128x32_univision_display_info); break; */ case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_128x32_univision_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_128x32_univision_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_128x32_univision_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_128x32_univision_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_128x32_univision_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1306 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ /* do { u8x8_cad_SendData(u8x8, 8, ptr); ptr += 8; c--; } while( c > 0 ); */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_ssd1306_128x32_univision_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns, increased to 8MHz (issue 215) */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 16, /* tile_hight = */ 4, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 32 }; uint8_t u8x8_d_ssd1306_128x32_univision(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_128x32_univision_display_info); return 1; } return u8x8_d_ssd1306_128x32_generic(u8x8, msg, arg_int, arg_ptr); } /*=============================================*/ /* issue 756 */ #define ADDR_MODE 0 //0:horizontal, 1:vertical, 2:page static const u8x8_display_info_t u8x8_ssd1306_128x32_winstar_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns, increased to 8MHz (issue 215) */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 16, /* tile_hight = */ 4, /* default_x_offset = */ 125, /* flipmode_x_offset = */ 125, /* pixel_width = */ 128, /* pixel_height = */ 32 }; uint8_t u8x8_d_ssd1306_128x32_winstar(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_128x32_winstar_display_info); return 1; } return u8x8_d_ssd1306_128x32_generic(u8x8, msg, arg_int, arg_ptr); } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_ssd1306_128x64_noname.c ================================================ /* u8x8_d_ssd1306_128x64_noname.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" /* more or less generic setup of all these small OLEDs */ static const uint8_t u8x8_d_ssd1306_128x64_noname_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x080), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0a8, 0x03f), /* multiplex ratio */ U8X8_CA(0x0d3, 0x000), /* display offset */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_CA(0x08d, 0x014), /* [2] charge pump setting (p62): 0x014 enable, 0x010 disable, SSD1306 only, should be removed for SH1106 */ U8X8_CA(0x020, 0x000), /* page addressing mode */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */ U8X8_CA(0x081, 0x0cf), /* [2] set contrast control */ U8X8_CA(0x0d9, 0x0f1), /* [2] pre-charge period 0x022/f1*/ U8X8_CA(0x0db, 0x040), /* vcomh deselect level */ // if vcomh is 0, then this will give the biggest range for contrast control issue #98 // restored the old values for the noname constructor, because vcomh=0 will not work for all OLEDs, #116 U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* this setup maximizes the brightness range, that can be set with setContrast() */ /* Drawback: VCOMH deselect level is set to 0, which das not work so good with all OLEDs, issue #116 */ static const uint8_t u8x8_d_ssd1306_128x64_vcomh0_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x080), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0a8, 0x03f), /* multiplex ratio */ U8X8_CA(0x0d3, 0x000), /* display offset */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_CA(0x08d, 0x014), /* [2] charge pump setting (p62): 0x014 enable, 0x010 disable */ U8X8_CA(0x020, 0x000), /* page addressing mode */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */ U8X8_CA(0x081, 0x0ef), /* [2] set contrast control, */ U8X8_CA(0x0d9, 0x0a1), /* [2] pre-charge period 0x022/f1*/ U8X8_CA(0x0db, 0x000), /* vcomh deselect level 0x000 .. 0x070, low nibble always 0 */ // if vcomh is 0, then this will give the biggest range for contrast control issue #98 U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* same as u8x8_d_ssd1306_128x64_noname_init_seq, but 0x0da bit 4 is set to 0 */ /* this will disable the alternative COM configuration */ static const uint8_t u8x8_d_ssd1306_128x64_alt0_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x080), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0a8, 0x03f), /* multiplex ratio */ U8X8_CA(0x0d3, 0x000), /* display offset */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_CA(0x08d, 0x014), /* [2] charge pump setting (p62): 0x014 enable, 0x010 disable, SSD1306 only, should be removed for SH1106 */ U8X8_CA(0x020, 0x000), /* page addressing mode */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x002), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */ U8X8_CA(0x081, 0x0cf), /* [2] set contrast control */ U8X8_CA(0x0d9, 0x0f1), /* [2] pre-charge period 0x022/f1*/ U8X8_CA(0x0db, 0x040), /* vcomh deselect level */ // if vcomh is 0, then this will give the biggest range for contrast control issue #98 // restored the old values for the noname constructor, because vcomh=0 will not work for all OLEDs, #116 U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* issue 316: a special sh1106 setup, https://www.mikrocontroller.net/topic/431371?goto=5087807#5087807 */ static const uint8_t u8x8_d_sh1106_128x64_winstar_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0xae), // Display OFF/ON: off (POR = 0xae) U8X8_C(0xa4), // Set Entire Display OFF/ON: off (POR = 0xa4) U8X8_CA(0xd5, 0x50), // Divide Ratio/Oscillator FrequencyData Set: divide ratio = 1 (POR = 1), Oscillator Frequency = +/- 0% (POR = +/- 0%) U8X8_CA(0xa8, 0x3f), // Multiplex Ratio Data Set: 64 (POR = 0x3f, 64) U8X8_CA(0xd3, 0x00), // Display OffsetData Set: 0 (POR = 0x00) U8X8_C(0x40), // Set Display Start Line: 0 U8X8_CA(0xad, 0x8b), // DC-DC ON/OFF Mode Set: Built-in DC-DC is used, Normal Display (POR = 0x8b) U8X8_CA(0xd9, 0x22), // Dis-charge/Pre-charge PeriodData Set: pre-charge 2 DCLKs, dis-charge 2 DCLKs (POR = 0x22, pre-charge 2 DCLKs, dis-charge 2 DCLKs) U8X8_CA(0xdb, 0x35), // VCOM Deselect LevelData Set: 0,770V (POR = 0x35, 0,770 V) U8X8_C(0x32), // Set Pump voltage value: 8,0 V (POR = 0x32, 8,0 V) U8X8_CA(0x81, 0xff), // Contrast Data Register Set: 255 (large) (POR = 0x80) U8X8_C(0x0a6), // Set Normal/Reverse Display: normal (POR = 0xa6) U8X8_CA(0x0da, 0x012), // com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_128x64_noname_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_128x64_noname_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_128x64_noname_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_128x64_noname_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_ssd1306_sh1106_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_128x64_noname_display_info); break; */ /* handled by the calling function case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_128x64_noname_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_128x64_noname_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_128x64_noname_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_128x64_noname_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_128x64_noname_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1306 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x040 ); /* set line offset to 0 */ u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendArg(u8x8, 0x000 | ((x&15))); /* probably wrong, should be SendCmd */ u8x8_cad_SendArg(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); /* probably wrong, should be SendCmd */ do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ /* do { u8x8_cad_SendData(u8x8, 8, ptr); ptr += 8; c--; } while( c > 0 ); */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_ssd1306_128x64_noname_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 16, /* tile_hight = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 64 }; uint8_t u8x8_d_ssd1306_128x64_noname(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1306_sh1106_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_128x64_noname_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_128x64_noname_display_info); break; default: return 0; } return 1; } uint8_t u8x8_d_ssd1306_128x64_vcomh0(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1306_sh1106_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_128x64_vcomh0_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_128x64_noname_display_info); break; default: return 0; } return 1; } uint8_t u8x8_d_ssd1306_128x64_alt0(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1306_sh1106_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_128x64_alt0_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_128x64_noname_display_info); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_sh1106_128x64_noname_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns, increased to 8MHz (issue 215) */ /* spi_mode = */ 3, /* active low (clock is high by default), rising edge, this seems to be a difference to the ssd1306 */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 16, /* tile_hight = */ 8, /* default_x_offset = */ 2, /* flipmode_x_offset = */ 2, /* pixel_width = */ 128, /* pixel_height = */ 64 }; uint8_t u8x8_d_sh1106_128x64_noname(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1306_sh1106_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); /* maybe use a better init sequence */ /* https://www.mikrocontroller.net/topic/431371 */ /* the new sequence is added in the winstar constructor (see below), this is kept untouched */ u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_128x64_noname_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sh1106_128x64_noname_display_info); break; default: return 0; } return 1; } uint8_t u8x8_d_sh1106_128x64_vcomh0(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1306_sh1106_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_128x64_vcomh0_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sh1106_128x64_noname_display_info); break; default: return 0; } return 1; } uint8_t u8x8_d_sh1106_128x64_winstar(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1306_sh1106_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_sh1106_128x64_winstar_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_sh1106_128x64_noname_display_info); break; default: return 0; } return 1; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_ssd1306_48x64.c ================================================ /* u8x8_d_ssd1306_48x64_winstar.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" /* Winstar 0.71 OLED */ static const uint8_t u8x8_d_ssd1306_48x64_winstar_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x080), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0a8, 0x03f), /* multiplex ratio, 0.71 OLED: changed from 0x2f to 0x3f */ U8X8_CA(0x0d3, 0x000), /* display offset, 0.71 OLED */ U8X8_C(0x040), /* set display start line to 0, 0.71 OLED */ U8X8_CA(0x08d, 0x014), /* [2] charge pump setting (p62): 0x014 enable, 0x010 disable, 0.71 OLED 0x14*/ /// according to the datasheet, 0x00 is NOT page addressing mode, but horizontal addressing mode; /// so it looks like u8g2 expects horizontal addressing (and the inline comment is wrong) while the Winstar example /// actually uses page addressing (which is the reset default) U8X8_CA(0x020, 0x000), /* page addressing mode */ U8X8_C(0x0a1), /* segment remap a0/a1, 0.71 OLED */ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse, 0.71 OLED */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5), 0.71 OLED */ U8X8_CA(0x081, 0x07f), /* [2] set contrast control, 0.71 OLED datasheet: 0x7f */ U8X8_CA(0x0d9, 0x022), /* [2] pre-charge period 0x022/f1, 0.71 OLED datasheet: 0x22 */ U8X8_CA(0x0db, 0x040), /* vcomh deselect level, 0.71 OLED datasheet: 0x40 */ // U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_48x64_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_48x64_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_48x64_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_48x64_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_ssd1306_48x64_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch (msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_48x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_48x64_winstar_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if (arg_int == 0) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_48x64_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_48x64_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if (arg_int == 0) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_48x64_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_48x64_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081); u8x8_cad_SendArg(u8x8, arg_int); /* ssd1306 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *) arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x >> 4)); u8x8_cad_SendCmd(u8x8, 0x000 | ((x & 15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *) arg_ptr)->y_pos)); do { c = ((u8x8_tile_t *) arg_ptr)->cnt; ptr = ((u8x8_tile_t *) arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c * 8, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while (arg_int > 0); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_ssd1306_48x64_display_info = { /* chip_enable_level = */0, /* chip_disable_level = */1, /* post_chip_enable_wait_ns = */20, /* pre_chip_disable_wait_ns = */10, /* reset_pulse_width_ms = */100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns, increased to 8MHz (issue 215) */ /* spi_mode = */0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */4, /* data_setup_time_ns = */40, /* write_pulse_width_ns = */150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */6, /* tile_height = */8, /* default_x_offset = */40, /* flipmode_x_offset = */40, /* pixel_width = */48, /* pixel_height = */64 }; /* Winstar 0.71" OLED */ uint8_t u8x8_d_ssd1306_48x64_winstar(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if (msg == U8X8_MSG_DISPLAY_SETUP_MEMORY) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_48x64_display_info); return 1; } else if (msg == U8X8_MSG_DISPLAY_INIT) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_48x64_winstar_init_seq); return 1; } return u8x8_d_ssd1306_48x64_generic(u8x8, msg, arg_int, arg_ptr); } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_ssd1306_64x32.c ================================================ /* u8x8_d_ssd1306_64x32.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_ssd1306_64x32_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_64x32_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_64x32_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_64x32_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_ssd1306_64x32_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_64x32_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_64x32_noname_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_64x32_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_64x32_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_64x32_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_64x32_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1306 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*======================================================*/ static const u8x8_display_info_t u8x8_ssd1306_64x32_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns, increased to 8MHz (issue 215) */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 8, /* tile_hight = */ 4, /* default_x_offset = */ 32, /* flipmode_x_offset = */ 32, /* pixel_width = */ 64, /* pixel_height = */ 32 }; /*======================================================*/ static const uint8_t u8x8_d_ssd1306_64x32_noname_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x080), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0a8, 0x02f), /* multiplex ratio: changed from 0x1f to 0x2f */ U8X8_CA(0x0d3, 0x000), /* display offset */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_CA(0x08d, 0x014), /* [2] charge pump setting (p62): 0x014 enable, 0x010 disable */ U8X8_CA(0x020, 0x000), /* page addressing mode */ U8X8_C(0x0a1), /* segment remap a0/a1 */ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */ U8X8_CA(0x081, 0x0cf), /* [2] set contrast control datasheet: 0xcf */ U8X8_CA(0x0d9, 0x022), /* [2] pre-charge period 0x022/f1 */ U8X8_CA(0x0db, 0x000), /* vcomh deselect level */ U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1306_64x32_noname(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_64x32_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_64x32_noname_init_seq); return 1; } return u8x8_d_ssd1306_64x32_generic(u8x8, msg, arg_int, arg_ptr); } /*======================================================*/ static const uint8_t u8x8_d_ssd1306_64x32_1f_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x080), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0a8, 0x01f), /* multiplex ratio: changed from 0x1f to 0x2f, 23 Sep 17: changed back to 1f */ U8X8_CA(0x0d3, 0x000), /* display offset */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_CA(0x08d, 0x014), /* [2] charge pump setting (p62): 0x014 enable, 0x010 disable */ U8X8_CA(0x020, 0x000), /* page addressing mode */ U8X8_C(0x0a1), /* segment remap a0/a1 */ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */ U8X8_CA(0x081, 0x0cf), /* [2] set contrast control datasheet: 0xcf */ U8X8_CA(0x0d9, 0x022), /* [2] pre-charge period 0x022/f1 */ U8X8_CA(0x0db, 0x000), /* vcomh deselect level */ U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1306_64x32_1f(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_64x32_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_64x32_1f_init_seq); return 1; } return u8x8_d_ssd1306_64x32_generic(u8x8, msg, arg_int, arg_ptr); } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_ssd1306_64x48.c ================================================ /* u8x8_d_ssd1306_64x48.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" /* EastRising 0.66 OLED */ static const uint8_t u8x8_d_ssd1306_64x48_er_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x080), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0a8, 0x02f), /* multiplex ratio, 0.66 OLED: changed from 0x1f to 0x2f */ U8X8_CA(0x0d3, 0x000), /* display offset, 0.66 OLED */ U8X8_C(0x040), /* set display start line to 0, 0.66 OLED */ U8X8_CA(0x08d, 0x014), /* [2] charge pump setting (p62): 0x014 enable, 0x010 disable, 0.66 OLED 0x14*/ U8X8_CA(0x020, 0x000), /* page addressing mode */ U8X8_C(0x0a1), /* segment remap a0/a1, 0.66 OLED */ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse, 0.66 OLED */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5), 0.66 OLED */ U8X8_CA(0x081, 0x0cf), /* [2] set contrast control, 0.66 OLED datasheet: 0xcf */ U8X8_CA(0x0d9, 0x022), /* [2] pre-charge period 0x022/f1, 0.66 OLED datasheet: 0x22 */ U8X8_CA(0x0db, 0x000), /* vcomh deselect level, 0.66 OLED datasheet: 0x00 */ U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_64x48_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_64x48_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_64x48_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_64x48_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_ssd1306_64x48_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_64x48_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_64x48_er_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_64x48_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_64x48_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_64x48_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_64x48_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1306 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_ssd1306_64x48_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns, increased to 8MHz (issue 215) */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 8, /* tile_hight = */ 6, /* default_x_offset = */ 32, /* flipmode_x_offset = */ 32, /* pixel_width = */ 64, /* pixel_height = */ 48 }; /* East Rising 0.66" OLED */ uint8_t u8x8_d_ssd1306_64x48_er(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_64x48_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_64x48_er_init_seq); return 1; } return u8x8_d_ssd1306_64x48_generic(u8x8, msg, arg_int, arg_ptr); } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_ssd1306_96x16.c ================================================ /* u8x8_d_ssd1306_96x16.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" /* EastRising 0.69 OLED */ static const uint8_t u8x8_d_ssd1306_96x16_er_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x080), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0a8, 0x00f), /* multiplex ratio, 0.69 OLED: 0x0f */ U8X8_CA(0x0d3, 0x000), /* display offset, 0.69 OLED */ U8X8_C(0x040), /* set display start line to 0, 0.69 OLED */ U8X8_CA(0x08d, 0x014), /* [2] charge pump setting (p62): 0x014 enable, 0x010 disable, 0.66 OLED 0x14*/ U8X8_CA(0x020, 0x000), /* page addressing mode */ U8X8_C(0x0a1), /* segment remap a0/a1, 0.66 OLED */ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse, 0.66 OLED */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x002), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5), 0.66 OLED */ U8X8_CA(0x081, 0x0af), /* [2] set contrast control, 0.69 OLED datasheet: 0xaf */ U8X8_CA(0x0d9, 0x0f1), /* [2] pre-charge period 0x0f1, 0.69 OLED datasheet: 0xf1 */ U8X8_CA(0x0db, 0x020), /* vcomh deselect level, 0.69 OLED datasheet: 0x20 */ U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_96x16_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_96x16_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_96x16_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1306_96x16_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_ssd1306_96x16_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_96x16_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_96x16_er_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_96x16_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_96x16_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_96x16_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_96x16_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1306 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_ssd1306_96x16_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns, increased to 8MHz (issue 215) */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 12, /* tile_hight = */ 2, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 32, /* pixel_width = */ 96, /* pixel_height = */ 16 }; /* East Rising 0.69" OLED */ uint8_t u8x8_d_ssd1306_96x16_er(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1306_96x16_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1306_96x16_er_init_seq); return 1; } return u8x8_d_ssd1306_96x16_generic(u8x8, msg, arg_int, arg_ptr); } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_ssd1309.c ================================================ /* u8x8_d_ssd1309.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2017, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_ssd1309_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1309_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1309_128x64_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1309_128x64_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_ssd1309_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos) ); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ /* do { u8x8_cad_SendData(u8x8, 8, ptr); ptr += 8; c--; } while( c > 0 ); */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1309_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1309_powersave1_seq); break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1309 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif default: return 0; } return 1; } /*=================================================*/ /* offset 2 version */ /* timing from SSD1306 */ static const u8x8_display_info_t u8x8_ssd1309_128x64_noname2_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 16, /* tile_hight = */ 8, /* default_x_offset = */ 2, /* flipmode_x_offset = */ 2, /* pixel_width = */ 128, /* pixel_height = */ 64 }; static const uint8_t u8x8_d_ssd1309_128x64_noname_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x0a0), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ //U8X8_CA(0x0a8, 0x03f), /* multiplex ratio */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_CA(0x020, 0x002), /* page addressing mode */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */ U8X8_CA(0x081, 0x06f), /* [2] set contrast control */ U8X8_CA(0x0d9, 0x0d3), /* [2] pre-charge period 0x022/f1*/ U8X8_CA(0x0db, 0x020), /* vcomh deselect level */ // if vcomh is 0, then this will give the biggest range for contrast control issue #98 // restored the old values for the noname constructor, because vcomh=0 will not work for all OLEDs, #116 U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ //U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1309_128x64_noname2(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1309_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1309_128x64_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1309_128x64_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1309_128x64_noname_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1309_128x64_noname2_display_info); break; default: return 0; } return 1; } /*=================================================*/ /* offset 0 version */ /* timing from SSD1306 */ static const u8x8_display_info_t u8x8_ssd1309_128x64_noname0_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 16, /* tile_hight = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 64 }; uint8_t u8x8_d_ssd1309_128x64_noname0(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1309_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1309_128x64_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1309_128x64_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1309_128x64_noname_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1309_128x64_noname0_display_info); break; default: return 0; } return 1; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_ssd1316.c ================================================ /* u8x8_d_ssd1316.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2019, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SSD1316: 128x39 OLED https://github.com/olikraus/u8g2/issues/919 */ #include "u8x8.h" static const uint8_t u8x8_d_ssd1316_128x32_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1316_128x32_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1316_128x32_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1316_128x32_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /*===================================================*/ static uint8_t u8x8_d_ssd1316_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1316_128x32_display_info); break; */ /* handled by the calling function case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1316_128x32_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1316_128x32_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1316_128x32_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1316_128x32_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1316_128x32_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1306 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); /* probably wrong, should be SendCmd */ u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); /* probably wrong, should be SendCmd */ do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*===================================================*/ /* QT-2832TSWUG02/ZJY-2832TSWZG02 */ static const uint8_t u8x8_d_ssd1316_128x32_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* start line */ U8X8_CA(0x081, 0x045), /* QG-2832TSWZG02 datasheet */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_CA(0x0a8, 0x01f), /* multiplex ratio, duty = 1/32 */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0d3, 0x000), /* display offset */ U8X8_CA(0x0d5, 0x080), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0d9, 0x022), /* [2] pre-charge period 0x022/f1*/ U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */ U8X8_CA(0x0db, 0x020), /* vcomh deselect level */ U8X8_CA(0x08d, 0x015), /* [2] charge pump setting (p62): 0x014 enable, 0x010 disable, */ //U8X8_CA(0x0a2, 0x000), /* set display start line to 0 */ //U8X8_CA(0x020, 0x000), /* page addressing mode */ // Flipmode //U8X8_C(0x0a1), /* segment remap a0/a1*/ //U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_C(0x02e), /* Deactivate scroll */ //U8X8_C(0x0a4), /* output ram to display */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_ssd1316_128x32_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* reset time */ /* post_reset_wait_ms = */ 100, /* reset delay */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 16, /* tile_hight = */ 4, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 32 }; uint8_t u8x8_d_ssd1316_128x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1316_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1316_128x32_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1316_128x32_display_info); break; default: return 0; } return 1; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_ssd1317.c ================================================ /* u8x8_d_ssd1317.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2018, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SSD1317: 128x96 OLED https://github.com/olikraus/u8g2/issues/663 */ #include "u8x8.h" /* more or less generic setup of all these small OLEDs */ static const uint8_t u8x8_d_ssd1317_96x96_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0d5, 0x0d1), /* clock divide ratio (0x00=1) and oscillator frequency (0x8) */ U8X8_CA(0x0a8, 0x05f), /* multiplex ratio */ U8X8_CA(0x0d3, 0x000), /* display offset */ U8X8_CA(0x0a2, 0x000), /* set display start line to 0 */ U8X8_CA(0x08d, 0x014), /* [2] charge pump setting (p62): 0x014 enable, 0x010 disable, SSD1306 only, should be removed for SH1106 */ U8X8_CA(0x020, 0x000), /* page addressing mode */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ // Flipmode //U8X8_C(0x0a1), /* segment remap a0/a1*/ //U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */ U8X8_CA(0x081, 0x09f), /* [2] set contrast control */ U8X8_CA(0x0d9, 0x0f1), /* [2] pre-charge period 0x022/f1*/ U8X8_CA(0x0db, 0x0ff), /* vcomh deselect level */ // if vcomh is 0, then this will give the biggest range for contrast control issue #98 // restored the old values for the noname constructor, because vcomh=0 will not work for all OLEDs, #116 U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1317_96x96_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1317_96x96_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1317_96x96_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1317_96x96_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_ssd1317_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1317_96x96_display_info); break; */ /* handled by the calling function case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1317_96x96_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1317_96x96_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1317_96x96_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1317_96x96_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1317_96x96_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1306 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x040 ); /* set line offset to 0 */ u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendArg(u8x8, 0x000 | ((x&15))); /* probably wrong, should be SendCmd */ u8x8_cad_SendArg(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); /* probably wrong, should be SendCmd */ do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ /* do { u8x8_cad_SendData(u8x8, 8, ptr); ptr += 8; c--; } while( c > 0 ); */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_ssd1317_96x96_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 12, /* tile_hight = */ 12, /* default_x_offset = */ 16, /* flipmode_x_offset = */ 16, /* pixel_width = */ 96, /* pixel_height = */ 96 }; uint8_t u8x8_d_ssd1317_96x96(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1317_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1317_96x96_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1317_96x96_display_info); break; default: return 0; } return 1; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_ssd1318.c ================================================ /* u8x8_d_ssd1318.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2019, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SSD1318: 128x96 OLED https://github.com/olikraus/u8g2/issues/784 */ #include "u8x8.h" /* with internal charge pump (icp) */ static const uint8_t u8x8_d_ssd1318_128x96_icp_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0fd, 0x012), /* unlock */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0ad, 0x0d0), /* external or internal IREF selection */ U8X8_CA(0x0a8, 0x05f), /* multiplex ratio, 96 duty */ U8X8_CA(0x0d3, 0x000), /* display offset */ U8X8_CA(0x0a2, 0x000), /* start line */ // four possible charge pump setting from as per sec 6.8.2 of the ssd1318 datasheet // uncomment only one of the below for lines // default: // U8X8_CA(0x08d, 0x004, 0x0ac, 0x001), /* Charge pump setting from sec 6.8.2 of SSD1318 datasheet */ // U8X8_CA(0x08d, 0x044, 0x0ac, 0x001), /* Charge pump setting from sec 6.8.2 of SSD1318 datasheet */ // U8X8_CA(0x08d, 0x084, 0x0ac, 0x001), /* Charge pump setting from sec 6.8.2 of SSD1318 datasheet */ U8X8_CAAA(0x08d, 0x0c4, 0x0ac, 0x001), /* Charge pump setting from sec 6.8.2 of SSD1318 datasheet */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */ U8X8_CA(0x081, 0x00f), /* value from issue 784, seems to be a little bit low... */ U8X8_CA(0x0d5, 0x0d1), /* clock divide ratio (0x00=1) and oscillator frequency (0x8), value from issue 784 example code */ U8X8_CA(0x0d9, 0x022), /* [2] pre-charge period 0x022/f1, value from issue 784 example code */ U8X8_CA(0x0db, 0x030), /* vcomh deselect level, value from issue 784 example code */ //U8X8_CA(0x020, 0x000), /* page addressing mode */ //U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* with external charge pump */ static const uint8_t u8x8_d_ssd1318_128x96_xcp_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0fd, 0x012), /* unlock */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0ad, 0x0d0), /* external or internal IREF selection */ U8X8_CA(0x0a8, 0x05f), /* multiplex ratio, 96 duty */ U8X8_CA(0x0d3, 0x000), /* display offset */ U8X8_CA(0x0a2, 0x000), /* start line */ // not sure if we have to set something for external charge pump // ... U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ // Flipmode // U8X8_C(0x0a0), /* segment remap a0/a1*/ // U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0x0da, 0x012), /* com pin HW config, sequential com pin config (bit 4), disable left/right remap (bit 5) */ U8X8_CA(0x081, 0x00f), /* value from issue 784, seems to be a little bit low... */ U8X8_CA(0x0d5, 0x0d1), /* clock divide ratio (0x00=1) and oscillator frequency (0x8), value from issue 784 example code */ U8X8_CA(0x0d9, 0x022), /* [2] pre-charge period 0x022/f1, value from issue 784 example code */ U8X8_CA(0x0db, 0x030), /* vcomh deselect level, value from issue 784 example code */ //U8X8_CA(0x020, 0x000), /* page addressing mode */ //U8X8_C(0x02e), /* Deactivate scroll */ U8X8_C(0x0a4), /* output ram to display */ U8X8_C(0x0a6), /* none inverted normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1318_128x96_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1318_128x96_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1318_128x96_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1318_128x96_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_ssd1318_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1318_128x96_display_info); break; */ /* handled by the calling function case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1318_128x96_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1318_128x96_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1318_128x96_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1318_128x96_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1318_128x96_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1318 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x040 ); /* set line offset to 0 */ u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendArg(u8x8, 0x000 | ((x&15))); /* probably wrong, should be SendCmd */ u8x8_cad_SendArg(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); /* probably wrong, should be SendCmd */ do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ /* do { u8x8_cad_SendData(u8x8, 8, ptr); ptr += 8; c--; } while( c > 0 ); */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_ssd1318_128x96_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1306: 3 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1306: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1306: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* SSD1306: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 16, /* tile_hight = */ 12, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 96 }; uint8_t u8x8_d_ssd1318_128x96(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1318_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1318_128x96_icp_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1318_128x96_display_info); break; default: return 0; } return 1; } uint8_t u8x8_d_ssd1318_128x96_xcp(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1318_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1318_128x96_xcp_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1318_128x96_display_info); break; default: return 0; } return 1; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_ssd1322.c ================================================ /* u8x8_d_ssd1322.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SSD1322: 480 x 128 dot matrix 16 gray scale */ #include "u8x8.h" static const uint8_t u8x8_d_ssd1322_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* ssd1322: display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1322_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* ssd1322: display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* interpret b as a monochrome bit pattern, write value 15 for high bit and value 0 for a low bit */ /* topbit (msb) is sent last */ /* example: b = 0x083 will send 0xff, 0x00, 0x00, 0xf0 */ /* 4 Jan 2017: I think this procedure not required any more. Delete? */ /* static uint8_t u8x8_write_byte_to_16gr_device(u8x8_t *u8x8, uint8_t b) { static uint8_t buf[4]; static uint8_t map[4] = { 0, 0x00f, 0x0f0, 0x0ff }; buf [3] = map[b & 3]; b>>=2; buf [2] = map[b & 3]; b>>=2; buf [1] = map[b & 3]; b>>=2; buf [0] = map[b & 3]; return u8x8_cad_SendData(u8x8, 4, buf); } */ /* input: one tile (8 Bytes) output: Tile for SSD1325 (32 Bytes) */ static uint8_t u8x8_ssd1322_to32_dest_buf[32]; static uint8_t *u8x8_ssd1322_8to32(U8X8_UNUSED u8x8_t *u8x8, uint8_t *ptr) { uint8_t v; uint8_t a,b; uint8_t i, j; uint8_t *dest; for( j = 0; j < 4; j++ ) { dest = u8x8_ssd1322_to32_dest_buf; dest += j; a =*ptr; ptr++; b = *ptr; ptr++; for( i = 0; i < 8; i++ ) { v = 0; if ( a&1 ) v |= 0xf0; if ( b&1 ) v |= 0x0f; *dest = v; dest+=4; a >>= 1; b >>= 1; } } return u8x8_ssd1322_to32_dest_buf; } static uint8_t *u8x8_ssd1322_4to32(U8X8_UNUSED u8x8_t *u8x8, uint8_t *ptr) { uint8_t v; uint8_t a; uint8_t i, j; uint8_t *dest; for( j = 0; j < 4; j++ ) { dest = u8x8_ssd1322_to32_dest_buf; dest += j; a =*ptr; ptr++; for( i = 0; i < 8; i++ ) { v = 0; if ( a&1 ) v = 0xff; *dest = v; dest+=4; a >>= 1; } } return u8x8_ssd1322_to32_dest_buf; } uint8_t u8x8_d_ssd1322_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x; uint8_t y, c; uint8_t *ptr; switch(msg) { /* U8X8_MSG_DISPLAY_SETUP_MEMORY is handled by the calling function */ /* case U8X8_MSG_DISPLAY_SETUP_MEMORY: break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1322_256x64_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1322_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1322_powersave1_seq); break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x0C1 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1322 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 2; // only every 4th col can be addressed x += u8x8->x_offset; y = (((u8x8_tile_t *)arg_ptr)->y_pos); y *= 8; u8x8_cad_SendCmd(u8x8, 0x075 ); /* set row address, moved out of the loop (issue 302) */ u8x8_cad_SendArg(u8x8, y); u8x8_cad_SendArg(u8x8, y+7); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendCmd(u8x8, 0x015 ); /* set column address */ u8x8_cad_SendArg(u8x8, x ); /* start */ u8x8_cad_SendArg(u8x8, x+1 ); /* end */ u8x8_cad_SendCmd(u8x8, 0x05c ); /* write to ram */ u8x8_cad_SendData(u8x8, 32, u8x8_ssd1322_8to32(u8x8, ptr)); ptr += 8; x += 2; c--; } while( c > 0 ); //x += 2; arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*=========================================================*/ static const uint8_t u8x8_d_ssd1322_256x64_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CAA(0x0a0, 0x006, 0x011), /* remap */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1322_256x64_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CAA(0x0a0, 0x014, 0x011), /* remap */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_ssd1322_256x64_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1322: 2 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1322: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1322: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 10000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns, increased to 8MHz (issue 215), 10 MHz (issue 301) */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 10, /* write_pulse_width_ns = */ 150, /* SSD1322: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 32, /* 256 pixel, so we require 32 bytes for this */ /* tile_hight = */ 8, /* default_x_offset = */ 0x01c, /* this is the byte offset (there are two pixel per byte with 4 bit per pixel) */ /* flipmode_x_offset = */ 0x01c, /* pixel_width = */ 256, /* pixel_height = */ 64 }; static const uint8_t u8x8_d_ssd1322_256x64_init_seq[] = { U8X8_DLY(1), U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(1), U8X8_CA(0xfd, 0x12), /* unlock */ U8X8_C(0xae), /* display off */ U8X8_CA(0xb3, 0x91), /* set display clock divide ratio/oscillator frequency (set clock as 80 frames/sec) */ U8X8_CA(0xca, 0x3f), /* multiplex ratio 1/64 Duty (0x0F~0x3F) */ U8X8_CA(0xa2, 0x00), /* display offset, shift mapping ram counter */ U8X8_CA(0xa1, 0x00), /* display start line */ //U8X8_CAA(0xa0, 0x14, 0x11), /* Set Re-Map / Dual COM Line Mode */ U8X8_CAA(0xa0, 0x06, 0x011), /* Set Re-Map / Dual COM Line Mode */ U8X8_CA(0xab, 0x01), /* Enable Internal VDD Regulator */ U8X8_CAA(0xb4, 0xa0, 0x005|0x0fd), /* Display Enhancement A */ U8X8_CA(0xc1, 0x9f), /* contrast */ U8X8_CA(0xc7, 0x0f), /* Set Scale Factor of Segment Output Current Control */ U8X8_C(0xb9), /* linear grayscale */ U8X8_CA(0xb1, 0xe2), /* Phase 1 (Reset) & Phase 2 (Pre-Charge) Period Adjustment */ U8X8_CAA(0xd1, 0x082|0x020, 0x020), /* Display Enhancement B */ U8X8_CA(0xbb, 0x1f), /* precharge voltage */ U8X8_CA(0xb6, 0x08), /* precharge period */ U8X8_CA(0xbe, 0x07), /* vcomh */ U8X8_C(0xa6), /* normal display */ U8X8_C(0xa9), /* exit partial display */ U8X8_DLY(1), /* delay 2ms */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1322_nhd_256x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1322_256x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1322_256x64_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1322_256x64_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1322_256x64_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return u8x8_d_ssd1322_common(u8x8, msg, arg_int, arg_ptr); } return 1; } /*=========================================================*/ /* NHD-2.7-12864WDW3-M http://www.newhavendisplay.com/nhd2712864wdw3m-p-9546.html http://www.newhavendisplay.com/specs/NHD-2.7-12864WDW3-M.pdf It looks like that only every second pixel is connected to the OLED */ uint8_t u8x8_d_ssd1322_common2(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x; uint8_t y, c; uint8_t *ptr; switch(msg) { /* U8X8_MSG_DISPLAY_SETUP_MEMORY is handled by the calling function */ /* case U8X8_MSG_DISPLAY_SETUP_MEMORY: break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1322_256x64_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1322_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1322_powersave1_seq); break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x0C1 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1322 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 2; // only every 4th col can be addressed x *= 2; // only every second pixel is used in the 128x64 NHD OLED x += u8x8->x_offset; y = (((u8x8_tile_t *)arg_ptr)->y_pos); y *= 8; u8x8_cad_SendCmd(u8x8, 0x075 ); /* set row address, moved out of the loop (issue 302) */ u8x8_cad_SendArg(u8x8, y); u8x8_cad_SendArg(u8x8, y+7); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendCmd(u8x8, 0x015 ); /* set column address */ u8x8_cad_SendArg(u8x8, x ); /* start */ u8x8_cad_SendArg(u8x8, x+1 ); /* end */ u8x8_cad_SendCmd(u8x8, 0x05c ); /* write to ram */ u8x8_cad_SendData(u8x8, 32, u8x8_ssd1322_4to32(u8x8, ptr)); ptr += 4; x += 2; u8x8_cad_SendCmd(u8x8, 0x015 ); /* set column address */ u8x8_cad_SendArg(u8x8, x ); /* start */ u8x8_cad_SendArg(u8x8, x+1 ); /* end */ u8x8_cad_SendCmd(u8x8, 0x05c ); /* write to ram */ u8x8_cad_SendData(u8x8, 32, u8x8_ssd1322_4to32(u8x8, ptr)); ptr += 4; x += 2; c--; } while( c > 0 ); //x += 2; arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const uint8_t u8x8_d_ssd1322_128x64_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CAA(0x0a0, 0x016, 0x011), /* remap */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1322_128x64_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CAA(0x0a0, 0x004, 0x011), /* remap */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_ssd1322_128x64_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* SSD1322: 2 us */ /* post_reset_wait_ms = */ 100, /* far east OLEDs need much longer setup time */ /* sda_setup_time_ns = */ 50, /* SSD1322: 15ns, but cycle time is 100ns, so use 100/2 */ /* sck_pulse_width_ns = */ 50, /* SSD1322: 20ns, but cycle time is 100ns, so use 100/2, AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 10000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns, increased to 8MHz (issue 215), 10 MHz (issue 301) */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 10, /* write_pulse_width_ns = */ 150, /* SSD1322: cycle time is 300ns, so use 300/2 = 150 */ /* tile_width = */ 16, /* 128 pixel */ /* tile_hight = */ 8, /* default_x_offset = */ 28, /* this is the byte offset (there are two pixel per byte with 4 bit per pixel) */ /* flipmode_x_offset = */ 28, /* pixel_width = */ 128, /* pixel_height = */ 64 }; static const uint8_t u8x8_d_ssd1322_128x64_init_seq[] = { U8X8_DLY(1), U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(1), U8X8_CA(0xfd, 0x12), /* unlock */ U8X8_C(0xae), /* display off */ U8X8_CA(0xb3, 0x91), /* set display clock divide ratio/oscillator frequency (set clock as 80 frames/sec) */ U8X8_CA(0xca, 0x3f), /* multiplex ratio 1/64 Duty (0x0F~0x3F) */ U8X8_CA(0xa2, 0x00), /* display offset, shift mapping ram counter */ U8X8_CA(0xa1, 0x00), /* display start line */ U8X8_CA(0xab, 0x01), /* Enable Internal VDD Regulator */ //U8X8_CAA(0xa0, 0x14, 0x11), /* Set Re-Map / Dual COM Line Mode */ //U8X8_CAA(0xa0, 0x06, 0x011), /* Set Re-Map / Dual COM Line Mode */ U8X8_CAA(0xa0, 0x16, 0x011), /* Set Re-Map / Dual COM Line Mode (NHD-2.7-12864WDW3-M datasheet) */ U8X8_CA(0xc7, 0x0f), /* Set Scale Factor of Segment Output Current Control */ U8X8_CA(0xc1, 0x9f), /* contrast */ //U8X8_CA(0xb1, 0xe2), /* Phase 1 (Reset) & Phase 2 (Pre-Charge) Period Adjustment */ U8X8_CA(0xb1, 0xf2), /* Phase 1 (Reset) & Phase 2 (Pre-Charge) Period Adjustment (NHD-2.7-12864WDW3-M datasheet) */ U8X8_CA(0xbb, 0x1f), /* precharge voltage */ //U8X8_CAA(0xb4, 0xa0, 0x005|0x0fd), /* Display Enhancement A */ U8X8_CAA(0xb4, 0xa0, 0x0fd), /* Display Enhancement A (NHD-2.7-12864WDW3-M datasheet) */ U8X8_CA(0xbe, 0x04), /* vcomh (NHD-2.7-12864WDW3-M datasheet) */ U8X8_C(0xb9), /* linear grayscale */ //U8X8_CAA(0xd1, 0x082|0x020, 0x020), /* Display Enhancement B */ //U8X8_CA(0xb6, 0x08), /* precharge period */ U8X8_C(0xa6), /* normal display */ U8X8_C(0xa9), /* exit partial display */ U8X8_DLY(1), /* delay 2ms */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1322_nhd_128x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1322_128x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1322_128x64_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1322_128x64_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1322_128x64_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return u8x8_d_ssd1322_common2(u8x8, msg, arg_int, arg_ptr); } return 1; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_ssd1325.c ================================================ /* u8x8_d_ssd1325.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SSD1325: 128 x 80, 16 Gray Scale Dot Matrix SSD0323: Identical to SSD1325, issue 720 */ #include "u8x8.h" static const uint8_t u8x8_d_ssd1325_128x64_nhd_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1325_128x64_nhd_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1325_128x64_nhd_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0a0, 0x052), /* remap */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1325_128x64_nhd_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0a0, 0x041), /* remap */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* input: one tile (8 Bytes) output: Tile for SSD1325 (32 Bytes) */ static uint8_t u8x8_ssd1325_8to32_dest_buf[32]; static uint8_t *u8x8_ssd1325_8to32(U8X8_UNUSED u8x8_t *u8x8, uint8_t *ptr) { uint8_t v; uint8_t a,b; uint8_t i, j; uint8_t *dest; for( j = 0; j < 4; j++ ) { dest = u8x8_ssd1325_8to32_dest_buf; dest += j; a =*ptr; ptr++; b = *ptr; ptr++; for( i = 0; i < 8; i++ ) { v = 0; if ( a&1 ) v |= 0xf0; if ( b&1 ) v |= 0x0f; *dest = v; dest+=4; a >>= 1; b >>= 1; } } return u8x8_ssd1325_8to32_dest_buf; } /*===================================================================*/ static uint8_t u8x8_d_ssd1325_128x64_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, y, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1325_128x64_nhd_display_info); break; */ /* handled by the calling function case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1325_128x64_nhd_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1325_128x64_nhd_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1325_128x64_nhd_powersave1_seq); break; /* handled by the calling function case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1325_128x64_nhd_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1325_128x64_nhd_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; */ #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1325 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 4; y = (((u8x8_tile_t *)arg_ptr)->y_pos); y *= 8; y += u8x8->x_offset; /* x_offset is used as y offset for the SSD1325 */ u8x8_cad_SendCmd(u8x8, 0x075 ); /* set row address */ u8x8_cad_SendArg(u8x8, y); u8x8_cad_SendArg(u8x8, y+7); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { if ( ptr[0] | ptr[1] | ptr[2] | ptr[3] | ptr[4] | ptr[5] | ptr[6] | ptr[7] ) { /* draw the tile if pattern is not zero for all bytes */ u8x8_cad_SendCmd(u8x8, 0x015 ); /* set column address */ u8x8_cad_SendArg(u8x8, x ); /* start */ u8x8_cad_SendArg(u8x8, x+3 ); /* end */ u8x8_cad_SendData(u8x8, 32, u8x8_ssd1325_8to32(u8x8, ptr)); } else { /* tile is empty, use the graphics acceleration command */ u8x8_cad_SendCmd(u8x8, 0x024 ); // draw rectangle u8x8_cad_SendArg(u8x8, x ); u8x8_cad_SendArg(u8x8, y ); u8x8_cad_SendArg(u8x8, x+3 ); u8x8_cad_SendArg(u8x8, y+7 ); u8x8_cad_SendArg(u8x8, 0 ); // clear } ptr += 8; x += 4; c--; } while( c > 0 ); //x += 4; arg_int--; } while( arg_int > 0 ); u8x8_cad_SendCmd(u8x8, 0xe3); // no-op needs to be sent after last byte before cs is toggled. u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*===================================================================*/ /* http://www.newhavendisplay.com/app_notes/OLED_2_7_12864.txt */ static const uint8_t u8x8_d_ssd1325_128x64_nhd_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0b3, 0x091), /* set display clock divide ratio/oscillator frequency (set clock as 135 frames/sec) */ U8X8_CA(0x0a8, 0x03f), /* multiplex ratio: 0x03f * 1/64 duty */ U8X8_CA(0x0a2, 0x04c), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a1, 0x000), /* display start line */ U8X8_CA(0x0ad, 0x002), /* master configuration: disable embedded DC-DC, enable internal VCOMH */ U8X8_CA(0x0a0, 0x052), /* remap configuration, horizontal address increment (bit 2 = 0), enable nibble remap (upper nibble is left, bit 1 = 1) */ U8X8_C(0x086), /* full current range (0x084, 0x085, 0x086) */ U8X8_C(0x0b8), /* set gray scale table */ U8X8_A(0x001), /* */ U8X8_A(0x011), /* */ U8X8_A(0x022), /* */ U8X8_A(0x032), /* */ U8X8_A(0x043), /* */ U8X8_A(0x054), /* */ U8X8_A(0x065), /* */ U8X8_A(0x076), /* */ U8X8_CA(0x081, 0x070), /* contrast, brightness, 0..128, Newhaven: 0x040 */ U8X8_CA(0x0b2, 0x051), /* frame frequency (row period) */ U8X8_CA(0x0b1, 0x055), /* phase length */ U8X8_CA(0x0bc, 0x010), /* pre-charge voltage level */ U8X8_CA(0x0b4, 0x002), /* set pre-charge compensation level (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */ U8X8_CA(0x0b0, 0x028), /* enable pre-charge compensation (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */ U8X8_CA(0x0be, 0x01c), /* VCOMH voltage */ U8X8_CA(0x0bf, 0x002|0x00d), /* VSL voltage level (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */ U8X8_C(0x0a4), /* normal display mode */ U8X8_CA(0x023, 0x003), /* graphics accelleration: fill pixel */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_nhd_ssd1325_128x64_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /**/ /* sda_setup_time_ns = */ 100, /* SSD1325 */ /* sck_pulse_width_ns = */ 100, /* SSD1325 */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 60, /* SSD1325 */ /* tile_width = */ 16, /* tile_hight = */ 8, /* default_x_offset = */ 0, /* x_offset is used as y offset for the SSD1325 */ /* flipmode_x_offset = */ 8, /* x_offset is used as y offset for the SSD1325 */ /* pixel_width = */ 128, /* pixel_height = */ 64 }; uint8_t u8x8_d_ssd1325_nhd_128x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_nhd_ssd1325_128x64_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1325_128x64_nhd_init_seq); return 1; } else if ( msg == U8X8_MSG_DISPLAY_SET_FLIP_MODE ) { if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1325_128x64_nhd_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1325_128x64_nhd_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; } return u8x8_d_ssd1325_128x64_generic(u8x8, msg, arg_int, arg_ptr); } /*===================================================================*/ /* OSRAM Pictiva 128x64 OLED */ /* https://github.com/olikraus/u8g2/issues/720 */ static const uint8_t u8x8_d_ssd0323_os128064_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0b3, 0x091), /* set display clock divide ratio/oscillator frequency (set clock as 135 frames/sec) */ U8X8_CA(0x0a8, 0x03f), /* multiplex ratio: 0x03f * 1/64 duty */ U8X8_CA(0x0a2, 0x040), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a1, 0x000), /* display start line */ U8X8_CA(0x0ad, 0x002), /* master configuration: disable embedded DC-DC, enable internal VCOMH */ U8X8_CA(0x0a0, 0x052), /* remap configuration, horizontal address increment (bit 2 = 0), enable nibble remap (upper nibble is left, bit 1 = 1) */ U8X8_C(0x086), /* full current range (0x084, 0x085, 0x086) */ U8X8_C(0x0b8), /* set gray scale table */ U8X8_A(0x001), /* */ U8X8_A(0x011), /* */ U8X8_A(0x022), /* */ U8X8_A(0x032), /* */ U8X8_A(0x043), /* */ U8X8_A(0x054), /* */ U8X8_A(0x065), /* */ U8X8_A(0x076), /* */ U8X8_CA(0x081, 0x070), /* contrast, brightness, 0..128, Newhaven: 0x040 */ U8X8_CA(0x0b2, 0x051), /* frame frequency (row period) */ U8X8_CA(0x0b1, 0x055), /* phase length */ U8X8_CA(0x0bc, 0x010), /* pre-charge voltage level */ U8X8_CA(0x0b4, 0x002), /* set pre-charge compensation level (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */ U8X8_CA(0x0b0, 0x028), /* enable pre-charge compensation (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */ U8X8_CA(0x0be, 0x01c), /* VCOMH voltage */ U8X8_CA(0x0bf, 0x002|0x00d), /* VSL voltage level (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */ U8X8_C(0x0a4), /* normal display mode */ U8X8_CA(0x023, 0x003), /* graphics accelleration: fill pixel */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd0323_os128064_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0a0, 0x052), /* remap */ U8X8_CA(0x0a2, 0x040), /* display offset, shift mapping ram counter */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd0323_os128064_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0a0, 0x041), /* remap */ U8X8_CA(0x0a2, 0x050), /* display offset, shift mapping ram counter */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_ssd0323_os128064_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /**/ /* sda_setup_time_ns = */ 100, /* SSD1325 */ /* sck_pulse_width_ns = */ 100, /* SSD1325 */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 60, /* SSD1325 */ /* tile_width = */ 16, /* tile_hight = */ 8, /* default_x_offset = */ 0, /* x_offset is used as y offset for the SSD1325 */ /* flipmode_x_offset = */ 0, /* x_offset is used as y offset for the SSD1325 */ /* pixel_width = */ 128, /* pixel_height = */ 64 }; uint8_t u8x8_d_ssd0323_os128064(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd0323_os128064_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd0323_os128064_init_seq); return 1; } else if ( msg == U8X8_MSG_DISPLAY_SET_FLIP_MODE ) { if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd0323_os128064_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd0323_os128064_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; } return u8x8_d_ssd1325_128x64_generic(u8x8, msg, arg_int, arg_ptr); } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_ssd1326.c ================================================ /* u8x8_d_ssd1326.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" /* ER OLED */ static const uint8_t u8x8_d_ssd1326_er_256x32_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0fd, 0x012), /* unlock (not required, this is default by reset) */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0a8, 0x01f), /* multiplex ratio: 0x03f * 1/64 duty - changed by CREESOO, acc. to datasheet, 100317*/ U8X8_CA(0x0a1, 0x000), /* display start line */ U8X8_CA(0x0a2, 0x000), /* display offset, shift mapping ram counter */ U8X8_CA(0x0ad, 0x002), /* master configuration: disable embedded DC-DC, enable internal VCOMH */ /* a0 command: 0x0a0 ***abcde a: 1: mono mode b: 0: horizontal (1: vertical) address increment c: 1: enable bit remap d: 1: COM remap e: 1: Column remap */ U8X8_CA(0x0a0, 0x006), /* remap configuration, see above */ U8X8_C(0x086), /* full current range (0x084, 0x085, 0x086) */ U8X8_C(0x0b7), /* set default gray scale table */ U8X8_CA(0x081, 0x027), /* contrast, brightness, 0..128 */ U8X8_CA(0x0b1, 0x071), /* phase length */ //U8X8_CA(0x0b2, 0x051), /* frame frequency (row period) */ U8X8_CA(0x0b3, 0x0f0), /* set display clock divide ratio/oscillator frequency (set clock as 135 frames/sec) */ //U8X8_CA(0x0b4, 0x002), /* set pre-charge compensation level (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */ //U8X8_CA(0x0b0, 0x028), /* enable pre-charge compensation (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */ U8X8_CAA(0x0bb, 0x035, 0x0ff), /* set precharge */ U8X8_CA(0x0bc, 0x01f), /* pre-charge voltage level */ U8X8_CA(0x0be, 0x00f), /* VCOMH voltage */ U8X8_CA(0x0bf, 0x002|0x00d), /* VSL voltage level (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */ U8X8_C(0x0a4), /* normal display mode */ //U8X8_CA(0x023, 0x003), /* graphics accelleration: fill pixel */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1326_256x32_nhd_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1326_256x32_nhd_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1326_256x32_nhd_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0a0, 0x006), /* remap 00110 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1326_256x32_nhd_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ //U8X8_CA(0x0a0, 0x005), /* remap 00101 */ U8X8_CA(0x0a0, 0x001), /* remap 00001 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* input: one tile (8 Bytes) output: Tile for ssd1326 (32 Bytes) */ static uint8_t u8x8_ssd1326_8to32_dest_buf[32]; static uint8_t *u8x8_ssd1326_8to32(U8X8_UNUSED u8x8_t *u8x8, uint8_t *ptr) { uint8_t v; uint8_t a,b; uint8_t i, j; uint8_t *dest; for( j = 0; j < 4; j++ ) { dest = u8x8_ssd1326_8to32_dest_buf; dest += j; a =*ptr; ptr++; b = *ptr; ptr++; for( i = 0; i < 8; i++ ) { v = 0; if ( a&1 ) v |= 0xf0; if ( b&1 ) v |= 0x0f; *dest = v; dest+=4; a >>= 1; b >>= 1; } } return u8x8_ssd1326_8to32_dest_buf; } static uint8_t u8x8_d_ssd1326_256x32_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, y, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1326_256x32_nhd_display_info); break; */ case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1326_er_256x32_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1326_256x32_nhd_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1326_256x32_nhd_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1326_256x32_nhd_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1326_256x32_nhd_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1326 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 4; y = (((u8x8_tile_t *)arg_ptr)->y_pos); y *= 8; y += u8x8->x_offset; /* x_offset is used as y offset for the ssd1326 */ do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendCmd(u8x8, 0x015 ); /* set column address */ u8x8_cad_SendArg(u8x8, x ); /* start */ u8x8_cad_SendArg(u8x8, x+3 ); /* end */ u8x8_cad_SendCmd(u8x8, 0x075 ); /* set row address */ u8x8_cad_SendArg(u8x8, y); u8x8_cad_SendArg(u8x8, y+7); u8x8_cad_SendData(u8x8, 32, u8x8_ssd1326_8to32(u8x8, ptr)); ptr += 8; x += 4; c--; } while( c > 0 ); //x += 4; arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_ssd1326_256x32_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 15, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /**/ /* sda_setup_time_ns = */ 100, /* ssd1326 */ /* sck_pulse_width_ns = */ 100, /* ssd1326 */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 60, /* ssd1326 */ /* tile_width = */ 32, /* tile_hight = */ 4, /* default_x_offset = */ 0, /* x_offset is used as y offset for the ssd1326 */ /* flipmode_x_offset = */ 0, /* x_offset is used as y offset for the ssd1326 */ /* pixel_width = */ 256, /* pixel_height = */ 32 }; uint8_t u8x8_d_ssd1326_er_256x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1326_256x32_display_info); return 1; } return u8x8_d_ssd1326_256x32_generic(u8x8, msg, arg_int, arg_ptr); } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_ssd1327.c ================================================ /* u8x8_d_ssd1327.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_ssd1327_96x96_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1327_96x96_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* input: one tile (8 Bytes) output: Tile for ssd1327 (32 Bytes) */ static uint8_t u8x8_ssd1327_8to32_dest_buf[32]; static uint8_t *u8x8_ssd1327_8to32(U8X8_UNUSED u8x8_t *u8x8, uint8_t *ptr) { uint8_t v; uint8_t a,b; uint8_t i, j; uint8_t *dest; for( j = 0; j < 4; j++ ) { dest = u8x8_ssd1327_8to32_dest_buf; dest += j; a =*ptr; ptr++; b = *ptr; ptr++; for( i = 0; i < 8; i++ ) { v = 0; if ( a&1 ) v |= 0xf0; if ( b&1 ) v |= 0x0f; *dest = v; dest+=4; a >>= 1; b >>= 1; } } return u8x8_ssd1327_8to32_dest_buf; } static uint8_t u8x8_d_ssd1327_96x96_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, y, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1327_96x96_display_info); break; */ /* handled by the calling function case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_96x96_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_96x96_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_96x96_powersave1_seq); break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1327 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 4; x+=u8x8->x_offset/2; y = (((u8x8_tile_t *)arg_ptr)->y_pos); y *= 8; u8x8_cad_SendCmd(u8x8, 0x075 ); /* set row address, moved out of the loop (issue 302) */ u8x8_cad_SendArg(u8x8, y); u8x8_cad_SendArg(u8x8, y+7); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendCmd(u8x8, 0x015 ); /* set column address */ u8x8_cad_SendArg(u8x8, x ); /* start */ u8x8_cad_SendArg(u8x8, x+3 ); /* end */ u8x8_cad_SendData(u8x8, 32, u8x8_ssd1327_8to32(u8x8, ptr)); ptr += 8; x += 4; c--; } while( c > 0 ); //x += 4; arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*=============================================*/ /* Seeedstudio Grove OLED 96x96 */ static const u8x8_display_info_t u8x8_ssd1327_96x96_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /**/ /* sda_setup_time_ns = */ 100, /* */ /* sck_pulse_width_ns = */ 100, /* */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 1, /* use 1 instead of 4, because the SSD1327 seems to be very slow */ /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 60, /* tile_width = */ 12, /* tile_hight = */ 12, /* default_x_offset = */ 16, /* flipmode_x_offset = */ 16, /* pixel_width = */ 96, /* pixel_height = */ 96 }; /* https://github.com/SeeedDocument/Grove_OLED_1.12/raw/master/resources/LY120-096096.pdf */ /* http://www.seeedstudio.com/wiki/index.php?title=Twig_-_OLED_96x96 */ /* values from u8glib */ /* Re-map setting in Graphic Display Data RAM, command 0x0a0 Bit 0: Column Address Re-map Bit 1: Nibble Re-map Bit 2: Horizontal/Vertical Address Increment Bit 3: Not used, must be 0 Bit 4: COM Re-map Bit 5: Not used, must be 0 Bit 6: COM Split Odd Even Bit 7: Not used, must be 0 */ static const uint8_t u8x8_d_ssd1327_96x96_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0fd, 0x012), /* unlock display, usually not required because the display is unlocked after reset */ U8X8_C(0x0ae), /* display off */ //U8X8_CA(0x0a8, 0x03f), /* multiplex ratio: 0x03f * 1/64 duty */ U8X8_CA(0x0a8, 0x05f), /* multiplex ratio: 0x05f * 1/64 duty */ U8X8_CA(0x0a1, 0x000), /* display start line */ //U8X8_CA(0x0a2, 0x04c), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a2, 0x020), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a0, 0x051), /* remap configuration */ U8X8_CA(0x0ab, 0x001), /* Enable internal VDD regulator (RESET) */ //U8X8_CA(0x081, 0x070), /* contrast, brightness, 0..128 */ U8X8_CA(0x081, 0x053), /* contrast, brightness, 0..128 */ //U8X8_CA(0x0b1, 0x055), /* phase length */ U8X8_CA(0x0b1, 0x051), /* phase length */ //U8X8_CA(0x0b3, 0x091), /* set display clock divide ratio/oscillator frequency (set clock as 135 frames/sec) */ U8X8_CA(0x0b3, 0x001), /* set display clock divide ratio/oscillator frequency */ //? U8X8_CA(0x0ad, 0x002), /* master configuration: disable embedded DC-DC, enable internal VCOMH */ //? U8X8_C(0x086), /* full current range (0x084, 0x085, 0x086) */ U8X8_C(0x0b9), /* use linear lookup table */ //U8X8_CA(0x0bc, 0x010), /* pre-charge voltage level */ U8X8_CA(0x0bc, 0x008), /* pre-charge voltage level */ //U8X8_CA(0x0be, 0x01c), /* VCOMH voltage */ U8X8_CA(0x0be, 0x007), /* VCOMH voltage */ U8X8_CA(0x0b6, 0x001), /* second precharge */ U8X8_CA(0x0d5, 0x062), /* enable second precharge, internal vsl (bit0 = 0) */ U8X8_C(0x0a4), /* normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1327_seeed_96x96_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0a2, 0x020), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a0, 0x051), /* remap configuration */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1327_seeed_96x96_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0a2, 0x060), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a0, 0x042), /* remap configuration */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1327_seeed_96x96(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1327_96x96_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1327_96x96_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_96x96_init_seq); return 1; } else if ( msg == U8X8_MSG_DISPLAY_SET_FLIP_MODE ) { if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_seeed_96x96_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_seeed_96x96_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; } return 0; } /*=============================================*/ /* EA W128128 round OLED 128x128 */ /* issue #641 */ /* https://www.lcd-module.de/fileadmin/eng/pdf/grafik/W128128-XR.pdf */ static const u8x8_display_info_t u8x8_ssd1327_ea_w128128_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /**/ /* sda_setup_time_ns = */ 100, /* */ /* sck_pulse_width_ns = */ 100, /* */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 1, /* use 1 instead of 4, because the SSD1327 seems to be very slow */ /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 60, /* tile_width = */ 16, /* tile_hight = */ 16, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 128 }; /* this is a copy of the init sequence for the seeed 96x96 oled */ static const uint8_t u8x8_d_ssd1327_ea_w128128_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0fd, 0x012), /* unlock display, usually not required because the display is unlocked after reset */ U8X8_C(0x0ae), /* display off */ //U8X8_CA(0x0a8, 0x03f), /* multiplex ratio: 0x03f * 1/64 duty */ U8X8_CA(0x0a8, 0x05f), /* multiplex ratio: 0x05f * 1/64 duty */ U8X8_CA(0x0a1, 0x000), /* display start line */ //U8X8_CA(0x0a2, 0x04c), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a2, 0x010), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a0, 0x051), /* remap configuration */ U8X8_CA(0x0ab, 0x001), /* Enable internal VDD regulator (RESET) */ //U8X8_CA(0x081, 0x070), /* contrast, brightness, 0..128 */ U8X8_CA(0x081, 0x053), /* contrast, brightness, 0..128 */ //U8X8_CA(0x0b1, 0x055), /* phase length */ U8X8_CA(0x0b1, 0x051), /* phase length */ //U8X8_CA(0x0b3, 0x091), /* set display clock divide ratio/oscillator frequency (set clock as 135 frames/sec) */ U8X8_CA(0x0b3, 0x001), /* set display clock divide ratio/oscillator frequency */ //? U8X8_CA(0x0ad, 0x002), /* master configuration: disable embedded DC-DC, enable internal VCOMH */ //? U8X8_C(0x086), /* full current range (0x084, 0x085, 0x086) */ U8X8_C(0x0b9), /* use linear lookup table */ //U8X8_CA(0x0bc, 0x010), /* pre-charge voltage level */ U8X8_CA(0x0bc, 0x008), /* pre-charge voltage level */ //U8X8_CA(0x0be, 0x01c), /* VCOMH voltage */ U8X8_CA(0x0be, 0x007), /* VCOMH voltage */ U8X8_CA(0x0b6, 0x001), /* second precharge */ U8X8_CA(0x0d5, 0x062), /* enable second precharge, internal vsl (bit0 = 0) */ U8X8_C(0x0a4), /* normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1327_ea_w128128_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0a2, 0x000), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a0, 0x051), /* remap configuration */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1327_ea_w128128_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0a2, 0x000), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a0, 0x042), /* remap configuration */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1327_ea_w128128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_ssd1327_96x96_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1327_ea_w128128_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_ea_w128128_init_seq); return 1; } else if ( msg == U8X8_MSG_DISPLAY_SET_FLIP_MODE ) { if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_ea_w128128_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_ea_w128128_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; } return 0; } /*=============================================*/ /* MIDAS MCOT128128C1V-YM 128x128 Module */ static const u8x8_display_info_t u8x8_ssd1327_128x128_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 10, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /**/ /* sda_setup_time_ns = */ 100, /* */ /* sck_pulse_width_ns = */ 100, /* */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 1, /* use 1 instead of 4, because the SSD1327 seems to be very slow */ /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 60, /* tile_width = */ 16, /* tile_hight = */ 16, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 128 }; /* https://github.com/SeeedDocument/Grove_OLED_1.12/raw/master/resources/LY120-096096.pdf */ /* http://www.seeedstudio.com/wiki/index.php?title=Twig_-_OLED_96x96 */ /* values from u8glib */ /* Re-map setting in Graphic Display Data RAM, command 0x0a0 Bit 0: Column Address Re-map Bit 1: Nibble Re-map Bit 2: Horizontal/Vertical Address Increment Bit 3: Not used, must be 0 Bit 4: COM Re-map Bit 5: Not used, must be 0 Bit 6: COM Split Odd Even Bit 7: Not used, must be 0 */ static const uint8_t u8x8_d_ssd1327_128x128_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0fd, 0x012), /* unlock display, usually not required because the display is unlocked after reset */ U8X8_C(0x0ae), /* display off */ //U8X8_CA(0x0a8, 0x03f), /* multiplex ratio: 0x03f * 1/64 duty */ //U8X8_CA(0x0a8, 0x05f), /* multiplex ratio: 0x05f * 1/64 duty */ U8X8_CA(0x0a8, 0x07f), /* multiplex ratio: 0x05f * 1/128duty */ U8X8_CA(0x0a1, 0x000), /* display start line */ //U8X8_CA(0x0a2, 0x04c), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a2, 0x000), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a0, 0x051), /* remap configuration */ U8X8_CA(0x0ab, 0x001), /* Enable internal VDD regulator (RESET) */ //U8X8_CA(0x081, 0x070), /* contrast, brightness, 0..128 */ U8X8_CA(0x081, 0x053), /* contrast, brightness, 0..128 */ //U8X8_CA(0x0b1, 0x055), /* phase length */ U8X8_CA(0x0b1, 0x051), /* phase length */ //U8X8_CA(0x0b3, 0x091), /* set display clock divide ratio/oscillator frequency (set clock as 135 frames/sec) */ U8X8_CA(0x0b3, 0x001), /* set display clock divide ratio/oscillator frequency */ //? U8X8_CA(0x0ad, 0x002), /* master configuration: disable embedded DC-DC, enable internal VCOMH */ //? U8X8_C(0x086), /* full current range (0x084, 0x085, 0x086) */ U8X8_C(0x0b9), /* use linear lookup table */ //U8X8_CA(0x0bc, 0x010), /* pre-charge voltage level */ U8X8_CA(0x0bc, 0x008), /* pre-charge voltage level */ //U8X8_CA(0x0be, 0x01c), /* VCOMH voltage */ U8X8_CA(0x0be, 0x007), /* VCOMH voltage */ U8X8_CA(0x0b6, 0x001), /* second precharge */ U8X8_CA(0x0d5, 0x062), /* enable second precharge, internal vsl (bit0 = 0) */ U8X8_C(0x0a4), /* normal display mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1327_128x128_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0a2, 0x000), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a0, 0x051), /* remap configuration */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1327_128x128_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0a2, 0x000), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a0, 0x042), /* remap configuration */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1327_midas_128x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call the 96x96 procedure at the moment */ if ( u8x8_d_ssd1327_96x96_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1327_128x128_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_128x128_init_seq); return 1; } else if ( msg == U8X8_MSG_DISPLAY_SET_FLIP_MODE ) { if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_128x128_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_128x128_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; } return 0; } /*=============================================*/ /* Waveshare 128x128 Module https://www.waveshare.com/w/upload/8/80/1.5inch_OLED_Module_User_Manual_EN.pdf https://github.com/olikraus/u8g2/issues/880 This is mostly a takeover of the EA display. */ /* https://github.com/SeeedDocument/Grove_OLED_1.12/raw/master/resources/LY120-096096.pdf */ /* http://www.seeedstudio.com/wiki/index.php?title=Twig_-_OLED_96x96 */ /* values from u8glib */ /* Re-map setting in Graphic Display Data RAM, command 0x0a0 Bit 0: Column Address Re-map Bit 1: Nibble Re-map Bit 2: Horizontal/Vertical Address Increment Bit 3: Not used, must be 0 Bit 4: COM Re-map Bit 5: Not used, must be 0 Bit 6: COM Split Odd Even Bit 7: Not used, must be 0 */ /* takeover from https://github.com/olikraus/u8g2/issues/880 */ static const uint8_t u8x8_d_ssd1327_ws_128x128_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), //--turn off oled panel U8X8_CAA(0x015, 0x000, 0x07f), //set column address, start column 0, end column 127 U8X8_CAA(0x075, 0x000, 0x07f), //set row address, start row 0, end row 127 U8X8_CA(0x081, 0x080), //set contrast control U8X8_CA(0x0a0, 0x051), //gment remap, 51 U8X8_CA(0x0a1, 0x000), //start line U8X8_CA(0x0a2, 0x000), //display offset U8X8_CAA(0x0a4, 0x0a8, 0x07f), //rmal display, set multiplex ratio U8X8_CA(0x0b1, 0x0f1), //set phase leghth U8X8_CA(0x0b3, 0x000), //set dclk, 80Hz:0xc1 90Hz:0xe1 100Hz:0x00 110Hz:0x30 120Hz:0x50 130Hz:0x70 01 U8X8_CA(0x0ab, 0x001), // U8X8_CA(0x0b6, 0x00f), //set phase leghth U8X8_CA(0x0be, 0x00f), U8X8_CA(0x0bc, 0x008), U8X8_CA(0x0d5, 0x062), U8X8_CA(0x0fd, 0x012), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1327_ws_128x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call the 96x96 procedure at the moment */ if ( u8x8_d_ssd1327_96x96_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1327_ea_w128128_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_ws_128x128_init_seq); return 1; } else if ( msg == U8X8_MSG_DISPLAY_SET_FLIP_MODE ) { if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_ea_w128128_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1327_ea_w128128_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; } return 0; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_ssd1329.c ================================================ /* u8x8_d_ssd1329.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_ssd1329_128x96_noname_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_CA(0x0b3, 0x091), /* set display clock divide ratio/oscillator frequency (set clock as 135 frames/sec) */ U8X8_CA(0x0a8, 0x05f), /* multiplex ratio: 0x03f * 1/64 duty - changed by CREESOO, acc. to datasheet, 100317*/ U8X8_CA(0x0a2, 0x000), /* display offset, shift mapping ram counter */ U8X8_CA(0x0a1, 0x000), /* display start line */ U8X8_CA(0x0ad, 0x002), /* master configuration: disable embedded DC-DC, enable internal VCOMH */ U8X8_CA(0x0a0, 0x052), /* remap configuration, horizontal address increment (bit 2 = 0), enable nibble remap (upper nibble is left, bit 1 = 1) */ U8X8_C(0x086), /* full current range (0x084, 0x085, 0x086) */ #ifdef removed U8X8_C(0x0b8), /* set gray scale table */ U8X8_A(1), /* */ U8X8_A(5), /* */ U8X8_A(10), /* */ U8X8_A(14), /* */ U8X8_A(19), /* */ U8X8_A(23), /* */ U8X8_A(28), /* */ U8X8_A(32), /* */ U8X8_A(37), /* */ U8X8_A(41), /* */ U8X8_A(46), /* */ U8X8_A(50), /* */ U8X8_A(55), /* */ U8X8_A(59), /* */ U8X8_A(63), /* */ #endif U8X8_C(0x0b7), /* set default gray scale table */ U8X8_CA(0x081, 0x070), /* contrast, brightness, 0..128 */ U8X8_CA(0x0b2, 0x051), /* frame frequency (row period) */ U8X8_CA(0x0b1, 0x055), /* phase length */ U8X8_CA(0x0bc, 0x010), /* pre-charge voltage level */ U8X8_CA(0x0b4, 0x002), /* set pre-charge compensation level (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */ U8X8_CA(0x0b0, 0x028), /* enable pre-charge compensation (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */ U8X8_CA(0x0be, 0x01c), /* VCOMH voltage */ U8X8_CA(0x0bf, 0x002|0x00d), /* VSL voltage level (not documented in the SDD1325 datasheet, but used in the NHD init seq.) */ U8X8_C(0x0a4), /* normal display mode */ U8X8_CA(0x023, 0x003), /* graphics accelleration: fill pixel */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1329_128x96_nhd_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1329_128x96_nhd_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1329_128x96_nhd_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0a0, 0x052), /* remap */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1329_128x96_nhd_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0a0, 0x041), /* remap */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* input: one tile (8 Bytes) output: Tile for ssd1329 (32 Bytes) */ static uint8_t u8x8_ssd1329_8to32_dest_buf[32]; static uint8_t *u8x8_ssd1329_8to32(U8X8_UNUSED u8x8_t *u8x8, uint8_t *ptr) { uint8_t v; uint8_t a,b; uint8_t i, j; uint8_t *dest; for( j = 0; j < 4; j++ ) { dest = u8x8_ssd1329_8to32_dest_buf; dest += j; a =*ptr; ptr++; b = *ptr; ptr++; for( i = 0; i < 8; i++ ) { v = 0; if ( a&1 ) v |= 0xf0; if ( b&1 ) v |= 0x0f; *dest = v; dest+=4; a >>= 1; b >>= 1; } } return u8x8_ssd1329_8to32_dest_buf; } static uint8_t u8x8_d_ssd1329_128x96_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, y, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1329_128x96_nhd_display_info); break; */ case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1329_128x96_noname_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1329_128x96_nhd_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1329_128x96_nhd_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1329_128x96_nhd_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1329_128x96_nhd_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* ssd1329 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 4; y = (((u8x8_tile_t *)arg_ptr)->y_pos); y *= 8; y += u8x8->x_offset; /* x_offset is used as y offset for the ssd1329 */ do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { if ( ptr[0] | ptr[1] | ptr[2] | ptr[3] | ptr[4] | ptr[5] | ptr[6] | ptr[7] ) { /* draw the tile if pattern is not zero for all bytes */ u8x8_cad_SendCmd(u8x8, 0x015 ); /* set column address */ u8x8_cad_SendArg(u8x8, x ); /* start */ u8x8_cad_SendArg(u8x8, x+3 ); /* end */ u8x8_cad_SendCmd(u8x8, 0x075 ); /* set row address */ u8x8_cad_SendArg(u8x8, y); u8x8_cad_SendArg(u8x8, y+7); u8x8_cad_SendData(u8x8, 32, u8x8_ssd1329_8to32(u8x8, ptr)); } else { /* tile is empty, use the graphics acceleration command */ /* are this really available on the SSD1329??? */ u8x8_cad_SendCmd(u8x8, 0x024 ); // draw rectangle u8x8_cad_SendArg(u8x8, x ); u8x8_cad_SendArg(u8x8, y ); u8x8_cad_SendArg(u8x8, x+3 ); u8x8_cad_SendArg(u8x8, y+7 ); u8x8_cad_SendArg(u8x8, 0 ); // clear } ptr += 8; x += 4; c--; } while( c > 0 ); //x += 4; arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_ssd1329_128x96_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 15, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /**/ /* sda_setup_time_ns = */ 100, /* ssd1329 */ /* sck_pulse_width_ns = */ 100, /* ssd1329 */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 60, /* ssd1329 */ /* tile_width = */ 16, /* tile_hight = */ 12, /* default_x_offset = */ 0, /* x_offset is used as y offset for the ssd1329 */ /* flipmode_x_offset = */ 0, /* x_offset is used as y offset for the ssd1329 */ /* pixel_width = */ 128, /* pixel_height = */ 96 }; uint8_t u8x8_d_ssd1329_128x96_noname(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1329_128x96_display_info); return 1; } return u8x8_d_ssd1329_128x96_generic(u8x8, msg, arg_int, arg_ptr); } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_ssd1606_172x72.c ================================================ /* u8x8_d_ssd1606_172x72.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SSD1606: 128x180x2 two-bit, four graylevels command 0x22: assign actions 0x20: execute actions action for command 0x022 are (more or less guessed) bit 7: Enable Clock bit 6: Enable Charge Pump bit 5: Load Temparture Value (???) bit 4: Load LUT (???) bit 3: Initial Display (???) bit 2: Pattern Display --> Requires about 945ms with the LUT from below bit 1: Disable Charge Pump bit 0: Disable Clock Disable Charge Pump and Clock require about 267ms Enable Charge Pump and Clock require about 10ms Notes: - Introduced a refresh display message, which copies RAM to display - Charge pump and clock are only enabled for the transfer RAM to display - U8x8 will not really work because of the two buffers in the SSD1606, however U8g2 should be ok. */ #include "u8x8.h" #define L(a,b,c,d) (((a)<<6)|((b)<<4)|((c)<<2)|(d)) /* GDE021A1, 2.1" EPD */ static const uint8_t u8x8_d_ssd1606_172x72_gde021a1_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x10, 0x00), /* Deep Sleep mode Control: Disable */ U8X8_CA(0x11, 0x03), /* Define data entry mode, x&y inc, x first */ U8X8_CAA(0x44, 0, 31), /* RAM x start & end, each byte has 4 pixel, 32*4=128 */ U8X8_CAA(0x45, 0, 179), /* RAM y start & end, 179 MAX */ U8X8_CA(0x4e, 0), /* set x pos, 0..31 */ U8X8_CA(0x4f, 0), /* set y pos, 0...179 */ U8X8_CA(0xf0, 0x1f), /* set booster feedback to internal */ U8X8_CA(0x22, 0xc0), /* display update seq. option: enable clk, enable CP, .... todo: this is never activated */ U8X8_C(0x32), /* write LUT register*/ #ifdef ORIGINAL_LUT /* wavefrom part of the LUT: absolute LUT... this will always force the destination color */ U8X8_A4(0x00,0x00,0x00,0x55), /* step 0 */ U8X8_A4(0x00,0x00,0x55,0x55), /* step 1 */ U8X8_A4(0x00,0x55,0x55,0x55), U8X8_A4(0xAA,0xAA,0xAA,0xAA), U8X8_A4(0x15,0x15,0x15,0x15), U8X8_A4(0x05,0x05,0x05,0x05), U8X8_A4(0x01,0x01,0x01,0x01), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), /* step 19 */ /* timing part of the LUT */ U8X8_A8(0x22,0xFB,0x22,0x1B,0x00,0x00,0x00,0x00), U8X8_A(0x00),U8X8_A(0x00), #else /* the following LUT will not change anything if the old and the new values are the same */ /* 03 02 01 00 13 12 11 10 23 22 21 20 33 32 31 30 original */ U8X8_A4(L(0, 0, 0, 0), L(0, 0, 0, 0), L(0, 0, 0, 0), L(0, 1, 1, 1)), // 0x00,0x00,0x00,0x55, step 0 U8X8_A4(L(0, 0, 0, 0), L(0, 0, 0, 0), L(1, 0, 1, 1), L(0, 1, 1, 1)), // 0x00,0x00,0x55,0x55, step 1 U8X8_A4(L(0, 0, 0, 0), L(1, 1, 0, 1), L(1, 0, 1, 1), L(0, 1, 1, 1)), // 0x00,0x55,0x55,0x55, step 2 U8X8_A4(L(2, 2, 2, 0), L(2, 2, 0, 2), L(2, 0, 2, 2), L(0, 2, 2, 2)), // 0xAA,0xAA,0xAA,0xAA, step 3 U8X8_A4(L(0, 1, 1, 0), L(0, 1, 0, 1), L(0, 0, 1, 1), L(0, 1, 1, 1)), // 0x15,0x15,0x15,0x15, step 4 U8X8_A4(L(0, 0, 1, 0), L(0, 0, 0, 1), L(0, 0, 1, 1), L(0, 0, 1, 1)), // 0x05,0x05,0x05,0x05, step 5 U8X8_A4(L(0, 0, 0, 0), L(0, 0, 0, 1), L(0, 0, 0, 1), L(0, 0, 0, 1)), // 0x01,0x01,0x01,0x01, step 6 U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), U8X8_A4(0x00,0x00,0x00,0x00), /* step 19 */ /* timing part of the LUT */ U8X8_A8(0x22,0xFB,0x22,0x1B,0x00,0x00,0x00,0x00), U8X8_A(0x00),U8X8_A(0x00), #endif U8X8_CA(0x2c, 0xa0), /* write vcom value*/ U8X8_CA(0x3c, 0x63), /* select boarder waveform */ U8X8_CA(0x22, 0xc4), /* display update seq. option: clk -> CP -> LUT -> initial display -> pattern display */ /* 0x0c4 is mentioned in chapter 9.2 of the GDE021A1 data sheet */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1606_to_display_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ //U8X8_CA(0x22, 0xc0), /* display update seq. option: Enable clock and charge pump */ //U8X8_C(0x20), /* execute sequence */ //U8X8_DLY(10), /* strange, splitting 0x0c0 does not work reliable */ U8X8_CA(0x22, 0xc4), /* display update seq. option: clk -> CP -> LUT -> initial display -> pattern display */ U8X8_C(0x20), /* execute sequence */ U8X8_DLY(250), /* the sequence above requires about 970ms */ U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(230), U8X8_CA(0x22, 0x03), /* disable clock and charge pump */ U8X8_DLY(200), /* this requres about 270ms */ U8X8_DLY(90), //U8X8_CA(0x10, 0x01), /* deep sleep mode */ //U8X8_C(0x20), /* execute sequence */ U8X8_DLY(50), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; // static const uint8_t u8x8_d_ssd1606_172x72_powersave0_seq[] = { // U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ // U8X8_END_TRANSFER(), /* disable chip */ // U8X8_END() /* end of sequence */ // }; // static const uint8_t u8x8_d_ssd1606_172x72_powersave1_seq[] = { // U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ // U8X8_END_TRANSFER(), /* disable chip */ // U8X8_END() /* end of sequence */ // }; // static const uint8_t u8x8_d_ssd1606_172x72_flip0_seq[] = { // U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ // U8X8_END_TRANSFER(), /* disable chip */ // U8X8_END() /* end of sequence */ // }; // static const uint8_t u8x8_d_ssd1606_172x72_flip1_seq[] = { // U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ // U8X8_END_TRANSFER(), /* disable chip */ // U8X8_END() /* end of sequence */ // }; static uint8_t *u8x8_convert_tile_for_ssd1606(uint8_t *t) { uint8_t i; uint16_t r; static uint8_t buf[16]; uint8_t *pbuf = buf; for( i = 0; i < 8; i++ ) { r = u8x8_upscale_byte(~(*t++)); *pbuf++ = (r>>8) & 255; *pbuf++ = r & 255; } return buf; } static void u8x8_d_ssd1606_draw_tile(u8x8_t *u8x8, uint8_t arg_int, void *arg_ptr) U8X8_NOINLINE; static void u8x8_d_ssd1606_draw_tile(u8x8_t *u8x8, uint8_t arg_int, void *arg_ptr) { uint8_t x, c, page; uint8_t *ptr; u8x8_cad_StartTransfer(u8x8); page = u8x8->display_info->tile_height; page --; page -= (((u8x8_tile_t *)arg_ptr)->y_pos); page *= 2; x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x00f ); /* scan start */ u8x8_cad_SendArg(u8x8, 0); u8x8_cad_SendCmd(u8x8, 0x011 ); /* cursor increment mode */ u8x8_cad_SendArg(u8x8, 3); u8x8_cad_SendCmd(u8x8, 0x045 ); /* window start column */ u8x8_cad_SendArg(u8x8, 0); u8x8_cad_SendArg(u8x8, 179); /* end of display */ u8x8_cad_SendCmd(u8x8, 0x044 ); /* window end page */ u8x8_cad_SendArg(u8x8, page); u8x8_cad_SendArg(u8x8, page+1); u8x8_cad_SendCmd(u8x8, 0x04f ); /* window column */ u8x8_cad_SendArg(u8x8, x); u8x8_cad_SendCmd(u8x8, 0x04e ); /* window row */ u8x8_cad_SendArg(u8x8, page); u8x8_cad_SendCmd(u8x8, 0x024 ); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendData(u8x8, 16, u8x8_convert_tile_for_ssd1606(ptr)); ptr += 8; x += 8; c--; } while( c > 0 ); arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); } static uint8_t u8x8_d_ssd1606_172x72_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1606_172x72_display_info); break; */ case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1606_172x72_gde021a1_init_seq); /* special code for the SSD1606... */ /* ensure that the initial buffer is clear and all eInk is set to white */ /* this is done here, because the LUT will be of that kind, that it uses the previous color */ /* make everything black */ u8x8_FillDisplay(u8x8); /* write content to the display */ u8x8_RefreshDisplay(u8x8); /* now make everything clear */ u8x8_FillDisplay(u8x8); /* write content to the display */ u8x8_RefreshDisplay(u8x8); /* now make everything clear */ u8x8_ClearDisplay(u8x8); /* write content to the display */ u8x8_RefreshDisplay(u8x8); u8x8_ClearDisplay(u8x8); /* write content to the display */ u8x8_RefreshDisplay(u8x8); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: /* if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1606_172x72_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1606_172x72_powersave1_seq); */ break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: /* if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1606_172x72_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1606_172x72_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } */ break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: /* u8x8_cad_StartTransfer(u8x8); u8x8_cad_EndTransfer(u8x8); */ break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_d_ssd1606_draw_tile(u8x8, arg_int, arg_ptr); break; case U8X8_MSG_DISPLAY_REFRESH: u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1606_to_display_seq); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_ssd1606_172x72_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 120, /* pre_chip_disable_wait_ns = */ 60, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /* sda_setup_time_ns = */ 50, /* SSD1606: */ /* sck_pulse_width_ns = */ 100, /* SSD1606: 100ns */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* tile_width = */ 22, /* 22*8 = 176 */ /* tile_hight = */ 9, /* 9*8 = 72 */ /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 172, /* pixel_height = */ 72 }; uint8_t u8x8_d_ssd1606_172x72(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1606_172x72_display_info); return 1; } return u8x8_d_ssd1606_172x72_generic(u8x8, msg, arg_int, arg_ptr); } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_ssd1607_200x200.c ================================================ /* u8x8_d_ssd1607_200x200.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. SSD1607: 200x300x1 command 0x22: assign actions 0x20: execute actions action for command 0x022 are (more or less guessed) bit 7: Enable Clock bit 6: Enable Charge Pump bit 5: Load Temparture Value (???) bit 4: Load LUT (???) bit 3: Initial Display (???) bit 2: Pattern Display --> Requires about 945ms with the LUT from below bit 1: Disable Charge Pump bit 0: Disable Clock Disable Charge Pump and Clock require about 267ms Enable Charge Pump and Clock require about 10ms Notes: - Introduced a refresh display message, which copies RAM to display - Charge pump and clock are only enabled for the transfer RAM to display - U8x8 will not really work because of the two buffers in the SSD1606, however U8g2 should be ok. */ #include "u8x8.h" /*=================================================*/ static const u8x8_display_info_t u8x8_ssd1607_200x200_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* values from SSD1606 */ /* post_chip_enable_wait_ns = */ 120, /* pre_chip_disable_wait_ns = */ 60, /* reset_pulse_width_ms = */ 100, /* post_reset_wait_ms = */ 100, /* sda_setup_time_ns = */ 50, /* SSD1606: */ /* sck_pulse_width_ns = */ 100, /* SSD1606: 100ns */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* write_pulse_width_ns = */ 150, /* tile_width = */ 25, /* 25*8 = 200 */ /* tile_hight = */ 25, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 200, /* pixel_height = */ 200 }; static const uint8_t u8x8_d_ssd1607_200x200_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x22, 0xc0), /* enable clock and charge pump */ U8X8_C(0x20), /* execute sequence */ U8X8_DLY(200), /* according to my measures it may take up to 150ms */ U8X8_DLY(100), /* but it might take longer */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1607_200x200_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ /* disable clock and charge pump only, deep sleep is not entered, because we will loose RAM content */ U8X8_CA(0x22, 0x02), /* only disable charge pump, HW reset seems to be required if the clock is disabled */ U8X8_C(0x20), /* execute sequence */ U8X8_DLY(20), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1607_200x200_exec_1000dly_seq[] = { // assumes, that the start transfer has happend U8X8_CA(0x22, 0x04), /* display update seq. option: pattern display */ U8X8_C(0x20), /* execute sequence */ U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static void u8x8_d_ssd1607_200x200_first_init(u8x8_t *u8x8) { u8x8_ClearDisplay(u8x8); u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x032); // program update sequence u8x8_cad_SendMultipleArg(u8x8, 8, 0x055); // all black u8x8_cad_SendMultipleArg(u8x8, 12, 0x0aa); // all white u8x8_cad_SendMultipleArg(u8x8, 10, 0x022); // 830ms u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_200x200_exec_1000dly_seq); } static uint8_t *u8x8_convert_tile_for_ssd1607(uint8_t *t) { uint8_t i; static uint8_t buf[8]; uint8_t *pbuf = buf; for( i = 0; i < 8; i++ ) { *pbuf++ = ~(*t++); } return buf; } static void u8x8_d_ssd1607_draw_tile(u8x8_t *u8x8, uint8_t arg_int, void *arg_ptr) U8X8_NOINLINE; static void u8x8_d_ssd1607_draw_tile(u8x8_t *u8x8, uint8_t arg_int, void *arg_ptr) { uint16_t x; uint8_t c, page; uint8_t *ptr; u8x8_cad_StartTransfer(u8x8); page = u8x8->display_info->tile_height; page --; page -= (((u8x8_tile_t *)arg_ptr)->y_pos); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x045 ); /* window start column */ u8x8_cad_SendArg(u8x8, x&255); u8x8_cad_SendArg(u8x8, x>>8); u8x8_cad_SendArg(u8x8, 199); /* end of display */ u8x8_cad_SendArg(u8x8, 0); u8x8_cad_SendCmd(u8x8, 0x044 ); /* window end page */ u8x8_cad_SendArg(u8x8, page); u8x8_cad_SendArg(u8x8, page); u8x8_cad_SendCmd(u8x8, 0x04f ); /* window column */ u8x8_cad_SendArg(u8x8, x&255); u8x8_cad_SendArg(u8x8, x>>8); u8x8_cad_SendCmd(u8x8, 0x04e ); /* window row */ u8x8_cad_SendArg(u8x8, page); u8x8_cad_SendCmd(u8x8, 0x024 ); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendData(u8x8, 8, u8x8_convert_tile_for_ssd1607(ptr)); ptr += 8; x += 8; c--; } while( c > 0 ); arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); } /*=================================================*/ #define L(a,b,c,d) (((a)<<6)|((b)<<4)|((c)<<2)|(d)) /* https://github.com/embeddedadventures/SSD1607/blob/master/SSD1607.cpp */ static const uint8_t u8x8_d_ssd1607_200x200_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ //U8X8_CA(0x10, 0x00), /* Deep Sleep mode Control: Disable */ U8X8_C(0x01), U8X8_A(199),U8X8_A(0),U8X8_A(0), U8X8_CA(0x03, 0x00), /* Gate Driving voltage: 15V (lowest value)*/ U8X8_CA(0x04, 0x0a), /* Source Driving voltage: 15V (mid value and POR)*/ U8X8_CA(0x0f, 0x00), /* scan start ? */ U8X8_CA(0xf0, 0x1f), /* set booster feedback to internal */ U8X8_CA(0x2c, 0xa8), /* write vcom value*/ U8X8_CA(0x3a, 0x1a), /* dummy lines */ U8X8_CA(0x3b, 0x08), /* gate time */ U8X8_CA(0x3c, 0x33), /* select boarder waveform */ U8X8_CA(0x11, 0x03), /* cursor increment mode */ U8X8_CAA(0x44, 0, 24), /* RAM x start & end, each byte has 8 pixel, 25*4=200 */ U8X8_CAAAA(0x45, 0, 0, 299&255, 299>>8), /* RAM y start & end, 0..299 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1607_to_display_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x32), /* write LUT register*/ /* according to the command table, the lut has 240 bits (=30 bytes * 8 bits) */ /* Waveform part of the LUT (20 bytes) */ /* bit 7/6: 1 - 1 transition */ /* bit 5/4: 1 - 0 transition */ /* bit 3/2: 0 - 1 transition */ /* bit 1/0: 0 - 0 transition */ /* 00 – VSS */ /* 01 – VSH */ /* 10 – VSL */ /* 11 – NA */ /* original values */ /* U8X8_A(0x02), U8X8_A(0x02), U8X8_A(0x01), U8X8_A(0x11), U8X8_A(0x12), U8X8_A(0x12), U8X8_A(0x22), U8X8_A(0x22), U8X8_A(0x66), U8X8_A(0x69), U8X8_A(0x69), U8X8_A(0x59), U8X8_A(0x58), U8X8_A(0x99), U8X8_A(0x99), U8X8_A(0x88), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), */ /* original values, L-macro */ U8X8_A(L(0,0,0,2)), // 0x02 U8X8_A(L(0,0,0,2)), // 0x02 U8X8_A(L(0,0,0,1)), // 0x01 U8X8_A(L(0,1,0,1)), // 0x11 U8X8_A(L(0,1,0,2)), // 0x12 U8X8_A(L(0,1,0,2)), // 0x12 U8X8_A(L(0,2,0,2)), // 0x22 U8X8_A(L(0,2,0,2)), // 0x22 U8X8_A(L(1,2,1,2)), // 0x66 U8X8_A(L(1,2,2,1)), // 0x69 U8X8_A(L(1,2,2,1)), // 0x69 U8X8_A(L(1,1,2,1)), // 0x59 U8X8_A(L(1,1,2,0)), // 0x58 U8X8_A(L(2,1,2,1)), // 0x99 U8X8_A(L(2,1,2,1)), // 0x99 U8X8_A(L(2,0,2,0)), // 0x88 U8X8_A(L(0,0,0,0)), // 0x00 U8X8_A(L(0,0,0,0)), // 0x00 U8X8_A(L(0,0,0,0)), // 0x00 U8X8_A(L(0,0,0,0)), // 0x00 /* orginal values without 0-0 and 1-1 transition */ /* U8X8_A(L(3,0,0,3)), // 0x02 U8X8_A(L(3,0,0,3)), // 0x02 U8X8_A(L(3,0,0,3)), // 0x01 U8X8_A(L(3,1,0,3)), // 0x11 U8X8_A(L(3,1,0,3)), // 0x12 U8X8_A(L(3,1,0,3)), // 0x12 U8X8_A(L(3,2,0,3)), // 0x22 U8X8_A(L(3,2,0,3)), // 0x22 U8X8_A(L(3,2,1,3)), // 0x66 U8X8_A(L(3,2,2,3)), // 0x69 U8X8_A(L(3,2,2,3)), // 0x69 U8X8_A(L(3,1,2,3)), // 0x59 U8X8_A(L(3,1,2,3)), // 0x58 U8X8_A(L(3,1,2,3)), // 0x99 U8X8_A(L(3,1,2,3)), // 0x99 U8X8_A(L(3,0,2,3)), // 0x88 U8X8_A(L(3,0,0,3)), // 0x00 U8X8_A(L(3,0,0,3)), // 0x00 U8X8_A(L(3,0,0,3)), // 0x00 U8X8_A(L(3,0,0,3)), // 0x00 */ /* Timing part of the LUT, 20 Phases with 4 bit each: 10 bytes */ U8X8_A(0xF8), U8X8_A(0xB4), U8X8_A(0x13), U8X8_A(0x51), U8X8_A(0x35), U8X8_A(0x51), U8X8_A(0x51), U8X8_A(0x19), U8X8_A(0x01), U8X8_A(0x00), U8X8_CA(0x22, 0x04), /* display update seq. option: clk -> CP -> LUT -> initial display -> pattern display */ U8X8_C(0x20), /* execute sequence */ U8X8_DLY(250), /* the sequence above requires about 1200ms for the 200x200 display*/ U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1607_200x200(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1607_200x200_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_200x200_init_seq); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_200x200_powersave0_seq); u8x8_d_ssd1607_200x200_first_init(u8x8); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_200x200_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_200x200_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: break; case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_d_ssd1607_draw_tile(u8x8, arg_int, arg_ptr); break; case U8X8_MSG_DISPLAY_REFRESH: u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_to_display_seq); break; default: return 0; } return 1; } /*=================================================*/ /* there is no improvement possible... so i consider the v2 version as obsolete */ static const uint8_t u8x8_d_ssd1607_v2_to_display_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ /* 0xaa, 0x09, 0x09, 0x19, 0x19, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x77, 0x77, 0x77, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00 measured 1240 ms with IL3830 196x128 0x02, 0x02, 0x01, 0x11, 0x12, 0x12, 0x12, 0x22, 0x22, 0x66, 0x69, 0x59, 0x58, 0x99, 0x99, 0x88, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xb4, 0x13, 0x51, 0x35, 0x51, 0x51, 0xe9, 0x04, 0x00 */ U8X8_C(0x32), /* write LUT register*/ /* https://github.com/olikraus/u8g2/issues/347 */ U8X8_A(0x02), U8X8_A(0x02), U8X8_A(0x01), U8X8_A(0x11), U8X8_A(0x12), U8X8_A(0x12), U8X8_A(0x22), U8X8_A(0x22), U8X8_A(0x66), U8X8_A(0x69), U8X8_A(0x69), U8X8_A(0x59), U8X8_A(0x58), U8X8_A(0x99), U8X8_A(0x99), U8X8_A(0x88), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), /* Timing part of the LUT, 20 Phases with 4 bit each: 10 bytes */ U8X8_A(0xF8), U8X8_A(0xB4), U8X8_A(0x13), U8X8_A(0x51), U8X8_A(0x35), U8X8_A(0x51), U8X8_A(0x51), U8X8_A(0xe9), U8X8_A(0x04), U8X8_A(0x00), U8X8_CA(0x22, 0x04), /* display update seq. option: clk -> CP -> LUT -> initial display -> pattern display */ U8X8_C(0x20), /* execute sequence */ U8X8_DLY(250), /* delay for 1500ms. The current sequence takes 1300ms */ U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1607_v2_200x200(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1607_200x200_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_200x200_init_seq); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_200x200_powersave0_seq); u8x8_d_ssd1607_200x200_first_init(u8x8); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_200x200_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_200x200_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: break; case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_d_ssd1607_draw_tile(u8x8, arg_int, arg_ptr); break; case U8X8_MSG_DISPLAY_REFRESH: u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_v2_to_display_seq); break; default: return 0; } return 1; } /*=================================================*/ /* GDEP015OC1 */ /* https://github.com/olikraus/u8g2/issues/454 */ static const uint8_t u8x8_d_ssd1607_gd_to_display_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ /* 0xaa, 0x09, 0x09, 0x19, 0x19, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x77, 0x77, 0x77, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00 measured 1240 ms with IL3830 196x128 0x02, 0x02, 0x01, 0x11, 0x12, 0x12, 0x12, 0x22, 0x22, 0x66, 0x69, 0x59, 0x58, 0x99, 0x99, 0x88, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xb4, 0x13, 0x51, 0x35, 0x51, 0x51, 0xe9, 0x04, 0x00 */ U8X8_C(0x32), /* write LUT register*/ /* U8X8_A(0x50), U8X8_A(0xAA), U8X8_A(0x55), U8X8_A(0xAA), U8X8_A(0x11), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0xFF), U8X8_A(0xFF), U8X8_A(0x1F), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), */ U8X8_A(0x10), U8X8_A(0x18), U8X8_A(0x18), U8X8_A(0x08), U8X8_A(0x18), // numbers based on Waveshare demo code U8X8_A(0x18), U8X8_A(0x08), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x13), U8X8_A(0x14), U8X8_A(0x44), U8X8_A(0x12), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_CA(0x22, 0xc4), /* display update seq. option: clk -> CP -> LUT -> initial display -> pattern display */ U8X8_C(0x20), /* execute sequence */ U8X8_DLY(250), /* delay for 1500ms. The current sequence takes 1300ms */ U8X8_DLY(250), U8X8_DLY(250), // U8X8_DLY(250), // U8X8_DLY(250), // U8X8_DLY(250), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1607_gd_200x200(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1607_200x200_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_200x200_init_seq); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_200x200_powersave0_seq); u8x8_d_ssd1607_200x200_first_init(u8x8); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_200x200_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_200x200_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: break; case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_d_ssd1607_draw_tile(u8x8, arg_int, arg_ptr); break; case U8X8_MSG_DISPLAY_REFRESH: u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_gd_to_display_seq); break; default: return 0; } return 1; } /*=================================================*/ static const uint8_t u8x8_d_ssd1607_ws_to_display_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x32), /* write LUT register*/ U8X8_A(0x10), U8X8_A(0x18), U8X8_A(0x18), U8X8_A(0x08), U8X8_A(0x18), // numbers based on Waveshare demo code U8X8_A(0x18), U8X8_A(0x08), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x13), U8X8_A(0x14), U8X8_A(0x44), U8X8_A(0x12), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_A(0x00), U8X8_CA(0x22, 0xc4), /* display update seq. option: clk -> CP -> LUT -> initial display -> pattern display */ U8X8_C(0x20), /* execute sequence */ U8X8_DLY(250), /* delay for 1250ms. */ U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_DLY(250), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_ssd1607_ws_to_refresh_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x22, 0x04), /* display update seq. option: clk -> CP -> LUT -> initial display -> pattern display */ U8X8_C(0x20), /* execute sequence */ // U8X8_DLY(250), // U8X8_DLY(250), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* waveshare 200x200 */ static const uint8_t u8x8_d_ssd1607_ws_200x200_init_seq[] = { // suggested code from https://github.com/olikraus/u8g2/issues/637 U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x01), /* DRIVER_OUTPUT_CONTROL: LO(EPD_HEIGHT-1), HI(EPD_HEIGHT-1). GD = 0; SM = 0; TB = 0; */ U8X8_A(199),U8X8_A(0),U8X8_A(0), U8X8_C(0x0C), /* BOOSTER_SOFT_START_CONTROL */ U8X8_A(0xd7),U8X8_A(0xd6),U8X8_A(0x9d), U8X8_CA(0x2c, 0xa8), /* WRITE_VCOM_REGISTER: VCOM 7C */ U8X8_CA(0x3a, 0x1a), /* SET_DUMMY_LINE_PERIOD: 4 dummy lines per gate */ U8X8_CA(0x3b, 0x08), /* SET_GATE_TIME: 2us per line */ U8X8_CA(0x11, 0x03), /* DATA_ENTRY_MODE_SETTING: X increment; Y increment */ U8X8_CAA(0x44, 0, 24), /* SET_RAM_X_ADDRESS_START_END_POSITION: LO(x >> 3), LO((w-1) >> 3) */ U8X8_CAAAA(0x45, 0, 0, 199&255, 199>>8), /* SET_RAM_Y_ADDRESS_START_END_POSITION: LO(y), HI(y), LO(h - 1), HI(h - 1) */ U8X8_CA(0x4e, 0), /* LO(x >> 3) */ U8X8_CAA(0x4f, 0, 0), /* LO(y), HI(y >> 8) */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_ssd1607_ws_200x200(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_ssd1607_200x200_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_ws_200x200_init_seq); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_200x200_powersave0_seq); u8x8_d_ssd1607_200x200_first_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_ws_to_display_seq);; // to setup LUT break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_200x200_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_200x200_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: break; case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_d_ssd1607_draw_tile(u8x8, arg_int, arg_ptr); break; case U8X8_MSG_DISPLAY_REFRESH: u8x8_cad_SendSequence(u8x8, u8x8_d_ssd1607_ws_to_refresh_seq); break; default: return 0; } return 1; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_st7511.c ================================================ /* u8x8_d_st7511.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2019, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 20 May 2019: https://github.com/olikraus/u8g2/issues/876 Probably HW Flip does not work */ #include "u8x8.h" static const uint8_t u8x8_d_st7511_320x240_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x015, 0x0a5), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7511_320x240_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x014, 0x0a5), /* display off */ // maybe use sleep mode here, but it not clear whether sleep mode will reset all the settings U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7511_320x240_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CAAAA(0x24, 0x01, 0xa5, 0xa5, 0xa5), /* memory control directions */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7511_320x240_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CAAAA(0x24, 0x02, 0xa5, 0xa5, 0xa5), /* memory control directions */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /*=====================================================*/ /* AV-Display: AVD-TM57QV-NW-001-B, issue 876 */ static const u8x8_display_info_t u8x8_st7511_320x240_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* ST7511 Datasheet */ /* pre_chip_disable_wait_ns = */ 150, /* ST7511 Datasheet */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 1, /* sda_setup_time_ns = */ 120, /* ST7511 Datasheet */ /* sck_pulse_width_ns = */ 150, /* ST7511 Datasheet */ /* sck_clock_hz = */ 3300000UL, /* ST7511 Datasheet: 300ns cycle */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 200, /* */ /* write_pulse_width_ns = */ 250, /* ST7511 Datasheet: 500ns */ /* tile_width = */ 40, /* width of 17*8=136 pixel */ /* tile_hight = */ 30, /* default_x_offset = */ 160, /* flipmode_x_offset = */ 0, /* pixel_width = */ 320, /* pixel_height = */ 240 }; static const uint8_t u8x8_d_st7511_320x240_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0xae, 0xa5), /* SW Reset */ U8X8_CAAAA(0x61, 0x0f, 0x04, 0x02, 0xa5), /* all power on */ U8X8_CAAAA(0x62, 0x0a, 0x06, 0x0f, 0xa5), /* electronic volumne set 1 */ U8X8_CAAAA(0x63, 0x0f, 0x0f, 0xa5, 0xa5), /* electronic volumne set 2 */ U8X8_CAAAA(0x66, 0x00, 0xa5, 0xa5, 0xa5), /* electronic volumne set 2 */ U8X8_CA(0x12, 0xa5), /* SLeeP OUT */ U8X8_DLY(50), // skiping display on here, deviation from https://github.com/olikraus/u8g2/issues/876 // will be called later in u8x8_d_st7511_320x240_powersave0_seq U8X8_CAAAA(0x22, 0x00, 0xa5, 0xa5, 0xa5), /* monochrome display */ U8X8_CAAAA(0x24, 0x01, 0xa5, 0xa5, 0xa5), /* memory control directions */ U8X8_DLY(50), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st7511_avd_320x240(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint16_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7511_320x240_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7511_320x240_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st7511_320x240_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st7511_320x240_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7511_320x240_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7511_320x240_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: // not sure how to implement this.... // u8x8_cad_StartTransfer(u8x8); // u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); // set page u8x8_cad_SendCmd(u8x8, 0x025); u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendArg(u8x8, 0x09f); // end page u8x8_cad_SendArg(u8x8, 0x000); // frame 0 u8x8_cad_SendArg(u8x8, 0x0a5); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; // set column u8x8_cad_SendCmd(u8x8, 0x026); u8x8_cad_SendArg(u8x8, (x>>8) ); u8x8_cad_SendArg(u8x8, (x&255) ); u8x8_cad_SendArg(u8x8, 0x002); u8x8_cad_SendArg(u8x8, 0x07f); // start data transfer u8x8_cad_SendCmd(u8x8, 0x02c); u8x8_cad_SendArg(u8x8, 0x0a5 ); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; while ( c > 128 ) { u8x8_cad_SendData(u8x8, 128, ptr); /* note: SendData can not handle more than 255 bytes */ c -= 128; ptr += 128; } u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_st75256.c ================================================ /* u8x8_d_st75256.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2017, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 0x030 ext 00 0x031 ext 01 0x038 ext 10 0x039 ext 11 cad 011 code examples: http://www.it610.com/article/2601023.htm normal mode: 0x00c bit format U8X8_CA( 0xbc, 0x00 ), data scan dir U8X8_A( 0xa6 ), y: 0 offset flip mode: 0x008 bit format U8X8_CA( 0xbc, 0x03 ), data scan dir U8X8_A( 0xa6 ), y: 5 offset */ #include "u8x8.h" /* not a real power down for the st75256... just a display off */ static const uint8_t u8x8_d_st75256_256x128_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x94 ), /* sleep out */ U8X8_DLY(10), U8X8_C( 0xaf ), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st75256_256x128_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0xae ), /* display off */ U8X8_C( 0x95 ), /* sleep in */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st75256_jlx256128_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x00 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x00c ), /* data format LSB top */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st75256_jlx256128_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x03 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x008 ), /* data format MSB top */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st75256_jlx172104_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x02 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x00c ), /* data format LSB top */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st75256_jlx172104_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x01 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x008 ), /* data format MSB top */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st75256_jlx256160_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x00 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x00c ), /* data format LSB top */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st75256_jlx256160_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x03 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x008 ), /* data format MSB top */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_st75256_256x128_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st75256_256x128_display_info); break; */ /* handled by the calling function case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_powersave1_seq); break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x030 ); u8x8_cad_SendCmd(u8x8, 0x081 ); /* there are 9 bit for the volume control */ u8x8_cad_SendArg(u8x8, (arg_int & 0x1f)<<1 ); /* lower 6 bit */ u8x8_cad_SendArg(u8x8, (arg_int>>5)); /* upper 3 bit */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; u8x8_cad_SendCmd(u8x8, 0x030 ); /* select command set */ u8x8_cad_SendCmd(u8x8, 0x075 ); /* row */ u8x8_cad_SendArg(u8x8, u8x8->x_offset + (((u8x8_tile_t *)arg_ptr)->y_pos)); /* x offset is used as y offset */ u8x8_cad_SendArg(u8x8, 0x04f); //u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendCmd(u8x8, 0x015 ); /* col */ u8x8_cad_SendArg(u8x8, x); u8x8_cad_SendArg(u8x8, 255); u8x8_cad_SendCmd(u8x8, 0x05c ); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* SendData can not handle more than 255 bytes, treat c > 31 correctly */ if ( c > 31 ) { u8x8_cad_SendData(u8x8, 248, ptr); /* 31*8=248 */ ptr+=248; c -= 31; } u8x8_cad_SendData(u8x8, c*8, ptr); arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*=============================================*/ /* JLX256128 */ static const u8x8_display_info_t u8x8_st75256_256x128_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 5, /* post_reset_wait_ms = */ 5, /**/ /* sda_setup_time_ns = */ 20, /* */ /* sck_pulse_width_ns = */ 40, /* */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* 400KHz */ /* data_setup_time_ns = */ 15, /* write_pulse_width_ns = */ 70, /* tile_width = */ 32, /* tile_hight = */ 16, /* default_x_offset = */ 0, /* must be 0, because this is checked also for normal mode */ /* flipmode_x_offset = */ 5, /* used as y offset */ /* pixel_width = */ 256, /* pixel_height = */ 128 }; static const uint8_t u8x8_d_st75256_256x128_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(20), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x094 ), /* sleep out */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x0ae ), /* display off */ U8X8_C( 0x031 ), /* select 01 commands */ U8X8_CA( 0x0d7, 0x09f ), /* disable auto read */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x032 ), /* analog circuit set */ U8X8_A( 0x000 ), /* code example: OSC Frequency adjustment */ U8X8_A( 0x001 ), /* Frequency on booster capacitors 1 = 6KHz? */ U8X8_A( 0x000 ), /* Bias: 1: 1/13, 2: 1/12, 3: 1/11, 4:1/10, 5:1/9 */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x020 ), /* gray levels */ U8X8_A( 0x01 ), U8X8_A( 0x03 ), U8X8_A( 0x05 ), U8X8_A( 0x07 ), U8X8_A( 0x09), U8X8_A( 0x0b ), U8X8_A( 0x0d ), U8X8_A( 0x10 ), U8X8_A( 0x11 ), U8X8_A( 0x13 ), U8X8_A( 0x15 ), U8X8_A( 0x17 ), U8X8_A( 0x19 ), U8X8_A( 0x1b ), U8X8_A( 0x1d ), U8X8_A( 0x1f ), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA(0x75, 0, 0x4f), /* row range */ U8X8_CAA(0x15, 0, 255), /* col range */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x00 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x00c ), /* data format LSB top */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0xca ), /* display control, 3 args follow */ U8X8_A( 0x00 ), /* 0x00: no clock division, 0x04: devide clock */ U8X8_A( 0x7f ), /* 1/160 duty value from the DS example code */ U8X8_A( 0x20 ), /* nline off */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x0f0, 0x010 ), /* monochrome mode = 0x010*/ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA( 0x81, 0x36, 0x05 ), /* Volume control */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x020, 0x00b ), /* Power control: Regulator, follower & booster on */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st75256_jlx256128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_st75256_256x128_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { //u8x8_SetI2CAddress(u8x8, 0x078); /* lowest I2C adr of the ST75256 */ u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st75256_256x128_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_init_seq); return 1; } else if ( msg == U8X8_MSG_DISPLAY_SET_FLIP_MODE ) { if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx256128_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx256128_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; } return 0; } /*=============================================*/ /* WO256X128, https://github.com/olikraus/u8g2/issues/891 */ static const u8x8_display_info_t u8x8_st75256_wo256x128_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 5, /* post_reset_wait_ms = */ 5, /**/ /* sda_setup_time_ns = */ 20, /* */ /* sck_pulse_width_ns = */ 40, /* */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* 400KHz */ /* data_setup_time_ns = */ 15, /* write_pulse_width_ns = */ 70, /* tile_width = */ 32, /* tile_hight = */ 16, /* default_x_offset = */ 5, /* must be 0, because this is checked also for normal mode */ /* flipmode_x_offset = */ 0, /* used as y offset */ /* pixel_width = */ 256, /* pixel_height = */ 128 }; static const uint8_t u8x8_d_st75256_wo256x128_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(20), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x094 ), /* sleep out */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x0ae ), /* display off */ U8X8_C( 0x031 ), /* select 01 commands */ U8X8_CA( 0x0d7, 0x09f ), /* disable auto read */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x032 ), /* analog circuit set */ U8X8_A( 0x000 ), /* code example: OSC Frequency adjustment */ U8X8_A( 0x001 ), /* Frequency on booster capacitors 1 = 6KHz? */ U8X8_A( 0x000 ), /* Bias: 1: 1/13, 2: 1/12, 3: 1/11, 4:1/10, 5:1/9 */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x020 ), /* gray levels */ U8X8_A( 0x01 ), U8X8_A( 0x03 ), U8X8_A( 0x05 ), U8X8_A( 0x07 ), U8X8_A( 0x09), U8X8_A( 0x0b ), U8X8_A( 0x0d ), U8X8_A( 0x10 ), U8X8_A( 0x11 ), U8X8_A( 0x13 ), U8X8_A( 0x15 ), U8X8_A( 0x17 ), U8X8_A( 0x19 ), U8X8_A( 0x1b ), U8X8_A( 0x1d ), U8X8_A( 0x1f ), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA(0x75, 0, 0x4f), /* row range */ U8X8_CAA(0x15, 0, 255), /* col range */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x01 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x008 ), /* data format LSB top */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0xca ), /* display control, 3 args follow */ U8X8_A( 0x00 ), /* 0x00: no clock division, 0x04: devide clock */ U8X8_A( 0x7f ), /* 1/160 duty value from the DS example code */ U8X8_A( 0x20 ), /* nline off */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x0f0, 0x010 ), /* monochrome mode = 0x010*/ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA( 0x81, 0x36, 0x05 ), /* Volume control */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x020, 0x00b ), /* Power control: Regulator, follower & booster on */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st75256_wo256x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_st75256_256x128_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { //u8x8_SetI2CAddress(u8x8, 0x078); /* lowest I2C adr of the ST75256 */ u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st75256_wo256x128_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_wo256x128_init_seq); return 1; } else if ( msg == U8X8_MSG_DISPLAY_SET_FLIP_MODE ) { if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx172104_flip1_seq); // this matches the init sequence u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx172104_flip0_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; } return 0; } /*=============================================*/ /* JLX25664 */ static const u8x8_display_info_t u8x8_st75256_256x64_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 5, /* post_reset_wait_ms = */ 5, /**/ /* sda_setup_time_ns = */ 20, /* */ /* sck_pulse_width_ns = */ 40, /* */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* 400KHz */ /* data_setup_time_ns = */ 15, /* write_pulse_width_ns = */ 70, /* tile_width = */ 32, /* tile_hight = */ 8, /* default_x_offset = */ 0, /* must be 0, because this is checked also for normal mode */ /* flipmode_x_offset = */ 13, /* used as y offset */ /* pixel_width = */ 256, /* pixel_height = */ 64 }; static const uint8_t u8x8_d_st75256_256x64_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(20), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x094 ), /* sleep out */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x0ae ), /* display off */ U8X8_C( 0x031 ), /* select 01 commands */ U8X8_CA( 0x0d7, 0x09f ), /* disable auto read */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x032 ), /* analog circuit set */ U8X8_A( 0x000 ), /* code example: OSC Frequency adjustment */ U8X8_A( 0x001 ), /* Frequency on booster capacitors 1 = 6KHz? */ U8X8_A( 0x005 ), /* Bias: 1: 1/13, 2: 1/12, 3: 1/11, 4:1/10, 5:1/9 */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x020 ), /* gray levels */ U8X8_A( 0x01 ), U8X8_A( 0x03 ), U8X8_A( 0x05 ), U8X8_A( 0x07 ), U8X8_A( 0x09), U8X8_A( 0x0b ), U8X8_A( 0x0d ), U8X8_A( 0x10 ), U8X8_A( 0x11 ), U8X8_A( 0x13 ), U8X8_A( 0x15 ), U8X8_A( 0x17 ), U8X8_A( 0x19 ), U8X8_A( 0x1b ), U8X8_A( 0x1d ), U8X8_A( 0x1f ), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA(0x75, 0, 0x1f), /* row range */ U8X8_CAA(0x15, 0, 255), /* col range */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x00 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x00c ), /* data format LSB top */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0xca ), /* display control, 3 args follow */ U8X8_A( 0x00 ), /* 0x00: no clock division, 0x04: devide clock */ U8X8_A( 0x3f ), /* 64 duty value from the DS example code */ U8X8_A( 0x20 ), /* nline off */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x0f0, 0x010 ), /* monochrome mode = 0x010*/ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA( 0x81, 012, 0x02 ), /* Volume control */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x020, 0x00b ), /* Power control: Regulator, follower & booster on */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st75256_jlx25664(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_st75256_256x128_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { //u8x8_SetI2CAddress(u8x8, 0x078); /* lowest I2C adr of the ST75256 */ u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st75256_256x64_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x64_init_seq); return 1; } else if ( msg == U8X8_MSG_DISPLAY_SET_FLIP_MODE ) { if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx256128_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx256128_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; } return 0; } /*=============================================*/ /* JLX172104 LCD */ static const u8x8_display_info_t u8x8_st75256_172x104_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 5, /* post_reset_wait_ms = */ 5, /**/ /* sda_setup_time_ns = */ 20, /* */ /* sck_pulse_width_ns = */ 40, /* */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* 400KHz */ /* data_setup_time_ns = */ 15, /* write_pulse_width_ns = */ 70, /* tile_width = */ 22, /* 22=176 */ /* tile_hight = */ 13, /* default_x_offset = */ 84, /* */ /* flipmode_x_offset = */ 0, /* pixel_width = */ 172, /* pixel_height = */ 104 }; static const uint8_t u8x8_d_st75256_jlx172104_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(20), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x094 ), /* sleep out */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x0ae ), /* display off */ U8X8_C( 0x031 ), /* select 01 commands */ U8X8_CA( 0x0d7, 0x09f ), /* disable auto read */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x032 ), /* analog circuit set */ U8X8_A( 0x000 ), /* code example: OSC Frequency adjustment */ U8X8_A( 0x001 ), /* Frequency on booster capacitors 1 = 6KHz? */ U8X8_A( 0x003 ), /* Bias: 1: 1/13, 2: 1/12, 3: 1/11, 4:1/10, 5:1/9 */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x020 ), /* gray levels */ U8X8_A( 0x01 ), U8X8_A( 0x03 ), U8X8_A( 0x05 ), U8X8_A( 0x07 ), U8X8_A( 0x09), U8X8_A( 0x0b ), U8X8_A( 0x0d ), U8X8_A( 0x10 ), U8X8_A( 0x11 ), U8X8_A( 0x13 ), U8X8_A( 0x15 ), U8X8_A( 0x17 ), U8X8_A( 0x19 ), U8X8_A( 0x1b ), U8X8_A( 0x1d ), U8X8_A( 0x1f ), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA(0x75, 0, 0x4f), /* row range */ U8X8_CAA(0x15, 0, 255), /* col range */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x02 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x00c ), /* data format LSB top */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0xca ), /* display control, 3 args follow */ U8X8_A( 0x00 ), /* 0x00: no clock division, 0x04: devide clock */ U8X8_A( 0x9f ), /* 1/160 duty value from the DS example code */ U8X8_A( 0x20 ), /* nline off */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x0f0, 0x010 ), /* monochrome mode = 0x010*/ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA( 0x81, 0x08, 0x04 ), /* Volume control */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x020, 0x00b ), /* Power control: Regulator, follower & booster on */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st75256_jlx172104(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; u8x8_cad_SendCmd(u8x8, 0x030 ); /* select command set */ u8x8_cad_SendCmd(u8x8, 0x075 ); /* row */ if ( u8x8->x_offset == 0 ) /* 0 means flip mode 1, then adjust y value */ u8x8_cad_SendArg(u8x8, 8+(((u8x8_tile_t *)arg_ptr)->y_pos)); else u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendArg(u8x8, 0x04f); //u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendCmd(u8x8, 0x015 ); /* col */ u8x8_cad_SendArg(u8x8, x+u8x8->x_offset); u8x8_cad_SendArg(u8x8, 255); u8x8_cad_SendCmd(u8x8, 0x05c ); /* this procedure assumes, that the overall width is 172 */ do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; c *= 8; if ( c + x > 172u ) { c = 172u; c -= x; } u8x8_cad_SendData(u8x8, c, ptr); x += c; arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); return 1; case U8X8_MSG_DISPLAY_SETUP_MEMORY: //u8x8_SetI2CAddress(u8x8, 0x078); /* lowest I2C adr of the ST75256 */ u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st75256_172x104_display_info); return 1; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx172104_init_seq); return 1; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_powersave1_seq); return 1; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx172104_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx172104_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x030 ); u8x8_cad_SendCmd(u8x8, 0x081 ); /* there are 9 bit for the volume control */ u8x8_cad_SendArg(u8x8, (arg_int & 0x1f)<<1 ); /* lower 6 bit */ u8x8_cad_SendArg(u8x8, (arg_int>>5)); /* upper 3 bit */ u8x8_cad_EndTransfer(u8x8); return 1; #endif } return 0; } /*=============================================*/ /* JLX240160 */ static const u8x8_display_info_t u8x8_st75256_240x160_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 5, /* post_reset_wait_ms = */ 5, /**/ /* sda_setup_time_ns = */ 20, /* */ /* sck_pulse_width_ns = */ 40, /* */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* 400KHz */ /* data_setup_time_ns = */ 15, /* write_pulse_width_ns = */ 70, /* tile_width = */ 30, /* tile_hight = */ 20, /* default_x_offset = */ 16, /* x offset in flipmode 0 */ /* flipmode_x_offset = */ 0, /* */ /* pixel_width = */ 240, /* pixel_height = */ 160 }; static const uint8_t u8x8_d_st75256_240x160_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(20), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x094 ), /* sleep out */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x0ae ), /* display off */ U8X8_C( 0x031 ), /* select 01 commands */ U8X8_CA( 0x0d7, 0x09f ), /* disable auto read */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x032 ), /* analog circuit set */ U8X8_A( 0x000 ), /* code example: OSC Frequency adjustment */ U8X8_A( 0x001 ), /* Frequency on booster capacitors 1 = 6KHz? */ U8X8_A( 0x000 ), /* Bias: 1: 1/13, 2: 1/12, 3: 1/11, 4:1/10, 5:1/9 */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x020 ), /* gray levels */ U8X8_A( 0x01 ), U8X8_A( 0x03 ), U8X8_A( 0x05 ), U8X8_A( 0x07 ), U8X8_A( 0x09), U8X8_A( 0x0b ), U8X8_A( 0x0d ), U8X8_A( 0x10 ), U8X8_A( 0x11 ), U8X8_A( 0x13 ), U8X8_A( 0x15 ), U8X8_A( 0x17 ), U8X8_A( 0x19 ), U8X8_A( 0x1b ), U8X8_A( 0x1d ), U8X8_A( 0x1f ), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA(0x75, 0, 0x4f), /* row range */ U8X8_CAA(0x15, 0, 239), /* col range */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x02 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x00c ), /* data format LSB top */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0xca ), /* display control, 3 args follow */ U8X8_A( 0x00 ), /* 0x00: no clock division, 0x04: devide clock */ U8X8_A( 159 ), /* 1/160 duty value from the DS example code */ U8X8_A( 0x20 ), /* nline off */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x0f0, 0x010 ), /* monochrome mode = 0x010*/ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA( 0x81, 0x18, 0x04 ), /* Volume control */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x020, 0x00b ), /* Power control: Regulator, follower & booster on */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st75256_jlx240160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; u8x8_cad_SendCmd(u8x8, 0x030 ); /* select command set */ u8x8_cad_SendCmd(u8x8, 0x075 ); /* row */ if ( u8x8->x_offset == 0 ) /* 0 means flip mode 1 */ u8x8_cad_SendArg(u8x8, 1+(((u8x8_tile_t *)arg_ptr)->y_pos)); else u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendArg(u8x8, 0x04f); //u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendCmd(u8x8, 0x015 ); /* col */ u8x8_cad_SendArg(u8x8, x+u8x8->x_offset); u8x8_cad_SendArg(u8x8, 255); u8x8_cad_SendCmd(u8x8, 0x05c ); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; c *= 8; if ( c + x > 240u ) { c = 240u; c -= x; } u8x8_cad_SendData(u8x8, c, ptr); x += c; arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); return 1; case U8X8_MSG_DISPLAY_SETUP_MEMORY: //u8x8_SetI2CAddress(u8x8, 0x078); /* lowest I2C adr of the ST75256 */ u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st75256_240x160_display_info); return 1; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_240x160_init_seq); return 1; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_powersave1_seq); return 1; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx172104_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx172104_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x030 ); u8x8_cad_SendCmd(u8x8, 0x081 ); /* there are 9 bit for the volume control */ u8x8_cad_SendArg(u8x8, (arg_int & 0x1f)<<1 ); /* lower 6 bit */ u8x8_cad_SendArg(u8x8, (arg_int>>5)); /* upper 3 bit */ u8x8_cad_EndTransfer(u8x8); return 1; #endif } return 0; } /*=============================================*/ /* JLX256160 */ static const u8x8_display_info_t u8x8_st75256_256x160_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 5, /* post_reset_wait_ms = */ 5, /**/ /* sda_setup_time_ns = */ 20, /* */ /* sck_pulse_width_ns = */ 40, /* */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* 400KHz */ /* data_setup_time_ns = */ 15, /* write_pulse_width_ns = */ 70, /* tile_width = */ 32, /* tile_hight = */ 20, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 1, /* x offset is used as y offset in flipmode */ /* pixel_width = */ 256, /* pixel_height = */ 160 }; static const uint8_t u8x8_d_st75256_256x160_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(20), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x094 ), /* sleep out */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x0ae ), /* display off */ U8X8_C( 0x031 ), /* select 01 commands */ U8X8_CA( 0x0d7, 0x09f ), /* disable auto read */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x032 ), /* analog circuit set */ U8X8_A( 0x000 ), /* code example: OSC Frequency adjustment */ U8X8_A( 0x001 ), /* Frequency on booster capacitors 1 = 6KHz? */ U8X8_A( 0x000 ), /* Bias: 1: 1/13, 2: 1/12, 3: 1/11, 4:1/10, 5:1/9 */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x020 ), /* gray levels */ U8X8_A( 0x01 ), U8X8_A( 0x03 ), U8X8_A( 0x05 ), U8X8_A( 0x07 ), U8X8_A( 0x09), U8X8_A( 0x0b ), U8X8_A( 0x0d ), U8X8_A( 0x10 ), U8X8_A( 0x11 ), U8X8_A( 0x13 ), U8X8_A( 0x15 ), U8X8_A( 0x17 ), U8X8_A( 0x19 ), U8X8_A( 0x1b ), U8X8_A( 0x1d ), U8X8_A( 0x1f ), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA(0x75, 0, 0x28), /* row range */ U8X8_CAA(0x15, 0, 0xFF), /* col range */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x00 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x00c ), /* data format LSB top */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0xca ), /* display control, 3 args follow */ U8X8_A( 0x00 ), /* 0x00: no clock division, 0x04: devide clock */ U8X8_A( 159 ), /* 1/160 duty value from the DS example code */ U8X8_A( 0x20 ), /* nline off */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x0f0, 0x010 ), /* monochrome mode = 0x010*/ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA( 0x81, 0x18, 0x05 ), /* Volume control */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x020, 0x00b ), /* Power control: Regulator, follower & booster on */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st75256_jlx256160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; u8x8_cad_SendCmd(u8x8, 0x030 ); /* select command set */ u8x8_cad_SendCmd(u8x8, 0x075 ); /* row */ if ( u8x8->x_offset == 1 ) /* 1 means flip mode 1 */ u8x8_cad_SendArg(u8x8, 1+(((u8x8_tile_t *)arg_ptr)->y_pos)); else u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendArg(u8x8, 0x04f); //u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendCmd(u8x8, 0x015 ); /* col */ u8x8_cad_SendArg(u8x8, x+u8x8->display_info->default_x_offset); u8x8_cad_SendArg(u8x8, 255); u8x8_cad_SendCmd(u8x8, 0x05c ); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* SendData can not handle more than 255 bytes, treat c > 31 correctly */ if ( c > 31 ) { u8x8_cad_SendData(u8x8, 248, ptr); /* 31*8=248 */ ptr+=248; c -= 31; } u8x8_cad_SendData(u8x8, c*8, ptr); arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); return 1; case U8X8_MSG_DISPLAY_SETUP_MEMORY: //u8x8_SetI2CAddress(u8x8, 0x078); /* lowest I2C adr of the ST75256 */ u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st75256_256x160_display_info); return 1; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x160_init_seq); return 1; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_powersave1_seq); return 1; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx256160_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx256160_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x030 ); u8x8_cad_SendCmd(u8x8, 0x081 ); /* there are 9 bit for the volume control */ u8x8_cad_SendArg(u8x8, (arg_int & 0x1f)<<1 ); /* lower 6 bit */ u8x8_cad_SendArg(u8x8, (arg_int>>5)); /* upper 3 bit */ u8x8_cad_EndTransfer(u8x8); return 1; #endif } return 0; } /*=============================================*/ /* JLX256160 mirror version #930 */ static const uint8_t u8x8_d_st75256_256x160m_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(20), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x094 ), /* sleep out */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x0ae ), /* display off */ U8X8_C( 0x031 ), /* select 01 commands */ U8X8_CA( 0x0d7, 0x09f ), /* disable auto read */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x032 ), /* analog circuit set */ U8X8_A( 0x000 ), /* code example: OSC Frequency adjustment */ U8X8_A( 0x001 ), /* Frequency on booster capacitors 1 = 6KHz? */ U8X8_A( 0x000 ), /* Bias: 1: 1/13, 2: 1/12, 3: 1/11, 4:1/10, 5:1/9 */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x020 ), /* gray levels */ U8X8_A( 0x01 ), U8X8_A( 0x03 ), U8X8_A( 0x05 ), U8X8_A( 0x07 ), U8X8_A( 0x09), U8X8_A( 0x0b ), U8X8_A( 0x0d ), U8X8_A( 0x10 ), U8X8_A( 0x11 ), U8X8_A( 0x13 ), U8X8_A( 0x15 ), U8X8_A( 0x17 ), U8X8_A( 0x19 ), U8X8_A( 0x1b ), U8X8_A( 0x1d ), U8X8_A( 0x1f ), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA(0x75, 0, 0x28), /* row range */ U8X8_CAA(0x15, 0, 0xFF), /* col range */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x02 ), /* data scan dir ( CHANGED FOR MIRROR VERSION ) */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x00c ), /* data format LSB top */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0xca ), /* display control, 3 args follow */ U8X8_A( 0x00 ), /* 0x00: no clock division, 0x04: devide clock */ U8X8_A( 159 ), /* 1/160 duty value from the DS example code */ U8X8_A( 0x20 ), /* nline off */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x0f0, 0x010 ), /* monochrome mode = 0x010*/ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA( 0x81, 0x18, 0x05 ), /* Volume control */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x020, 0x00b ), /* Power control: Regulator, follower & booster on */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st75256_jlx256160m(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; u8x8_cad_SendCmd(u8x8, 0x030 ); /* select command set */ u8x8_cad_SendCmd(u8x8, 0x075 ); /* row */ if ( u8x8->x_offset == 1 ) /* 1 means flip mode 1 */ u8x8_cad_SendArg(u8x8, 1+(((u8x8_tile_t *)arg_ptr)->y_pos)); else u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendArg(u8x8, 0x04f); //u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendCmd(u8x8, 0x015 ); /* col */ u8x8_cad_SendArg(u8x8, x+u8x8->display_info->default_x_offset); u8x8_cad_SendArg(u8x8, 255); u8x8_cad_SendCmd(u8x8, 0x05c ); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* SendData can not handle more than 255 bytes, treat c > 31 correctly */ if ( c > 31 ) { u8x8_cad_SendData(u8x8, 248, ptr); /* 31*8=248 */ ptr+=248; c -= 31; } u8x8_cad_SendData(u8x8, c*8, ptr); arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); return 1; case U8X8_MSG_DISPLAY_SETUP_MEMORY: //u8x8_SetI2CAddress(u8x8, 0x078); /* lowest I2C adr of the ST75256 */ u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st75256_256x160_display_info); return 1; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x160m_init_seq); return 1; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_powersave1_seq); return 1; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx172104_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx172104_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x030 ); u8x8_cad_SendCmd(u8x8, 0x081 ); /* there are 9 bit for the volume control */ u8x8_cad_SendArg(u8x8, (arg_int & 0x1f)<<1 ); /* lower 6 bit */ u8x8_cad_SendArg(u8x8, (arg_int>>5)); /* upper 3 bit */ u8x8_cad_EndTransfer(u8x8); return 1; #endif } return 0; } /*=============================================*/ /* JLX256160 alternative version from issue #561 */ static const u8x8_display_info_t u8x8_st75256_256x160_alt_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 5, /* post_reset_wait_ms = */ 5, /**/ /* sda_setup_time_ns = */ 20, /* */ /* sck_pulse_width_ns = */ 40, /* */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* 400KHz */ /* data_setup_time_ns = */ 15, /* write_pulse_width_ns = */ 70, /* tile_width = */ 32, /* tile_hight = */ 20, /* default_x_offset = */ 0, /* x offset in flipmode 0 */ /* flipmode_x_offset = */ 0, /* */ /* pixel_width = */ 256, /* pixel_height = */ 160 }; static const uint8_t u8x8_d_st75256_256x160_alt_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(20), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x094 ), /* sleep out */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x0ae ), /* display off */ U8X8_C( 0x031 ), /* select 01 commands */ U8X8_CA( 0x0d7, 0x09f ), /* disable auto read */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x032 ), /* analog circuit set */ U8X8_A( 0x000 ), /* code example: OSC Frequency adjustment */ U8X8_A( 0x001 ), /* Frequency on booster capacitors 1 = 6KHz? */ U8X8_A( 0x000 ), /* Bias: 1: 1/13, 2: 1/12, 3: 1/11, 4:1/10, 5:1/9 */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x020 ), /* gray levels */ U8X8_A( 0x01 ), U8X8_A( 0x03 ), U8X8_A( 0x05 ), U8X8_A( 0x07 ), U8X8_A( 0x09), U8X8_A( 0x0b ), U8X8_A( 0x0d ), U8X8_A( 0x10 ), U8X8_A( 0x11 ), U8X8_A( 0x13 ), U8X8_A( 0x15 ), U8X8_A( 0x17 ), U8X8_A( 0x19 ), U8X8_A( 0x1b ), U8X8_A( 0x1d ), U8X8_A( 0x1f ), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA(0x75, 0, 0x4f), /* row range */ U8X8_CAA(0x15, 0, 255), /* col range */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x02 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x00c ), /* data format LSB top */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0xca ), /* display control, 3 args follow */ U8X8_A( 0x00 ), /* 0x00: no clock division, 0x04: devide clock */ U8X8_A( 159 ), /* 1/160 duty value from the DS example code */ U8X8_A( 0x20 ), /* nline off */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x0f0, 0x010 ), /* monochrome mode = 0x010*/ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA( 0x81, 0x18, 0x05 ), /* Volume control */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x020, 0x00b ), /* Power control: Regulator, follower & booster on */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st75256_jlx256160_alt(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; u8x8_cad_SendCmd(u8x8, 0x030 ); /* select command set */ u8x8_cad_SendCmd(u8x8, 0x075 ); /* row */ if ( u8x8->x_offset == 0 ) /* 0 means flip mode 1 */ u8x8_cad_SendArg(u8x8, 1+(((u8x8_tile_t *)arg_ptr)->y_pos)); else u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendArg(u8x8, 0x04f); //u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendCmd(u8x8, 0x015 ); /* col */ u8x8_cad_SendArg(u8x8, x+u8x8->x_offset); u8x8_cad_SendArg(u8x8, 255); u8x8_cad_SendCmd(u8x8, 0x05c ); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* SendData can not handle more than 255 bytes, treat c > 31 correctly */ if ( c > 31 ) { u8x8_cad_SendData(u8x8, 248, ptr); /* 31*8=248 */ ptr+=248; c -= 31; } u8x8_cad_SendData(u8x8, c*8, ptr); arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); return 1; case U8X8_MSG_DISPLAY_SETUP_MEMORY: //u8x8_SetI2CAddress(u8x8, 0x078); /* lowest I2C adr of the ST75256 */ u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st75256_256x160_alt_display_info); return 1; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x160_alt_init_seq); return 1; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_powersave1_seq); return 1; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx172104_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx172104_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x030 ); u8x8_cad_SendCmd(u8x8, 0x081 ); /* there are 9 bit for the volume control */ u8x8_cad_SendArg(u8x8, (arg_int & 0x1f)<<1 ); /* lower 6 bit */ u8x8_cad_SendArg(u8x8, (arg_int>>5)); /* upper 3 bit */ u8x8_cad_EndTransfer(u8x8); return 1; #endif } return 0; } /*=============================================*/ /* JLX19296 LCD */ static const u8x8_display_info_t u8x8_st75256_192x96_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 5, /* post_reset_wait_ms = */ 5, /**/ /* sda_setup_time_ns = */ 20, /* */ /* sck_pulse_width_ns = */ 40, /* */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* 400KHz */ /* data_setup_time_ns = */ 15, /* write_pulse_width_ns = */ 70, /* tile_width = */ 24, /* tile_hight = */ 12, /* default_x_offset = */ 0, /* */ /* flipmode_x_offset = */ 64, /* pixel_width = */ 192, /* pixel_height = */ 96 }; static const uint8_t u8x8_d_st75256_jlx19296_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(20), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x094 ), /* sleep out */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x0ae ), /* display off */ U8X8_C( 0x031 ), /* select 01 commands */ U8X8_CA( 0x0d7, 0x09f ), /* disable auto read */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x032 ), /* analog circuit set */ U8X8_A( 0x000 ), /* code example: OSC Frequency adjustment */ U8X8_A( 0x001 ), /* Frequency on booster capacitors 1 = 6KHz? */ U8X8_A( 0x003 ), /* Bias: 1: 1/13, 2: 1/12, 3: 1/11, 4:1/10, 5:1/9 */ //U8X8_C( 0x031 ), /* select 01 commands */ U8X8_C( 0x020 ), /* gray levels */ U8X8_A( 0x01 ), U8X8_A( 0x03 ), U8X8_A( 0x05 ), U8X8_A( 0x07 ), U8X8_A( 0x09), U8X8_A( 0x0b ), U8X8_A( 0x0d ), U8X8_A( 0x10 ), U8X8_A( 0x11 ), U8X8_A( 0x13 ), U8X8_A( 0x15 ), U8X8_A( 0x17 ), U8X8_A( 0x19 ), U8X8_A( 0x1b ), U8X8_A( 0x1d ), U8X8_A( 0x1f ), U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA(0x75, 0, 0x4f), /* row range */ U8X8_CAA(0x15, 0, 255), /* col range */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0xbc, 0x00 ), /* data scan dir */ U8X8_A( 0xa6 ), /* ??? */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0x00c ), /* data format LSB top */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_C( 0xca ), /* display control, 3 args follow */ U8X8_A( 0x00 ), /* 0x00: no clock division, 0x04: devide clock */ U8X8_A( 0x9f ), /* 1/160 duty value from the DS example code */ U8X8_A( 0x20 ), /* nline off */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x0f0, 0x010 ), /* monochrome mode = 0x010*/ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CAA( 0x81, 0x2e, 0x03 ), /* Volume control */ //U8X8_C( 0x030 ), /* select 00 commands */ U8X8_CA( 0x020, 0x00b ), /* Power control: Regulator, follower & booster on */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st75256_jlx19296(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; u8x8_cad_SendCmd(u8x8, 0x030 ); /* select command set */ u8x8_cad_SendCmd(u8x8, 0x075 ); /* row */ if ( u8x8->x_offset == 0 ) /* 0 means flip mode 1, then adjust y value */ u8x8_cad_SendArg(u8x8, 8+(((u8x8_tile_t *)arg_ptr)->y_pos)); else u8x8_cad_SendArg(u8x8, 1+(((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendArg(u8x8, 0x04f); //u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendCmd(u8x8, 0x015 ); /* col */ u8x8_cad_SendArg(u8x8, x+u8x8->x_offset); u8x8_cad_SendArg(u8x8, 255); u8x8_cad_SendCmd(u8x8, 0x05c ); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; c *= 8; if ( c + x > 192u ) { c = 192u; c -= x; } u8x8_cad_SendData(u8x8, c, ptr); x += c; arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); return 1; case U8X8_MSG_DISPLAY_SETUP_MEMORY: //u8x8_SetI2CAddress(u8x8, 0x078); /* lowest I2C adr of the ST75256 */ u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st75256_192x96_display_info); return 1; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx19296_init_seq); return 1; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_256x128_powersave1_seq); return 1; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx256160_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx256160_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; /* if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx172104_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st75256_jlx172104_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; */ #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x030 ); u8x8_cad_SendCmd(u8x8, 0x081 ); /* there are 9 bit for the volume control */ u8x8_cad_SendArg(u8x8, (arg_int & 0x1f)<<1 ); /* lower 6 bit */ u8x8_cad_SendArg(u8x8, (arg_int>>5)); /* upper 3 bit */ u8x8_cad_EndTransfer(u8x8); return 1; #endif } return 0; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_st75320.c ================================================ /* u8x8_d_st75320.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2019, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ST75320: 320x240 monochrome LCD https://github.com/olikraus/u8g2/issues/921 */ #include "u8x8.h" static const uint8_t u8x8_d_st75320_jlx320240_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st75320_jlx320240_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st75320_jlx320240_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0xC4, 0x02), /* COM Output Status, Bits 0 & 1 */ U8X8_C(0xA1), /* Column Address Direction: Bit 0 */ //U8X8_C(0x0a1), /* segment remap a0/a1*/ //U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st75320_jlx320240_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ //U8X8_C(0x0a0), /* segment remap a0/a1*/ //U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_CA(0xC4, 0x03), /* COM Output Status, Bits 0 & 1 */ U8X8_C(0xA0), /* Column Address Direction: Bit 0 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /*===================================================*/ static uint8_t u8x8_d_st75320_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint16_t x; uint8_t c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st75320_jlx320240_display_info); break; */ /* handled by the calling function case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st75320_jlx320240_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st75320_jlx320240_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st75320_jlx320240_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st75320_jlx320240_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st75320_jlx320240_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int<<2 ); u8x8_cad_SendArg(u8x8, arg_int>>6 ); u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x013); u8x8_cad_SendArg(u8x8, (x>>8) ); u8x8_cad_SendArg(u8x8, (x&255) ); u8x8_cad_SendCmd(u8x8, 0x0b1 ); u8x8_cad_SendArg(u8x8, (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendCmd(u8x8, 0x01d ); // write data do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* SendData can not handle more than 255 bytes */ if ( c > 31 ) { u8x8_cad_SendData(u8x8, 248, ptr); /* 31*8=248 */ ptr+=248; c -= 31; } u8x8_cad_SendData(u8x8, c*8, ptr); arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*===================================================*/ /* QT-2832TSWUG02/ZJY-2832TSWZG02 */ static const uint8_t u8x8_d_st75320_jlx320240_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0xAE), // Display OFF U8X8_CA(0xEA, 0x00), // Power Discharge Control, Discharge OFF U8X8_C(0xA8), // sleep out U8X8_C(0xAB), // OSC ON U8X8_C(0x69), // Temperature Detection ON U8X8_C(0x4E), // TC Setting U8X8_A8(0xff, 0x44, 0x12, 0x11, 0x11, 0x11, 0x22, 0x23), U8X8_CAA(0x39, 0x00, 0x00), //TC Flag U8X8_CA(0x2B, 0x00), // Frame Rate Level U8X8_CAA(0x5F, 0x66, 0x66), // Set Frame Frequency, fFR=80Hz in all temperature range U8X8_CAAA(0xEC, 0x19, 0x64, 0x6e), // FR Compensation Temp. Range, TA = -15 degree, TB = 60 degree, TC = 70 degree U8X8_CAA(0xED, 0x04, 0x04), // Temp. Hysteresis Value (thermal sensitivity) U8X8_C(0xA6), // Display Inverse OFF U8X8_C(0xA4), // Disable Display All Pixel ON U8X8_CA(0xC4, 0x02), // COM Output Status U8X8_C(0xA1), // Column Address Direction: MX=0 U8X8_CAA(0x6D, 0x07, 0x00), // Display Area, Duty = 1/240 duty, Start Group = 1 U8X8_C(0x84), // Display Data Input Direction: Column U8X8_CA(0x36, 0x1e), // Set N-Line U8X8_C(0xE4), // N-Line On U8X8_CA(0xE7, 0x19), // LCD Drive Method //NLFR=1// U8X8_CAA(0x81, 0x4f, 0x01), // OX81: Set EV=64h, 0..255, 0..3 U8X8_CA(0xA2, 0x0a), // BIAS //1/16 BIAS U8X8_CA(0x25, 0x020), // Power Control //AVDD ON U8X8_DLY(10), U8X8_CA(0x25, 0x60), // Power Control//AVDD, MV3 & NAVDD ON U8X8_DLY(10), U8X8_CA(0x25, 0x70), // Power Control //AVDD, MV3, NAVDD & V3 ON U8X8_DLY(10), U8X8_CA(0x25, 0x78), // Power Control//AVDD, MV3, NAVDD, V3 & VPF ON U8X8_DLY(10), U8X8_CA(0x25, 0x7c), // Power Control//AVDD, MV3, NAVDD, V3, VPF & VNF ON U8X8_DLY(10), U8X8_CA(0x25, 0x7e), // Power Control//VOUT, AVDD, MV3, NAVDD, V3, VPF & VNF ON U8X8_DLY(10), U8X8_CA(0x25, 0x7f), // Power Control/VOUT, AVDD, MV3, NAVDD, V3, VPF & VNF ON U8X8_DLY(10), //U8X8_C(0xaf); //Display ON U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_st75320_jlx320240_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 5, /* post_reset_wait_ms = */ 5, /**/ /* sda_setup_time_ns = */ 20, /* */ /* sck_pulse_width_ns = */ 40, /* */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* 400KHz */ /* data_setup_time_ns = */ 15, /* write_pulse_width_ns = */ 70, /* tile_width = */ 40, /* tile_hight = */ 30, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 320, /* pixel_height = */ 240 }; uint8_t u8x8_d_st75320_jlx320240(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_st75320_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; switch(msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st75320_jlx320240_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st75320_jlx320240_display_info); break; default: return 0; } return 1; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_st7565.c ================================================ /* u8x8_d_st7565.c also includes support for nt7534 Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_st7565_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a4), /* all pixel off, issue 142 */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7565_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7565_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7565_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7565_zflip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7565_zflip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_st7565_128x64_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* st7565 datasheet, table 26, tcsh */ /* pre_chip_disable_wait_ns = */ 50, /* st7565 datasheet, table 26, tcss */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 1, /* sda_setup_time_ns = */ 50, /* st7565 datasheet, table 26, tsds */ /* sck_pulse_width_ns = */ 120, /* half of cycle time (100ns according to datasheet), AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* st7565 datasheet, table 24, tds8 */ /* write_pulse_width_ns = */ 80, /* st7565 datasheet, table 24, tcclw */ /* tile_width = */ 16, /* width of 16*8=128 pixel */ /* tile_hight = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 4, /* pixel_width = */ 128, /* pixel_height = */ 64 }; uint8_t u8x8_d_st7565_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* The following if condition checks the hardware limits of the st7565 controller: It is not allowed to write beyond the display limits. This is in fact an issue within flip mode. */ if ( c + x > 132u ) { c = 132u; c -= x; } do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; /* handled in the calling procedure case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7565_128x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1701_dogs102_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_powersave1_seq); break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int >> 2 ); /* st7565 has range from 0 to 63 */ u8x8_cad_EndTransfer(u8x8); break; #endif default: return 0; } return 1; } /*================================================*/ /* DOGM128 */ static const uint8_t u8x8_d_st7565_dogm128_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x0a1), /* ADC set to reverse */ U8X8_C(0x0c0), /* common output mode */ // Flipmode // U8X8_C(0x0a0), /* ADC set to reverse */ // U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a2), /* LCD bias 1/9 */ U8X8_C(0x02f), /* all power control circuits on (regulator, booster and follower) */ U8X8_CA(0x0f8, 0x000), /* set booster ratio to 4x */ U8X8_C(0x027), /* set V0 voltage resistor ratio to max */ U8X8_CA(0x081, 0x018), /* set contrast, contrast value, EA default: 0x016 */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st7565_ea_dogm128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_st7565_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7565_128x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_dogm128_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* LM6063 https://github.com/olikraus/u8g2/issues/893 */ static const uint8_t u8x8_d_st7565_lm6063_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x0a1), /* ADC set to reverse */ U8X8_C(0x0c0), /* common output mode */ // Flipmode // U8X8_C(0x0a0), /* ADC set to reverse */ // U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a2), /* LCD bias 1/9 */ U8X8_C(0x02f), /* all power control circuits on (regulator, booster and follower) */ U8X8_CA(0x0f8, 0x000), /* set booster ratio to 4x */ U8X8_C(0x027), /* set V0 voltage resistor ratio to max */ U8X8_CA(0x081, 50/4), /* set contrast, contrast value, 40..60 seems to be good */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st7565_lm6063(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_st7565_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7565_128x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_lm6063_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* Displaytech 64128n */ static const uint8_t u8x8_d_st7565_64128n_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ #ifdef NOT_WORKING U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x0a1), /* ADC set to reverse */ U8X8_C(0x0c0), /* common output mode */ // Flipmode // U8X8_C(0x0a0), /* ADC set to reverse */ // U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a2), /* LCD bias 1/9 */ U8X8_C(0x02f), /* all power control circuits on */ //U8X8_CA(0x0f8, 0x000), /* set booster ratio to 4x */ //U8X8_C(0x027), /* set V0 voltage resistor ratio to max */ U8X8_C(0x010), /* Set V0 voltage resistor ratio. Setting for controlling brightness of Displaytech 64128N */ U8X8_CA(0x081, 0x01e), /* set contrast, contrast value */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ #else U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0A2), /* 0x0a2: LCD bias 1/9 (according to Displaytech 64128N datasheet) */ U8X8_C(0x0a1), /* ADC set to reverse */ U8X8_C(0x0c0), /* common output mode */ //U8X8_C(0x0A0), /* Normal ADC Select (according to Displaytech 64128N datasheet) */ //U8X8_C(0x0c8), /* common output mode: set scan direction normal operation/SHL Select, 0x0c0 --> SHL = 0, normal, 0x0c8 --> SHL = 1 */ U8X8_C(0x040), /* Display start line for Displaytech 64128N */ U8X8_C(0x028 | 0x04), /* power control: turn on voltage converter */ U8X8_C(0x028 | 0x06), /* power control: turn on voltage regulator */ U8X8_C(0x028 | 0x07), /* power control: turn on voltage follower */ U8X8_C(0x010), /* Set V0 voltage resistor ratio. Setting for controlling brightness of Displaytech 64128N */ /* 19 Jul 17: Not sure if this is true, cmd 0x1? is used to set the column */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x081), /* set contrast */ U8X8_C(0x01e), /* Contrast value. Setting for controlling brightness of Displaytech 64128N */ //U8X8_C(0x0af), /* display on */ //U8X8_C(0x0a5), /* display all points, ST7565 */ //U8X8_C(0x0a4), /* normal display */ U8X8_C(0x0ae), /* display off */ #endif U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_st7565_64128n_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* st7565 datasheet, table 26, tcsh */ /* pre_chip_disable_wait_ns = */ 50, /* st7565 datasheet, table 26, tcss */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 1, /* sda_setup_time_ns = */ 50, /* st7565 datasheet, table 26, tsds */ /* sck_pulse_width_ns = */ 120, /* half of cycle time (100ns according to datasheet), AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* st7565 datasheet, table 24, tds8 */ /* write_pulse_width_ns = */ 80, /* st7565 datasheet, table 24, tcclw */ /* tile_width = */ 16, /* width of 16*8=128 pixel */ /* tile_hight = */ 8, /* default_x_offset = */ 4, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 64 }; uint8_t u8x8_d_st7565_64128n(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_st7565_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7565_64128n_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_64128n_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* ZOLEN 128x64 */ static const uint8_t u8x8_d_st7565_zolen_128x64_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x0a1), /* ADC set to reverse */ U8X8_C(0x0c8), /* common output mode */ // Flipmode // U8X8_C(0x0a0), /* ADC set to reverse */ // U8X8_C(0x0c0), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a2), /* LCD bias 1/9 */ U8X8_C(0x02f), /* all power control circuits on (regulator, booster and follower) */ U8X8_CA(0x0f8, 0x000), /* set booster ratio to 4x */ U8X8_C(0x027), /* set V0 voltage resistor ratio to max */ U8X8_CA(0x081, 0x007), /* set contrast, contrast value, EA default: 0x016 */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st7565_zolen_128x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_st7565_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7565_128x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_zolen_128x64_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_zflip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_zflip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* NHD-C12832 */ static const u8x8_display_info_t u8x8_st7565_128x32_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* st7565 datasheet, table 26, tcsh */ /* pre_chip_disable_wait_ns = */ 50, /* st7565 datasheet, table 26, tcss */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 1, /* sda_setup_time_ns = */ 50, /* st7565 datasheet, table 26, tsds */ /* sck_pulse_width_ns = */ 120, /* half of cycle time (100ns according to datasheet), AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* st7565 datasheet, table 24, tds8 */ /* write_pulse_width_ns = */ 80, /* st7565 datasheet, table 24, tcclw */ /* tile_width = */ 16, /* width of 16*8=128 pixel */ /* tile_hight = */ 4, /* default_x_offset = */ 4, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 32 }; static const uint8_t u8x8_d_st7565_nhd_c12832_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x0a1), /* ADC set to reverse */ U8X8_C(0x0c0), /* common output mode */ // Flipmode //U8X8_C(0x0a0), /* ADC set to reverse */ //U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a2), /* LCD bias 1/9 */ U8X8_C(0x02f), /* all power control circuits on */ U8X8_CA(0x0f8, 0x000), /* set booster ratio to 4x */ U8X8_C(0x023), /* set V0 voltage resistor ratio to large*/ U8X8_CA(0x081, 0x00a), /* set contrast, contrast value NHD C12832 */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st7565_nhd_c12832(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_st7565_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7565_128x32_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_nhd_c12832_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* NHD-C12864 */ static const u8x8_display_info_t u8x8_st7565_nhd_c12864_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* st7565 datasheet, table 26, tcsh */ /* pre_chip_disable_wait_ns = */ 50, /* st7565 datasheet, table 26, tcss */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 1, /* sda_setup_time_ns = */ 50, /* st7565 datasheet, table 26, tsds */ /* sck_pulse_width_ns = */ 120, /* half of cycle time (100ns according to datasheet), AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* st7565 datasheet, table 24, tds8 */ /* write_pulse_width_ns = */ 80, /* st7565 datasheet, table 24, tcclw */ /* tile_width = */ 16, /* width of 16*8=128 pixel */ /* tile_hight = */ 8, /* default_x_offset = */ 4, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 64 }; static const uint8_t u8x8_d_st7565_nhd_c12864_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x0a1), /* ADC set to reverse */ U8X8_C(0x0c0), /* common output mode */ // Flipmode //U8X8_C(0x0a0), /* ADC set to reverse */ //U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a2), /* LCD bias 1/9 */ U8X8_C(0x02f), /* all power control circuits on */ U8X8_CA(0x0f8, 0x000), /* set booster ratio to 4x */ U8X8_C(0x023), /* set V0 voltage resistor ratio to large*/ U8X8_CA(0x081, 180), /* set contrast, contrast value NHD C12864, see issue 186, increased contrast to 180 (issue 219) */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st7565_nhd_c12864(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_st7565_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7565_nhd_c12864_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_nhd_c12864_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* JLX12864 */ uint8_t u8x8_d_st7565_jlx12864(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { return u8x8_d_st7565_nhd_c12864(u8x8, msg, arg_int, arg_ptr); } /*================================================*/ /* LM6059 (Adafruit)... probably this is a ST7567 display */ static const uint8_t u8x8_d_st7565_lm6059_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x060), /* set display start line to ... */ U8X8_C(0x0a0), /* ADC set to reverse */ U8X8_C(0x0c8), /* common output mode */ //U8X8_C(0x0a1), /* ADC set to reverse */ //U8X8_C(0x0c0), /* common output mode */ // Flipmode // U8X8_C(0x0a0), /* ADC set to reverse */ // U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a3), /* LCD bias 1/9 */ U8X8_C(0x02f), /* all power control circuits on (regulator, booster and follower) */ U8X8_CA(0x0f8, 0x000), /* set booster ratio to 4x (ST7567 feature) */ U8X8_C(0x027), /* set V0 voltage resistor ratio to max */ U8X8_CA(0x081, 0x018), /* set contrast, contrast value, EA default: 0x016 */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_st7565_lm6059_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* st7565 datasheet, table 26, tcsh */ /* pre_chip_disable_wait_ns = */ 50, /* st7565 datasheet, table 26, tcss */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 1, /* sda_setup_time_ns = */ 50, /* st7565 datasheet, table 26, tsds */ /* sck_pulse_width_ns = */ 120, /* half of cycle time (100ns according to datasheet), AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* st7565 datasheet, table 24, tds8 */ /* write_pulse_width_ns = */ 80, /* st7565 datasheet, table 24, tcclw */ /* tile_width = */ 16, /* width of 16*8=128 pixel */ /* tile_hight = */ 8, /* default_x_offset = */ 1, /* not sure... */ /* flipmode_x_offset = */ 3, /* pixel_width = */ 128, /* pixel_height = */ 64 }; uint8_t u8x8_d_st7565_lm6059(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_st7565_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7565_lm6059_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_lm6059_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip1_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip0_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* LX12864 issue 576 */ static const uint8_t u8x8_d_st7565_lx12864_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x060), /* set display start line to ... */ U8X8_C(0x0a0), /* ADC set to reverse */ U8X8_C(0x0c8), /* common output mode */ //U8X8_C(0x0a1), /* ADC set to reverse */ //U8X8_C(0x0c0), /* common output mode */ // Flipmode // U8X8_C(0x0a0), /* ADC set to reverse */ // U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a2), /* LCD bias 1/9 */ U8X8_C(0x02f), /* all power control circuits on (regulator, booster and follower) */ U8X8_CA(0x0f8, 0x000), /* set booster ratio to 4x (ST7567 feature) */ U8X8_C(0x027), /* set V0 voltage resistor ratio to max */ U8X8_CA(0x081, 0x008), /* set contrast, contrast value */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_st7565_lx12864_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* st7565 datasheet, table 26, tcsh */ /* pre_chip_disable_wait_ns = */ 50, /* st7565 datasheet, table 26, tcss */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 1, /* sda_setup_time_ns = */ 50, /* st7565 datasheet, table 26, tsds */ /* sck_pulse_width_ns = */ 120, /* half of cycle time (100ns according to datasheet), AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* st7565 datasheet, table 24, tds8 */ /* write_pulse_width_ns = */ 80, /* st7565 datasheet, table 24, tcclw */ /* tile_width = */ 16, /* width of 16*8=128 pixel */ /* tile_hight = */ 8, /* default_x_offset = */ 1, /* not sure... */ /* flipmode_x_offset = */ 3, /* pixel_width = */ 128, /* pixel_height = */ 64 }; uint8_t u8x8_d_st7565_lx12864(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_st7565_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7565_lx12864_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_lx12864_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip1_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip0_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* ERC12864-1 (buydisplay.com) */ static const uint8_t u8x8_d_st7565_erc12864_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to ... */ U8X8_C(0x0a0), /* ADC set to reverse */ U8X8_C(0x0c8), /* common output mode */ //U8X8_C(0x0a1), /* ADC set to reverse */ //U8X8_C(0x0c0), /* common output mode */ // Flipmode // U8X8_C(0x0a0), /* ADC set to reverse */ // U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a3), /* LCD bias 1/9 */ U8X8_C(0x02f), /* all power control circuits on (regulator, booster and follower) */ U8X8_CA(0x0f8, 0x000), /* set booster ratio to 4x (ST7567 feature)*/ U8X8_C(0x027), /* set V0 voltage resistor ratio to max */ U8X8_CA(0x081, 0x018), /* set contrast, contrast value, EA default: 0x016 */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_st7565_erc12864_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* st7565 datasheet, table 26, tcsh */ /* pre_chip_disable_wait_ns = */ 50, /* st7565 datasheet, table 26, tcss */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 1, /* sda_setup_time_ns = */ 50, /* st7565 datasheet, table 26, tsds */ /* sck_pulse_width_ns = */ 120, /* half of cycle time (100ns according to datasheet), AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* st7565 datasheet, table 24, tds8 */ /* write_pulse_width_ns = */ 80, /* st7565 datasheet, table 24, tcclw */ /* tile_width = */ 16, /* width of 16*8=128 pixel */ /* tile_hight = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 4, /* pixel_width = */ 128, /* pixel_height = */ 64 }; uint8_t u8x8_d_st7565_erc12864(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_st7565_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7565_erc12864_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_erc12864_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip1_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip0_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* ERC12864-1 alternative version, suggested in issue 790 */ static const uint8_t u8x8_d_st7565_erc12864_alt_init_seq[] = { // original sequence // U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ // U8X8_C(0x0e2), /* soft reset */ // U8X8_C(0x0ae), /* display off */ // U8X8_C(0x040), /* set display start line to ... */ // U8X8_C(0x0a0), /* ADC set to reverse */ // U8X8_C(0x0c8), /* common output mode */ // U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ // U8X8_C(0x0a3), /* LCD bias 1/9 */ // U8X8_C(0x02f), /* all power control circuits on (regulator, booster and follower) */ // U8X8_CA(0x0f8, 0x000), /* set booster ratio to 4x (ST7567 feature)*/ // U8X8_C(0x027), /* set V0 voltage resistor ratio to max */ // U8X8_CA(0x081, 0x018), /* set contrast, contrast value, EA default: 0x016 */ // U8X8_C(0x0ae), /* display off */ // U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ // U8X8_END_TRANSFER(), /* disable chip */ // U8X8_END() /* end of sequence */ // suggested in https://github.com/olikraus/u8g2/issues/790 U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to ... */ U8X8_C(0x0a0), /* ADC set to reverse */ U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a2), /* LCD bias 1/9 - *** Changed by Ismail - was 0xa3 - 1/7 bias we were getting dark pixel off */ U8X8_C(0x02f), /* all power control circuits on (regulator, booster and follower) */ U8X8_CA(0x0f8, 0x000), /* set booster ratio to 4x (ST7567 feature)*/ U8X8_C(0x027), /* set V0 voltage resistor ratio to max */ U8X8_CA(0x081, 0x05), /* set contrast, contrast value, EA default: 0x016 - *** Changed by Ismail to 0x05 */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st7565_erc12864_alt(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_st7565_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7565_erc12864_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_erc12864_alt_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip1_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip0_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* NT7534, TG12864R */ /* The NT7534 has an extended command set for the ST7565, however this is not used. */ /* The TG12864R display is also shifted in lines, like the LM6059/Adafruit display */ /* However contrast seems to be different */ static const uint8_t u8x8_d_nt7534_tg12864r_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x060), /* set display start line to ... */ U8X8_C(0x0a0), /* ADC set to reverse */ U8X8_C(0x0c8), /* common output mode */ // Flipmode //U8X8_C(0x0a1), /* ADC set to reverse */ //U8X8_C(0x0c0), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a3), /* LCD bias 1/9 */ U8X8_C(0x02f), /* all power control circuits on (regulator, booster and follower) */ //U8X8_CA(0x0f8, 0x000), /* set booster ratio to 4x (ST7567 feature)*/ U8X8_C(0x027), /* set V0 voltage resistor ratio to max */ U8X8_CA(0x081, 0x009), /* set contrast, contrast value, EA default: 0x016 */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_nt7534_tg12864r(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_st7565_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: /* reuse the LM6059 data structure... this display seems to have similar shifts and offsets */ u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7565_lm6059_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); //u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_lm6059_init_seq); u8x8_cad_SendSequence(u8x8, u8x8_d_nt7534_tg12864r_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip1_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip0_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* EA DOGM132 */ static const u8x8_display_info_t u8x8_st7565_dogm132_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* st7565 datasheet, table 26, tcsh */ /* pre_chip_disable_wait_ns = */ 50, /* st7565 datasheet, table 26, tcss */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 1, /* sda_setup_time_ns = */ 50, /* st7565 datasheet, table 26, tsds */ /* sck_pulse_width_ns = */ 120, /* half of cycle time (100ns according to datasheet), AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* st7565 datasheet, table 24, tds8 */ /* write_pulse_width_ns = */ 80, /* st7565 datasheet, table 24, tcclw */ /* tile_width = */ 17, /* width of 16*8=136 pixel */ /* tile_hight = */ 4, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 132, /* pixel_height = */ 32 }; static const uint8_t u8x8_d_st7565_dogm132_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x0a1), /* ADC set to reverse */ U8X8_C(0x0c0), /* common output mode */ // Flipmode //U8X8_C(0x0a0), /* ADC set to reverse */ //U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a2), /* LCD bias 1/9 */ U8X8_C(0x02f), /* all power control circuits on */ U8X8_CA(0x0f8, 0x000), /* set booster ratio to 4x */ U8X8_C(0x023), /* set V0 voltage resistor ratio to large*/ U8X8_CA(0x081, 0x01f), /* set contrast, contrast value EA DOGM132 */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st7565_ea_dogm132(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_st7565_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7565_dogm132_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_dogm132_init_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7565_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; /* msg unknown */ } } return 1; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_st7567.c ================================================ /* u8x8_d_st7567.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_st7567_132x64_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a4), /* all pixel off, issue 142 */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7567_132x64_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7567_132x64_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7567_132x64_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7567_n_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7567_n_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /*=====================================================*/ static const u8x8_display_info_t u8x8_st7567_132x64_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* */ /* pre_chip_disable_wait_ns = */ 50, /* */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 1, /* sda_setup_time_ns = */ 50, /* */ /* sck_pulse_width_ns = */ 120, /* */ /* sck_clock_hz = */ 4000000UL, /* */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* */ /* write_pulse_width_ns = */ 80, /* */ /* tile_width = */ 17, /* width of 17*8=136 pixel */ /* tile_hight = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 132, /* pixel_height = */ 64 }; static const uint8_t u8x8_d_st7567_132x64_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x0a1), /* ADC set to reverse */ U8X8_C(0x0c0), /* common output mode */ // Flipmode //U8X8_C(0x0a0), /* ADC set to reverse */ //U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a3), /* LCD bias 1/7 */ /* power on sequence from paxinstruments */ U8X8_C(0x028|4), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x028|6), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x028|7), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x026), /* v0 voltage resistor ratio */ U8X8_CA(0x081, 0x027), /* set contrast, contrast value*/ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* pax instruments 132x64 display */ uint8_t u8x8_d_st7567_pi_132x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7567_132x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int >> 2 ); /* st7567 has range from 0 to 63 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* The following if condition checks the hardware limits of the st7567 controller: It is not allowed to write beyond the display limits. This is in fact an issue within flip mode. */ if ( c + x > 132u ) { c = 132u; c -= x; } do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*=====================================================*/ static const u8x8_display_info_t u8x8_st7567_jlx12864_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* */ /* pre_chip_disable_wait_ns = */ 50, /* */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 1, /* sda_setup_time_ns = */ 50, /* */ /* sck_pulse_width_ns = */ 120, /* */ /* sck_clock_hz = */ 4000000UL, /* */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* */ /* write_pulse_width_ns = */ 80, /* */ /* tile_width = */ 16, /* width of 16*8=128 pixel */ /* tile_hight = */ 8, /* default_x_offset = */ 4, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 64 }; static const uint8_t u8x8_st7567_jlx12864_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x0a1), /* ADC set to reverse */ U8X8_C(0x0c0), /* common output mode */ // Flipmode //U8X8_C(0x0a0), /* ADC set to reverse */ //U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a3), /* LCD bias 1/7 */ /* power on sequence from paxinstruments */ U8X8_C(0x028|4), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x028|6), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x028|7), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x023), /* v0 voltage resistor ratio */ U8X8_CA(0x081, 42>>2), /* set contrast, contrast value*/ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* JLX12864 display */ uint8_t u8x8_d_st7567_jlx12864(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7567_jlx12864_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_st7567_jlx12864_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int >> 2 ); /* st7567 has range from 0 to 63 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* The following if condition checks the hardware limits of the st7567 controller: It is not allowed to write beyond the display limits. This is in fact an issue within flip mode. */ if ( c + x > 132u ) { c = 132u; c -= x; } do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*=====================================================*/ static const u8x8_display_info_t u8x8_st7567_enh_dg128064_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* */ /* pre_chip_disable_wait_ns = */ 50, /* */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 1, /* sda_setup_time_ns = */ 50, /* */ /* sck_pulse_width_ns = */ 120, /* */ /* sck_clock_hz = */ 4000000UL, /* */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* */ /* write_pulse_width_ns = */ 80, /* */ /* tile_width = */ 16, /* width of 16*8=128 pixel */ /* tile_hight = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 4, /* pixel_width = */ 128, /* pixel_height = */ 64 }; static const u8x8_display_info_t u8x8_st7567_enh_dg128064i_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* */ /* pre_chip_disable_wait_ns = */ 50, /* */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 1, /* sda_setup_time_ns = */ 50, /* */ /* sck_pulse_width_ns = */ 120, /* */ /* sck_clock_hz = */ 4000000UL, /* */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* */ /* write_pulse_width_ns = */ 80, /* */ /* tile_width = */ 16, /* width of 16*8=128 pixel */ /* tile_hight = */ 8, /* default_x_offset = */ 4, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 64 }; static const uint8_t u8x8_st7567_enh_dg128064_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x0a1), /* ADC set to reverse */ U8X8_C(0x0c0), /* common output mode */ // Flipmode //U8X8_C(0x0a0), /* ADC set to reverse */ //U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a2), /* LCD bias 1/9 */ /* power on sequence from paxinstruments */ U8X8_C(0x028|4), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x028|6), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x028|7), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x023), /* v0 voltage resistor ratio */ U8X8_CA(0x081, 200>>2), /* set contrast, contrast value*/ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* ENH-DG128064 transparent display */ static uint8_t u8x8_d_st7567_enh_dg128064_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7567_enh_dg128064_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_st7567_enh_dg128064_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_powersave1_seq); break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int >> 2 ); /* st7567 has range from 0 to 63 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* The following if condition checks the hardware limits of the st7567 controller: It is not allowed to write beyond the display limits. This is in fact an issue within flip mode. */ if ( c + x > 132u ) { c = 132u; c -= x; } do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } uint8_t u8x8_d_st7567_enh_dg128064(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7567_enh_dg128064_display_info); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_n_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_n_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return u8x8_d_st7567_enh_dg128064_generic(u8x8, msg, arg_int, arg_ptr); } return 1; } uint8_t u8x8_d_st7567_enh_dg128064i(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7567_enh_dg128064i_display_info); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return u8x8_d_st7567_enh_dg128064_generic(u8x8, msg, arg_int, arg_ptr); } return 1; } /*=====================================================*/ /* issue 657 */ static const u8x8_display_info_t u8x8_st7567_64x32_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* */ /* pre_chip_disable_wait_ns = */ 50, /* */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 1, /* sda_setup_time_ns = */ 50, /* */ /* sck_pulse_width_ns = */ 120, /* */ /* sck_clock_hz = */ 4000000UL, /* */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 40, /* */ /* write_pulse_width_ns = */ 80, /* */ /* tile_width = */ 8, /* tile_hight = */ 4, /* default_x_offset = */ 32, /* flipmode_x_offset = */ 32, /* pixel_width = */ 64, /* pixel_height = */ 32 }; static const uint8_t u8x8_st7567_64x32_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x0a1), /* ADC */ U8X8_C(0x0c0), /* common output mode */ // Flipmode //U8X8_C(0x0a0), /* ADC */ //U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a2), /* LCD bias 1/9 */ U8X8_C(0x028|4), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x028|6), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x028|7), /* all power control circuits on */ U8X8_DLY(50), U8X8_C(0x024), /* v0 voltage resistor ratio, taken from issue 657 */ U8X8_CA(0x081, 0x080), /* set contrast, contrast value*/ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st7567_64x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7567_64x32_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_st7567_64x32_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7567_132x64_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int >> 2 ); /* st7567 has range from 0 to 63 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* The following if condition checks the hardware limits of the st7567 controller: It is not allowed to write beyond the display limits. This is in fact an issue within flip mode. */ if ( c + x > 132u ) { c = 132u; c -= x; } do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_st7586s_erc240160.c ================================================ /* u8x8_d_st7586s_erc240160.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2018, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8g2.h" static const uint8_t u8x8_d_st7586s_sleep_on[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x010), /* set power save mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7586s_sleep_off[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x011), //Sleep out U8X8_DLY(50), /* delay 50 ms */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7586s_erc240160_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x036), /* Scan Direction Setting */ U8X8_A(0x0C8), /* COM159 -> COM0 SEG383 -> SEG0 */ U8X8_C(0x037), /* Start line 0 */ U8X8_A(0x000), U8X8_C(0x02A), /* Column Address Setting */ U8X8_A(0x000), /* COL8 -> COL127 */ U8X8_A(0x008), U8X8_A(0x000), U8X8_A(0x07F), /* 120*3=240 pixels + 120 unused */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7586s_erc240160_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x036), /* Scan Direction Setting */ U8X8_A(0x000), /* COM0 -> COM159 SEG0 -> SEG383 */ U8X8_C(0x037), /* Start line 0 */ U8X8_A(0x000), U8X8_C(0x02A), /* Column Address Setting */ U8X8_A(0x000), /* COL0 -> COL119 */ U8X8_A(0x000), U8X8_A(0x000), U8X8_A(0x077), /* 120*3=240 pixels + 120 unused */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7586s_erc240160_init_seq[] = { U8X8_END_TRANSFER(),/* disable chip */ // U8G_ESC_RST(1), /* hardware reset */ U8X8_DLY(60), /* Delay 60 ms */ U8X8_START_TRANSFER(),/* enable chip */ U8X8_C(0x001), // Soft reset U8X8_DLY(60), // Delay 120 ms U8X8_C(0x011), // Sleep Out U8X8_C(0x028), // Display OFF U8X8_DLY(25), // Delay 50 ms U8X8_CAA(0x0C0,0x036,0x01),// Vop = 136h data sheet suggested 0x0145 but this caused streaks U8X8_CA(0x0C3,0x000), // BIAS = 1/14 U8X8_CA(0x0C4,0x007), // Booster = x8 U8X8_CA(0x0D0,0x01D), // Enable Analog Circuit U8X8_CA(0x0B3,0x000), // Set FOSC divider U8X8_CA(0x0B5,0x000), // N-Line = 0 U8X8_C(0x039), // 0x39 Monochrome mode. 0x38 - gray Mode U8X8_C(0x03A), // Enable DDRAM Interface U8X8_A(0x002), // monochrome and 4-level U8X8_C(0x036), // Scan Direction Setting U8X8_A(0x0C8), // COM:C159->C0 SEG: SEG383->SEG0 U8X8_C(0x0B1), // First output COM U8X8_A(0x000), // U8X8_C(0x0B0), // Duty Setting (num rows - 1) U8X8_A(0x09F), U8X8_C(0x020), // Display inversion off U8X8_C(0x02A), // Column Address Setting U8X8_A(0x000), // COL0 -> COL127 U8X8_A(0x008), // U8X8_A(0x000), // U8X8_A(0x07F), // 80*3=240 pixels U8X8_C(0x02B), // Row Address Setting U8X8_A(0x000), // ROW0 -> ROW159 U8X8_A(0x000), // U8X8_A(0x000), // U8X8_A(0x09F), // 160 pixels U8X8_C(0x029), // Display ON U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_st7586s_erc240160_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 5, /* pre_chip_disable_wait_ns = */ 5, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 20, /* sck_pulse_width_ns = */ 100, /* datasheet ST7586S */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* ST7586+Atmega128RFA1 works with 8MHz */ /* spi_mode = */ 3, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 20, /* datasheet suggests min 20 */ /* write_pulse_width_ns = */ 40, /* tile_width = */ 30, /* tile_height = */ 20, /* default_x_offset = */ 0, /* abused as flag to know if we are flipped */ /* flipmode_x_offset = */ 1, /* as pixel order different for normal/flipped */ /* pixel_width = */ 240, /* pixel_height = */ 160 }; /******************************************************************************* * st7586s_erc240160 driver. ST7586 based display from buydisplay.com ******************************************************************************/ uint8_t u8x8_d_st7586s_erc240160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t c; uint8_t *ptr; uint8_t i, byte; uint32_t input; uint8_t output[4]; switch (msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); // OK Start transfer u8x8_cad_SendCmd(u8x8, 0x02B); /* Row Address Setting */ u8x8_cad_SendArg(u8x8, 0x000); u8x8_cad_SendArg(u8x8, 0x008 * ((u8x8_tile_t *)arg_ptr)->y_pos); u8x8_cad_SendArg(u8x8, 0x000); u8x8_cad_SendArg(u8x8, 0x09F); // should set end row based on display dimensions u8x8_cad_SendCmd(u8x8, 0x02C); /* cmd write display data to ram */ c = ((u8x8_tile_t *) arg_ptr)->cnt; // c *= 8; ptr = ((u8x8_tile_t *) arg_ptr)->tile_ptr; // // The ST7586S has an unusual 3 pixels per byte format the ERC240160 is even more annoying // as it has every 3rd COM line disconnected for extra oddness so here we read in a byte // (8 pixels) and pack that into 4 bytes of 2 pixels + 1 unused each. This has to be done // in a different order for flipped, normal UUx11x22 flipped 11x22xUU while (c > 0) { input = ((uint8_t)ptr[0]); for (i=0; i<4; i++) { byte = 0; if (u8x8->x_offset ==0){ if (input & 0x80) // if bit 7 byte = byte | 0x18; //set pixel 1 if (input & 0x40) // if bit 6 byte = byte | 0x3; //set pixel 2 } if (u8x8->x_offset ==1){ if (input & 0x80) // if bit 7 byte = byte | 0xC0; //set pixel 1 if (input & 0x40) // if bit 6 byte = byte | 0x18; //set pixel 2 } output[i] = byte; input <<= 2; } u8x8_cad_SendData(u8x8, 4, output); ptr += 1; c -= 1; } u8x8_cad_EndTransfer(u8x8); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7586s_erc240160_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7586s_erc240160_display_info); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7586s_erc240160_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7586s_erc240160_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if (arg_int == 0) u8x8_cad_SendSequence(u8x8, u8x8_d_st7586s_sleep_off); else u8x8_cad_SendSequence(u8x8, u8x8_d_st7586s_sleep_on); break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x0C0); u8x8_cad_SendArg(u8x8, arg_int); u8x8_cad_SendArg(u8x8, 1); u8x8_cad_EndTransfer(u8x8); break; #endif default: return 0; } return 1; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_st7586s_s028hn118a.c ================================================ /* u8x8_d_st7586s_s028hn118a.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2018, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8g2.h" static const uint8_t u8x8_d_st7586s_sleep_on[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x010), /* set power save mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7586s_sleep_off[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x011), //Sleep out U8X8_DLY(50), /* delay 50 ms */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7586s_s028hn118a_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x036), /* Scan Direction Setting */ U8X8_A(0x000), /* COM0 -> COM159 SEG0 -> SEG384 */ U8X8_C(0x037), /* Start line 0 */ U8X8_A(0x000), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7586s_s028hn118a_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x036), /* Scan Direction Setting */ U8X8_A(0x0C8), /* COM159 -> COM0 SEG384 -> SEG0 */ U8X8_C(0x037), /* Start line 24 */ U8X8_A(0x018), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_st7586s_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t c; uint8_t *ptr; uint8_t i, byte; uint32_t input; uint8_t output[8]; switch (msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); // OK Start transfer u8x8_cad_SendCmd(u8x8, 0x02B); /* Row Address Setting */ u8x8_cad_SendArg(u8x8, 0x000); u8x8_cad_SendArg(u8x8, 0x008 * ((u8x8_tile_t *)arg_ptr)->y_pos); u8x8_cad_SendArg(u8x8, 0x000); u8x8_cad_SendArg(u8x8, u8x8->display_info->pixel_height - 1); /* should this be u8x8->display_info->pixel_height - 1 */ u8x8_cad_SendCmd(u8x8, 0x02C); /* cmd write display data to ram */ c = ((u8x8_tile_t *) arg_ptr)->cnt; // c *= 8; ptr = ((u8x8_tile_t *) arg_ptr)->tile_ptr; // // The ST7586S has an unusual 3 pixels per byte format so here we read in 3 bytes (24 pixels) and // pack that into 8 bytes of 3 pixels each while (c > 0) { input = (((uint32_t)ptr[0] << 16) | ((uint32_t)ptr[1] << 8) | (uint32_t)ptr[2]); for (i=0; i<8; i++) { byte = 0; if (input & 0x800000) // if bit 23 byte = byte | 0xC0; //set pixel 1 if (input & 0x400000) // if bit 22 byte = byte | 0x18; //set pixel 2 if (input & 0x200000) // if bit 22 byte = byte | 0x3; //set pixel 3 output[i] = byte; input <<= 3; } u8x8_cad_SendData(u8x8, 8, output); ptr += 3; c -= 3; } u8x8_cad_EndTransfer(u8x8); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if (arg_int == 0) u8x8_cad_SendSequence(u8x8, u8x8_d_st7586s_sleep_off); else u8x8_cad_SendSequence(u8x8, u8x8_d_st7586s_sleep_on); break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x0C0); u8x8_cad_SendArg(u8x8, arg_int); u8x8_cad_SendArg(u8x8, 0); u8x8_cad_EndTransfer(u8x8); break; #endif default: return 0; } return 1; } static const uint8_t u8x8_d_st7586s_s028hn118a_init_seq[] = { U8X8_END_TRANSFER(),/* disable chip */ // U8G_ESC_RST(15), /* hardware reset */ U8X8_DLY(60), /* Delay 60 ms */ U8X8_START_TRANSFER(),/* enable chip */ U8X8_C(0x001), // Soft reset U8X8_DLY(60), // Delay 120 ms U8X8_C(0x011), // Sleep Out U8X8_C(0x028), // Display OFF U8X8_DLY(25), // Delay 50 ms U8X8_CAA(0x0C0,0x0E5,0x00),// Vop = F0h in trace a bit too dark U8X8_CA(0x0C3,0x004), // BIAS = 1/10 0x04 in trace U8X8_CA(0x0C4,0x005), // Booster = x6 0x05 in trace U8X8_CA(0x0D0,0x01D), // Enable Analog Circuit U8X8_CA(0x0B3,0x000), // Set FOSC divider U8X8_CA(0x0B5,0x08B), // N-Line = 0 U8X8_C(0x039), // 0x39 Monochrome mode. 0x38 - gray Mode U8X8_C(0x03A), // Enable DDRAM Interface U8X8_A(0x002), // monochrome and 4-level U8X8_C(0x036), // Scan Direction Setting U8X8_A(0x000), // COM0 -> COM159 SEG0 -> SEG384 U8X8_C(0x0B0), // Duty Setting (num rows - 1) U8X8_A(0x087), // should be 0x87 but caused flicker 0x9F U8X8_C(0x020), // Display inversion off U8X8_C(0x02A), // Column Address Setting U8X8_A(0x000), // COL0 -> COL127 U8X8_A(0x000), // U8X8_A(0x000), // U8X8_A(0x07f), // 128*3=384 pixels U8X8_C(0x02B), // Row Address Setting U8X8_A(0x000), // ROW0 -> ROW135 U8X8_A(0x000), // U8X8_A(0x000), // U8X8_A(0x087), // 136 pixels U8X8_C(0x0F1), // Frame rate monochrome U8X8_A(0x00C), // The factory firmware set this to 49.0 Hz 0x07 U8X8_A(0x00C), // This caused a shimmer under 50Hz LED lights U8X8_A(0x00C), // 69.0 Hz (0x0C) fixes this and should avoid the U8X8_A(0x00C), // issue in the US too U8X8_C(0x029), // Display ON U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_st7586s_s028hn118a_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 5, /* pre_chip_disable_wait_ns = */ 5, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 20, /* sck_pulse_width_ns = */ 100, /* datasheet ST7586S */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* ST7586+Atmega128RFA1 works with 8MHz */ /* spi_mode = */ 3, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 20, /* datasheet suggests min 20 */ /* write_pulse_width_ns = */ 40, /* tile_width = */ 48, /* tile_height = */ 17, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 384, /* pixel_height = */ 136 }; /******************************************************************************* * st7586s_s028hn118a driver. This is the display in the SMART Response XE. This requires 16 bit mode. ******************************************************************************/ uint8_t u8x8_d_st7586s_s028hn118a(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if (u8x8_d_st7586s_common(u8x8, msg, arg_int, arg_ptr) != 0) return 1; switch (msg) { case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7586s_s028hn118a_init_seq); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7586s_s028hn118a_display_info); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7586s_s028hn118a_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7586s_s028hn118a_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; } return 1; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_st7588.c ================================================ /* u8x8_d_st7588.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2017, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ST7588 - has 4 different I2C addresses - I2C protocol is identical to SSD13xx */ #include "u8x8.h" /* function set, bit 2: power down, bit 3: MY, bit 4: MX, bit 5: must be 1 */ #define FS (0x020) /* not a real power down for the ST7588... just a display off */ static const uint8_t u8x8_d_st7588_128x64_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C( FS | 0x00 ), /* select 00 commands */ //U8X8_C( 0x08 ), /* display off */ U8X8_C( 0x0c ), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7588_128x64_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C( FS | 0x00 ), /* select 00 commands */ U8X8_C( 0x08 ), /* display off */ //U8X8_C( 0x0c ), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static uint8_t u8x8_d_st7588_128x64_generic(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { /* handled by the calling function case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7588_128x64_display_info); break; */ /* handled by the calling function case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7588_128x64_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st7588_128x64_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st7588_128x64_powersave1_seq); /* restore orientation */ if ( u8x8->x_offset == 0 ) u8x8_cad_SendCmd(u8x8, FS ); /* select 00 commands */ else u8x8_cad_SendCmd(u8x8, FS ^ 0x018 ); /* select 00 commands */ break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, FS ); u8x8_cad_SendArg(u8x8, 4 | (arg_int>>7) ); u8x8_cad_SendCmd(u8x8, FS | 1); u8x8_cad_SendArg(u8x8, 0x080 | arg_int ); /* restore orientation */ if ( u8x8->x_offset == 0 ) u8x8_cad_SendCmd(u8x8, FS ); /* select 00 commands */ else u8x8_cad_SendCmd(u8x8, FS ^ 0x018 ); /* select 00 commands */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; if ( u8x8->x_offset == 0 ) u8x8_cad_SendCmd(u8x8, FS ); /* select 00 commands */ else u8x8_cad_SendCmd(u8x8, FS ^ 0x018 ); /* select 00 commands */ u8x8_cad_SendCmd(u8x8, 0x040 | (((u8x8_tile_t *)arg_ptr)->y_pos)); u8x8_cad_SendCmd(u8x8, 0x0e0 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0f0 | (x>>4) ); do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; u8x8_cad_SendData(u8x8, c*8, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } /*=============================================*/ static const u8x8_display_info_t u8x8_st7588_128x64_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 150, /* pre_chip_disable_wait_ns = */ 30, /* reset_pulse_width_ms = */ 5, /* post_reset_wait_ms = */ 5, /**/ /* sda_setup_time_ns = */ 60, /* */ /* sck_pulse_width_ns = */ 60, /* */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* 400KHz */ /* data_setup_time_ns = */ 80, /* write_pulse_width_ns = */ 50, /* tile_width = */ 16, /* tile_hight = */ 8, /* default_x_offset = */ 0, /* must be 0, because this is checked also for normal mode */ /* flipmode_x_offset = */ 4, /* pixel_width = */ 128, /* pixel_height = */ 64 }; static const uint8_t u8x8_d_st7588_128x64_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C( FS | 0x03 ), /* select 11 commands */ U8X8_C( 0x03 ), /* software reset */ U8X8_C( FS | 0x00 ), /* select 00 commands */ U8X8_C( 0x08 ), /* display off */ //U8X8_C( 0x0c ), /* display on */ U8X8_C( FS | 0x01 ), /* select 01 commands */ U8X8_C( 0x08 ), /* display confguration */ U8X8_C( 0x12 ), /* bias 1/9 */ U8X8_C( 0x8f ), /* Vop, lower 7 bits */ U8X8_C( FS | 0x00 ), /* select 00 commands */ U8X8_C( 0x05), /* Bit 0 contains high/low range for Vop */ U8X8_C( FS | 0x03 ), /* select 11 commands */ U8X8_C( 0x0b), /* Frame Rate: 73 Hz */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7588_jlx12864_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C( FS ), /* normal mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7588_jlx12864_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C( FS ^ 0x018 ), /* normal mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st7588_jlx12864(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { if ( u8x8_d_st7588_128x64_generic(u8x8, msg, arg_int, arg_ptr) != 0 ) return 1; if ( msg == U8X8_MSG_DISPLAY_SETUP_MEMORY ) { u8x8_SetI2CAddress(u8x8, 0x07e); /* the JLX12864 has 0x07e as a default address for I2C */ u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7588_128x64_display_info); return 1; } else if ( msg == U8X8_MSG_DISPLAY_INIT ) { u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7588_128x64_init_seq); return 1; } else if ( msg == U8X8_MSG_DISPLAY_SET_FLIP_MODE ) { if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_st7588_jlx12864_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_st7588_jlx12864_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } return 1; } return 0; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_st7920.c ================================================ /* u8x8_d_st7920.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. The ST7920 controller does not support hardware graphics flip. Contrast adjustment is done by an external resistor --> no support for contrast adjustment */ #include "u8x8.h" static const uint8_t u8x8_d_st7920_init_seq[] = { U8X8_DLY(100), U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(10), U8X8_C(0x038), /* 8 Bit interface (DL=1), basic instruction set (RE=0) */ U8X8_C(0x008), /* display on, cursor & blink off; 0x08: all off */ U8X8_C(0x006), /* Entry mode: Cursor move to right ,DDRAM address counter (AC) plus 1, no shift */ U8X8_C(0x002), /* disable scroll, enable CGRAM adress */ U8X8_C(0x001), /* clear RAM, needs 1.6 ms */ U8X8_DLY(4), /* delay 2ms */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7920_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x038), /* 8 Bit interface (DL=1), basic instruction set (RE=0) */ U8X8_C(0x00c), /* display on, cursor & blink off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_st7920_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x038), /* 8 Bit interface (DL=1), basic instruction set (RE=0) */ U8X8_C(0x008), /* display off */ U8X8_C(0x034), /* 8 Bit interface (DL=1), extended instruction set (RE=1) */ U8X8_C(0x001), /* Standby mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_st7920_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, y, c, i; uint8_t *ptr; switch(msg) { /* U8X8_MSG_DISPLAY_SETUP_MEMORY is handled by the calling function */ /* case U8X8_MSG_DISPLAY_SETUP_MEMORY: break; */ case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_st7920_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_st7920_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_st7920_powersave1_seq); break; case U8X8_MSG_DISPLAY_DRAW_TILE: y = (((u8x8_tile_t *)arg_ptr)->y_pos); y*=8; x = ((u8x8_tile_t *)arg_ptr)->x_pos; x /= 2; /* not sure whether this is a clever idea, problem is, the ST7920 can address only every second tile */ if ( y >= 32 ) /* this is the adjustment for 128x64 displays */ { y-=32; x+=8; } u8x8_cad_StartTransfer(u8x8); /* Tile structure is reused here for the ST7920, however u8x8 is not supported tile_ptr points to data which has cnt*8 bytes (same as SSD1306 tiles) Buffer is expected to have 8 lines of code fitting to the ST7920 internal memory "cnt" includes the number of horizontal bytes. width is equal to cnt*8 Also important: Width must be a multiple of 16 (ST7920 requirement), so cnt must be even. TODO: Consider arg_int, however arg_int is not used by u8g2 */ c = ((u8x8_tile_t *)arg_ptr)->cnt; /* number of tiles */ ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* data ptr to the tiles */ /* The following byte is sent to allow the ST7920 to sync up with the data */ /* it solves some issues with garbage data */ u8x8_cad_SendCmd(u8x8, 0x03e ); /* enable extended mode */ u8x8_cad_SendCmd(u8x8, 0x03e ); /* enable extended mode, issue 487 */ for( i = 0; i < 8; i++ ) { //u8x8_cad_SendCmd(u8x8, 0x03e ); /* enable extended mode */ u8x8_cad_SendCmd(u8x8, 0x080 | (y+i) ); /* y pos */ u8x8_cad_SendCmd(u8x8, 0x080 | x ); /* set x pos */ c = ((u8x8_tile_t *)arg_ptr)->cnt; /* number of tiles */ //u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, 200, NULL); /* extra dely required */ u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes, send one line of data */ ptr += c; //u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, 200, NULL); /* extra dely required */ } u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } static const u8x8_display_info_t u8x8_st7920_192x32_display_info = { /* chip_enable_level = */ 1, /* chip_disable_level = */ 0, /* post_chip_enable_wait_ns = */ 5, /* pre_chip_disable_wait_ns = */ 5, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 20, /* sck_pulse_width_ns = */ 140, /* datasheet ST7920 */ /* sck_clock_hz = */ 1000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 3, /* old: sck_takeover_edge, new: active high (bit 1), rising edge (bit 0), 18 Aug 16: changed from 1 to 3 which works for 101 */ /* Arduino mode 3: aktive low clock, but use rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* write_pulse_width_ns = */ 40, /* tile_width = */ 24, /* tile_hight = */ 4, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 192, /* pixel_height = */ 32 }; static const u8x8_display_info_t u8x8_st7920_128x64_display_info = { /* chip_enable_level = */ 1, /* chip_disable_level = */ 0, /* post_chip_enable_wait_ns = */ 5, /* pre_chip_disable_wait_ns = */ 5, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 20, /* sck_pulse_width_ns = */ 140, /* datasheet ST7920 */ /* sck_clock_hz = */ 1000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* ST7920+Due work with 1MHz but not with 2MHz, ST7920+Uno works with 2MHz */ /* spi_mode = */ 3, /* active high, rising edge, 18 Aug 16: changed from 1 to 3 which works for 101 */ /* in theory mode 3 should be correct */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* write_pulse_width_ns = */ 40, /* tile_width = */ 16, /* tile_hight = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 64 }; uint8_t u8x8_d_st7920_192x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7920_192x32_display_info); break; default: return u8x8_d_st7920_common(u8x8, msg, arg_int, arg_ptr); } return 1; } uint8_t u8x8_d_st7920_128x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_st7920_128x64_display_info); break; default: return u8x8_d_st7920_common(u8x8, msg, arg_int, arg_ptr); } return 1; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_stdio.c ================================================ /* u8x8_d_stdio.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" #include #define W 8 #define H 2 uint8_t bitmap[W*H*8]; void bitmap_place_tile(uint8_t x, uint8_t y, uint8_t *tile) { uint8_t i; for(i = 0; i < 8; i++ ) bitmap[x*8+y*W*8+i] = tile[i]; } void bitmap_show(void) { int x, y; for( y = 0; y < H*8; y++ ) { for( x = 0; x < W*8; x++ ) { if ( (bitmap[x+(y/8)*W*8] & (1<<((y&7)))) != 0 ) { printf("*"); } else { printf("."); } } printf("\n"); } } uint8_t u8x8_d_stdio(U8X8_UNUSED u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_INIT: break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) bitmap_show(); break; case U8X8_MSG_DISPLAY_SET_CONTRAST: break; case U8X8_MSG_DISPLAY_DRAW_TILE: bitmap_place_tile(((u8x8_tile_t *)arg_ptr)->x_pos, ((u8x8_tile_t *)arg_ptr)->y_pos, ((u8x8_tile_t *)arg_ptr)->tile_ptr); break; default: break; } return 1; } void u8x8_SetupStdio(u8x8_t *u8x8) { u8x8_SetupDefaults(u8x8); u8x8->display_cb = u8x8_d_stdio; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_t6963.c ================================================ /* u8x8_d_t6963.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. The t6963 controller does not support hardware graphics flip. Contrast adjustment is done by an external resistor --> no support for contrast adjustment */ #include "u8x8.h" static const uint8_t u8x8_d_t6963_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x098), /* mode register: Display Mode, Graphics on, Text off, Cursor off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_t6963_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x090), /* All Off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_t6963_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t c, i; uint16_t y; uint8_t *ptr; switch(msg) { /* U8X8_MSG_DISPLAY_SETUP_MEMORY is handled by the calling function */ /* case U8X8_MSG_DISPLAY_SETUP_MEMORY: break; case U8X8_MSG_DISPLAY_INIT: break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_t6963_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_t6963_powersave1_seq); break; case U8X8_MSG_DISPLAY_DRAW_TILE: y = (((u8x8_tile_t *)arg_ptr)->y_pos); y*=8; y*= u8x8->display_info->tile_width; /* x = ((u8x8_tile_t *)arg_ptr)->x_pos; x is ignored... no u8x8 support */ //u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, 200, NULL); /* extra dely required */ u8x8_cad_StartTransfer(u8x8); //u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, 200, NULL); /* extra dely required */ /* Tile structure is reused here for the t6963, however u8x8 is not supported tile_ptr points to data which has cnt*8 bytes (same as SSD1306 tiles) Buffer is expected to have 8 lines of code fitting to the t6963 internal memory "cnt" includes the number of horizontal bytes. width is equal to cnt*8 TODO: Consider arg_int, however arg_int is not used by u8g2 */ c = ((u8x8_tile_t *)arg_ptr)->cnt; /* number of tiles */ ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* data ptr to the tiles */ for( i = 0; i < 8; i++ ) { u8x8_cad_SendArg(u8x8, y&255); u8x8_cad_SendArg(u8x8, y>>8); u8x8_cad_SendCmd(u8x8, 0x024 ); /* set adr */ u8x8_cad_SendCmd(u8x8, 0x0b0 ); /* auto write start */ //c = ((u8x8_tile_t *)arg_ptr)->cnt; /* number of tiles */ u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes, send one line of data */ u8x8_cad_SendCmd(u8x8, 0x0b2 ); /* auto write reset */ ptr += u8x8->display_info->tile_width; y += u8x8->display_info->tile_width; } u8x8_cad_EndTransfer(u8x8); //u8x8->gpio_and_delay_cb(u8x8, U8X8_MSG_DELAY_NANO, 200, NULL); /* extra dely required */ break; default: return 0; } return 1; } /*=============================================*/ static const u8x8_display_info_t u8x8_t6963_240x128_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 110, /* T6963 Datasheet p30 */ /* pre_chip_disable_wait_ns = */ 100, /* T6963 Datasheet p30 */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 20, /* sck_pulse_width_ns = */ 140, /* sck_clock_hz = */ 1000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 80, /* write_pulse_width_ns = */ 80, /* tile_width = */ 30, /* tile_hight = */ 16, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 240, /* pixel_height = */ 128 }; /* 240x128 */ static const uint8_t u8x8_d_t6963_240x128_init_seq[] = { U8X8_DLY(100), U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(100), U8X8_AAC(0x00,0x00,0x021), /* low, high, set cursor pos */ U8X8_AAC(0x00,0x00,0x022), /* low, high, set offset */ U8X8_AAC(0x00,0x00,0x040), /* low, high, set text home */ U8X8_AAC(240/8,0x00,0x041), /* low, high, set text columns */ U8X8_AAC(0x00,0x00,0x042), /* low, high, graphics home */ U8X8_AAC(240/8,0x00,0x043), /* low, high, graphics columns */ U8X8_DLY(2), /* delay 2ms */ // mode set // 0x080: Internal CG, OR Mode // 0x081: Internal CG, EXOR Mode // 0x083: Internal CG, AND Mode // 0x088: External CG, OR Mode // 0x089: External CG, EXOR Mode // 0x08B: External CG, AND Mode U8X8_C(0x080), /* mode register: OR Mode, Internal Character Mode */ // display mode // 0x090: Display off // 0x094: Graphic off, text on, cursor off, blink off // 0x096: Graphic off, text on, cursor on, blink off // 0x097: Graphic off, text on, cursor on, blink on // 0x098: Graphic on, text off, cursor off, blink off // 0x09a: Graphic on, text off, cursor on, blink off // ... // 0x09c: Graphic on, text on, cursor off, blink off // 0x09f: Graphic on, text on, cursor on, blink on U8X8_C(0x090), /* All Off */ U8X8_AAC(0x00,0x00,0x024), /* low, high, set adr pointer */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_DLY(100), }; uint8_t u8x8_d_t6963_240x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_t6963_240x128_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_t6963_240x128_init_seq); break; default: return u8x8_d_t6963_common(u8x8, msg, arg_int, arg_ptr); } return 1; } /*=============================================*/ static const u8x8_display_info_t u8x8_t6963_240x64_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 110, /* T6963 Datasheet p30 */ /* pre_chip_disable_wait_ns = */ 100, /* T6963 Datasheet p30 */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 20, /* sck_pulse_width_ns = */ 140, /* sck_clock_hz = */ 1000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 80, /* write_pulse_width_ns = */ 80, /* tile_width = */ 30, /* tile_hight = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 240, /* pixel_height = */ 64 }; /* 240x64 */ static const uint8_t u8x8_d_t6963_240x64_init_seq[] = { U8X8_DLY(100), U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(100), U8X8_AAC(0x00,0x00,0x021), /* low, high, set cursor pos */ U8X8_AAC(0x00,0x00,0x022), /* low, high, set offset */ U8X8_AAC(0x00,0x00,0x040), /* low, high, set text home */ U8X8_AAC(240/8,0x00,0x041), /* low, high, set text columns */ U8X8_AAC(0x00,0x00,0x042), /* low, high, graphics home */ U8X8_AAC(240/8,0x00,0x043), /* low, high, graphics columns */ U8X8_DLY(2), /* delay 2ms */ // mode set // 0x080: Internal CG, OR Mode // 0x081: Internal CG, EXOR Mode // 0x083: Internal CG, AND Mode // 0x088: External CG, OR Mode // 0x089: External CG, EXOR Mode // 0x08B: External CG, AND Mode U8X8_C(0x080), /* mode register: OR Mode, Internal Character Mode */ // display mode // 0x090: Display off // 0x094: Graphic off, text on, cursor off, blink off // 0x096: Graphic off, text on, cursor on, blink off // 0x097: Graphic off, text on, cursor on, blink on // 0x098: Graphic on, text off, cursor off, blink off // 0x09a: Graphic on, text off, cursor on, blink off // ... // 0x09c: Graphic on, text on, cursor off, blink off // 0x09f: Graphic on, text on, cursor on, blink on U8X8_C(0x090), /* All Off */ U8X8_AAC(0x00,0x00,0x024), /* low, high, set adr pointer */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_DLY(100), }; uint8_t u8x8_d_t6963_240x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_t6963_240x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_t6963_240x64_init_seq); break; default: return u8x8_d_t6963_common(u8x8, msg, arg_int, arg_ptr); } return 1; } /*=============================================*/ static const u8x8_display_info_t u8x8_t6963_256x64_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 110, /* T6963 Datasheet p30 */ /* pre_chip_disable_wait_ns = */ 100, /* T6963 Datasheet p30 */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 20, /* sck_pulse_width_ns = */ 140, /* sck_clock_hz = */ 1000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 80, /* write_pulse_width_ns = */ 80, /* tile_width = */ 32, /* tile_hight = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 256, /* pixel_height = */ 64 }; /* 256x64 */ static const uint8_t u8x8_d_t6963_256x64_init_seq[] = { U8X8_DLY(100), U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(100), U8X8_AAC(0x00,0x00,0x021), /* low, high, set cursor pos */ U8X8_AAC(0x00,0x00,0x022), /* low, high, set offset */ U8X8_AAC(0x00,0x00,0x040), /* low, high, set text home */ U8X8_AAC(256/8,0x00,0x041), /* low, high, set text columns */ U8X8_AAC(0x00,0x00,0x042), /* low, high, graphics home */ U8X8_AAC(256/8,0x00,0x043), /* low, high, graphics columns */ U8X8_DLY(2), /* delay 2ms */ // mode set // 0x080: Internal CG, OR Mode // 0x081: Internal CG, EXOR Mode // 0x083: Internal CG, AND Mode // 0x088: External CG, OR Mode // 0x089: External CG, EXOR Mode // 0x08B: External CG, AND Mode U8X8_C(0x080), /* mode register: OR Mode, Internal Character Mode */ // display mode // 0x090: Display off // 0x094: Graphic off, text on, cursor off, blink off // 0x096: Graphic off, text on, cursor on, blink off // 0x097: Graphic off, text on, cursor on, blink on // 0x098: Graphic on, text off, cursor off, blink off // 0x09a: Graphic on, text off, cursor on, blink off // ... // 0x09c: Graphic on, text on, cursor off, blink off // 0x09f: Graphic on, text on, cursor on, blink on U8X8_C(0x090), /* All Off */ U8X8_AAC(0x00,0x00,0x024), /* low, high, set adr pointer */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_DLY(100), }; uint8_t u8x8_d_t6963_256x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_t6963_256x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_t6963_256x64_init_seq); break; default: return u8x8_d_t6963_common(u8x8, msg, arg_int, arg_ptr); } return 1; } /*=============================================*/ static const u8x8_display_info_t u8x8_t6963_128x64_display_info = { /* chip_enable_level = */ 1, /* chip_disable_level = */ 0, /* post_chip_enable_wait_ns = */ 10, /* T6963 Datasheet p30 */ /* pre_chip_disable_wait_ns = */ 100, /* T6963 Datasheet p30 */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 20, /* sck_pulse_width_ns = */ 140, /* sck_clock_hz = */ 1000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 80, /* write_pulse_width_ns = */ 80, /* tile_width = */ 16, /* tile_hight = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 64 }; /* 128x64 */ static const uint8_t u8x8_d_t6963_128x64_init_seq[] = { U8X8_DLY(100), U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(100), U8X8_AAC(0x00,0x00,0x021), /* low, high, set cursor pos */ U8X8_AAC(0x00,0x00,0x022), /* low, high, set offset */ U8X8_AAC(0x00,0x00,0x040), /* low, high, set text home */ U8X8_AAC(128/8,0x00,0x041), /* low, high, set text columns */ U8X8_AAC(0x00,0x00,0x042), /* low, high, graphics home */ U8X8_AAC(128/8,0x00,0x043), /* low, high, graphics columns */ U8X8_DLY(2), /* delay 2ms */ // mode set // 0x080: Internal CG, OR Mode // 0x081: Internal CG, EXOR Mode // 0x083: Internal CG, AND Mode // 0x088: External CG, OR Mode // 0x089: External CG, EXOR Mode // 0x08B: External CG, AND Mode U8X8_C(0x080), /* mode register: OR Mode, Internal Character Mode */ // display mode // 0x090: Display off // 0x094: Graphic off, text on, cursor off, blink off // 0x096: Graphic off, text on, cursor on, blink off // 0x097: Graphic off, text on, cursor on, blink on // 0x098: Graphic on, text off, cursor off, blink off // 0x09a: Graphic on, text off, cursor on, blink off // ... // 0x09c: Graphic on, text on, cursor off, blink off // 0x09f: Graphic on, text on, cursor on, blink on U8X8_C(0x090), /* All Off */ U8X8_AAC(0x00,0x00,0x024), /* low, high, set adr pointer */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_DLY(100), }; uint8_t u8x8_d_t6963_128x64(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_t6963_128x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_t6963_128x64_init_seq); break; default: return u8x8_d_t6963_common(u8x8, msg, arg_int, arg_ptr); } return 1; } /*=============================================*/ static const u8x8_display_info_t u8x8_t6963_160x80_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 10, /* T6963 Datasheet p30 */ /* pre_chip_disable_wait_ns = */ 100, /* T6963 Datasheet p30 */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 20, /* sck_pulse_width_ns = */ 140, /* sck_clock_hz = */ 1000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 80, /* write_pulse_width_ns = */ 80, /* tile_width = */ 20, /* tile_hight = */ 10, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 160, /* pixel_height = */ 80 }; /* 128x64 */ static const uint8_t u8x8_d_t6963_160x80_init_seq[] = { U8X8_DLY(100), U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(100), U8X8_AAC(0x00,0x00,0x021), /* low, high, set cursor pos */ U8X8_AAC(0x00,0x00,0x022), /* low, high, set offset */ U8X8_AAC(0x00,0x00,0x040), /* low, high, set text home */ U8X8_AAC(160/8,0x00,0x041), /* low, high, set text columns */ U8X8_AAC(0x00,0x00,0x042), /* low, high, graphics home */ U8X8_AAC(160/8,0x00,0x043), /* low, high, graphics columns */ U8X8_DLY(2), /* delay 2ms */ // mode set // 0x080: Internal CG, OR Mode // 0x081: Internal CG, EXOR Mode // 0x083: Internal CG, AND Mode // 0x088: External CG, OR Mode // 0x089: External CG, EXOR Mode // 0x08B: External CG, AND Mode U8X8_C(0x080), /* mode register: OR Mode, Internal Character Mode */ // display mode // 0x090: Display off // 0x094: Graphic off, text on, cursor off, blink off // 0x096: Graphic off, text on, cursor on, blink off // 0x097: Graphic off, text on, cursor on, blink on // 0x098: Graphic on, text off, cursor off, blink off // 0x09a: Graphic on, text off, cursor on, blink off // ... // 0x09c: Graphic on, text on, cursor off, blink off // 0x09f: Graphic on, text on, cursor on, blink on U8X8_C(0x090), /* All Off */ U8X8_AAC(0x00,0x00,0x024), /* low, high, set adr pointer */ U8X8_DLY(100), U8X8_END_TRANSFER(), /* disable chip */ U8X8_DLY(100), }; uint8_t u8x8_d_t6963_160x80(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_t6963_160x80_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_t6963_160x80_init_seq); break; default: return u8x8_d_t6963_common(u8x8, msg, arg_int, arg_ptr); } return 1; } /* alternative version for the 128x64 t6963 display: use the 160x80 init sequence */ uint8_t u8x8_d_t6963_128x64_alt(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_t6963_128x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_t6963_160x80_init_seq); break; default: return u8x8_d_t6963_common(u8x8, msg, arg_int, arg_ptr); } return 1; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_uc1601.c ================================================ /* u8x8_d_uc1601.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2017, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. This is for the uc1601s controller */ #include "u8x8.h" static const uint8_t u8x8_d_uc1601_128x32_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1601_128x32_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1601_128x32_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0c4), /* bit 1: MX, bit 2: MY */ U8X8_C(0x060), /* set display start line to 32 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1601_128x32_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0c2), /* bit 1: MX, bit 2: MY */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_uc1601_128x32_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 1, /* uc1601 datasheet, page 46 */ /* pre_chip_disable_wait_ns = */ 5, /* uc1601 datasheet, page 46 */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 12, /* uc1601 datasheet, page 44 */ /* sck_pulse_width_ns = */ 15, /* uc1601 datasheet, page 44 */ /* sck_clock_hz = */ 2000000UL, /* */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 1, /* data_setup_time_ns = */ 60, /* uc1601 datasheet, page 43 */ /* write_pulse_width_ns = */ 80, /* uc1601 datasheet, page 43 */ /* tile_width = */ 16, /* tile_hight = */ 4, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 4, /* pixel_width = */ 128, /* pixel_height = */ 32 }; static const uint8_t u8x8_d_uc1601_128x32_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0eb), /* LCD Bias: 0xe8: 6, 0xe9: 7, 0xea: 8, 0xeb: 9 */ //U8X8_C(0x023), /* 0x020...0x023 only for UC1601, not for UC1601s */ //U8X8_C(0x02e), /* LCD Load + Internal Charge Pump (default: 0x2e) */ U8X8_C(0x024), /* Temperature Compenstation, default: 0x24 */ U8X8_C(0x089), /* RAM address ctrl, default: 0x89 */ U8X8_C(0x0c4), /* RAM mapping ctrl */ U8X8_C(0x0a0), /* Frame Rate, 0x0a0 or 0x0a1 */ U8X8_CA(0x081, 0x0df), /* set contrast */ U8X8_C(0x02e), /* LCD Load + Internal Charge Pump (default: 0x2e) */ U8X8_C(0x060), /* set display start line to 32 */ U8X8_C(0x0a6), /* normal display */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_uc1601_128x32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1601_128x32_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1601_128x32_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_uc1601_128x32_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_uc1601_128x32_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1601_128x32_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1601_128x32_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* uc1601 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_uc1604.c ================================================ /* u8x8_d_uc1604.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_uc1604_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_DLY(20), U8X8_C(0x0af), /* display on */ U8X8_DLY(20), /* during setup, it seems that the startup is more reliable when sending this cmd twice */ U8X8_C(0x0af), /* display on */ U8X8_DLY(50), /* startup takes some time */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1604_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off, enter sleep mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1604_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0c4), /* LCD Mapping */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1604_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0c2), /* LCD Mapping */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_uc1604_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, y, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); y = ((u8x8_tile_t *)arg_ptr)->y_pos; y += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x0b0 | (y&15)); c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; /* handled in the calling procedure case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1604_128x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1701_dogs102_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_uc1604_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_uc1604_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1604_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1604_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* uc1604 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif default: return 0; } return 1; } /*================================================*/ /* JLX19264 */ /* timings from uc1608 UC1604 has two chip select inputs (CS0 and CS1). CS0 is low active, CS1 is high active. It will depend on the display module whether the display has a is low or high active chip select. */ static const u8x8_display_info_t u8x8_uc1604_192x64_display_info = { /* chip_enable_level = */ 0, /* JLX19264G uses CS0, which is low active CS*/ /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 20, /* pre_chip_disable_wait_ns = */ 20, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 10, /* sda_setup_time_ns = */ 30, /* sck_pulse_width_ns = */ 65, /* half of cycle time */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* write_pulse_width_ns = */ 35, /* tile_width = */ 24, /* width of 24*8=192 pixel */ /* tile_hight = */ 8, /* default_x_offset = */ 0, /* reused as y page offset */ /* flipmode_x_offset = */ 0, /* reused as y page offset */ /* pixel_width = */ 192, /* pixel_height = */ 64 }; static const uint8_t u8x8_d_uc1604_jlx19264_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_DLY(200), U8X8_DLY(200), U8X8_C(0x02f), /* power on, Bit 2 PC2=1 (internal charge pump), Bits 0/1: cap of panel */ U8X8_DLY(200), U8X8_DLY(200), U8X8_CA(0x081, 0x052), /* set contrast, JLX19264G suggestion: 0x045 */ U8X8_C(0x0eb), /* LCD bias Bits 0/1: 00=6 01=7, 10=8, 11=9 */ //U8X8_C(0x023), /* Bit 0/1: Temp compenstation, Bit 2: Multiplex Rate 0=96, 1=128 */ //U8X8_C(0x027), /* Bit 0/1: Temp compenstation, Bit 2: Multiplex Rate 0=96, 1=128 */ U8X8_C(0x0c4), /* Map control, Bit 2: MY=1, Bit 1: MX=0 */ U8X8_C(0x0a0), /* 0xa0: 76Hz FPS, controller default: 0x0a1: 95Hz FPS */ U8X8_C(0x040), /* set scroll line to 0 */ U8X8_C(0x089), /* RAM access control (controller default: 0x089)*/ U8X8_C(0x000), /* column low nibble */ U8X8_C(0x010), /* column high nibble */ U8X8_C(0x0b0), /* page adr */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_uc1604_jlx19264(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_uc1604_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1604_192x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1604_jlx19264_init_seq); break; default: return 0; /* msg unknown */ } } return 1; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_uc1608.c ================================================ /* u8x8_d_uc1608.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_uc1608_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1608_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off, enter sleep mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1608_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0c8), /* LCD Mapping */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1608_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0c4), /* LCD Mapping */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_uc1608_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, y, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); y = ((u8x8_tile_t *)arg_ptr)->y_pos; y += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x0b0 | (y&15)); c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; /* handled in the calling procedure case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1608_128x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1701_dogs102_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_uc1608_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_uc1608_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1608_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1608_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* uc1608 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif default: return 0; } return 1; } /*================================================*/ /* ERC24064-1 */ /* The UC1608 has only one high active chip select input. UC1604, UC1610 and UC1611 have two chip select inputs. */ static const u8x8_display_info_t u8x8_uc1608_240x64_display_info = { /* chip_enable_level = */ 1, /* uc1608 has high active CS */ /* chip_disable_level = */ 0, /* post_chip_enable_wait_ns = */ 10, /* uc1608 datasheet, page 39, actually 0 */ /* pre_chip_disable_wait_ns = */ 20, /* uc1608 datasheet, page 39 */ /* reset_pulse_width_ms = */ 1, /* uc1608 datasheet, page 42 */ /* post_reset_wait_ms = */ 10, /* sda_setup_time_ns = */ 30, /* uc1608 datasheet, page 41 */ /* sck_pulse_width_ns = */ 65, /* half of cycle time */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* uc1608 datasheet, page 39 */ /* write_pulse_width_ns = */ 35, /* uc1608 datasheet, page 39 */ /* tile_width = */ 30, /* width of 30*8=240 pixel */ /* tile_hight = */ 8, /* default_x_offset = */ 0, /* reused as y page offset */ /* flipmode_x_offset = */ 4, /* reused as y page offset */ /* pixel_width = */ 240, /* pixel_height = */ 64 }; static const uint8_t u8x8_d_uc1608_erc24064_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_DLY(200), U8X8_C(0x023), /* Bit 0/1: Temp compenstation, Bit 2: Multiplex Rate 0=96, 1=128 */ //U8X8_C(0x027), /* Bit 0/1: Temp compenstation, Bit 2: Multiplex Rate 0=96, 1=128 */ U8X8_C(0x0c8), /* Map control, Bit 3: MY=1, Bit 2: MX=0, Bit 0: MSF =0 */ U8X8_C(0x0e8), /* LCD bias Bits 0/1: 00=10.7 01=10.3, 10=12.0, 11=12.7 */ U8X8_C(0x02f), /* power on, Bit 2 PC2=1 (internal charge pump), Bits 0/1: cap of panel */ U8X8_DLY(50), U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x090), /* no fixed lines */ U8X8_C(0x089), /* RAM access control */ U8X8_CA(0x081, 0x014), /* set contrast, ERC24064-1 default: 0x040 */ U8X8_C(0x000), /* column low nibble */ U8X8_C(0x010), /* column high nibble */ U8X8_C(0x0b0), /* page adr */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_uc1608_erc24064(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_uc1608_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1608_240x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1608_erc24064_init_seq); break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* experimental implementation for the uc1608 240x128, not referenced in codebuild */ static const u8x8_display_info_t u8x8_uc1608_240x128_display_info = { /* chip_enable_level = */ 1, /* uc1608 has high active CS */ /* chip_disable_level = */ 0, /* post_chip_enable_wait_ns = */ 10, /* uc1608 datasheet, page 39, actually 0 */ /* pre_chip_disable_wait_ns = */ 20, /* uc1608 datasheet, page 39 */ /* reset_pulse_width_ms = */ 1, /* uc1608 datasheet, page 42 */ /* post_reset_wait_ms = */ 10, /* sda_setup_time_ns = */ 30, /* uc1608 datasheet, page 41 */ /* sck_pulse_width_ns = */ 65, /* half of cycle time */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* uc1608 datasheet, page 39 */ /* write_pulse_width_ns = */ 35, /* uc1608 datasheet, page 39 */ /* tile_width = */ 30, /* width of 30*8=240 pixel */ /* tile_hight = */ 16, /* default_x_offset = */ 0, /* reused as y page offset */ /* flipmode_x_offset = */ 0, /* reused as y page offset */ /* pixel_width = */ 240, /* pixel_height = */ 128 }; static const uint8_t u8x8_d_uc1608_240x128_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_DLY(200), //U8X8_C(0x023), /* Bit 0/1: Temp compenstation, Bit 2: Multiplex Rate 0=96, 1=128 */ U8X8_C(0x026), /* Bit 0/1: Temp compenstation, Bit 2: Multiplex Rate 0=96, 1=128 */ U8X8_C(0x0c8), /* Map control, Bit 3: MY=1, Bit 2: MX=0, Bit 0: MSF =0 */ U8X8_C(0x0ea), /* LCD bias Bits 0/1: 00=10.7 01=10.3, 10=12.0, 11=12.7 */ /* maybe 0x0eb??? */ U8X8_C(0x02f), /* power on, Bit 2 PC2=1 (internal charge pump), Bits 0/1: cap of panel */ U8X8_DLY(50), U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x090), /* no fixed lines */ U8X8_C(0x089), /* RAM access control */ U8X8_CA(0x081, 0x072), /* set contrast */ U8X8_C(0x000), /* column low nibble */ U8X8_C(0x010), /* column high nibble */ U8X8_C(0x0b0), /* page adr */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_uc1608_240x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_uc1608_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1608_240x128_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1608_240x128_init_seq); break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* experimental implementation for the uc1608 erc240x120 */ static const u8x8_display_info_t u8x8_uc1608_erc240120_display_info = { /* chip_enable_level = */ 1, /* uc1608 has high active CS */ /* chip_disable_level = */ 0, /* post_chip_enable_wait_ns = */ 10, /* uc1608 datasheet, page 39, actually 0 */ /* pre_chip_disable_wait_ns = */ 20, /* uc1608 datasheet, page 39 */ /* reset_pulse_width_ms = */ 1, /* uc1608 datasheet, page 42 */ /* post_reset_wait_ms = */ 10, /* sda_setup_time_ns = */ 30, /* uc1608 datasheet, page 41 */ /* sck_pulse_width_ns = */ 65, /* half of cycle time */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* uc1608 datasheet, page 39 */ /* write_pulse_width_ns = */ 35, /* uc1608 datasheet, page 39 */ /* tile_width = */ 30, /* width of 30*8=240 pixel */ /* tile_hight = */ 15, /* default_x_offset = */ 1, /* reused as y page offset */ /* flipmode_x_offset = */ 0, /* reused as y page offset */ /* pixel_width = */ 240, /* pixel_height = */ 120 }; /* http://www.buydisplay.com/download/democode/ERC240120-1_DemoCode.txt */ static const uint8_t u8x8_d_uc1608_erc240120_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_DLY(200), //U8X8_C(0x023), /* Bit 0/1: Temp compenstation, Bit 2: Multiplex Rate 0=96, 1=128 */ U8X8_C(0x026), /* Bit 0/1: Temp compenstation, Bit 2: Multiplex Rate 0=96, 1=128 */ U8X8_C(0x0c8), /* Map control, Bit 3: MY=1, Bit 2: MX=0, Bit 0: MSF =0 */ U8X8_C(0x0ea), /* LCD bias Bits 0/1: 00=10.7 01=10.3, 10=12.0, 11=12.7 */ /* according to DemoCode.txt */ U8X8_C(0x02f), /* power on, Bit 2 PC2=1 (internal charge pump), Bits 0/1: cap of panel */ U8X8_DLY(50), U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x090), /* no fixed lines */ U8X8_C(0x089), /* RAM access control */ //U8X8_CA(0x081, 46), /* set contrast, 46 according to DemoCode.txt */ U8X8_CA(0x081, 80), /* */ U8X8_C(0x000), /* column low nibble */ U8X8_C(0x010), /* column high nibble */ U8X8_C(0x0b0), /* page adr */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_uc1608_erc240120(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_uc1608_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1608_erc240120_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1608_erc240120_init_seq); break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ ================================================ FILE: Drivers/u8g2/Src/u8x8_d_uc1610.c ================================================ /* u8x8_d_uc1610.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. cad001 */ #include "u8x8.h" static const uint8_t u8x8_d_uc1610_dogxl160_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0f1, 0x067), /* set COM end (display height-1) */ U8X8_C(0x0c0), /* SEG & COM normal */ U8X8_C(0x040), /* set scroll line lsb to zero */ U8X8_C(0x050), /* set scroll line msb to zero */ U8X8_C(0x02b), /* set panelloading */ U8X8_C(0x0eb), /* set bias 1/2 */ U8X8_CA(0x081, 0x05f), /* set contrast */ /* AC0: 0: stop at boundary, 1: increment by one AC1: 0: first column then page, 1: first page, then column increment AC2: 0: increment page adr, 1: decrement page adr. */ U8X8_C(0x08b), /* set auto increment, low bits are AC2 AC1 AC0 */ /* LC0: 0 MX: Mirror X MY: Mirror Y */ U8X8_C(0x0c0), /* low bits are MY, MX, LC0 */ U8X8_C(0x0f8), // window mode off U8X8_C(0x010), // col high U8X8_C(0x000), // col low U8X8_C(0x0b0), // page U8X8_C(0x0a6), /* set normal pixel mode (not inverse) */ U8X8_C(0x0a4), /* set normal pixel mode (not all on) */ /* test code U8X8_C(0x0af), // display on U8X8_C(0x0f8), // window mode off U8X8_CA(0x0f4, 0), // set window U8X8_CA(0x0f5, 0), U8X8_CA(0x0f6, 4), U8X8_CA(0x0f7, 1), U8X8_C(0x0f9), // window mode on U8X8_D1(0x03), U8X8_D1(0x0c0), U8X8_D1(0x0ff), U8X8_D1(0x0ff), U8X8_D1(0x0ff), U8X8_D1(0x0ff), U8X8_D1(0x0ff), U8X8_D1(0x0ff), */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1610_dogxl160_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on, UC1610 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1610_dogxl160_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off, UC1610 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1610_dogxl160_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ /* LC0: 0 MX: Mirror X MY: Mirror Y */ U8X8_C(0x0c0), /* low bits are MY, MX, LC0 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1610_dogxl160_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ /* LC0: 0 MX: Mirror X MY: Mirror Y */ U8X8_C(0x0c6), /* low bits are MY, MX, LC0 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* UC1610 has two chip select inputs (CS0 and CS1). CS0 is low active, CS1 is high active. It will depend on the display module whether the display has a is low or high active chip select. */ static const u8x8_display_info_t u8x8_uc1610_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 15, /* pre_chip_disable_wait_ns = */ 15, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 30, /* sck_pulse_width_ns = */ 63, /* half of cycle time (125ns cycle time according to datasheet) --> 8MHz clock */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* write_pulse_width_ns = */ 40, /* tile_width = */ 20, /* tile_hight = */ 13, /* height of 13*8=104 pixel */ /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 160, /* pixel_height = */ 104 }; /* RAM Organization: D0 Pix0 D1 D2 Pix1 D3 D4 Pix2 D5 D6 Pix3 D7 D0 Pix4 D1 D2 Pix5 D3 D4 Pix6 D5 D6 Pix7 D7 */ static uint8_t *u8x8_convert_tile_for_uc1610(uint8_t *t) { uint8_t i; uint16_t r; static uint8_t buf[16]; uint8_t *pbuf = buf; for( i = 0; i < 8; i++ ) { r = u8x8_upscale_byte(*t++); *pbuf++ = r & 255; r >>= 8; *pbuf++ = r; } return buf; } uint8_t u8x8_d_uc1610_ea_dogxl160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c, page; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1610_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1610_dogxl160_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_uc1610_dogxl160_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_uc1610_dogxl160_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1610_dogxl160_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1610_dogxl160_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* uc1610 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; page = (((u8x8_tile_t *)arg_ptr)->y_pos); page *= 2; u8x8_cad_SendCmd(u8x8, 0x0f8 ); /* window disable */ //u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); //u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); //u8x8_cad_SendCmd(u8x8, 0x0b0 | page); u8x8_cad_SendCmd(u8x8, 0x0f4 ); /* window start column */ u8x8_cad_SendArg(u8x8, x); u8x8_cad_SendCmd(u8x8, 0x0f5 ); /* window start page */ u8x8_cad_SendArg(u8x8, page); u8x8_cad_SendCmd(u8x8, 0x0f6 ); /* window end column */ u8x8_cad_SendArg(u8x8, 159); /* end of display */ u8x8_cad_SendCmd(u8x8, 0x0f7 ); /* window end page */ u8x8_cad_SendArg(u8x8, page+1); u8x8_cad_SendCmd(u8x8, 0x0f9 ); /* window enable */ do { c = ((u8x8_tile_t *)arg_ptr)->cnt; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendData(u8x8, 16, u8x8_convert_tile_for_uc1610(ptr)); ptr += 8; x += 8; c--; } while( c > 0 ); arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_uc1611.c ================================================ /* u8x8_d_uc1611.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 6 Nov 2016: Not yet finished There are two controller: UC1611s 160x256 UC1611 160x240 Differences: UC1611 0xa8 cmd: enables 80 display rows UC1611s 0xa8 cmd: controlls graylevels UC1611 0xc0 cmd: single byte command for LCD mapping control UC1611s 0xc0 cmd: double byte command for LCD mapping control */ #include "u8x8.h" static const uint8_t u8x8_d_uc1611s_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a9), /* display on, UC1611s */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1611s_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a8), /* display off, enter sleep mode, UC1611s */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1611s_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0c0, 0x004), /* LCD Mapping */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1611s_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0c0, 0x002), /* LCD Mapping */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_uc1611_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, y, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); y = ((u8x8_tile_t *)arg_ptr)->y_pos; u8x8_cad_SendCmd(u8x8, 0x060 | (y&15)); u8x8_cad_SendCmd(u8x8, 0x070 | (y>>4)); c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; /* handled in the calling procedure case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1611_128x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1701_dogs102_init_seq); break; */ #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* uc1611 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif default: return 0; } return 1; } /*================================================*/ /* EA DOGM240 */ /* UC1611 has two chip select inputs (CS0 and CS1). CS0 is low active, CS1 is high active. It will depend on the display module whether the display has a is low or high active chip select. */ static const u8x8_display_info_t u8x8_uc1611_240x64_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 10, /* uc1611 datasheet, page 60, actually 0 */ /* pre_chip_disable_wait_ns = */ 10, /* uc1611 datasheet, page 60, actually 0 */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 10, /* uc1611 datasheet, page 67 */ /* sda_setup_time_ns = */ 10, /* uc1611 datasheet, page 64, actually 0 */ /* sck_pulse_width_ns = */ 60, /* half of cycle time */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* uc1611 datasheet, page 60 */ /* write_pulse_width_ns = */ 80, /* uc1611 datasheet, page 60 */ /* tile_width = */ 30, /* width of 30*8=240 pixel */ /* tile_hight = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 240, /* pixel_height = */ 64 }; static const uint8_t u8x8_d_uc1611_ea_dogm240_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x02f), /* internal pump control */ U8X8_CA(0x0f1, 63), /* set COM end */ U8X8_CA(0x0f2, 0x000), /* display line start */ U8X8_CA(0x0f3, 63), /* display line end */ U8X8_C(0x0a3), /* line rate */ U8X8_CA(0x081, 0x0a4), /* set contrast, EA default: 0x0b7 */ //U8X8_C(0x0a9), /* display enable */ U8X8_C(0x0d1), /* display pattern */ U8X8_C(0x089), /* auto increment */ U8X8_CA(0x0c0, 0x004), /* LCD Mapping */ U8X8_C(0x000), /* column low nibble */ U8X8_C(0x010), /* column high nibble */ U8X8_C(0x060), /* page adr low */ U8X8_C(0x070), /* page adr high */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* UC1611s 240x64 display */ uint8_t u8x8_d_uc1611_ea_dogm240(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_uc1611_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1611_240x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611_ea_dogm240_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611s_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611s_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611s_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611s_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* EA DOGXL240 */ static const uint8_t u8x8_d_uc1611_ea_dogxl240_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x02f), /* internal pump control */ U8X8_CA(0x0f1, 0x07f), /* set COM end */ U8X8_CA(0x0f2, 0x000), /* display line start */ U8X8_CA(0x0f3, 127), /* display line end */ U8X8_C(0x0a3), /* line rate */ U8X8_CA(0x081, 0x08f), /* set contrast */ //U8X8_C(0x0a9), /* display enable */ U8X8_C(0x0d1), /* display pattern */ U8X8_C(0x089), /* auto increment */ U8X8_CA(0x0c0, 0x004), /* LCD Mapping */ U8X8_C(0x000), /* column low nibble */ U8X8_C(0x010), /* column high nibble */ U8X8_C(0x060), /* page adr low */ U8X8_C(0x070), /* page adr high */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_uc1611_240x128_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 10, /* uc1611 datasheet, page 60, actually 0 */ /* pre_chip_disable_wait_ns = */ 10, /* uc1611 datasheet, page 60, actually 0 */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 10, /* uc1611 datasheet, page 67 */ /* sda_setup_time_ns = */ 10, /* uc1611 datasheet, page 64, actually 0 */ /* sck_pulse_width_ns = */ 60, /* half of cycle time */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* uc1611 datasheet, page 60 */ /* write_pulse_width_ns = */ 80, /* uc1611 datasheet, page 60 */ /* tile_width = */ 30, /* width of 30*8=240 pixel */ /* tile_hight = */ 16, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 240, /* pixel_height = */ 128 }; /* UC1611s 240x128 display */ uint8_t u8x8_d_uc1611_ea_dogxl240(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_uc1611_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1611_240x128_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611_ea_dogxl240_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611s_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611s_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611s_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611s_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ /* EMERGING DISPLAY, EW50850FLWP 240x160 */ /* active high CS (CS1), UC1611 display */ static const uint8_t u8x8_d_uc1611_ew50850_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x02f), /* internal pump control */ U8X8_CA(0x0f1, 159), /* set COM end */ U8X8_CA(0x0f2, 0), /* display line start */ U8X8_CA(0x0f3, 159), /* display line end */ U8X8_C(0x0a3), /* line rate */ U8X8_CA(0x081, 75), /* set contrast */ //U8X8_C(0x0a9), /* display enable */ U8X8_C(0x0d2), /* gray level mode: 16 gray shades */ U8X8_C(0x089), /* auto increment */ U8X8_C(0x0c0), /* LCD Mapping Bit 0: MSF, Bit 1: MX, Bit 2: MY */ U8X8_C(0x000), /* column low nibble */ U8X8_C(0x010), /* column high nibble */ U8X8_C(0x060), /* page adr low */ U8X8_C(0x070), /* page adr high */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_uc1611_ew50850_display_info = { /* chip_enable_level = */ 1, /* active high */ /* chip_disable_level = */ 0, /* post_chip_enable_wait_ns = */ 10, /* uc1611 datasheet, page 60, actually 0 */ /* pre_chip_disable_wait_ns = */ 10, /* uc1611 datasheet, page 60, actually 0 */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 10, /* uc1611 datasheet, page 67 */ /* sda_setup_time_ns = */ 10, /* uc1611 datasheet, page 64, actually 0 */ /* sck_pulse_width_ns = */ 60, /* half of cycle time */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* uc1611 datasheet, page 60 */ /* write_pulse_width_ns = */ 80, /* uc1611 datasheet, page 60 */ /* tile_width = */ 30, /* width of 30*8=240 pixel */ /* tile_hight = */ 20, /* height: 160 pixel */ /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 240, /* pixel_height = */ 160 }; static const uint8_t u8x8_d_uc1611_alt_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0c0), /* LCD Mapping Bit 0: MSF, Bit 1: MX, Bit 2: MY */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1611_alt_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0c6), /* LCD Mapping Bit 0: MSF, Bit 1: MX, Bit 2: MY */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1611_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0af), /* display on, UC1611 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1611_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a8), /* display off, enter sleep mode, UC1611 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* EW50850, 240x160 */ uint8_t u8x8_d_uc1611_ew50850(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, y, c, i, v, m0, m1, ai; uint8_t *ptr; /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; y = ((u8x8_tile_t *)arg_ptr)->y_pos; y*=4; m0 = 1; m1 = 2; for( i = 0; i < 4; i++ ) { u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x060 | (y&15)); u8x8_cad_SendCmd(u8x8, 0x070 | (y>>4)); ai = arg_int; do { c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; while( c > 0 ) { v = 0; if ( *ptr & m0 ) v|= 0x0f; if ( *ptr & m1 ) v|= 0xf0; u8x8_cad_SendData(u8x8, 1, &v); /* note: SendData can not handle more than 255 bytes */ c--; ptr++; } ai--; } while( ai > 0 ); m0 <<= 2; m1 <<= 2; y++; } u8x8_cad_EndTransfer(u8x8); break; case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1611_ew50850_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611_ew50850_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611_alt_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611_alt_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* uc1611 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif default: return 0; /* msg unknown */ } return 1; } /*================================================*/ /* CG160160D, http://www.cloverdisplay.com/pdf/CG160160D.pdf */ /* UC1611 has two chip select inputs (CS0 and CS1). CS0 is low active, CS1 is high active. It will depend on the display module whether the display has a is low or high active chip select. Connect CS1 to 3.3V and CS0 to GPIO */ static const u8x8_display_info_t u8x8_uc1611_cg160160_display_info = { /* chip_enable_level = */ 0, /* use CS0 of the UC1611 */ /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 10, /* uc1611 datasheet, page 60, actually 0 */ /* pre_chip_disable_wait_ns = */ 10, /* uc1611 datasheet, page 60, actually 0 */ /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 10, /* uc1611 datasheet, page 67 */ /* sda_setup_time_ns = */ 10, /* uc1611 datasheet, page 64, actually 0 */ /* sck_pulse_width_ns = */ 60, /* half of cycle time */ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* uc1611 datasheet, page 60 */ /* write_pulse_width_ns = */ 80, /* uc1611 datasheet, page 60 */ /* tile_width = */ 20, /* width of 20*8=160 pixel */ /* tile_hight = */ 20, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 160, /* pixel_height = */ 160 }; /* System Reset: E2H --> DONE Set Temp. Compensation: 24H --> DONE Set up LCD format specific parameters MX,MY,etc(double-byte command): C0H,04H --> FLIP0 Set line rate: A3H --> DONE Set Pump Control (internal Vlcd): 2FH --> DONE Set Isolation Clock Front (3 bytes command): 82H, 13H, 01H --> DONE Set Isolation Clock Back (3 bytes command): 82H, 14H, 00H --> DONE Set LCD Bias Ratio: EAH LCD Specific Operation Voltage Setting (double-byte command): 81H, 90H --> DONE Set RAM Address Control: 80H --> DOES NOT MAKE SENSE Set Page Addr. MSB: 72H --> DONE Set Page Addr. LSB : 60H --> DONE Set Column Addr. LSB: 00H --> DONE Set Column Addr.MSB: 10H --> DONE Window Program Enable : F8H --> NOT REQURED Window Starting Column (double-byte command): F4H , 00H --> NOT REQURED Window Ending Column (double-byte command): F6H, 9FH --> NOT REQURED Set one bit for one pixel: D1H --> DONE Set Display Enable: A9H */ static const uint8_t u8x8_d_uc1611_cg160160_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* system reset */ U8X8_DLY(2), U8X8_C(0x024), /* Temp. Compensation to 0 = -0.05%/ Grad C */ U8X8_C(0x0a3), /* line rate */ U8X8_C(0x02f), /* internal pump control */ U8X8_CAA(0x082, 0x013, 0x001), /* Isolation front clock, "1" is the default value */ U8X8_CAA(0x082, 0x014, 0x000), /* Isolation back clock, "0" is the default value */ U8X8_C(0x0ea), /* bias ratio, default: 0x0ea */ U8X8_CA(0x081, 0x090), /* set contrast, CG160160: 0x090 */ //U8X8_CA(0x0f1, 159), /* set COM end */ //U8X8_CA(0x0f2, 0), /* display line start */ //U8X8_CA(0x0f3, 159), /* display line end */ //U8X8_C(0x0a9), /* display enable */ U8X8_C(0x089), /* RAM Address Control: auto increment */ U8X8_C(0x0d1), /* display pattern */ U8X8_CA(0x0c0, 0x004), /* LCD Mapping */ U8X8_C(0x000), /* column low nibble */ U8X8_C(0x010), /* column high nibble */ U8X8_C(0x060), /* page adr low */ U8X8_C(0x070), /* page adr high */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; /* cg160160 display */ uint8_t u8x8_d_uc1611_cg160160(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_uc1611_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1611_cg160160_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611_cg160160_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611s_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611s_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611s_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1611s_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; default: return 0; /* msg unknown */ } } return 1; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_uc1617.c ================================================ /* u8x8_d_uc1617.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2017, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_uc1617_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ad), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1617_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ac), /* display off, enter sleep mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1617_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0c4), /* LCD Mapping */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1617_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0c2), /* LCD Mapping */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_uc1617_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, y, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); y = ((u8x8_tile_t *)arg_ptr)->y_pos; u8x8_cad_SendCmd(u8x8, 0x060 | (y&15)); u8x8_cad_SendCmd(u8x8, 0x070 | (y>>4)); c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_uc1617_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_uc1617_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1617_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1617_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* uc1617 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif default: return 0; } return 1; } /*================================================*/ /* JLX128128 */ static const uint8_t u8x8_d_uc1617_jlx128128_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* reset */ U8X8_DLY(10), //U8X8_D1(0x0ff), U8X8_C(0x027), /* temperature compensation */ U8X8_C(0x02b), /* panel loading: 13-18nF */ U8X8_C(0x02f), /* internal pump control */ U8X8_C(0x0eb), /* bias=1/11 */ U8X8_CA(0x081, 0x066), /* set contrast */ //U8X8_C(0x0a9), /* used in display datasheet, but cmd not described in controller datasheet */ U8X8_CA(0x0f1, 0x07f), /* set COM end */ U8X8_CA(0x0f2, 0x000), /* display line start */ U8X8_CA(0x0f3, 127), /* display line end */ U8X8_C(0x0a3), /* line rate */ U8X8_C(0x0d3), /* */ U8X8_C(0x0d7), /* */ U8X8_C(0x0ad), /* display enable BW Mode*/ //U8X8_C(0x0af), /* display enable GS Mode*/ //U8X8_C(0x0a5), /* all pixel on */ //U8X8_C(0x0d1), /* display pattern */ U8X8_C(0x089), /* auto increment */ U8X8_C(0x0c4), /* LCD Mapping */ U8X8_C(0x000), /* column */ U8X8_C(0x060), /* page adr low */ U8X8_C(0x070), /* page adr high */ U8X8_D1(0x0ff), U8X8_D1(0x0ff), U8X8_D1(0x0ff), U8X8_D1(0x0ff), U8X8_D1(0x0ff), U8X8_D1(0x0ff), U8X8_D1(0x0ff), U8X8_D1(0x0ff), U8X8_D1(0x0ff), U8X8_D1(0x0ff), U8X8_D1(0x0ff), U8X8_D1(0x0ff), U8X8_D1(0x0ff), U8X8_D1(0x0ff), U8X8_D1(0x0ff), U8X8_D1(0x0ff), U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_uc1617_128x128_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 10, /* uc1617 datasheet, page 54, actually 5 */ /* pre_chip_disable_wait_ns = */ 10, /* uc1617 datasheet, page 54, actually 5 */ /* reset_pulse_width_ms = */ 10, /* post_reset_wait_ms = */ 20, /* uc1617 datasheet, page 56 */ /* sda_setup_time_ns = */ 24, /* uc1617 datasheet, page 54 */ /* sck_pulse_width_ns = */ 45, /* half of cycle time uc1617 datasheet, page 54*/ /* sck_clock_hz = */ 8000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* uc1617 datasheet, page 52 */ /* write_pulse_width_ns = */ 65, /* uc1617 datasheet, page 52 */ /* tile_width = */ 16, /* width of 16*8=128 pixel */ /* tile_hight = */ 16, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 128, /* pixel_height = */ 128 }; uint8_t u8x8_d_uc1617_jlx128128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_uc1617_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1617_128x128_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1617_jlx128128_init_seq); for(;;) ; break; default: return 0; /* msg unknown */ } } return 1; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_uc1638.c ================================================ /* u8x8_d_uc1638.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_uc1638_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0c9, 0x0ad), /* display on */ /* UC1638 B/W mode */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1638_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0c9, 0x0ac), /* display off */ /* UC1638 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1638_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0c4), /* LCD Mapping */ /* UC1638*/ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1638_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0c2), /* LCD Mapping */ /* UC1638*/ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_uc1638_common(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, y, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; u8x8_cad_SendCmd(u8x8, 0x004); /* UC1638 */ u8x8_cad_SendArg(u8x8, x); y = ((u8x8_tile_t *)arg_ptr)->y_pos; y += u8x8->x_offset; y *= 2; /* for B/W mode, use only every second page */ u8x8_cad_SendCmd(u8x8, 0x060 | (y&15)); /* UC1638 */ u8x8_cad_SendCmd(u8x8, 0x070 | (y>>4)); /* UC1638 */ u8x8_cad_SendCmd(u8x8, 0x001); /* UC1638 */ c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; /* handled in the calling procedure case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1638_128x64_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1701_dogs102_init_seq); break; */ case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_uc1638_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_uc1638_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1638_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1638_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int ); /* uc1638 has range from 0 to 255 */ u8x8_cad_EndTransfer(u8x8); break; #endif default: return 0; } return 1; } /*================================================*/ /* uc1638 160x128 */ /* values taken from uc1608 */ static const u8x8_display_info_t u8x8_uc1638_160x128_display_info = { /* chip_enable_level = */ 1, /* uc1638 has high active CS */ /* chip_disable_level = */ 0, /* post_chip_enable_wait_ns = */ 10, /* */ /* pre_chip_disable_wait_ns = */ 20, /* */ /* reset_pulse_width_ms = */ 5, /* */ /* post_reset_wait_ms = */ 150, /* sda_setup_time_ns = */ 30, /* */ /* sck_pulse_width_ns = */ 65, /* */ /* sck_clock_hz = */ 1000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 3, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* */ /* write_pulse_width_ns = */ 35, /* */ /* tile_width = */ 20, /* width of 20*8=160 pixel */ /* tile_hight = */ 16, /* default_x_offset = */ 0, /* */ /* flipmode_x_offset = */ 0, /* */ /* pixel_width = */ 160, /* pixel_height = */ 128 }; static const uint8_t u8x8_d_uc1638_160x128_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_CA(0x0e1, 0x0e2), /* software reset */ /* UC1638*/ U8X8_DLY(5), /* 5 ms */ U8X8_C(0x024), /* set temp comp*/ U8X8_C(0x0c0), /* mirror y and mirror x */ /* WAS: c2 */ U8X8_C(0x0a2), /* line rate */ U8X8_C(0x0d6), /* gray scale 2 */ U8X8_C(0x0eb), /* set bias*/ U8X8_C(0x095), /* set 1 bit per pixel, pattern 0*/ U8X8_C(0x089), /* set auto increment, low bits are AC2 AC1 AC0 */ /* WAS 89 */ U8X8_CA(0x081, 0x0a0), /* set contrast */ /* UC1638*/ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; uint8_t u8x8_d_uc1638_160x128(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { /* call common procedure first and handle messages there */ if ( u8x8_d_uc1638_common(u8x8, msg, arg_int, arg_ptr) == 0 ) { /* msg not handled, then try here */ switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1638_160x128_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1638_160x128_init_seq); break; default: return 0; /* msg unknown */ } } return 1; } /*================================================*/ ================================================ FILE: Drivers/u8g2/Src/u8x8_d_uc1701_dogs102.c ================================================ /* u8x8_d_uc1701_dogs102.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_uc1701_dogs102_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x0a1), /* ADC set to reverse */ U8X8_C(0x0c0), /* common output mode */ // Flipmode //U8X8_C(0x0a0), /* ADC set to reverse */ //U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a2), /* LCD bias 1/9 */ U8X8_C(0x02f), /* all power control circuits on */ U8X8_C(0x027), /* regulator, booster and follower */ U8X8_CA(0x081, 0x00e), /* set contrast, contrast value, EA default: 0x010, previous value for S102: 0x0e */ U8X8_C(0x0fa), /* Set Temp compensation */ U8X8_C(0x090), /* 0.11 deg/c WP Off WC Off*/ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1701_dogs102_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a4), /* all pixel off, issue 142 */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1701_dogs102_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1701_dogs102_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1701_dogs102_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_uc1701_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 5, /* pre_chip_disable_wait_ns = */ 5, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 12, /* sck_pulse_width_ns = */ 75, /* half of cycle time (100ns according to datasheet), AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* write_pulse_width_ns = */ 40, /* tile_width = */ 13, /* width of 13*8=104 pixel */ /* tile_hight = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 30, /* pixel_width = */ 102, /* pixel_height = */ 64 }; uint8_t u8x8_d_uc1701_ea_dogs102(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1701_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1701_dogs102_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_uc1701_dogs102_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_uc1701_dogs102_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1701_dogs102_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1701_dogs102_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int >> 2 ); /* uc1701 has range from 0 to 63 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* The following if condition checks the hardware limits of the uc1701 controller: It is not allowed to write beyond the display limits. This is in fact an issue within flip mode. */ if ( c + x > 132u ) { c = 132u; c -= x; } do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } ================================================ FILE: Drivers/u8g2/Src/u8x8_d_uc1701_mini12864.c ================================================ /* u8x8_d_uc1701_mini12864.c (dealextreme, displays from ebay MP3 players) Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const uint8_t u8x8_d_uc1701_mini12864_init_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0e2), /* soft reset */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x040), /* set display start line to 0 */ U8X8_C(0x0a0), /* ADC set to reverse */ U8X8_C(0x0c8), /* common output mode */ U8X8_C(0x0a6), /* display normal, bit val 0: LCD pixel off. */ U8X8_C(0x0a2), /* LCD bias 1/9 */ U8X8_C(0x02f), /* all power control circuits on */ U8X8_C(0x0f8), /* set booster ratio to */ U8X8_C(0x000), /* 4x */ U8X8_C(0x023), /* set V0 voltage resistor ratio to large */ U8X8_C(0x081), /* set contrast */ U8X8_C(0x027), /* contrast value */ U8X8_C(0x0ac), /* indicator */ // 0x000, /* disable */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1701_mini12864_powersave0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a4), /* all pixel off, issue 142 */ U8X8_C(0x0af), /* display on */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1701_mini12864_powersave1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0ae), /* display off */ U8X8_C(0x0a5), /* enter powersafe: all pixel on, issue 142 */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1701_mini12864_flip0_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a0), /* segment remap a0/a1*/ U8X8_C(0x0c8), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const uint8_t u8x8_d_uc1701_mini12864_flip1_seq[] = { U8X8_START_TRANSFER(), /* enable chip, delay is part of the transfer start */ U8X8_C(0x0a1), /* segment remap a0/a1*/ U8X8_C(0x0c0), /* c0: scan dir normal, c8: reverse */ U8X8_END_TRANSFER(), /* disable chip */ U8X8_END() /* end of sequence */ }; static const u8x8_display_info_t u8x8_uc1701_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 5, /* pre_chip_disable_wait_ns = */ 5, /* reset_pulse_width_ms = */ 1, /* post_reset_wait_ms = */ 6, /* sda_setup_time_ns = */ 12, /* sck_pulse_width_ns = */ 75, /* half of cycle time (100ns according to datasheet), AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 30, /* write_pulse_width_ns = */ 40, /* tile_width = */ 16, /* width of 16*8=128 pixel */ /* tile_hight = */ 8, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 4, /* pixel_width = */ 128, /* pixel_height = */ 64 }; uint8_t u8x8_d_uc1701_mini12864(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { uint8_t x, c; uint8_t *ptr; switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_uc1701_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); u8x8_cad_SendSequence(u8x8, u8x8_d_uc1701_mini12864_init_seq); break; case U8X8_MSG_DISPLAY_SET_POWER_SAVE: if ( arg_int == 0 ) u8x8_cad_SendSequence(u8x8, u8x8_d_uc1701_mini12864_powersave0_seq); else u8x8_cad_SendSequence(u8x8, u8x8_d_uc1701_mini12864_powersave1_seq); break; case U8X8_MSG_DISPLAY_SET_FLIP_MODE: if ( arg_int == 0 ) { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1701_mini12864_flip0_seq); u8x8->x_offset = u8x8->display_info->default_x_offset; } else { u8x8_cad_SendSequence(u8x8, u8x8_d_uc1701_mini12864_flip1_seq); u8x8->x_offset = u8x8->display_info->flipmode_x_offset; } break; #ifdef U8X8_WITH_SET_CONTRAST case U8X8_MSG_DISPLAY_SET_CONTRAST: u8x8_cad_StartTransfer(u8x8); u8x8_cad_SendCmd(u8x8, 0x081 ); u8x8_cad_SendArg(u8x8, arg_int >> 2 ); /* uc1701 has range from 0 to 63 */ u8x8_cad_EndTransfer(u8x8); break; #endif case U8X8_MSG_DISPLAY_DRAW_TILE: u8x8_cad_StartTransfer(u8x8); x = ((u8x8_tile_t *)arg_ptr)->x_pos; x *= 8; x += u8x8->x_offset; u8x8_cad_SendCmd(u8x8, 0x010 | (x>>4) ); u8x8_cad_SendCmd(u8x8, 0x000 | ((x&15))); u8x8_cad_SendCmd(u8x8, 0x0b0 | (((u8x8_tile_t *)arg_ptr)->y_pos)); c = ((u8x8_tile_t *)arg_ptr)->cnt; c *= 8; ptr = ((u8x8_tile_t *)arg_ptr)->tile_ptr; /* The following if condition checks the hardware limits of the uc1701 controller: It is not allowed to write beyond the display limits. This is in fact an issue within flip mode. bug: this check should be inside the while loop, see u8x8_d_pcd8544_84x48.c */ if ( c + x > 132u ) { c = 132u; c -= x; } do { u8x8_cad_SendData(u8x8, c, ptr); /* note: SendData can not handle more than 255 bytes */ arg_int--; } while( arg_int > 0 ); u8x8_cad_EndTransfer(u8x8); break; default: return 0; } return 1; } ================================================ FILE: Drivers/u8g2/Src/u8x8_debounce.c ================================================ /* u8x8_debounce.c Key/button simple debounce algorithm (Addon for u8x8) Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static uint8_t u8x8_read_pin_state(u8x8_t *u8x8) { uint8_t i; uint8_t pin_state; pin_state = 255; /* be compatible with the setup of the default pin setup, which is 255 */ for( i = 0; i < U8X8_PIN_INPUT_CNT; i++ ) { pin_state <<= 1; /* the callback function should put the return value into this variable */ u8x8->gpio_result = 1; u8x8_gpio_call(u8x8, U8X8_MSG_GPIO(i+U8X8_PIN_OUTPUT_CNT), 0); pin_state |= u8x8->gpio_result & 1; } return pin_state; } /* return 0 to U8X8_PIN_INPUT_CNT-1 if there is a difference return U8X8_PIN_INPUT_CNT if there is no difference */ static uint8_t u8x8_find_first_diff(uint8_t a, uint8_t b) { uint8_t mask; uint8_t i; mask = 1; i = U8X8_PIN_INPUT_CNT; do { i--; if ( (a & mask) != (b & mask) ) return i; mask <<= 1; } while( i > 0 ); return U8X8_PIN_INPUT_CNT; } /* State A: u8x8->debounce_last_pin_state == current_state --> State A u8x8->debounce_last_pin_state != current_state --> u8x8->debounce_last_pin_state = current_state --> State B + cnt State B + cnt --> state-- State B u8x8->debounce_last_pin_state == current_state --> keypress detected --> State C u8x8->debounce_last_pin_state != current_state --> State A State C u8x8->debounce_last_pin_state == current_state --> State C u8x8->debounce_last_pin_state != current_state --> State A */ #ifdef __unix__xxxxxx_THIS_IS_DISABLED #include #include uint8_t u8x8_GetMenuEvent(u8x8_t *u8x8) { int c; c = getc(stdin); switch(c) { case 'n': return U8X8_MSG_GPIO_MENU_NEXT; case 'p': return U8X8_MSG_GPIO_MENU_PREV; case 's': return U8X8_MSG_GPIO_MENU_SELECT; case 'h': return U8X8_MSG_GPIO_MENU_HOME; case 'x': exit(0); default: puts("press n, p, s, h or x"); break; } return 0; } #else /* __unix__ */ #define U8X8_DEBOUNCE_WAIT 2 /* do debounce and return a GPIO msg which indicates the event */ /* returns 0, if there is no event */ #if defined(__GNUC__) && !defined(__CYGWIN__) # pragma weak u8x8_GetMenuEvent #endif uint8_t u8x8_GetMenuEvent(u8x8_t *u8x8) { uint8_t pin_state; uint8_t result_msg = 0; /* invalid message, no event */ pin_state = u8x8_read_pin_state(u8x8); /* States A, B, C & D are encoded in the upper 4 bit*/ switch(u8x8->debounce_state) { case 0x00: /* State A, default state */ if ( u8x8->debounce_default_pin_state != pin_state ) { //u8x8->debounce_last_pin_state = pin_state; u8x8->debounce_state = 0x010 + U8X8_DEBOUNCE_WAIT; } break; case 0x10: /* State B */ //if ( u8x8->debounce_last_pin_state != pin_state ) if ( u8x8->debounce_default_pin_state == pin_state ) { u8x8->debounce_state = 0x00; /* back to state A */ } else { /* keypress detected */ u8x8->debounce_last_pin_state = pin_state; //result_msg = U8X8_MSG_GPIO_MENU_NEXT; u8x8->debounce_state = 0x020 + U8X8_DEBOUNCE_WAIT; /* got to state C */ } break; case 0x20: /* State C */ if ( u8x8->debounce_last_pin_state != pin_state ) { u8x8->debounce_state = 0x00; /* back to state A */ } else { u8x8->debounce_state = 0x030; /* got to state D */ } break; case 0x30: /* State D */ /* wait until key release */ if ( u8x8->debounce_default_pin_state == pin_state ) { u8x8->debounce_state = 0x00; /* back to state A */ result_msg = U8X8_MSG_GPIO(u8x8_find_first_diff(u8x8->debounce_default_pin_state, u8x8->debounce_last_pin_state)+U8X8_PIN_OUTPUT_CNT); } else { //result_msg = U8X8_MSG_GPIO_MENU_NEXT; // maybe implement autorepeat here } break; default: u8x8->debounce_state--; /* count down, until there is a valid state */ break; } return result_msg; } #endif /* __unix__ */ ================================================ FILE: Drivers/u8g2/Src/u8x8_display.c ================================================ /* u8x8_display.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Abstraction layer for the graphics controller. Main goal is the placement of a 8x8 pixel block (tile) on the display. */ #include "u8x8.h" /*==========================================*/ /* internal library function */ /* this is a helper function for the U8X8_MSG_DISPLAY_SETUP_MEMORY function. It can be called within the display callback function to carry out the usual standard tasks. */ void u8x8_d_helper_display_setup_memory(u8x8_t *u8x8, const u8x8_display_info_t *display_info) { /* 1) set display info struct */ u8x8->display_info = display_info; u8x8->x_offset = u8x8->display_info->default_x_offset; } /* this is a helper function for the U8X8_MSG_DISPLAY_INIT function. It can be called within the display callback function to carry out the usual standard tasks. */ void u8x8_d_helper_display_init(u8x8_t *u8x8) { /* 2) apply port directions to the GPIO lines and apply default values for the IO lines*/ u8x8_gpio_Init(u8x8); u8x8_cad_Init(u8x8); /* 3) do reset */ u8x8_gpio_SetReset(u8x8, 1); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_MILLI, u8x8->display_info->reset_pulse_width_ms); u8x8_gpio_SetReset(u8x8, 0); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_MILLI, u8x8->display_info->reset_pulse_width_ms); u8x8_gpio_SetReset(u8x8, 1); u8x8_gpio_Delay(u8x8, U8X8_MSG_DELAY_MILLI, u8x8->display_info->post_reset_wait_ms); } /*==========================================*/ /* official functions */ uint8_t u8x8_DrawTile(u8x8_t *u8x8, uint8_t x, uint8_t y, uint8_t cnt, uint8_t *tile_ptr) { u8x8_tile_t tile; tile.x_pos = x; tile.y_pos = y; tile.cnt = cnt; tile.tile_ptr = tile_ptr; return u8x8->display_cb(u8x8, U8X8_MSG_DISPLAY_DRAW_TILE, 1, (void *)&tile); } /* should be implemented as macro */ void u8x8_SetupMemory(u8x8_t *u8x8) { u8x8->display_cb(u8x8, U8X8_MSG_DISPLAY_SETUP_MEMORY, 0, NULL); } void u8x8_InitDisplay(u8x8_t *u8x8) { u8x8->display_cb(u8x8, U8X8_MSG_DISPLAY_INIT, 0, NULL); } void u8x8_SetPowerSave(u8x8_t *u8x8, uint8_t is_enable) { u8x8->display_cb(u8x8, U8X8_MSG_DISPLAY_SET_POWER_SAVE, is_enable, NULL); } void u8x8_SetFlipMode(u8x8_t *u8x8, uint8_t mode) { u8x8->display_cb(u8x8, U8X8_MSG_DISPLAY_SET_FLIP_MODE, mode, NULL); } void u8x8_SetContrast(u8x8_t *u8x8, uint8_t value) { u8x8->display_cb(u8x8, U8X8_MSG_DISPLAY_SET_CONTRAST, value, NULL); } void u8x8_RefreshDisplay(u8x8_t *u8x8) { u8x8->display_cb(u8x8, U8X8_MSG_DISPLAY_REFRESH, 0, NULL); } void u8x8_ClearDisplayWithTile(u8x8_t *u8x8, const uint8_t *buf) { u8x8_tile_t tile; uint8_t h; tile.x_pos = 0; tile.cnt = 1; tile.tile_ptr = (uint8_t *)buf; /* tile_ptr should be const, but isn't */ h = u8x8->display_info->tile_height; tile.y_pos = 0; do { u8x8->display_cb(u8x8, U8X8_MSG_DISPLAY_DRAW_TILE, u8x8->display_info->tile_width, (void *)&tile); tile.y_pos++; } while( tile.y_pos < h ); } void u8x8_ClearDisplay(u8x8_t *u8x8) { uint8_t buf[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; u8x8_ClearDisplayWithTile(u8x8, buf); } void u8x8_FillDisplay(u8x8_t *u8x8) { uint8_t buf[8] = { 255, 255, 255, 255, 255, 255, 255, 255 }; u8x8_ClearDisplayWithTile(u8x8, buf); } void u8x8_ClearLine(u8x8_t *u8x8, uint8_t line) { uint8_t buf[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; u8x8_tile_t tile; if ( line < u8x8->display_info->tile_height ) { tile.x_pos = 0; tile.y_pos = line; tile.cnt = 1; tile.tile_ptr = (uint8_t *)buf; /* tile_ptr should be const, but isn't */ u8x8->display_cb(u8x8, U8X8_MSG_DISPLAY_DRAW_TILE, u8x8->display_info->tile_width, (void *)&tile); } } ================================================ FILE: Drivers/u8g2/Src/u8x8_fonts.c ================================================ /* u8x8_fonts.c */ #include "u8x8.h" /* Fontname: -FreeType-Amstrad CPC extended-Medium-R-Normal--8-80-72-72-P-64-ISO10646-1 Copyright: Copyright ruboku 2008 Glyphs: 222/228 BBX Build Mode: 3 */ const uint8_t u8x8_font_amstrad_cpc_extended_f[1796] U8X8_FONT_SECTION("u8x8_font_amstrad_cpc_extended_f") = " \377\1\1\0\0\0\0\0\0\0\0\0\0\0__\0\0\0\0\7\7\0\7\7\0\0\24\177\177\34" "\177\177\24\0\0$*\177\177*\22\0Ff\60\30\14fb\0\60zO]\67zH\0\0\0\0\7" "\7\0\0\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\10*>\34\34>*\10\0\10\10>" ">\10\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0`\60\30\14" "\6\3\1\0>\177QIE\177>\0\0@B\177\177@@\0\0r{IIof\0\0\42aI" "I\177\66\0\30\24R\177\177P\20\0\0'oIIy\63\0\0>\177II{\62\0\0\3\1q" "}\17\7\0\0\66\177II\177\66\0\0&oII\177>\0\0\0\0ll\0\0\0\0\0\200\354" "l\0\0\0\0\10\34\66cA\0\0\0$$$$$$\0\0Ac\66\34\10\0\0\0\2\3Q" "Y\17\6\0>\177A]]_\36\0\0|~\23\23~|\0A\177\177II\177\66\0\34>cA" "Ac\42\0A\177\177Ac>\34\0A\177\177I]Ac\0A\177\177I\35\1\3\0<~CA" "Qsr\0\0\177\177\10\10\177\177\0\0AA\177\177AA\0\60p@A\177\77\1\0A\177\177\10" "\34wc\0A\177\177A@`p\0\177\177\16\34\16\177\177\0\177\177\6\14\30\177\177\0\34>cA" "c>\34\0A\177\177I\11\7\6\0<~CQ\63n\134\0A\177\177\11\31\77f\0\0&oI" "I{\62\0\0\3A\177\177A\3\0\0\77\177@@\177\77\0\0\37\77``\77\37\0\177\177\60\30" "\60\177\177\0as\36\14\36sa\0\0\7OxxO\7\0GcqYMgs\0\0\0\177\177" "AA\0\0\1\3\6\14\30\60`\0\0\0AA\177\177\0\0\10\14\6\3\6\14\10\0\200\200\200\200" "\200\200\200\200\0\0\2\6\14\10\0\0 tTT\10\10\0\0\0\0\177\177\0\0\0\0\10\10>wAA\0\2\3\1\3\2\1\1\0\0\0\0\0" "\0\0\0\0\0\0\0\377\377\0\0\0\30\30\30\30\30\30\30\30\0\0\0\37\37\30\30\30\0\0\0\370" "\370\30\30\30\30\30\30\370\370\0\0\0\30\30\30\37\37\0\0\0\30\30\30\37\37\30\30\30\0\0\0\377" "\377\30\30\30\30\30\30\370\370\30\30\30\30\30\30\377\377\0\0\0\30\30\30\377\377\30\30\30\0\10\34>" "\10\10\10\0\0\10\14>\14\10\0\0\0\10\10\10>\34\10\0\0\10\30>\30\10\0\0\0\0\0\0" "\360\360\360\360\360\360\360\360\0\0\0\0\360\360\360\360\360\360\360\360\0\0\0\0\17\17\17\17\0\0\0\0" "\377\377\377\377\360\360\360\360\17\17\17\17\360\360\360\360\377\377\377\377\17\17\17\17\0\0\0\0\17\17\17\17" "\360\360\360\360\377\377\377\377\0\0\0\0\377\377\377\377\360\360\360\360\17\17\17\17\17\17\17\17\17\17\17\17" "\377\377\377\377\377\377\377\377\17\17\17\17\377\377\377\377\377\377\377\377\300\300\300\300\300\300\300\300\374\374\374\374" "\374\374\374\374\0\0\0\0\0\0\0\0\0\0\0}}\0\0\0\70|D\376Dl(\0H~\177I" "Icb\0\0Z<$$\34\0\0zy\21\42zy\0\70|EED|\70\0\70|DD" "E}\70\0\70|EEE|\70\0\70}EEE}\70\0\70}EDE}\70\0Bf<\30" "s]g>\35\1\0<}A@|<\0\0<|@A}<\0\0<}A" "A}<\0\0=}@@}=\0\0\14]qp\134\14\0\177\177\42\42\42\34\0\0~\177II" "I>\66\0 uUTx@\0 tT|\64TX\0\0\30<\244" "\344$(\0\0\70}UT\134\30\0\0\70|TU]\30\0\0\70}UU]\30\0\0\71}T" "T]\31\0\0\0I{z@\0\0\0\0Hz{A\0\0\0\0JyyB\0\0\0\2Jx" "xB\2\0\0\65uKN}\61\0\10zq\11\12zq\0\0\60yKJx\60\0\0\60xJ" "Ky\60\0\0\60zIIz\60\0\0\62yIJz\61\0\0\62zHHz\62\0\0\10\10k" "k\10\10\0\200\260xhXx\64\4\0\70yCBxx\0\0\70xBCyx\0\0\70zA" "Azx\0\0:z@@zz\0\0\230\270\242\243\371x\0\0~$$$\30\0\0\0\232\272\240" "\240\372z"; /* Fontname: -FreeType-Amstrad CPC extended-Medium-R-Normal--8-80-72-72-P-64-ISO10646-1 Copyright: Copyright ruboku 2008 Glyphs: 95/228 BBX Build Mode: 3 */ const uint8_t u8x8_font_amstrad_cpc_extended_r[764] U8X8_FONT_SECTION("u8x8_font_amstrad_cpc_extended_r") = " ~\1\1\0\0\0\0\0\0\0\0\0\0\0__\0\0\0\0\7\7\0\7\7\0\0\24\177\177\34" "\177\177\24\0\0$*\177\177*\22\0Ff\60\30\14fb\0\60zO]\67zH\0\0\0\0\7" "\7\0\0\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\10*>\34\34>*\10\0\10\10>" ">\10\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0`\60\30\14" "\6\3\1\0>\177QIE\177>\0\0@B\177\177@@\0\0r{IIof\0\0\42aI" "I\177\66\0\30\24R\177\177P\20\0\0'oIIy\63\0\0>\177II{\62\0\0\3\1q" "}\17\7\0\0\66\177II\177\66\0\0&oII\177>\0\0\0\0ll\0\0\0\0\0\200\354" "l\0\0\0\0\10\34\66cA\0\0\0$$$$$$\0\0Ac\66\34\10\0\0\0\2\3Q" "Y\17\6\0>\177A]]_\36\0\0|~\23\23~|\0A\177\177II\177\66\0\34>cA" "Ac\42\0A\177\177Ac>\34\0A\177\177I]Ac\0A\177\177I\35\1\3\0<~CA" "Qsr\0\0\177\177\10\10\177\177\0\0AA\177\177AA\0\60p@A\177\77\1\0A\177\177\10" "\34wc\0A\177\177A@`p\0\177\177\16\34\16\177\177\0\177\177\6\14\30\177\177\0\34>cA" "c>\34\0A\177\177I\11\7\6\0<~CQ\63n\134\0A\177\177\11\31\77f\0\0&oI" "I{\62\0\0\3A\177\177A\3\0\0\77\177@@\177\77\0\0\37\77``\77\37\0\177\177\60\30" "\60\177\177\0as\36\14\36sa\0\0\7OxxO\7\0GcqYMgs\0\0\0\177\177" "AA\0\0\1\3\6\14\30\60`\0\0\0AA\177\177\0\0\10\14\6\3\6\14\10\0\200\200\200\200" "\200\200\200\200\0\0\2\6\14\10\0\0 tTT\10\10\0\0\0\0\177\177\0\0\0\0\10\10>wAA\0\2\3\1\3\2\1\1"; /* Fontname: -FreeType-Amstrad CPC extended-Medium-R-Normal--8-80-72-72-P-64-ISO10646-1 Copyright: Copyright ruboku 2008 Glyphs: 18/228 BBX Build Mode: 3 */ const uint8_t u8x8_font_amstrad_cpc_extended_n[220] U8X8_FONT_SECTION("u8x8_font_amstrad_cpc_extended_n") = " :\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10*>\34\34>*\10\0\10\10>" ">\10\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0`\60\30\14" "\6\3\1\0>\177QIE\177>\0\0@B\177\177@@\0\0r{IIof\0\0\42aI" "I\177\66\0\30\24R\177\177P\20\0\0'oIIy\63\0\0>\177II{\62\0\0\3\1q" "}\17\7\0\0\66\177II\177\66\0\0&oII\177>\0\0\0\0ll\0\0"; /* Fontname: -FreeType-Amstrad CPC extended-Medium-R-Normal--8-80-72-72-P-64-ISO10646-1 Copyright: Copyright ruboku 2008 Glyphs: 64/228 BBX Build Mode: 3 */ const uint8_t u8x8_font_amstrad_cpc_extended_u[517] U8X8_FONT_SECTION("u8x8_font_amstrad_cpc_extended_u") = " _\1\1\0\0\0\0\0\0\0\0\0\0\0__\0\0\0\0\7\7\0\7\7\0\0\24\177\177\34" "\177\177\24\0\0$*\177\177*\22\0Ff\60\30\14fb\0\60zO]\67zH\0\0\0\0\7" "\7\0\0\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\10*>\34\34>*\10\0\10\10>" ">\10\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0`\60\30\14" "\6\3\1\0>\177QIE\177>\0\0@B\177\177@@\0\0r{IIof\0\0\42aI" "I\177\66\0\30\24R\177\177P\20\0\0'oIIy\63\0\0>\177II{\62\0\0\3\1q" "}\17\7\0\0\66\177II\177\66\0\0&oII\177>\0\0\0\0ll\0\0\0\0\0\200\354" "l\0\0\0\0\10\34\66cA\0\0\0$$$$$$\0\0Ac\66\34\10\0\0\0\2\3Q" "Y\17\6\0>\177A]]_\36\0\0|~\23\23~|\0A\177\177II\177\66\0\34>cA" "Ac\42\0A\177\177Ac>\34\0A\177\177I]Ac\0A\177\177I\35\1\3\0<~CA" "Qsr\0\0\177\177\10\10\177\177\0\0AA\177\177AA\0\60p@A\177\77\1\0A\177\177\10" "\34wc\0A\177\177A@`p\0\177\177\16\34\16\177\177\0\177\177\6\14\30\177\177\0\34>cA" "c>\34\0A\177\177I\11\7\6\0<~CQ\63n\134\0A\177\177\11\31\77f\0\0&oI" "I{\62\0\0\3A\177\177A\3\0\0\77\177@@\177\77\0\0\37\77``\77\37\0\177\177\60\30" "\60\177\177\0as\36\14\36sa\0\0\7OxxO\7\0GcqYMgs\0\0\0\177\177" "AA\0\0\1\3\6\14\30\60`\0\0\0AA\177\177\0\0\10\14\6\3\6\14\10\0\200\200\200\200" "\200\200\200\200"; /* Fontname: -Misc-Fixed-Medium-R-Normal--7-70-75-75-C-50-ISO10646-1 Copyright: Public domain font. Share and enjoy. Glyphs: 191/1848 BBX Build Mode: 3 */ const uint8_t u8x8_font_5x7_f[1796] U8X8_FONT_SECTION("u8x8_font_5x7_f") = " \377\1\1\0\0\0\0\0\0\0\0\0\0^\0\0\0\0\0\0\16\0\16\0\0\0\0(|(|" "(\0\0\0\10T|T \0\0\0&\20\10d\0\0\0\0(T(@\0\0\0\0\0\0\16\0" "\0\0\0\0\0\0\0\0\0~\30$B" "\0\0\0\0~@@@\0\0\0\0~\14\14~\0\0\0\0~\14\60~\0\0\0\0@@>\0\0\0\0\36``\36\0\0\0\0~\60\60~" "\0\0\0\0f\30\30f\0\0\0\0\0\16p\16\0\0\0\0bRJF\0\0\0\0\0~BB" "\0\0\0\0\4\10\20 \0\0\0\0\0BB~\0\0\0\0\0\4\2\4\0\0\0\0@@@@" "\0\0\0\0\0\2\4\0\0\0\0\0\60H(x\0\0\0\0~HH\60\0\0\0\0\60HH\0" "\0\0\0\0\60HH~\0\0\0\0\60hX\20\0\0\0\0\20|\22\4\0\0\0\0P\250\250\230" "\0\0\0\0~\10\10p\0\0\0\0\0Hz@\0\0\0\0\0@\200z\0\0\0\0~\20(@" "\0\0\0\0\0B~@\0\0\0\0x\20\30p\0\0\0\0x\10\10p\0\0\0\0\60HH\60" "\0\0\0\0\370HH\60\0\0\0\0\60HH\370\0\0\0\0x\10\10\20\0\0\0\0PXh(" "\0\0\0\0\10>H@\0\0\0\0\70@@x\0\0\0\0\0\70@\70\0\0\0\0x``x" "\0\0\0\0H\60\60H\0\0\0\0\30\240@\70\0\0\0\0HhXH\0\0\0\0\0\10\0\0\0\0>@@>\0\0\0\0>@@>\0\0\0\0>@@>" "\0\0\0\0:@@:\0\0\0\0\0\16p\16\0\0\0\0~\24\24\10\0\0\0\0|\2J\64" "\0\0\0\0\60J,x\0\0\0\0\60L*x\0\0\0\0\60L*|\0\0\0\0\64J,z" "\0\0\0\0\60J(z\0\0\0\0\60N.x\0\0\0\0\60HxX\0\0\0\0\0\60\310H" "\0\0\0\0\60j\134\20\0\0\0\0\60lZ\20\0\0\0\0\64j\134\20\0\0\0\0\62hZ\20" "\0\0\0\0\0J|@\0\0\0\0\0Lz@\0\0\0\0\0LzD\0\0\0\0\0JxB" "\0\0\0\0\60JL\64\0\0\0\0|\12\14r\0\0\0\0\60JL\60\0\0\0\0\60LJ\60" "\0\0\0\0\60JJ\60\0\0\0\0\64JL\62\0\0\0\0\60JH\62\0\0\0\0\20TT\20" "\0\0\0\0phX\70\0\0\0\0\70BDx\0\0\0\0\70DBx\0\0\0\0\70BBx" "\0\0\0\0\70B@z\0\0\0\0\30\244B\70\0\0\0\0\374HH\60\0\0\0\0\30\242@:" "\0\0\0"; /* Fontname: -Misc-Fixed-Medium-R-Normal--7-70-75-75-C-50-ISO10646-1 Copyright: Public domain font. Share and enjoy. Glyphs: 95/1848 BBX Build Mode: 3 */ const uint8_t u8x8_font_5x7_r[764] U8X8_FONT_SECTION("u8x8_font_5x7_r") = " ~\1\1\0\0\0\0\0\0\0\0\0\0^\0\0\0\0\0\0\16\0\16\0\0\0\0(|(|" "(\0\0\0\10T|T \0\0\0&\20\10d\0\0\0\0(T(@\0\0\0\0\0\0\16\0" "\0\0\0\0\0\0\0\0\0~\30$B" "\0\0\0\0~@@@\0\0\0\0~\14\14~\0\0\0\0~\14\60~\0\0\0\0@@>\0\0\0\0\36``\36\0\0\0\0~\60\60~" "\0\0\0\0f\30\30f\0\0\0\0\0\16p\16\0\0\0\0bRJF\0\0\0\0\0~BB" "\0\0\0\0\4\10\20 \0\0\0\0\0BB~\0\0\0\0\0\4\2\4\0\0\0\0@@@@" "\0\0\0\0\0\2\4\0\0\0\0\0\60H(x\0\0\0\0~HH\60\0\0\0\0\60HH\0" "\0\0\0\0\60HH~\0\0\0\0\60hX\20\0\0\0\0\20|\22\4\0\0\0\0P\250\250\230" "\0\0\0\0~\10\10p\0\0\0\0\0Hz@\0\0\0\0\0@\200z\0\0\0\0~\20(@" "\0\0\0\0\0B~@\0\0\0\0x\20\30p\0\0\0\0x\10\10p\0\0\0\0\60HH\60" "\0\0\0\0\370HH\60\0\0\0\0\60HH\370\0\0\0\0x\10\10\20\0\0\0\0PXh(" "\0\0\0\0\10>H@\0\0\0\0\70@@x\0\0\0\0\0\70@\70\0\0\0\0x``x" "\0\0\0\0H\60\60H\0\0\0\0\30\240@\70\0\0\0\0HhXH\0\0\0\0\0\10\2\0\0\0\0~\10\64B" "\0\0\0\0~@@@\0\0\0\0~\14\14~\0\0\0\0~\14\70~\0\0\0\0@@>\0\0\0\0\36``\36\0\0\0\0~\60\60~" "\0\0\0\0f\30\30f\0\0\0\0\6\10p\10\6\0\0\0bRJF\0\0\0\0\0~BB" "\0\0\0\0\6\10\20`\0\0\0\0\0BB~\0\0\0\0\0\4\2\4\0\0\0\0\200\200\200\200" "\0\0\0\0\0\2\4\0\0\0\0\0\60HHx\0\0\0\0~HH\60\0\0\0\0\0\60HH" "\0\0\0\0\60HH~\0\0\0\0\60hX\20\0\0\0\0\20|\22\4\0\0\0\0\20\250\250p" "\0\0\0\0~\10\10p\0\0\0\0\0Hz@\0\0\0\0\0@\200z\0\0\0\0~\20\20h" "\0\0\0\0\0B~@\0\0\0\0x\10p\10p\0\0\0x\10\10p\0\0\0\0\60HH\60" "\0\0\0\0\370((\20\0\0\0\0\20((\370\0\0\0\0x\20\10\20\0\0\0\0\0PX(" "\0\0\0\0\10>H \0\0\0\0\70@@x\0\0\0\0\0\70@\70\0\0\0\0\70@\60@" "\70\0\0\0H\60\60H\0\0\0\0X\240\240x\0\0\0\0HhXH\0\0\0\0\10*UA" "\0\0\0\0\0\0~\0\0\0\0\0AU*\10\0\0\0\0\4\2\4\2\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0z\0\0\0\0\0\60H\374H\0\0\0\0H\0\0\0\0AA>" "\0\0\0\0=@@=\0\0\0\0\4\10r\11\4\0\0\0~$$\30\0\0\0\0|\2Z$" "\0\0\0\0\60IJx\0\0\0\0\60JIx\0\0\0\0\60JIz\0\0\0\0\62IJy" "\0\0\0\0\60JHz\0\0\0\0\62MMz\0\0\0\0(XxhP\0\0\0\0\60\310H" "\0\0\0\0\60iZ\20\0\0\0\0\60jY\20\0\0\0\0\62iY\22\0\0\0\0\60jX\22" "\0\0\0\0\0Iz@\0\0\0\0\0HzA\0\0\0\0\0JyB\0\0\0\0\0JxB" "\0\0\0\0%RU\70\0\0\0\0z\11\12q\0\0\0\0\60IJ\60\0\0\0\0\60JI\60" "\0\0\0\0\62II\62\0\0\0\0\62IJ\61\0\0\0\0\62HH\62\0\0\0\0\0\20T\20" "\0\0\0\0phX\70\0\0\0\0\70ABx\0\0\0\0\70BAx\0\0\0\0:AAz" "\0\0\0\0:@@z\0\0\0\0X\242\241x\0\0\0\0\376((\20\0\0\0\0Z\240\240z" "\0\0\0"; /* Fontname: -Misc-Fixed-Medium-R-Normal--8-80-75-75-C-50-ISO10646-1 Copyright: Public domain font. Share and enjoy. Glyphs: 95/1426 BBX Build Mode: 3 */ const uint8_t u8x8_font_5x8_r[764] U8X8_FONT_SECTION("u8x8_font_5x8_r") = " ~\1\1\0\0\0\0\0\0\0\0\0\0^\0\0\0\0\0\0\16\0\16\0\0\0\0\24\177\24\177" "\24\0\0\0\4*\177*\20\0\0\0\0\26\10\64\0\0\0\0\66I\66@\0\0\0\0\0\0\16\0" "\0\0\0\0\0\2\0\0\0\0~\10\64B" "\0\0\0\0~@@@\0\0\0\0~\14\14~\0\0\0\0~\14\70~\0\0\0\0@@>\0\0\0\0\36``\36\0\0\0\0~\60\60~" "\0\0\0\0f\30\30f\0\0\0\0\6\10p\10\6\0\0\0bRJF\0\0\0\0\0~BB" "\0\0\0\0\6\10\20`\0\0\0\0\0BB~\0\0\0\0\0\4\2\4\0\0\0\0\200\200\200\200" "\0\0\0\0\0\2\4\0\0\0\0\0\60HHx\0\0\0\0~HH\60\0\0\0\0\0\60HH" "\0\0\0\0\60HH~\0\0\0\0\60hX\20\0\0\0\0\20|\22\4\0\0\0\0\20\250\250p" "\0\0\0\0~\10\10p\0\0\0\0\0Hz@\0\0\0\0\0@\200z\0\0\0\0~\20\20h" "\0\0\0\0\0B~@\0\0\0\0x\10p\10p\0\0\0x\10\10p\0\0\0\0\60HH\60" "\0\0\0\0\370((\20\0\0\0\0\20((\370\0\0\0\0x\20\10\20\0\0\0\0\0PX(" "\0\0\0\0\10>H \0\0\0\0\70@@x\0\0\0\0\0\70@\70\0\0\0\0\70@\60@" "\70\0\0\0H\60\60H\0\0\0\0X\240\240x\0\0\0\0HhXH\0\0\0\0\10*UA" "\0\0\0\0\0\0~\0\0\0\0\0AU*\10\0\0\0\0\4\2\4\2\0\0\0"; /* Fontname: -Misc-Fixed-Medium-R-Normal--8-80-75-75-C-50-ISO10646-1 Copyright: Public domain font. Share and enjoy. Glyphs: 18/1426 BBX Build Mode: 3 */ const uint8_t u8x8_font_5x8_n[220] U8X8_FONT_SECTION("u8x8_font_5x8_n") = " :\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0T\70\70T\0\0\0\0\20\20|\20" "\20\0\0\0\0\200` \0\0\0\0\20\20\20\20\0\0\0\0\0@\340@\0\0\0\0`\20\10\6" "\0\0\0\0\0\36\16\0\0\0\0\0\0\0\0\0\0\0\1\1\1" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\10\34\34\10\0\0\0\0\0\200\300p\70\0\34\16\3\1" "\0\0\0\0\340\360\30\10\30\360\340\0\7\17\30\20\30\17\7\0\0 \60\370\370\0\0\0\0\20\20\37" "\37\20\20\0\60\70\10\10\210\370p\0\30\34\26\23\21\20\20\0\10\10\210\310\350\270\30\0\10\30\20\20" "\20\37\17\0\200\300`\60\370\370\0\0\3\3\2\2\37\37\2\0\370\370\310HH\310\210\0\10\30\20\20" "\20\37\17\0\340\360\230\210\210\210\0\0\17\37\31\20\20\37\17\0\10\10\10\210\310x\70\0\0\0\36\37" "\1\0\0\0p\370\210\210\210\370p\0\17\37\20\20\20\37\17\0\360\370\10\10\230\370\360\0\0\21\21\21" "\31\17\7\0\0\0@\340\340@\0\0\0\0\10\34\34\10\0"; /* Fontname: -Misc-Fixed-Medium-R-Normal--14-130-75-75-C-70-ISO10646-1 Copyright: Public domain font. Share and enjoy. Glyphs: 191/2576 BBX Build Mode: 3 */ const uint8_t u8x8_font_7x14_1x2_f[3588] U8X8_FONT_SECTION("u8x8_font_7x14_1x2_f") = " \377\1\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\0\0\0\0\0\0\0" "\33\0\0\0\0\0\0<\0<\0\0\0\0\0\0\0\0\0\0\0\0@\370@\370@\0\0\0\2\37" "\2\37\2\0\0`\220\20\370\20`\0\0\14\20\21\77\21\16\0\0\60HH\360 \30\0\0\30\4\17" "\22\22\14\0\0\0p\210\210p\0\0\0\16\21\21\12\14\23\0\0\0\0\0<\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\60\10\4\0\0\0\0\7\30 @\0\0\0\4\10\60\300\0\0\0\0@ " "\30\7\0\0\0\0@\200\340\200@\0\0\0\4\2\17\2\4\0\0\0\0\0\340\0\0\0\0\0\1\1" "\17\1\1\0\0\0\0\0\0\0\0\0\0\0\0H\70\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\20\70\20\0\0\0\0\0\0\300\60\14\0\0`\30\6" "\1\0\0\0\0\340\20\10\10\20\340\0\0\7\10\20\20\10\7\0\0\0 \20\370\0\0\0\0\0\20\20" "\37\20\20\0\0\60\10\10\10\210p\0\0\20\30\24\22\21\20\0\0\10\10\210\310\250\30\0\0\14\20\20" "\20\20\17\0\0\0\200`\20\370\0\0\0\6\5\4\4\37\4\0\0\370HHHH\210\0\0\14\20\20" "\20\20\17\0\0\340\20\210\210\210\0\0\0\17\21\20\20\20\17\0\0\10\10\10\210h\30\0\0\0\30\6" "\1\0\0\0\0\60H\210\210H\60\0\0\16\21\20\20\21\16\0\0\360\10\10\10\210\360\0\0\14\21\21" "\21\10\7\0\0\0\0@\340@\0\0\0\0\0\10\34\10\0\0\0\0\0\300\300\0\0\0\0\0\0$" "\34\0\0\0\0\0\0\200@ \20\0\0\0\1\2\4\10\20\0\0@@@@@@\0\0\2\2\2" "\2\2\2\0\0\0\20 @\200\0\0\0\0\20\10\4\2\1\0\0\60\10\10\210H\60\0\0\0\0\0" "\33\0\0\0\0\340\20\310((\360\0\0\7\10\23\24\24\27\0\0\340\20\10\10\20\340\0\0\37\1\1" "\1\1\37\0\0\370\210\210\210P \0\0\37\20\20\20\11\6\0\0\360\10\10\10\10\60\0\0\17\20\20" "\20\20\14\0\0\370\10\10\10\20\340\0\0\37\20\20\20\10\7\0\0\370\210\210\210\10\10\0\0\37\20\20" "\20\20\20\0\0\370\210\210\210\10\10\0\0\37\0\0\0\0\0\0\0\360\10\10\10\10\60\0\0\17\20\20" "\21\11\37\0\0\370\200\200\200\200\370\0\0\37\0\0\0\0\37\0\0\0\10\10\370\10\10\0\0\0\20\20" "\37\20\20\0\0\0\0\0\10\370\10\0\0\14\20\20\20\17\0\0\0\370\200@ \20\10\0\0\37\0\1" "\2\4\30\0\0\370\0\0\0\0\0\0\0\37\20\20\20\20\20\0\0\370\60\300\300\60\370\0\0\37\0\0" "\0\0\37\0\0\370`\200\0\0\370\0\0\37\0\0\1\6\37\0\0\360\10\10\10\10\360\0\0\17\20\20" "\20\20\17\0\0\370\10\10\10\10\360\0\0\37\1\1\1\1\0\0\0\360\10\10\10\10\360\0\0\17\22\22" "\24\70O\0\0\370\10\10\10\10\360\0\0\37\1\1\3\5\30\0\0p\210\210\10\10\60\0\0\14\20\20" "\21\21\16\0\0\10\10\10\370\10\10\10\0\0\0\0\37\0\0\0\0\370\0\0\0\0\370\0\0\17\20\20" "\20\20\17\0\0x\200\0\0\200x\0\0\0\3\34\34\3\0\0\0\0\370\0\0\0\370\0\0\0\17\20" "\16\20\17\0\0\30`\200\200`\30\0\0\30\6\1\1\6\30\0\0\0\70\300\0\300\70\0\0\0\0\0" "\37\0\0\0\0\10\10\10\310(\30\0\0\30\26\21\20\20\20\0\0\0\0\374\4\4\4\0\0\0\0\177" "@@@\0\0\14\60\300\0\0\0\0\0\0\0\1\6\30`\0\0\0\4\4\4\374\0\0\0\0@@" "@\177\0\0\0\20\10\4\4\10\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@@@" "@@@\0\0\0\0\4\10\20\0\0\0\0\0\0\0\0\0\0\0\200@@@@\200\0\0\14\22\22" "\22\22\37\0\0\370\200@@@\200\0\0\37\10\20\20\20\17\0\0\200@@@@\200\0\0\17\20\20" "\20\20\10\0\0\200@@@\200\370\0\0\17\20\20\20\10\37\0\0\200@@@@\200\0\0\17\22\22" "\22\22\13\0\0\200\200\360\210\210\20\0\0\0\0\37\0\0\0\0\0\200@@@\200@\0\0\63LT" "TS \0\0\370\200@@@\200\0\0\37\0\0\0\0\37\0\0\0\0@\330\0\0\0\0\0\20\20" "\37\20\20\0\0\0\0\0\0@\330\0\0\0\60@@@\77\0\0\370\0\0\200@\0\0\0\37\2\3" "\4\10\20\0\0\0\0\10\370\0\0\0\0\0\20\20\37\20\20\0\0\0\300@\200@\200\0\0\0\37\0" "\17\0\37\0\0\300\200@@@\200\0\0\37\0\0\0\0\37\0\0\200@@@@\200\0\0\17\20\20" "\20\20\17\0\0\300\200@@@\200\0\0\177\10\20\20\20\17\0\0\200@@@\200\300\0\0\17\20\20" "\20\10\177\0\0\300\200@@@\200\0\0\37\0\0\0\0\1\0\0\200@@@@\200\0\0\10\21\22" "\22\24\10\0\0@@\370@@\0\0\0\0\0\17\20\20\10\0\0\300\0\0\0\0\300\0\0\17\20\20" "\20\10\37\0\0\0\300\0\0\0\300\0\0\0\1\6\30\6\1\0\0\0\300\0\0\0\300\0\0\0\17\20" "\17\20\17\0\0\300\0\0\0\0\300\0\0\30\5\2\2\5\30\0\0\300\0\0\0\0\300\0\0'HH" "HD\77\0\0@@@@\300@\0\0\20\30\26\21\20\20\0\0\0\0\0\370\4\4\0\0\0\0\1" ">@@\0\0\0\0\0\374\0\0\0\0\0\0\0\177\0\0\0\0\0\4\4\370\0\0\0\0\0@@" ">\1\0\0\0\30\4\10\20 \30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\330\0\0\0\0\0\0\0" "\37\0\0\0\0\200@\340@@\200\0\0\17\20\77\20\20\10\0\0\0\0\340\20\20 \0\0\0\11\37" "\11\11\20\0\0 \300@@\300 \0\0\4\3\2\2\3\4\0\0\0\210\260\300\260\210\0\0\0\2\2" "\37\2\2\0\0\0\0\0x\0\0\0\0\0\0\0\36\0\0\0\0\210T$$D\210\0\0\10\21\22" "\22\25\10\0\0\0\14\0\0\14\0\0\0\0\0\0\0\0\0\0\0\370\344\24\24$\370\0\0\17\23\24" "\24\22\17\0\0\0h\224\224T\370\0\0\0\2\2\2\2\2\0\0\0\0\200@\200@\0\0\2\5\12" "\25\10\20\0\0\0\0\0\0\0\0\0\0\0\2\2\2\2\36\0\0\0\0\0\0\0\0\0\0\0\1\1" "\1\1\0\0\0\370\364\224\224d\370\0\0\17\27\20\20\27\17\0\0\0\10\10\10\10\10\0\0\0\0\0" "\0\0\0\0\0\0\30$$\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\0\0\0\0\0\22\22" "\37\22\22\0\0\0\210D$\30\0\0\0\0\1\1\1\1\0\0\0\0\210$$\330\0\0\0\0\0\1" "\1\0\0\0\0\0\0\20\10\4\0\0\0\0\0\0\0\0\0\0\0\0\200\0\0\0\200\0\0\0\177\10" "\20\10\37\0\0\0\360\10\370\10\370\0\0\0\0\1\177@\177\0\0\0\0\0\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\60\0\0\0\0\0\0\10\374\0\0\0\0\0\0\1" "\1\1\0\0\0\0\60HH\60\0\0\0\0\1\1\1\1\0\0\0@\200@\200\0\0\0\0\20\10\25" "\12\5\2\0\0\20\370\0\200`\20\0\0\30\4\3\14\12\37\0\0\20\370\0\200`\20\0\0\30\4\3" "\22\31\26\0\0\210\250P\300 \30\0\0\10\6\1\14\12\37\0\0\0\0\260\0\0\0\0\0\60HG" "@@\60\0\0\300 \22\24 \300\0\0\37\1\1\1\1\37\0\0\300 \24\22 \300\0\0\37\1\1" "\1\1\37\0\0\300$\22\22$\300\0\0\37\1\1\1\1\37\0\0\304\42\22\24$\302\0\0\37\1\1" "\1\1\37\0\0\300$\20\20$\300\0\0\37\1\1\1\1\37\0\0\300(\24\24(\300\0\0\37\1\1" "\1\1\37\0\0\340\220\210\370\210\210\0\0\37\0\0\37\20\20\0\0\360\10\10\10\10\60\0\0\17\20P" "\60\20\14\0\0\360\20\22\24\20\20\0\0\37\21\21\21\21\20\0\0\360\20\24\22\20\20\0\0\37\21\21" "\21\21\20\0\0\360\24\22\22\24\20\0\0\37\21\21\21\21\20\0\0\360\24\20\20\24\20\0\0\37\21\21" "\21\21\20\0\0\0\20\22\364\20\20\0\0\0\20\20\37\20\20\0\0\0\20\20\364\22\20\0\0\0\20\20" "\37\20\20\0\0\0\20\24\362\24\20\0\0\0\20\20\37\20\20\0\0\0\20\24\360\24\20\0\0\0\20\20" "\37\20\20\0\0\200\370\210\210\10\20\340\0\0\37\20\20\20\10\7\0\364\62\302\4\4\362\0\0\37\0\0" "\7\30\37\0\0\340\20\22\24\20\340\0\0\17\20\20\20\20\17\0\0\340\20\24\22\20\340\0\0\17\20\20" "\20\20\17\0\0\340\24\22\22\24\340\0\0\17\20\20\20\20\17\0\0\344\22\22\24\24\342\0\0\17\20\20" "\20\20\17\0\0\340\24\20\20\24\340\0\0\17\20\20\20\20\17\0\0@\200\0\0\0\200@\0\20\10\5" "\2\5\10\20\0\360\10\10\350\30\366\0\0o\30\27\20\20\17\0\0\360\0\2\4\0\360\0\0\17\20\20" "\20\20\17\0\0\360\0\4\2\0\360\0\0\17\20\20\20\20\17\0\0\360\4\2\2\4\360\0\0\17\20\20" "\20\20\17\0\0\360\4\0\0\4\360\0\0\17\20\20\20\20\17\0\0\0\60\300\4\302\60\0\0\0\0\0" "\37\0\0\0\0\370 \300\0\0\37\4\4\4\4\3\0\0\0\360\210\210p\0\0\0\20\37\20" "\20\21\16\0\0\200@HP@\200\0\0\14\22\22\22\22\37\0\0\200@@PH\200\0\0\14\22\22" "\22\22\37\0\0\200PHHP\200\0\0\14\22\22\22\22\37\0\0\220HHPP\210\0\0\14\22\22" "\22\22\37\0\0\200P@@P\200\0\0\14\22\22\22\22\37\0\0\200HTTH\200\0\0\14\22\22" "\22\22\37\0\0\200@@\300@@\200\0\14\22\21\37\22\22\13\0\200@@@@\200\0\0\17\20P" "\60\20\10\0\0\200@HP@\200\0\0\17\22\22\22\22\13\0\0\200@PH@\200\0\0\17\22\22" "\22\22\13\0\0\200PHHP\200\0\0\17\22\22\22\22\13\0\0\200P@@P\200\0\0\17\22\22" "\22\22\13\0\0\0\0H\320\0\0\0\0\0\20\20\37\20\20\0\0\0\0@\320\10\0\0\0\0\20\20" "\37\20\20\0\0\0\20H\310\20\0\0\0\0\20\20\37\20\20\0\0\0\0P\300\20\0\0\0\0\20\20" "\37\20\20\0\0\0\200THT\340\0\0\0\17\20\20\20\17\0\0\320\210HPP\210\0\0\37\0\0" "\0\0\37\0\0\200@HP@\200\0\0\17\20\20\20\20\17\0\0\200@PH@\200\0\0\17\20\20" "\20\20\17\0\0\200PHHP\200\0\0\17\20\20\20\20\17\0\0\220HHPP\210\0\0\17\20\20" "\20\20\17\0\0\200P@@P\200\0\0\17\20\20\20\20\17\0\0\0\0\0\0\0\0\0\0\4\4\25" "\25\4\4\0\0\200@@\300`\220\0\0o\30\26\21\20\17\0\0\300\0\10\20\0\300\0\0\17\20\20" "\20\10\37\0\0\300\0\20\10\0\300\0\0\17\20\20\20\10\37\0\0\300\20\10\10\20\300\0\0\17\20\20" "\20\10\37\0\0\300\20\0\0\20\300\0\0\17\20\20\20\10\37\0\0\300\0\20\10\0\300\0\0 CL" "\70\16\1\0\0\370\200@@@\200\0\0\177\10\20\20\20\17\0\0\300\20\0\0\20\300\0\0 CL" "\70\16\1"; /* Fontname: -Misc-Fixed-Medium-R-Normal--14-130-75-75-C-70-ISO10646-1 Copyright: Public domain font. Share and enjoy. Glyphs: 95/2576 BBX Build Mode: 3 */ const uint8_t u8x8_font_7x14_1x2_r[1524] U8X8_FONT_SECTION("u8x8_font_7x14_1x2_r") = " ~\1\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\0\0\0\0\0\0\0" "\33\0\0\0\0\0\0<\0<\0\0\0\0\0\0\0\0\0\0\0\0@\370@\370@\0\0\0\2\37" "\2\37\2\0\0`\220\20\370\20`\0\0\14\20\21\77\21\16\0\0\60HH\360 \30\0\0\30\4\17" "\22\22\14\0\0\0p\210\210p\0\0\0\16\21\21\12\14\23\0\0\0\0\0<\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\60\10\4\0\0\0\0\7\30 @\0\0\0\4\10\60\300\0\0\0\0@ " "\30\7\0\0\0\0@\200\340\200@\0\0\0\4\2\17\2\4\0\0\0\0\0\340\0\0\0\0\0\1\1" "\17\1\1\0\0\0\0\0\0\0\0\0\0\0\0H\70\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\20\70\20\0\0\0\0\0\0\300\60\14\0\0`\30\6" "\1\0\0\0\0\340\20\10\10\20\340\0\0\7\10\20\20\10\7\0\0\0 \20\370\0\0\0\0\0\20\20" "\37\20\20\0\0\60\10\10\10\210p\0\0\20\30\24\22\21\20\0\0\10\10\210\310\250\30\0\0\14\20\20" "\20\20\17\0\0\0\200`\20\370\0\0\0\6\5\4\4\37\4\0\0\370HHHH\210\0\0\14\20\20" "\20\20\17\0\0\340\20\210\210\210\0\0\0\17\21\20\20\20\17\0\0\10\10\10\210h\30\0\0\0\30\6" "\1\0\0\0\0\60H\210\210H\60\0\0\16\21\20\20\21\16\0\0\360\10\10\10\210\360\0\0\14\21\21" "\21\10\7\0\0\0\0@\340@\0\0\0\0\0\10\34\10\0\0\0\0\0\300\300\0\0\0\0\0\0$" "\34\0\0\0\0\0\0\200@ \20\0\0\0\1\2\4\10\20\0\0@@@@@@\0\0\2\2\2" "\2\2\2\0\0\0\20 @\200\0\0\0\0\20\10\4\2\1\0\0\60\10\10\210H\60\0\0\0\0\0" "\33\0\0\0\0\340\20\310((\360\0\0\7\10\23\24\24\27\0\0\340\20\10\10\20\340\0\0\37\1\1" "\1\1\37\0\0\370\210\210\210P \0\0\37\20\20\20\11\6\0\0\360\10\10\10\10\60\0\0\17\20\20" "\20\20\14\0\0\370\10\10\10\20\340\0\0\37\20\20\20\10\7\0\0\370\210\210\210\10\10\0\0\37\20\20" "\20\20\20\0\0\370\210\210\210\10\10\0\0\37\0\0\0\0\0\0\0\360\10\10\10\10\60\0\0\17\20\20" "\21\11\37\0\0\370\200\200\200\200\370\0\0\37\0\0\0\0\37\0\0\0\10\10\370\10\10\0\0\0\20\20" "\37\20\20\0\0\0\0\0\10\370\10\0\0\14\20\20\20\17\0\0\0\370\200@ \20\10\0\0\37\0\1" "\2\4\30\0\0\370\0\0\0\0\0\0\0\37\20\20\20\20\20\0\0\370\60\300\300\60\370\0\0\37\0\0" "\0\0\37\0\0\370`\200\0\0\370\0\0\37\0\0\1\6\37\0\0\360\10\10\10\10\360\0\0\17\20\20" "\20\20\17\0\0\370\10\10\10\10\360\0\0\37\1\1\1\1\0\0\0\360\10\10\10\10\360\0\0\17\22\22" "\24\70O\0\0\370\10\10\10\10\360\0\0\37\1\1\3\5\30\0\0p\210\210\10\10\60\0\0\14\20\20" "\21\21\16\0\0\10\10\10\370\10\10\10\0\0\0\0\37\0\0\0\0\370\0\0\0\0\370\0\0\17\20\20" "\20\20\17\0\0x\200\0\0\200x\0\0\0\3\34\34\3\0\0\0\0\370\0\0\0\370\0\0\0\17\20" "\16\20\17\0\0\30`\200\200`\30\0\0\30\6\1\1\6\30\0\0\0\70\300\0\300\70\0\0\0\0\0" "\37\0\0\0\0\10\10\10\310(\30\0\0\30\26\21\20\20\20\0\0\0\0\374\4\4\4\0\0\0\0\177" "@@@\0\0\14\60\300\0\0\0\0\0\0\0\1\6\30`\0\0\0\4\4\4\374\0\0\0\0@@" "@\177\0\0\0\20\10\4\4\10\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@@@" "@@@\0\0\0\0\4\10\20\0\0\0\0\0\0\0\0\0\0\0\200@@@@\200\0\0\14\22\22" "\22\22\37\0\0\370\200@@@\200\0\0\37\10\20\20\20\17\0\0\200@@@@\200\0\0\17\20\20" "\20\20\10\0\0\200@@@\200\370\0\0\17\20\20\20\10\37\0\0\200@@@@\200\0\0\17\22\22" "\22\22\13\0\0\200\200\360\210\210\20\0\0\0\0\37\0\0\0\0\0\200@@@\200@\0\0\63LT" "TS \0\0\370\200@@@\200\0\0\37\0\0\0\0\37\0\0\0\0@\330\0\0\0\0\0\20\20" "\37\20\20\0\0\0\0\0\0@\330\0\0\0\60@@@\77\0\0\370\0\0\200@\0\0\0\37\2\3" "\4\10\20\0\0\0\0\10\370\0\0\0\0\0\20\20\37\20\20\0\0\0\300@\200@\200\0\0\0\37\0" "\17\0\37\0\0\300\200@@@\200\0\0\37\0\0\0\0\37\0\0\200@@@@\200\0\0\17\20\20" "\20\20\17\0\0\300\200@@@\200\0\0\177\10\20\20\20\17\0\0\200@@@\200\300\0\0\17\20\20" "\20\10\177\0\0\300\200@@@\200\0\0\37\0\0\0\0\1\0\0\200@@@@\200\0\0\10\21\22" "\22\24\10\0\0@@\370@@\0\0\0\0\0\17\20\20\10\0\0\300\0\0\0\0\300\0\0\17\20\20" "\20\10\37\0\0\0\300\0\0\0\300\0\0\0\1\6\30\6\1\0\0\0\300\0\0\0\300\0\0\0\17\20" "\17\20\17\0\0\300\0\0\0\0\300\0\0\30\5\2\2\5\30\0\0\300\0\0\0\0\300\0\0'HH" "HD\77\0\0@@@@\300@\0\0\20\30\26\21\20\20\0\0\0\0\0\370\4\4\0\0\0\0\1" ">@@\0\0\0\0\0\374\0\0\0\0\0\0\0\177\0\0\0\0\0\4\4\370\0\0\0\0\0@@" ">\1\0\0\0\30\4\10\20 \30\0\0\0\0\0\0\0\0"; /* Fontname: -Misc-Fixed-Medium-R-Normal--14-130-75-75-C-70-ISO10646-1 Copyright: Public domain font. Share and enjoy. Glyphs: 18/2576 BBX Build Mode: 3 */ const uint8_t u8x8_font_7x14_1x2_n[436] U8X8_FONT_SECTION("u8x8_font_7x14_1x2_n") = " :\1\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0@\200\340\200@\0\0\0\4\2\17\2\4\0\0\0\0\0\340\0\0\0\0\0\1\1" "\17\1\1\0\0\0\0\0\0\0\0\0\0\0\0H\70\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\20\70\20\0\0\0\0\0\0\300\60\14\0\0`\30\6" "\1\0\0\0\0\340\20\10\10\20\340\0\0\7\10\20\20\10\7\0\0\0 \20\370\0\0\0\0\0\20\20" "\37\20\20\0\0\60\10\10\10\210p\0\0\20\30\24\22\21\20\0\0\10\10\210\310\250\30\0\0\14\20\20" "\20\20\17\0\0\0\200`\20\370\0\0\0\6\5\4\4\37\4\0\0\370HHHH\210\0\0\14\20\20" "\20\20\17\0\0\340\20\210\210\210\0\0\0\17\21\20\20\20\17\0\0\10\10\10\210h\30\0\0\0\30\6" "\1\0\0\0\0\60H\210\210H\60\0\0\16\21\20\20\21\16\0\0\360\10\10\10\210\360\0\0\14\21\21" "\21\10\7\0\0\0\0@\340@\0\0\0\0\0\10\34\10\0"; /* Fontname: -Misc-Fixed-Bold-R-Normal--14-130-75-75-C-70-ISO10646-1 Copyright: Public domain font. Share and enjoy. Glyphs: 191/1009 BBX Build Mode: 3 */ const uint8_t u8x8_font_7x14B_1x2_f[3588] U8X8_FONT_SECTION("u8x8_font_7x14B_1x2_f") = " \377\1\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\0\0\0\0\0\0\33" "\33\0\0\0\0\0<<\0<<\0\0\0\0\0\0\0\0\0\0@\370\370\370\370@\0\0\2\37\37" "\37\37\2\0\0`\220\370\370\20`\0\0\14\20\77\77\21\16\0\0\60xH\360\70\30\0\0\30\34\17" "\22\36\14\0\0\0p\370\210\370p\0\0\16\37\21\16\37\23\0\0\0\0<<\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\360\70\14\4\0\0\0\7\37\70`@\0\0\0\4\14\70\360\300\0\0\0@`" "\70\37\7\0\0\30\240\370\370\240\30\0\0\3\0\3\3\0\3\0\0\0\0\340\340\0\0\0\0\1\1\17" "\17\1\1\0\0\0\0\0\0\0\0\0\0\0\0Hx\70\0\0\0\0\0\0\0\0\0\0\0\1\1\1" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\30\30\0\0\0\0\0\0\200\340|\34\0\0p|\17" "\3\0\0\0\0\360\370\10\10\370\360\0\0\17\37\20\20\37\17\0\0 \60\370\370\0\0\0\0\20\20\37" "\37\20\20\0\0\60\70\10\210\370p\0\0\30\34\26\23\21\20\0\0\60\70\210\210\370p\0\0\14\34\20" "\20\37\17\0\0\0\200\300\360\370\0\0\0\7\7\4\37\37\4\0\0\370\370HH\310\210\0\0\14\34\20" "\20\37\17\0\0\340\360\230\210\270\60\0\0\17\37\20\20\37\17\0\0\70\70\210\350x\30\0\0\0\0\37" "\37\0\0\0\0p\370\210\210\370p\0\0\16\37\21\21\37\16\0\0\360\370\10\10\370\360\0\0\14\35\21" "\31\17\7\0\0\0\0``\0\0\0\0\0\0\14\14\0\0\0\0\0\0\0``\0\0\0\0\0$" "<\34\0\0\0\0\200\300`\60\20\0\0\1\3\6\14\30\20\0\0\200\200\200\200\200\200\0\0\4\4\4" "\4\4\4\0\0\20\60`\300\200\0\0\0\20\30\14\6\3\1\0\0\60\70\210\310x\60\0\0\0\0\33" "\33\0\0\0\0\340\360\330\350\70\360\0\0\7\17\33\27\24\27\0\0\360\370\30\30\370\360\0\0\37\37\2" "\2\37\37\0\0\370\370\210\210\370\60\0\0\37\37\20\20\37\17\0\0\360\370\10\10\70\60\0\0\17\37\20" "\20\34\14\0\0\370\370\10\30\360\340\0\0\37\37\20\30\17\7\0\0\370\370\210\210\210\10\0\0\37\37\20" "\20\20\20\0\0\370\370\210\210\210\10\0\0\37\37\0\0\0\0\0\0\360\370\10\10\70\60\0\0\17\37\20" "\21\37\17\0\0\370\370\200\200\370\370\0\0\37\37\0\0\37\37\0\0\10\10\370\370\10\10\0\0\20\20\37" "\37\20\20\0\0\0\0\0\0\370\370\0\0\14\34\20\30\17\7\0\0\370\370\340\60\30\10\0\0\37\37\3" "\7\34\30\0\0\370\370\0\0\0\0\0\0\37\37\20\20\20\20\0\0\370\360\300\300\360\370\0\0\37\37\0" "\0\37\37\0\0\370\370\340\0\370\370\0\0\37\37\0\7\37\37\0\0\360\370\10\10\370\360\0\0\17\37\20" "\20\37\17\0\0\370\370\10\10\370\360\0\0\37\37\1\1\1\0\0\0\360\370\10\10\370\360\0\0\17\37\22" "\24\77o\0\0\370\370\210\210\370p\0\0\37\37\0\1\37\36\0\0\60x\310\210\70\60\0\0\14\34\21" "\23\36\14\0\0\10\10\370\370\10\10\0\0\0\0\37\37\0\0\0\0\370\370\0\0\370\370\0\0\17\37\20" "\20\37\17\0\0\370\370\0\0\370\370\0\0\3\17\34\34\17\3\0\0\370\370\0\0\370\370\0\0\17\37\17" "\17\37\17\0\0\30x\340\340x\30\0\0\30\36\7\7\36\30\0\0\70\370\300\300\370\70\0\0\0\0\37" "\37\0\0\0\0\10\10\210\350x\30\0\0\30\36\27\21\20\20\0\0\0\374\374\4\4\4\0\0\0\177\177" "@@@\0\0\34|\340\200\0\0\0\0\0\0\3\17|p\0\0\0\4\4\4\374\374\0\0\0@@" "@\177\177\0\0\10\14\6\6\14\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0```" "```\0\0\0\4\14\30\20\0\0\0\0\0\0\0\0\0\0\0\200\300@@\300\200\0\0\14\36\22" "\21\37\37\0\0\370\370@@\300\200\0\0\37\37\20\20\37\17\0\0\200\300@@\300\200\0\0\17\37\20" "\20\30\10\0\0\200\300@@\370\370\0\0\17\37\20\20\37\37\0\0\200\300@@\300\200\0\0\17\37\22" "\22\33\13\0\0\200\200\360\370\230\220\0\0\0\0\37\37\0\0\0\0\200\300@\300\200\300\0\0\63\177T" "Ws \0\0\370\370@@\300\200\0\0\37\37\0\0\37\37\0\0\0\0\330\330\0\0\0\0\0\0\37" "\37\0\0\0\0\0\0\0\0\330\330\0\0\0 `@\177\77\0\0\370\370\0\200\300\0\0\0\37\37\3" "\7\14\30\0\0\0\0\370\370\0\0\0\0\0\0\37\37\0\0\0\0\300\300\200\300\300\200\0\0\37\37\17" "\17\37\37\0\0\300\300@@\300\200\0\0\37\37\0\0\37\37\0\0\200\300@@\300\200\0\0\17\37\20" "\20\37\17\0\0\300\300@@\300\200\0\0\177\177\20\20\37\17\0\0\200\300@@\300\300\0\0\17\37\20" "\20\177\177\0\0\300\300@@\300\200\0\0\37\37\0\0\1\1\0\0\200\300@@\300\200\0\0\10\31\23" "\26\34\10\0\0@@\370\370@@\0\0\0\0\17\37\20\20\0\0\300\300\0\0\300\300\0\0\17\37\20" "\20\37\37\0\0\300\300\0\0\300\300\0\0\1\7\36\36\7\1\0\0\300\300\0\0\300\300\0\0\17\37\17" "\17\37\17\0\0\300\300\0\0\300\300\0\0\30\35\7\7\35\30\0\0\300\300\0\0\300\300\0\0 cO" "|\77\3\0\0@@@@\300\300\0\0\30\34\26\23\21\20\0\0\0\0\370\374\4\4\0\0\0\1\77" "~@@\0\0\0\0\374\374\0\0\0\0\0\0\177\177\0\0\0\0\0\4\4\374\370\0\0\0\0@@" "~\77\1\0\0\70\14\30\30\60\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\330\330\0\0\0\0\0\0\37" "\37\0\0\0\0\200@\340\340@\300\0\0\17\20\77\77\20\30\0\0\0\340\360\20\60 \0\0\11\37\37" "\11\30\20\0\0 \340\300@\340 \0\0\4\7\2\3\7\4\0\0Xp\340\340pX\0\0\2\2\37" "\37\2\2\0\0\0\0xx\0\0\0\0\0\0\36\36\0\0\0\0\210\334td\314\210\0\0\10\31\23" "\27\35\10\0\0\0\14\14\0\14\14\0\0\0\0\0\0\0\0\0\0\370\374\364\24\374\370\0\0\17\37\27" "\24\37\17\0\0\0h\374\224\374\370\0\0\0\2\2\2\2\2\0\0\0\0\200\300\300\300\0\0\2\7\17" "\37\35\30\0\0\0\0\0\0\0\0\0\0\3\3\3\3\37\37\0\0\0\0\0\0\0\0\0\0\0\1\1" "\1\1\0\0\0\370\374\364\224\374\370\0\0\17\37\27\20\37\17\0\0\0\4\4\4\4\4\0\0\0\0\0" "\0\0\0\0\0\0\30<$<\30\0\0\0\0\0\0\0\0\0\0\0\0\200\200\0\0\0\0\22\22\37" "\37\22\22\0\0\0\210\314d<\30\0\0\0\1\1\1\1\1\0\0\0\210\254$\374\330\0\0\0\0\1" "\1\1\0\0\0\0\20\30\14\4\0\0\0\0\0\0\0\0\0\0\0\200\200\0\0\200\200\0\0\177\177\20" "\30\37\37\0\0\360\370\370\10\370\370\0\0\0\1\177@\177\177\0\0\0\0\300\300\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@p\60\0\0\0\0\20\370\370\0\0\0\0\0\0\1" "\1\0\0\0\0\0\60xHx\60\0\0\0\1\1\1\1\1\0\0@\300\300\200\0\0\0\0\20\30\35" "\17\7\2\0\0\20\370\370\300\360\30\0\0\30\16\3\15\36\37\0\0\20\370\370\300\360\30\0\0\30\16\3" "\33\35\26\0\0\250\370\360\300p\30\0\0\14\6\3\15\37\37\0\0\0\260\260\0\0\0\0\0\60\177O" "@p\60\0\0\340\362\66\64\360\340\0\0\37\37\2\2\37\37\0\0\340\360\64\66\362\340\0\0\37\37\2" "\2\37\37\0\0\340\364\66\66\364\340\0\0\37\37\2\2\37\37\0\0\344\362\66\64\362\340\0\0\37\37\2" "\2\37\37\0\0\346\366\60\60\366\346\0\0\37\37\2\2\37\37\0\0\300\344jj\344\300\0\0\37\37\2" "\2\37\37\0\0\360\370\10\370\370\210\10\0\37\37\1\37\37\20\20\0\360\370\10\10\70\60\0\0\17_p" "\60\34\14\0\0\360\362\26\24\20\20\0\0\37\37\21\21\21\20\0\0\360\360\24\26\22\20\0\0\37\37\21" "\21\21\20\0\0\360\364\26\26\24\20\0\0\37\37\21\21\21\20\0\0\366\366\20\20\26\26\0\0\37\37\21" "\21\21\20\0\0\20\22\366\364\20\20\0\0\20\20\37\37\20\20\0\0\20\20\364\366\22\20\0\0\20\20\37" "\37\20\20\0\0\20\24\366\366\24\20\0\0\20\20\37\37\20\20\0\0\26\26\360\360\26\26\0\0\20\20\37" "\37\20\20\0\0\200\370\370\210\230\360\340\0\0\37\37\20\30\17\7\0\364\362\346\4\362\360\0\0\37\37\0" "\7\37\37\0\0\340\362\26\24\360\340\0\0\17\37\20\20\37\17\0\0\340\360\24\26\362\340\0\0\17\37\20" "\20\37\17\0\0\340\364\26\26\364\340\0\0\17\37\20\20\37\17\0\0\344\362\26\24\362\340\0\0\17\37\20" "\20\37\17\0\0\346\366\20\20\366\346\0\0\17\37\20\20\37\17\0\0@\300\200\0\200\300@\0\30\14\7" "\3\7\14\30\0\360\370\10\370\370\366\0\0o\37\37\20\37\17\0\0\360\362\6\4\360\360\0\0\17\37\20" "\20\37\17\0\0\360\360\4\6\362\360\0\0\17\37\20\20\37\17\0\0\360\364\6\6\364\360\0\0\17\37\20" "\20\37\17\0\0\366\366\0\0\366\366\0\0\17\37\20\20\37\17\0\0p\360\204\206\362p\0\0\0\3\37" "\37\3\0\0\0\370\370 \340\300\0\0\37\37\4\4\7\3\0\0\0\360\370\210\370p\0\0\20\37\37" "\20\37\17\0\0\200\310XP\300\200\0\0\14\36\23\21\37\37\0\0\200\300PX\310\200\0\0\14\36\23" "\21\37\37\0\0\200\320XX\320\200\0\0\14\36\23\21\37\37\0\0\220\310XP\310\200\0\0\14\36\23" "\21\37\37\0\0\230\330@@\330\230\0\0\14\36\23\21\37\37\0\0\200\310TT\310\200\0\0\14\36\23" "\21\37\37\0\0\200\300@\300\300@\200\0\14\36\21\37\37\32\13\0\200\300@@\300\200\0\0\17_p" "\60\30\10\0\0\200\310XP\300\200\0\0\17\37\22\22\33\13\0\0\200\300PX\310\200\0\0\17\37\22" "\22\33\13\0\0\200\320XX\320\200\0\0\17\37\22\22\33\13\0\0\230\330@@\330\230\0\0\17\37\22" "\22\33\13\0\0\0\0\10\330\320\0\0\0\0\0\0\37\37\0\0\0\0\0\320\330\10\0\0\0\0\0\37" "\37\0\0\0\0\0\20\330\330\20\0\0\0\0\0\37\37\0\0\0\0\30\30\300\300\30\30\0\0\0\0\37" "\37\0\0\0\0\64\234\230\274\344\300\0\0\17\37\20\20\37\17\0\0\320\310XP\310\200\0\0\37\37\0" "\0\37\37\0\0\200\310XP\300\200\0\0\17\37\20\20\37\17\0\0\200\300PX\310\200\0\0\17\37\20" "\20\37\17\0\0\200\320XX\320\200\0\0\17\37\20\20\37\17\0\0\220\310XP\310\200\0\0\17\37\20" "\20\37\17\0\0\230\330@@\330\230\0\0\17\37\20\20\37\17\0\0\0\0``\0\0\0\0\3\3\33" "\33\3\3\0\0\200\300@\300\340\220\0\0o\37\26\21\37\17\0\0\300\310\30\20\300\300\0\0\17\37\20" "\20\37\37\0\0\300\300\20\30\310\300\0\0\17\37\20\20\37\37\0\0\300\320\30\30\320\300\0\0\17\37\20" "\20\37\37\0\0\330\330\0\0\330\330\0\0\17\37\20\20\37\37\0\0\300\300\20\30\310\300\0\0!c~" ">\17\1\0\0\370\370@@\300\200\0\0\177\177\20\20\37\17\0\0\330\330\0\0\330\330\0\0!c~" ">\17\1"; /* Fontname: -Misc-Fixed-Bold-R-Normal--14-130-75-75-C-70-ISO10646-1 Copyright: Public domain font. Share and enjoy. Glyphs: 95/1009 BBX Build Mode: 3 */ const uint8_t u8x8_font_7x14B_1x2_r[1524] U8X8_FONT_SECTION("u8x8_font_7x14B_1x2_r") = " ~\1\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\0\0\0\0\0\0\33" "\33\0\0\0\0\0<<\0<<\0\0\0\0\0\0\0\0\0\0@\370\370\370\370@\0\0\2\37\37" "\37\37\2\0\0`\220\370\370\20`\0\0\14\20\77\77\21\16\0\0\60xH\360\70\30\0\0\30\34\17" "\22\36\14\0\0\0p\370\210\370p\0\0\16\37\21\16\37\23\0\0\0\0<<\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\360\70\14\4\0\0\0\7\37\70`@\0\0\0\4\14\70\360\300\0\0\0@`" "\70\37\7\0\0\30\240\370\370\240\30\0\0\3\0\3\3\0\3\0\0\0\0\340\340\0\0\0\0\1\1\17" "\17\1\1\0\0\0\0\0\0\0\0\0\0\0\0Hx\70\0\0\0\0\0\0\0\0\0\0\0\1\1\1" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\30\30\0\0\0\0\0\0\200\340|\34\0\0p|\17" "\3\0\0\0\0\360\370\10\10\370\360\0\0\17\37\20\20\37\17\0\0 \60\370\370\0\0\0\0\20\20\37" "\37\20\20\0\0\60\70\10\210\370p\0\0\30\34\26\23\21\20\0\0\60\70\210\210\370p\0\0\14\34\20" "\20\37\17\0\0\0\200\300\360\370\0\0\0\7\7\4\37\37\4\0\0\370\370HH\310\210\0\0\14\34\20" "\20\37\17\0\0\340\360\230\210\270\60\0\0\17\37\20\20\37\17\0\0\70\70\210\350x\30\0\0\0\0\37" "\37\0\0\0\0p\370\210\210\370p\0\0\16\37\21\21\37\16\0\0\360\370\10\10\370\360\0\0\14\35\21" "\31\17\7\0\0\0\0``\0\0\0\0\0\0\14\14\0\0\0\0\0\0\0``\0\0\0\0\0$" "<\34\0\0\0\0\200\300`\60\20\0\0\1\3\6\14\30\20\0\0\200\200\200\200\200\200\0\0\4\4\4" "\4\4\4\0\0\20\60`\300\200\0\0\0\20\30\14\6\3\1\0\0\60\70\210\310x\60\0\0\0\0\33" "\33\0\0\0\0\340\360\330\350\70\360\0\0\7\17\33\27\24\27\0\0\360\370\30\30\370\360\0\0\37\37\2" "\2\37\37\0\0\370\370\210\210\370\60\0\0\37\37\20\20\37\17\0\0\360\370\10\10\70\60\0\0\17\37\20" "\20\34\14\0\0\370\370\10\30\360\340\0\0\37\37\20\30\17\7\0\0\370\370\210\210\210\10\0\0\37\37\20" "\20\20\20\0\0\370\370\210\210\210\10\0\0\37\37\0\0\0\0\0\0\360\370\10\10\70\60\0\0\17\37\20" "\21\37\17\0\0\370\370\200\200\370\370\0\0\37\37\0\0\37\37\0\0\10\10\370\370\10\10\0\0\20\20\37" "\37\20\20\0\0\0\0\0\0\370\370\0\0\14\34\20\30\17\7\0\0\370\370\340\60\30\10\0\0\37\37\3" "\7\34\30\0\0\370\370\0\0\0\0\0\0\37\37\20\20\20\20\0\0\370\360\300\300\360\370\0\0\37\37\0" "\0\37\37\0\0\370\370\340\0\370\370\0\0\37\37\0\7\37\37\0\0\360\370\10\10\370\360\0\0\17\37\20" "\20\37\17\0\0\370\370\10\10\370\360\0\0\37\37\1\1\1\0\0\0\360\370\10\10\370\360\0\0\17\37\22" "\24\77o\0\0\370\370\210\210\370p\0\0\37\37\0\1\37\36\0\0\60x\310\210\70\60\0\0\14\34\21" "\23\36\14\0\0\10\10\370\370\10\10\0\0\0\0\37\37\0\0\0\0\370\370\0\0\370\370\0\0\17\37\20" "\20\37\17\0\0\370\370\0\0\370\370\0\0\3\17\34\34\17\3\0\0\370\370\0\0\370\370\0\0\17\37\17" "\17\37\17\0\0\30x\340\340x\30\0\0\30\36\7\7\36\30\0\0\70\370\300\300\370\70\0\0\0\0\37" "\37\0\0\0\0\10\10\210\350x\30\0\0\30\36\27\21\20\20\0\0\0\374\374\4\4\4\0\0\0\177\177" "@@@\0\0\34|\340\200\0\0\0\0\0\0\3\17|p\0\0\0\4\4\4\374\374\0\0\0@@" "@\177\177\0\0\10\14\6\6\14\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0```" "```\0\0\0\4\14\30\20\0\0\0\0\0\0\0\0\0\0\0\200\300@@\300\200\0\0\14\36\22" "\21\37\37\0\0\370\370@@\300\200\0\0\37\37\20\20\37\17\0\0\200\300@@\300\200\0\0\17\37\20" "\20\30\10\0\0\200\300@@\370\370\0\0\17\37\20\20\37\37\0\0\200\300@@\300\200\0\0\17\37\22" "\22\33\13\0\0\200\200\360\370\230\220\0\0\0\0\37\37\0\0\0\0\200\300@\300\200\300\0\0\63\177T" "Ws \0\0\370\370@@\300\200\0\0\37\37\0\0\37\37\0\0\0\0\330\330\0\0\0\0\0\0\37" "\37\0\0\0\0\0\0\0\0\330\330\0\0\0 `@\177\77\0\0\370\370\0\200\300\0\0\0\37\37\3" "\7\14\30\0\0\0\0\370\370\0\0\0\0\0\0\37\37\0\0\0\0\300\300\200\300\300\200\0\0\37\37\17" "\17\37\37\0\0\300\300@@\300\200\0\0\37\37\0\0\37\37\0\0\200\300@@\300\200\0\0\17\37\20" "\20\37\17\0\0\300\300@@\300\200\0\0\177\177\20\20\37\17\0\0\200\300@@\300\300\0\0\17\37\20" "\20\177\177\0\0\300\300@@\300\200\0\0\37\37\0\0\1\1\0\0\200\300@@\300\200\0\0\10\31\23" "\26\34\10\0\0@@\370\370@@\0\0\0\0\17\37\20\20\0\0\300\300\0\0\300\300\0\0\17\37\20" "\20\37\37\0\0\300\300\0\0\300\300\0\0\1\7\36\36\7\1\0\0\300\300\0\0\300\300\0\0\17\37\17" "\17\37\17\0\0\300\300\0\0\300\300\0\0\30\35\7\7\35\30\0\0\300\300\0\0\300\300\0\0 cO" "|\77\3\0\0@@@@\300\300\0\0\30\34\26\23\21\20\0\0\0\0\370\374\4\4\0\0\0\1\77" "~@@\0\0\0\0\374\374\0\0\0\0\0\0\177\177\0\0\0\0\0\4\4\374\370\0\0\0\0@@" "~\77\1\0\0\70\14\30\30\60\34\0\0\0\0\0\0\0\0"; /* Fontname: -Misc-Fixed-Bold-R-Normal--14-130-75-75-C-70-ISO10646-1 Copyright: Public domain font. Share and enjoy. Glyphs: 18/1009 BBX Build Mode: 3 */ const uint8_t u8x8_font_7x14B_1x2_n[436] U8X8_FONT_SECTION("u8x8_font_7x14B_1x2_n") = " :\1\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\30\240\370\370\240\30\0\0\3\0\3\3\0\3\0\0\0\0\340\340\0\0\0\0\1\1\17" "\17\1\1\0\0\0\0\0\0\0\0\0\0\0\0Hx\70\0\0\0\0\0\0\0\0\0\0\0\1\1\1" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\30\30\0\0\0\0\0\0\200\340|\34\0\0p|\17" "\3\0\0\0\0\360\370\10\10\370\360\0\0\17\37\20\20\37\17\0\0 \60\370\370\0\0\0\0\20\20\37" "\37\20\20\0\0\60\70\10\210\370p\0\0\30\34\26\23\21\20\0\0\60\70\210\210\370p\0\0\14\34\20" "\20\37\17\0\0\0\200\300\360\370\0\0\0\7\7\4\37\37\4\0\0\370\370HH\310\210\0\0\14\34\20" "\20\37\17\0\0\340\360\230\210\270\60\0\0\17\37\20\20\37\17\0\0\70\70\210\350x\30\0\0\0\0\37" "\37\0\0\0\0p\370\210\210\370p\0\0\16\37\21\21\37\16\0\0\360\370\10\10\370\360\0\0\14\35\21" "\31\17\7\0\0\0\0``\0\0\0\0\0\0\14\14\0\0"; /* Fontname: open_iconic_arrow_1x Copyright: https://github.com/iconic/open-iconic, SIL OPEN FONT LICENSE Glyphs: 28/28 BBX Build Mode: 3 */ const uint8_t u8x8_font_open_iconic_arrow_1x1[229] U8X8_FONT_SECTION("u8x8_font_open_iconic_arrow_1x1") = "@[\1\1\0 `\377` \0\0\10\34>\10\10\10\10\10\10\10\10\10\10>\34\10\0\4\6\377" "\6\4\0\0\37\30\30\10~~~~~~~\30\0$<\333Z$\0\0<~\377\377" "\201\201B<\357\357\357\357\357\257\357\0\0\12*\277\65\24\0\0\70D\200\217\200D\70\0|x\360\340\300\300\340\360x" "|>\37\7\340\370|>\36\17\7\3\77\77\77>><\370\340\7\37>|x\360\340\300\374\374\374|" "|<\37\7\340\370<>>\77\77\77\3\7\17\36>|\370\340\7\37<||\374\374\374\300\340\360x" "|>\37\7\340\370|>\36\17\7\3\3\7\17\36>|\370\340\7\37\77\177\177\377\300\300\300\300\377\177" "\177\77\37\7\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\4\14\34\77\177\377\177<\34" "\14\0\0\0\0\200\300\340\360\370\300\300\300\300\300\300\300\300\300\300\1\3\7\17\37\37\3\3\3\3\3\3" "\3\3\3\3\300\300\300\300\300\300\300\300\300\300\370\370\360\340\300\200\3\3\3\3\3\3\3\3\3\3\37\17" "\7\3\1\0\0\0\0\60\70<\376\377\376\374\70\60 \0\0\0\0\0\0\0\0\0\377\377\377\377\0\0" "\0\0\0\0\0\20\60p\360\360\360\360\360\360\360\360p\60\20\0\0\0\0\0\0\1\3\7\7\3\1\0" "\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177" "\0\0\0\0\0\0\0\0\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\177\77\37\17\7\3\1\0" "\0\0\0\0\0\0\0\0\0\200\300\340\340\300\200\0\0\0\0\0\0\10\14\16\17\17\17\17\17\17\17\17" "\16\14\10\0\0\60x\370\360\340\300\200\200\300\340\360\370x\60\0\0\0\0\0\1\3\7\17\17\7\3\1" "\0\0\0\0\0\0\0\200\300\340\360\370|>\36\14\0\0\0\0\0\0\0\1\3\7\17\37>|x\60" "\0\0\0\0\0\0\0\14\36>|\370\360\340\300\200\0\0\0\0\0\0\0\60x|>\37\17\7\3\1" "\0\0\0\0\0\0\0\200\300\340\360\370\370\360\340\300\200\0\0\0\0\6\17\17\7\3\1\0\0\1\3\7" "\17\17\6\0\0\0\0@\300\300\377\377\377\377\300\300@\0\0\0\300\300\300\300\300\301\303\307\307\303\301\300" "\300\300\300\300\3\3\3\3\3\203\303\343\343\303\203\3\3\3\3\3\0\0\0\2\3\3\377\377\377\377\3\3" "\2\0\0\0\70<\14\14\14\14\14\14\14\14\14\14\77\36\14\0\0\14\36\77\14\14\14\14\14\14\14\14" "\14\14\17\7\0\0\300\360\70\30\14\14\0\0\200\300\340\340\300\200\1\3\7\7\3\1\0\0\60\60\30\34" "\17\3\0\0\0\0\317\317\3\3\3\3\3\3C\303\377\377\300@\2\3\377\377\303\302\300\300\300\300\300\300" "\363\363\0\0\14\14\34\70p\340\300\340p\70\34\14\77\36\14\0\60\60\70\34\16\7\3\3\17\34\70\60" "\374x\60\0\0\200\300\300\340\340\360\360\360\360\377\376\374\370p \14\7\3\1\1\0\0\0\0\0\7\3" "\1\0\0\0\377\377\3\3\3c\60\70\70<<<~<\34\10\77\77\60\60\60\60\60\60\60\60<<" "\0\0\0"; /* Fontname: open_iconic_check_2x Copyright: https://github.com/iconic/open-iconic, SIL OPEN FONT LICENSE Glyphs: 5/5 BBX Build Mode: 3 */ const uint8_t u8x8_font_open_iconic_check_2x2[164] U8X8_FONT_SECTION("u8x8_font_open_iconic_check_2x2") = "@D\2\2\0\200\300\200\0\0\0\200\300\340\360\370\374x\60\0\1\3\7\17\37>\77\37\17\7\3\1" "\0\0\0\0\340\370\374\376~\177\377\377\177\77\37\216\316\374\370\340\7\37\77\177~\374\370\370\374\376\377\177" "\177\77\37\7\340\370\374\376\316\217\37\77\77\37\217\316\376\374\370\340\7\37\77\177s\361\370\374\374\370\361s" "\177\77\37\7\377\377\3\3\3c\343\303\303\343q\70\34\216\6\0\77\77\60\60\60\60\60\61\61\60\60\60" "\77\77\0\0\4\16\37>|\370\360\340\360\370\374~\77\36\14\0\20\70|~\77\37\17\7\7\17\37>" "|x\60"; /* Fontname: open_iconic_embedded_2x Copyright: https://github.com/iconic/open-iconic, SIL OPEN FONT LICENSE Glyphs: 17/17 BBX Build Mode: 3 */ const uint8_t u8x8_font_open_iconic_embedded_2x2[548] U8X8_FONT_SECTION("u8x8_font_open_iconic_embedded_2x2") = "@P\2\2\374\374\14\14\14\14\14\14\14\14\14\14\374\374\300\300\77\77\60\60\60\60\60\60\60\60\60\60" "\77\77\3\3\0\0\0\300\374\376\377\377\377\377\376\374\300\0\0\0\14\16\17\17\17\17O\317\317O\17\17" "\17\17\16\14\200\300\334\374\374\70\36\37\37\36\70\374\374\334\300\200\1\3;\77\77\34x\370\370x\34\77" "\77;\3\1\0\0\0\0 \70>\77\367\361p\20\0\0\0\0\0\0\0\0\14||\77\37\15\4\0" "\0\0\0\0\0 \360\370\370\374\376\377\377\376\374\370\370\360 \0\0\0\77\77\77\77\3\3\3\3\77\77" "\77\77\0\0\0\0\0\0\0\200\300\340\340\300\200\6\16\34\30\0\360\370\374\376\177\77\37\17\7\3\1\0" "\0\0\0\0\200\200\200\200\200\370~\370\300\200\340\340\200\200\200\200\1\1\3\37\37\3\0\3\37\37\3\1" "\1\1\1\1\0\0\0\300\370\376\77\77\376\360\300\0\0\0\0\0\340\374\377\377\377\377\314\314\377\377\377\377" "\370\340\0\0\0\0\0\0\0\0\370\376\376\377\303\300\300\300\300``\220\230|>\37\17\7\3\3\3\3" "\3\1\1\0\374\374\374\374\374\374\374\374\374\374\374\374\374\374\300\300\77\77\77\77\77\77\77\77\77\77\77\77" "\77\77\3\3\0\0\0\60`\377\377\206\314xx\60\0\0\0\0\0\0\0\14\6\377\377a\63\36\36\14" "\0\0\0\0\340\370\374\376\376\377\377\377\3\3\7\6\16<\370\340\7\37\77\177\177\377\377\377\300\300\340`" "p<\37\7\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\374\374\374\374\374\374\374\374\374\374\314\314" "\374\374\0\0\0\0\230\230\314\314ff\63\63\230\230\0\0\0\0\0\0\1\1\14\314\316\316\317\17\1\1" "\0\0\0\0\300\340p\30\0\0\377\377\0\0\30p\340\300\0\0\17\37\70`\340\300\300\300\300\340`\70" "\37\17\0\0\340\370<\16\6\7\3\3\3\3'\66><>>\7\37" "\177\371\360`\0\0\377\377\3\3\3\3\3\3\377\377\0\0\0\0\0\0\377\377\360\360\220\220\360\360\377\377" "\0\0\0\0\0\30<<<<\377\377\360\360\360\360`\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0" "\0\0\0\0\60\60`\340\374\376\377\377\377\374\340`\60\60\0\0\63\63\37\77\177\177\0\0\177\177\77\37" "\63\63\0\0\0\200\340\360\377\376\374\360\0\0\300\200\0\0\0\0\17\77\177\377\17\7\301\340\370\374\377\377" "\377|\0\0\0\0\300\300\374\376\307\303\303\307\376\374\300\300\0\0\0\0\77\77\77\77\77\77\77\77\77\77" "\77\77\0\0\377\377\3\3\3\3\3\3\3\3\3\3\3\3\377\377\17\17\214\314\314\314\374\374\374\374\314\314" "\314\214\17\17\200\300\303\303\377\377\377\377\377\377\303\303\300\200\0\0\0\0\0\0\0\0\177\177\0\0\0\0" "\0\0\0\0\377\377\3\3\3\3\3\3\3\3\3\3\377\377\0\0\377\377\360\360\360\360\220\220\360\360\360\360" "\377\377\0"; /* Fontname: open_iconic_weather_2x Copyright: https://github.com/iconic/open-iconic, SIL OPEN FONT LICENSE Glyphs: 6/6 BBX Build Mode: 3 */ const uint8_t u8x8_font_open_iconic_weather_2x2[197] U8X8_FONT_SECTION("u8x8_font_open_iconic_weather_2x2") = "@E\2\2\0\200\300\300\340\370\370\374\374\374\374\370\370\340\0\0\17\37\77\77\77\77\77\77\77\77\77\77" "\77\77\77\36x~>\37\217\347\343\362\362\360\360\340\340\200\0\0<~\377\377\377\377\377\377\377\377\377\377" "\377\377\374x\340\370\374\376\377\340\200\0\0\0\0\0\0\0\0\0\3\17\37\77\177\177\177\377\376|||" "\70\30\14\0\300\340\360\360\370\376\376\377\377\377\377\376\376\370\300\200\3\3\363\363\1\0\374\374\0\1\363\363" "\3\7\17\7\0@\300\300\300\300\340\374\374\340\300\300\300\300@\0\0\0\0\1s\77\37\17\17\37\77s" "\1\0\0\0\200\200\14\14\300\340\360\363\363\360\340\300\14\14\200\200\1\1\60\60\3\7\17\317\317\17\7\3" "\60\60\1\1"; /* Fontname: open_iconic_arrow_4x Copyright: https://github.com/iconic/open-iconic, SIL OPEN FONT LICENSE Glyphs: 28/28 BBX Build Mode: 3 */ const uint8_t u8x8_font_open_iconic_arrow_4x4[3588] U8X8_FONT_SECTION("u8x8_font_open_iconic_arrow_4x4") = "@[\4\4\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\20\60p\360\360\360\360\360\377\377\377\377\360\360\360\360\360p\60\20\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\1\7\17\37\77\177\377\77\37\17\7\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0@`\360\370\374\376\376\377\377\377\377\377\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360" "\360\360\360\360\0\0\0\1\3\7\7\17\37\77\177\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\340\300\200\0\0\0\0" "\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\377\377\377\377\377\376\376\374" "\370\360` \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\177\77\37\17\7\7\3" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\370\374\377\376\374\370\360\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\10\14\16\17\17\17\17\17\377\377\377\377\17\17\17\17\17\16\14\10\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\360\370\374\374\376\376\376\17\17\17\17\17\17\17\17\376\376\376\374\374\370\360\340" "\300\200\0\0\360\376\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377" "\377\377\376\360\17\177\377\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376" "\377\377\177\17\0\0\1\3\7\17\37\77\77\177\177\177\376\374\370\360\360\370\374\376\177\177\177\77\77\37\17\7" "\3\1\0\0\0\0\200\300\340\360\370\374\374\376\376\376\177\77\37\17\377\377\377\377\376\376\376\374\374\370\360\340" "\300\200\0\0\360\376\377\377\177\77\37\17\7\3\1\0\0\0\0\0\17\17\17\17\17\17\17\17\17\17\17\17" "\377\377\376\360\17\177\377\377\376\374\370\360\340\300\200\0\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360\360" "\377\377\177\17\0\0\1\3\7\17\37\77\77\177\177\177\376\374\370\360\377\377\377\377\177\177\177\77\77\37\17\7" "\3\1\0\0\0\0\200\300\340\360\370\374\374\376\376\376\377\377\377\377\17\37\77\177\376\376\376\374\374\370\360\340" "\300\200\0\0\360\376\377\377\17\17\17\17\17\17\17\17\17\17\17\17\0\0\0\0\0\1\3\7\17\37\77\177" "\377\377\376\360\17\177\377\377\360\360\360\360\360\360\360\360\360\360\360\360\0\0\0\0\0\200\300\340\360\370\374\376" "\377\377\177\17\0\0\1\3\7\17\37\77\77\177\177\177\377\377\377\377\360\370\374\376\177\177\177\77\77\37\17\7" "\3\1\0\0\0\0\200\300\340\360\370\374\374\376\376\376\177\77\37\17\17\37\77\177\376\376\376\374\374\370\360\340" "\300\200\0\0\360\376\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177" "\377\377\376\360\17\177\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377" "\377\377\177\17\0\0\1\3\7\17\37\77\77\177\177\177\360\360\360\360\360\360\360\360\177\177\177\77\77\37\17\7" "\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\20\60p\360\360\360\360\377\377\377\377\377\377\377\377\360\360\360\360\360p\60\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\177\77\37\17\7\3\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360" "\360\360\360\360\1\3\7\17\37\77\177\377\377\377\377\377\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\17\17\17\0\0\0\0\0\0\0\0\1\3\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\340\300\200\0\0\0\0" "\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\377\377\377\377\377\376\374\370" "\360\340\300\200\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\377\377\377\377\177\77\37\17" "\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\376\374\370\360\340\300\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\14\16\17\17\17\17\17\377\377\377\377\377\377\377\377\17\17\17\17\16\14\10\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17" "\7\3\1\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\177\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\376\374\370\360\340\300\200\0\0\0\0\0" "\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360" "\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\300" "\200\0\0\0\0\6\17\37\77\177\377\377\377\377\376\374\370\360\340\300\300\340\360\370\374\376\377\377\377\377\177\77" "\37\17\6\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\177\77\37\17\7\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\376\374\370\360`\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\177\77\37\17\6\0\0\0" "\0\0\0\0\0\0\0\0\0`\360\370\374\376\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\376\374\370\360\340\300\200\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\177\77\37\17\7\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\6\17\37\77\177\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\300\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0" "\0\0\0\0\0\30<~\377\377\377\377\177\77\37\17\7\3\1\0\0\1\3\7\17\37\77\177\377\377\377\377" "~<\30\0\0\0\0\0\0\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\20\60p\360\360\360\360\377\377\377\377\377\377\377\377\360\360\360\360p\60\20\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\177\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360" "\360\360\360\360\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\17\17\17\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\376\374\370\360\340\300\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\10\14\16\17\17\17\17\377\377\377\377\377\377\377\377\17\17\17\17\16\14\10\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\300\340\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\377\376\374\370" "\370\360`\0\17\17\17\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\7\3\1" "\1\0\0\0\0`\360\370\370\374\376\377\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360" "\377\377\177\77\0\0\0\1\1\3\7\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\340\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\374\376\377\37\7\3\1\1\0\0\0\0\0\0\0\200\300\340\370\374\376\376\374" "\370\340\300\200\1\3\7\37\77\177\177\77\37\7\3\1\0\0\0\0\0\0\0\200\200\300\340\370\377\177\77\7" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\17\17\7\7\7\3\1\0\0\0\0" "\0\0\0\0\0\0\0\0\377\377\377\377\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\377\377\377\377" "\0\0\0\0\0\0\0\300\340\370\370\340\300\0\0\0\0\0\0\0\0\0\0\0\20\60\360\360\377\377\377\377" "\360\360\60\20\10\14\17\17\377\377\377\377\17\17\14\10\0\0\0\0\0\0\0\0\0\0\0\3\7\37\37\7" "\3\0\0\0\0\0\0\0\377\377\377\377\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\377\377\377\377" "\0\0\0\0\360\360\360\360\360\360\340\300\200\0\0\0\0\0\0\0\0\200\300\340\360\360\360\360\377\376\374\370" "\370\360`\0\0\0\0\0\1\3\7\17\37\77\376\370\360\360\370\374~\77\17\7\3\1\0\0\17\7\3\1" "\1\0\0\0\0\0\0\0\200\300\340\360\374~\77\37\17\7\17\37\177\374\370\360\340\300\200\0\360\340\300\200" "\200\0\0\0\17\17\17\17\17\17\7\3\1\0\0\0\0\0\0\0\0\0\1\3\7\17\17\17\377\177\77\37" "\37\17\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\376\374\370\360\340\300\200" "\0\0\0\0\0\0\0\300\340\360\370\370\374\374\376\376\376\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\177>\34\10\300\374\77\37\17\7\7\3\1\1\1\0\0\0\0\0\0\0\0\0\177\77\37\17\7\3\1\0" "\0\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\376\377\377\377\17\17\17\17\17\17\17\17\0\0\200\300\300\340\340\340\360\360\360\360\376\374\370\360" "\340\340\300\200\377\377\377\377\0\0\0\0\0@\60\34\36\17\17\17\17\17\17\17\17\17\17\17\177\77\37\17" "\7\3\1\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\0\0\0\0" "\0\0\0\0\7\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\7\0\0\0\0" "\0\0\0"; /* Fontname: open_iconic_check_4x Copyright: https://github.com/iconic/open-iconic, SIL OPEN FONT LICENSE Glyphs: 5/5 BBX Build Mode: 3 */ const uint8_t u8x8_font_open_iconic_check_4x4[644] U8X8_FONT_SECTION("u8x8_font_open_iconic_check_4x4") = "@D\4\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\340\300" "\200\0\0\0\0\0\200\300\340\360\340\300\200\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\177\77" "\37\17\6\0\2\7\17\37\77\177\377\377\377\377\376\374\376\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\360\370\374\374\376\376\376\377\377\377\377\377\377\377\377\376\376\376\374\374\370\360\340" "\300\200\0\0\360\376\377\377\377\377\377\377\177\77\77\177\377\377\377\377\177\77\37\17\7\203\301\340\360\371\377\377" "\377\377\376\360\17\177\377\377\377\377\377\377\376\374\370\360\340\301\301\340\360\370\374\376\377\377\377\377\377\377\377\377" "\377\377\177\17\0\0\1\3\7\17\37\77\77\177\177\177\377\377\377\377\377\377\377\377\177\177\177\77\77\37\17\7" "\3\1\0\0\0\0\200\300\340\360\370\374\374\376\376\376\377\377\377\377\377\377\377\377\376\376\376\374\374\370\360\340" "\300\200\0\0\360\376\377\377\377\377\377\377\371\360\340\301\203\7\17\37\37\17\7\203\301\340\360\371\377\377\377\377" "\377\377\376\360\17\177\377\377\377\377\377\377\237\17\7\203\301\340\360\370\370\360\340\301\203\7\17\237\377\377\377\377" "\377\377\177\17\0\0\1\3\7\17\37\77\77\177\177\177\377\377\377\377\377\377\377\377\177\177\177\77\77\37\17\7" "\3\1\0\0\377\377\377\377\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\7\3\201\300\340\360\370\374\376" "~<\30\0\377\377\377\377\0\0\0\0\0\30<~\376\374\370\360\360\370\374\376\177\77\37\17\7\3\201\300" "\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\1\3\7\7\3\1\0\0\0\0\0\376\377\377\377" "\0\0\0\0\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\0\0\0\0 p\370\374\376\377\376\374\370\360\340\300\200\0\0\0\0\0\200\300\340\360\370\374\376\377\376\374" "\370\360`\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\376\374\376\377\377\377\377\377\177\77\37\17\7\3" "\1\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\177\77\77\177\377\377\377\377\376\374\370\360\340\300" "\200\0\0\0\2\7\17\37\77\177\177\77\37\17\7\3\1\0\0\0\0\0\0\1\3\7\17\37\77\177\177\77" "\37\17\6"; /* Fontname: open_iconic_embedded_4x Copyright: https://github.com/iconic/open-iconic, SIL OPEN FONT LICENSE Glyphs: 17/17 BBX Build Mode: 3 */ const uint8_t u8x8_font_open_iconic_embedded_4x4[2180] U8X8_FONT_SECTION("u8x8_font_open_iconic_embedded_4x4") = "@P\4\4\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360" "\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\360\360\360\360\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\0\0\0\0\0\0\0\0\0\0\0\0\340\370\374\376\376\377\377\377\377\377\377\376\376\374\370\340\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\300\370\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\370\300\0\0" "\0\0\0\0\300\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376" "\374\370\360\300\0\0\0\0\0\0\0\0\0\0\0\0\60p\360\360\360\360p\60\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0@\340\360\370\360\360\340\340\340\360\376\377\377\377\377\376\360\340\340\340\360\360\370\360\340" "@\0\0\0\300\340\340\340\361\377\377\377\377\377\77\17\7\7\3\3\3\3\7\7\17\77\377\377\377\377\377\361" "\340\340\340\300\3\7\7\17\217\377\377\377\377\377\374\360\340\340\300\300\300\300\340\340\360\374\377\377\377\377\377\217" "\17\7\7\3\0\0\0\2\7\17\37\17\17\7\7\7\17\177\377\377\377\377\177\17\7\7\7\17\17\37\17\7" "\2\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\377\177\37\7\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\10\16\17\17\17\17\17\317\377\377\377\377\177\37\7\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\60\360\360\360\360\360\376\377\377\377\367\361p\60\20\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\177\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\300\300\340\360\370\370\374\376\377\377\376\374\370\370\360\340\300\300\200\0\0" "\0\0\0\0\0\10\14\16\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376" "\16\14\10\0\0\0\0\0\377\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\377\377\377\377\377\377\377\377" "\0\0\0\0\0\0\0\0\17\17\17\17\17\17\17\17\0\0\0\0\0\0\0\0\17\17\17\17\17\17\17\17" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30<~\376\374\370\360" "\340\300\200\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\376\374\370\360\340\300\200\0\0\1\3\7" "\7\3\1\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\374\374\340\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\200\200\200\200\200\200\200\200\200\370\377\377\177\177\377\377\370\300\0\300\370\376\376\370\340\200\200\200" "\200\200\200\200\7\7\7\7\7\37\377\377\377\377\37\3\0\0\3\37\377\377\377\377\77\17\3\7\7\7\7\7" "\7\7\7\7\0\0\0\0\0\0\0\17\17\1\0\0\0\0\0\0\0\17\7\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\377\377\377\377\376\360\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\340\374\377\377\377\377\17\17\17\17\377\377\377\377\370\340\200\0\0\0\0\0" "\0\0\0\0\0\0\300\360\376\377\377\377\377\377\377\377\360\360\360\360\377\377\377\377\377\377\377\374\360\300\0\0" "\0\0\0\0\370\377\377\377\377\377\377\377\377\377\377\377\360\360\360\360\377\377\377\377\377\377\377\377\377\377\376\370" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\374\374\376\376\377\17\7\3\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\337\377\377\377\377\377\377\377\360\360\360\360\360\360\360\360" "\360\370|\36\0\0\0\200\300\340\360\370\374\376\377\377\377\377\177\77\37\17\7\17\17\17\17\17\17\7\7\3" "\3\1\0\0<~\347\303\303\347\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\360\360\360\360\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\376|\377\377\377\377\300\340\360\360y\77\77\37\17\17\6\0\0\0" "\0\0\0\0\0\0\0\0\0`\360\370|>\377\377\377\377\3\7\17\17\236\374\374\370\360\360`\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\177<\36\37\17\7\7\3\1\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\360\370\374\374\376\376\376\377\377\377\377\17\17\17\37\36\36>|\374\370\360\340" "\300\200\0\0\360\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\1\3\37" "\377\377\376\360\17\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\200\300\370" "\377\377\177\17\0\0\1\3\7\17\37\77\77\177\177\177\377\377\377\377\360\360\360\370xx|>\77\37\17\7" "\3\1\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\0\0\0\0\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177" "\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\371\360\360\371\377\377\377\377" "\0\0\0\0\0\0\0\0\200\300\300\340\340\360\360xx<<\36\36\17\17\206\200\300\300\200\0\0\0\0" "\0\0\0\0\0\0\0\0\203\303\303\341\341\360\360xx<<\36\36\17\17\207\207\303\303\201\0\0\0\0" "\0\0\0\0\0\0\0\0\3\3\3\1a\360\360\370\370\374\374\376\376\377\377\377\7\3\3\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360`\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\200\0\0\0\0\377\377\377\377\0\0\0\0\200\300\200\0\0\0\0\0" "\0\0\0\0\300\360\374\376\177\37\7\3\3\0\0\0\377\377\377\377\0\0\0\3\3\7\37\177\376\374\360\300" "\0\0\0\0\77\377\377\377\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\377\377\377\77" "\0\0\0\0\0\0\3\7\17\37><|x\370\360\360\360\360\360\360\370x|<>\37\17\7\3\0\0" "\0\0\0\0\0\0\200\300\340\360\370||>\36\36\17\17\17\17\17\17\17\37\36\36>|\370\370\360\360" "\370\374\376\376\360\376\377\377\17\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\10\14\16\17\17\17\17\17" "\17\17\17\17\17\177\377\377\360\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\1\3\7\17\37>>|xx\370\360\360\360\360\360\360\370xx|>>\34\10\0" "\0\0\0\0\20xx|<<\36\36\36\36\17\17\17\17\17\17\17\17\17\17\36\36\36\36<<|x" "x\20\0\0\0\0\0\0\0\0\0\300\340\340\340\360\360\360\360\360\360\360\360\340\340\340\300\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\3\1\1\1\0\0\0\0\0\0\1\1\1\3\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0<~\377\377\377\377~<\0\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: open_iconic_play_4x Copyright: https://github.com/iconic/open-iconic, SIL OPEN FONT LICENSE Glyphs: 18/18 BBX Build Mode: 3 */ const uint8_t u8x8_font_open_iconic_play_4x4[2308] U8X8_FONT_SECTION("u8x8_font_open_iconic_play_4x4") = "@Q\4\4\0\0\0\0\0\0\0\0\360\360\360\360\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\360\360\360\360\0\0\0\0\377\377\377\377\0\0\0\0\377\377\377\377\0\0\0\0\377\377\377\377" "\0\0\0\0\17\17\17\17\0\0\0\0\377\377\377\377\0\0\0\0\377\377\377\377\0\0\0\0\377\377\377\377" "\0\0\0\0\0\0\0\0\0\0\0\0\17\17\17\17\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\340\340\360\360\370\370\374\0\0\0\0\377\377\377\377" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\377" "\0\0\0\0\0\0\0\0\1\17\177\377\377\371\301\3\3\7\7\17\17\37\37\77\0\0\0\0\377\377\377\377" "\0\0\0\0\0\0\0\0\0\0\0\1\7\17\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\374\376\376\374\370\360\300\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\340\360\370\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\370\360\340\300" "\0\0\0\0\10\14\16\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\16\14\10\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\300\340\360\370|>\36\36\17\17\17\17\17\17\36\36>|\370\360\340\300\0" "\0\0\0\0\0\0\0\0\376\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\377\377\377\376" "\0\0\0\0\376\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\376\7\17\17\17\17\17\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\17\17\17" "\17\17\17\7\0\0\0\0\360\360\360\360\360\360\360\360\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360\360" "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377" "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377" "\0\0\0\0\0\0\0\0\17\17\17\17\17\17\17\17\0\0\0\0\0\0\0\0\17\17\17\17\17\17\17\17" "\0\0\0\0\0\0\0\0\360\340\340\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\376\376\374\374\370\370\360\360\340\340\300\300\200\200\0" "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\177\177\77\77\37\37\17\17\7\7\3\3\1\1\0" "\0\0\0\0\0\0\0\0\17\7\7\3\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\340\360\360\360\360\360\360\340\340\340\300\200\0\0\0\0" "\0\0\0\0\0\0\0\0\340\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\340" "\0\0\0\0\0\0\0\0\7\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\7" "\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\7\17\17\17\17\17\17\7\7\7\3\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\360\0\0\0\0\0\0\0\0\0\0\0\200" "\200\300\340\360\0\200\300\340\340\360\370\374\374\376\377\377\377\377\377\377\0\200\300\340\340\360\370\374\374\376\377\377" "\377\377\377\377\0\1\3\7\7\17\37\77\77\177\377\377\377\377\377\377\0\1\3\7\7\17\37\77\77\177\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\17\0\0\0\0\0\0\0\0\0\0\0\1" "\1\3\7\17\360\340\300\200\200\0\0\0\0\0\0\0\0\0\0\0\360\340\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\376\374\374\370\360\340\340\300\200\0\377\377\377\377\377\377\376\374\374\370\360\340" "\340\300\200\0\377\377\377\377\377\377\177\77\77\37\17\7\7\3\1\0\377\377\377\377\377\377\177\77\77\37\17\7" "\7\3\1\0\17\7\3\1\1\0\0\0\0\0\0\0\0\0\0\0\17\7\3\1\1\0\0\0\0\0\0\0" "\0\0\0\0\360\360\360\360\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\340\360" "\0\0\0\0\377\377\377\377\377\377\377\377\0\200\200\300\340\340\360\360\370\374\374\376\376\377\377\377\377\377\377\377" "\0\0\0\0\377\377\377\377\377\377\377\377\0\1\1\3\7\7\17\17\37\77\77\177\177\377\377\377\377\377\377\377" "\0\0\0\0\17\17\17\17\17\17\17\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\17" "\0\0\0\0\360\340\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360\360" "\0\0\0\0\377\377\377\377\377\377\377\376\376\374\374\370\360\360\340\340\300\200\200\0\377\377\377\377\377\377\377\377" "\0\0\0\0\377\377\377\377\377\377\377\177\177\77\77\37\17\17\7\7\3\1\1\0\377\377\377\377\377\377\377\377" "\0\0\0\0\17\7\3\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\17\17\17\17\17\17\17" "\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360" "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\0\0\0\0\0\0\0\0\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\376\377\377\377\377\376\374\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0~\377\377\376\200\0\0\0\77\177\377\377\377\377\177\77\0\0\0\200\376\377\377\376" "\0\0\0\0\0\0\0\0\0\3\7\17\37>|xx\360\360\360\360\360\360xx|>\37\17\7\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\360\360\377\377\377\377\360\360\360\360\340\300\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\360\370\370\374\374\374\374\376\376\376\376\376\376\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\3\3\1\1\1\1\1\1\1\0\0\0\0\0\0\0" "\377\377\377\377\0\300\340\340\360\360\360\360\377\377\377\377\0\0\0\0\0\0\0\0\360\374\376\376\377\377\377\377" "\377\377\377\377\17\77\177\177\377\377\377\377\177\177\77\17\0\0\0\0\0\0\0\0\0\3\7\7\17\17\17\17" "\7\7\3\0\0\0\200\300\340\360\370\374\374\376\376\376\377\377\377\377\377\377\377\377\376\376\376\374\374\370\360\340" "\300\200\0\0\360\376\377\377\377\377\377\377\377\377\377\377\0\1\3\3\7\17\17\37\77\77\177\377\377\377\377\377" "\377\377\376\360\17\177\377\377\377\377\377\377\377\377\377\377\0\200\300\300\340\360\360\370\374\374\376\377\377\377\377\377" "\377\377\177\17\0\0\1\3\7\17\37\77\77\177\177\177\377\377\377\377\377\377\377\377\177\177\177\77\77\37\17\7" "\3\1\0\0\0\0\0\0\0\0\0\0\200\300\360\370\376\377\377\377\0\0\0\0\360\360\360\340\340\340\300\200" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\360\360\340\301\1\3\7\37" "\377\376\374\340\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\17\17\7\203\200\300\340\370" "\377\177\77\7\0\0\0\0\0\0\0\0\1\3\17\37\177\377\377\377\0\0\0\0\17\17\17\7\7\7\3\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\376\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\360\360\340\300" "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\17\17\7\3" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\37\177\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\376\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\37\177\377\377\377\0\0\0\0" "\0\0\0"; /* Fontname: open_iconic_thing_4x Copyright: https://github.com/iconic/open-iconic, SIL OPEN FONT LICENSE Glyphs: 19/19 BBX Build Mode: 3 */ const uint8_t u8x8_font_open_iconic_thing_4x4[2436] U8X8_FONT_SECTION("u8x8_font_open_iconic_thing_4x4") = "@R\4\4\0\0\0\0\0\0\0\0\0\200\300\360\370\374~\77\77~\374\370\360\300\200\0\0\0\0\0" "\0\0\0\0\360\360\360\360\360\360\374\376\377\377\377\363\361\360\360\360\360\360\360\361\363\377\377\377\376\374\360\360" "\360\360\360\360\0\0\0\0\377\377\377\377\37\17\17\37\377\377\377\377\377\377\377\377\37\17\17\37\377\377\377\377" "\0\0\0\0\0\0\0\0\377\377\377\377\370\360\360\370\377\377\377\377\377\377\377\377\370\360\360\370\377\377\377\377" "\0\0\0\0\0\0\0\0\0\0\0\0\374\376\377\377\17\17\17\17\17\17\17\17\377\377\376\374\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\7\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\17\17\7\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360" "\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360" "\360\360\360\360\377\377\377\377\17\17\17\17\377\377\377\377\17\17\17\17\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\17\17\17\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\374\374\376\376\377\77\37\17\17\17\16\36<" "\374\370\340\200\0\0\0\0\0\0\0\0\200\300\340\360\377\377\377\377\377\377\377\377\374\370\360\360\360\360\370\374" "\377\377\177\37\0\200\300\340\360\370\376\377\377\377\377\377\377\377\377\377\377\377\377\377\17\17\17\17\17\7\7\3" "\3\1\0\0\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\340\370\374\376>\37\17\17\17\17\37>\376\374\370\340\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374~>\37\17\17\17\17\37>\376\374\370\340" "\0\0\0\0\0\0\300\340\360\370\374~\77\237\317\347\343\301\200\0\0\0\200\300\340\360\370\374\177\77\37\7" "\0\0\0\0\374\377\377\377\3\1\0<~\377\377\347\343\361\370|>\77\237\317\347\303\201\0\0\0\0\0" "\0\0\0\0\0\3\17\37\77>|x\360\360\361\361\361\361x|>\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0<\376\377\377\377\377\376<\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377~~\377\377" "\377\377~<\377\377\377\377\377\377\377\377\303\1\0\0\0\0\1\303\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\340\360\370\374\374" "~\77\16\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\34>~\377\377\377\377\177\77\37\7\3\0" "\0\0\0\0\0\0\0\0\0\360\374\376\377\377\377\377\377\376\374\370\0\0\0\3\3\1\0\0\0\0\0\0" "\0\0\0\0@@\340\370\374\377\377\377\177\177\177\77\37\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\370\376\376\376\374\370\360\340\300\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\360\370\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\370\360\300\0" "\0\0\0\0\0\0\0\0\376\377\377\377\17\7\7\17\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376" "\0\0\0\0\0\0\0\0\0\7\17\37\77|\370\370\360\360\341\341\341\363\377\377\377\177\177\77\37\17\7\0" "\0\0\0\0\0\0\0\0\340\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\340" "\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\0\0\0\0\360\360\360\360\377\377\377\377\360\360\360\360\0\0\0\0\0\0\0\0\360\360\360\360\377\377\377\377" "\360\360\360\360\7\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\17\17\7\0\0\300\340\360\370|<>\36\37\17\17\17\17\17\17\37\36><|\370\360\340\300\0\0" "\0\0\0\0\374\377\377\377\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\377\377\377\374" "\0\0\0\0\3\17\77\177\376\370\340\300\300\200\200\0\0\0\0\0\0\200\200\300\300\340\370\376\377\377\357\303" "\200\0\0\0\0\0\0\0\0\1\3\3\7\7\17\17\17\17\17\17\17\17\7\7\7\7\17\37\77\177\377\377" "\377\377\376|\0\0\0\0\377\377\377\377\17\17\17\17\17\17\17\17\17\17\17\17\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\347\303\303\347\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\200\300\340\360\360\360\360\360\360\360\360\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\1\3\7\17\17\17\17\17\17\17\17\377\377\377\377\377\377\377\377\377\377\377\377~<\30\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\360\374\376\376\377\377\377\377\376\376\374\360\0\0\0\0\0\0\0\0" "\0\0\0\0\6\17\17\36\36\274\374\370\371\377\377\377\377\377\377\377\377\377\377\371\370\374\374\36\36\17\17\6" "\0\0\0\0\6\17\17\217\377\377\377\377\377\377\377\377\1\0\0\1\377\377\377\377\377\377\377\377\217\217\17\6" "\0\0\0\0\16\17\17\7\7\7\17\37\77\177\77\37\0\0\0\0\37\77\177\77\37\17\7\7\7\17\17\16" "\0\0\0\0\0\0\0\0\0\0\0\200\341\376\374\370\360\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300\360\370\374\376\377\377\377\377\377\377\377\377~\0\0\0\0\20\340\300\200\0\0\0\0" "\0\0\0\0~\377\377\377\377\377\377\377\377\177\77\37\17\3\1\0\200\300\340\370\376\377\377\377\377\376\374\340" "\0\0\0\0\0\3\7\17\37\77\177\207\1\0\0\0\340\370\374\377\377\377\377\377\377\377\377\377\377\177\77\17" "\0\0\0\0\0\0\0\0\0\0\0\0\340\370\374\376>\37\17\17\17\17\37>\376\374\370\340\0\0\0\0" "\0\0\0\0\0\0\0\0\360\360\360\360\377\377\377\377\360\360\360\360\360\360\360\360\377\377\377\377\360\360\360\360" "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\0\0\0\0\0\0\0\0\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\0\0\0\0\376\377\377\377\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\377\377\377\376\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\377\177\377\377\377\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360" "\377\377\377\177\0\0\0\0\300\340\360\360\360\360\360\360\377\377\377\377\377\377\377\377\360\360\360\360\360\360\340\300" "\0\0\0\0\0\0\0\0\17\17\17\17\377\377\377\377\377\377\377\377\377\377\377\377\17\17\17\6\0\0\0\0" "\0\0\0\0\300\340\360\360\360\360\360\360\377\377\377\377\377\377\377\377\377\377\377\377\360\360\360\360\360\360\340\300" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\177\177\37\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\377\377\377\377" "\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\347\303\303\347\377\377\377\377\377\377\377\377\377\377\377\177" "\0\0\0"; /* Fontname: open_iconic_weather_4x Copyright: https://github.com/iconic/open-iconic, SIL OPEN FONT LICENSE Glyphs: 6/6 BBX Build Mode: 3 */ const uint8_t u8x8_font_open_iconic_weather_4x4[772] U8X8_FONT_SECTION("u8x8_font_open_iconic_weather_4x4") = "@E\4\4\0\0\0\0\0\0\0\0\0\0\200\300\300\340\340\360\360\360\360\360\360\340\340\300\300\200\0\0" "\0\0\0\0\0\200\300\340\340\360\360\360\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\370" "\0\0\0\0~\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\376\374\360\0\1\3\7\7\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\7\7\3\0\200\340\370\374\374\376\376\377\377\177\77\77\37\36\16\14\14\10\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\37\77\37\37\37\7\3\1\300\360\370\374\374\376\376\377\377\377\377\377\377\376\376\374\374\370\340\200" "\0\0\0\0\340\370\374\376\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\360\340\300\0\7\37\77\177\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\177\177\77\17\0\0\200\340\360\370\374\374\376\376\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\370\377\377\377\377\377\377\377\377\377\376\360\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\7\77\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\370\360\360\360\340\340\340\340\340\340" "\340\340\60\0\0\0\0\1\3\7\17\37\37\77\77\77\177\177\177\177\177\177\177\177\77\77\77\37\37\17\7\3" "\1\0\0\0\0\0\0\0\0\0\0\0\300\360\370\374\374\376\376\377\377\377\377\377\377\376\376\374\374\370\340\200" "\0\0\0\0\340\370\374\376\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\360\340\300\200\7\37\37\17\17\17\17\17\17\3\1\1\340\360\360\340\1\1\3\17\17\17\17\17\37\37\77\177" "\177\177\77\17\0\0\0\0~\377\377~\0\0\0\0\177\377\377\177\0\0\0\0~\377\377~\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\374\374\340\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\20\60p\360\360\360\360\360\360\360\360\370\377\377\377\377\377\377\370\360\360\360\360\360\360\360\360" "p\60\20\0\0\0\0\0\0\0\1\3\7\317\377\377\377\377\377\377\377\377\377\377\377\377\317\7\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0p>\37\17\17\7\3\1\0\0\1\3\7\17\17\37>p\0\0\0" "\0\0\0\0\0\0\0\0`\360\360`\0\0\0\0\0\0\6\17\17\6\0\0\0\0\0\0`\360\360`" "\0\0\0\0\200\300\300\200\0\0\0\0\340\370\374\376\376\377\377\377\377\377\377\376\376\374\370\340\0\0\0\0" "\200\300\300\200\1\3\3\1\0\0\0\0\7\37\77\177\177\377\377\377\377\377\377\177\177\77\37\7\0\0\0\0" "\1\3\3\1\0\0\0\0\6\17\17\6\0\0\0\0\0\0`\360\360`\0\0\0\0\0\0\6\17\17\6" "\0\0\0"; /* Fontname: open_iconic_arrow_8x Copyright: https://github.com/iconic/open-iconic, SIL OPEN FONT LICENSE Glyphs: 28/28 BBX Build Mode: 3 */ const uint8_t u8x8_font_open_iconic_arrow_8x8[14340] U8X8_FONT_SECTION("u8x8_font_open_iconic_arrow_8x8") = "@[\10\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\77\177\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\177\77\37\17\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\37\77\177" "\377\77\37\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\360\370\374\376\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\370\374\376\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\20\30<~\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\1\3\3\7\17\37\77\177\177\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\17\37\77\177\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\376\374\370\360\340\340\300\200\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\376\376\374\370\360\340\300\300\200\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "~<\30\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\177\77\37\37\17\7\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\177\77\37\17\7\7\3\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\370\374\377" "\376\374\370\360\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\374\376\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\376\374\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\340\360\370\370\370\374\374\376\376\376\376\377\377" "\377\377\377\377\377\377\377\377\377\377\376\376\376\376\374\374\370\370\370\360\340\340\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\340\300\0" "\0\0\0\0\0\300\360\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\376\360\300\0\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\374\77\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377" "\377\377\377\77\0\3\17\177\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377" "\177\17\3\0\0\0\0\0\0\3\7\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360" "\340\300\200\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\7\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\7\17\37\37\37\77\77\177\177\177\177\377\377" "\377\377\377\377\377\377\377\377\377\377\177\177\177\177\77\77\37\37\37\17\7\7\3\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\340\360\370\370\370\374\374\376\376\376\376\377\377" "\377\377\377\377\377\377\377\377\377\377\376\376\376\376\374\374\370\370\370\360\340\340\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17" "\7\3\1\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\340\300\0" "\0\0\0\0\0\300\360\376\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\376\360\300\0\374\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\374\77\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\77\0\3\17\177\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\177\17\3\0\0\0\0\0\0\3\7\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360" "\340\300\200\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\7\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\7\17\37\37\37\77\77\177\177\177\177\377\377" "\377\377\377\377\377\377\377\377\377\377\177\177\177\177\77\77\37\37\37\17\7\7\3\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\340\360\370\370\370\374\374\376\376\376\376\377\377" "\377\377\377\377\377\377\377\377\377\377\376\376\376\376\374\374\370\370\370\360\340\340\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\340\300\0" "\0\0\0\0\0\300\360\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377" "\376\360\300\0\374\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377" "\377\377\377\374\77\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377" "\377\377\377\77\0\3\17\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377" "\177\17\3\0\0\0\0\0\0\3\7\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\7\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\7\17\37\37\37\77\77\177\177\177\177\377\377" "\377\377\377\377\377\377\377\377\377\377\177\177\177\177\77\77\37\37\37\17\7\7\3\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\340\360\370\370\370\374\374\376\376\376\376\377\377" "\377\377\377\377\377\377\377\377\377\377\376\376\376\376\374\374\370\370\370\360\340\340\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17" "\7\3\1\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\340\300\0" "\0\0\0\0\0\300\360\376\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377" "\376\360\300\0\374\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377" "\377\377\377\374\77\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\77\0\3\17\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\177\17\3\0\0\0\0\0\0\3\7\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\7\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\7\17\37\37\37\77\77\177\177\177\177\377\377" "\377\377\377\377\377\377\377\377\377\377\177\177\177\177\77\77\37\37\37\17\7\7\3\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7" "\17\37\77\177\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\177\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\376\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370" "\360\340\300\200\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17" "\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360" "\370\374\376\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17" "\7\3\1\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7" "\17\37\77\177\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340" "\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7" "\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\374\370\360\340\300\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\376\374\370\360" "\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\177\77\37\17" "\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\177\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340" "\360\370\374\376\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0" "\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360" "\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\376\374\370\360\340\300\200\0" "\0\0\0\0\0\30<~\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0" "\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "~<\30\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\376\374\370\360\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177" "\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\1\3\7\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300\340\360\370\374\376\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340" "\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377~<\30\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7" "\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377~<\30\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\1\3\7\17\37\77\177\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\376\374\370\360\340\300\200\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\30<~\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\30<~\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\177\77\37\17\7\3\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340" "\360\370\374\376\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0" "\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17" "\7\3\1\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360" "\340\300\200\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\177\77\37\17" "\7\3\1\0\0\0\0\0\0\0\0\0\0\1\3\7\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7" "\17\37\77\177\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340" "\360\370\374\376\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\376\374\370\370\360\340\300\300\200\0\0" "\0\0\0\0\340\370\374\376\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377~" "~<\30\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\177\77\37\37\17\7\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\300\300\340\360\370\370\374\376\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\30<~~\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177" "\177\77\37\7\0\0\0\0\0\0\1\3\3\7\17\37\37\77\177\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\360\370\374\374\374\376\376\376\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\374\376\377\377\377\377\177\77\37\17\7\3\3\1\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370\374\376\376\374\370\340\300\200\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\370\377\377\377\377\377\377\377\17\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\376\374" "\370\340\300\200\1\3\7\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\7\3\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\377\377\377\377\377\377\377\37\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\1\3\7\37\77\177\177\77\37\7\3\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\200\200\300\300\340\360\370\374\376\377\377\377\377\177\77\17\7\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\177\177\177\77\77\77\37\17\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\340\360\374\377\377\377\377\377\377\374\360\340\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177" "\77\17\3\1\200\300\360\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\360\300\200\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\17\77\377\377\377\377\377\377\77\17\7\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\376\374\370\370\360\340\300\300\200\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\376\376\374\370\340\300\200\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\370\374\376\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377~" "~<\30\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\377\377\377\377\377\376\374\370\340\300\200\0\0\0" "\200\340\360\370\374\377\377\377\377\377\177\77\17\7\3\1\0\0\0\0\377\177\77\37\37\17\7\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\177\377\377\377\377\377\376\377" "\377\377\377\377\77\37\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\370\374\377\377\377\377\377\177\77\177" "\377\377\377\377\377\376\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\374\376\377\377\377\377\377\77\37\17\7\1\0\0\0\0" "\0\1\3\7\37\77\177\377\377\377\377\377\374\370\360\340\300\200\0\0\377\376\374\370\370\360\340\300\300\200\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\177\177\77\37\7\3\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\1\3\17\37\77\177\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377~" "~<\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\177\77\37\37\17\7\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\340\360\360\370\370\370\374\374\374\376\376\376" "\376\376\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\374" "\370\360\340@\0\0\0\0\0\200\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\7" "\3\1\0\0\0\0\340\370\377\377\377\377\377\377\177\77\37\37\17\17\7\7\3\3\3\1\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\200\376\377\177\77\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\77\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\360\374\376\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\374\370\360\340\300\200\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\200\300\340\340\360\360\370\370\374\374\376\376\376\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\370" "\360\340\300\200\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\374\376\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17" "\7\3\1\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\200p<\37\17\7\3\3\1\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\177\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\17\77\177\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\177\77\17\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: open_iconic_check_8x Copyright: https://github.com/iconic/open-iconic, SIL OPEN FONT LICENSE Glyphs: 5/5 BBX Build Mode: 3 */ const uint8_t u8x8_font_open_iconic_check_8x8[2564] U8X8_FONT_SECTION("u8x8_font_open_iconic_check_8x8") = "@D\10\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\376\374\370\360\340\300\200\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177" ">\34\0\0\0\0\0\0\200\300\340\360\370\374\376\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0" "\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0" "\0\0\0\0\10\34>\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\370\374\376\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\177" "\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\340\360\370\370\370\374\374\376\376\376\376\377\377" "\377\377\377\377\377\377\377\377\377\377\376\376\376\376\374\374\370\370\370\360\340\340\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\177\377\377\377\377\377\376\374\370\340\300\0" "\0\0\0\0\0\300\360\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\201\303\347\377\377\377\377\377\377\377" "\376\360\300\0\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\7\17\37\77\177\377\377\377" "\377\377\377\177\77\37\17\7\3\1\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\374\77\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\1\3" "\3\1\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\77\0\3\17\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340" "\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\177\17\3\0\0\0\0\0\0\3\7\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\7\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\7\17\37\37\37\77\77\177\177\177\177\377\377" "\377\377\377\377\377\377\377\377\377\377\177\177\177\177\77\77\37\37\37\17\7\7\3\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\340\360\370\370\370\374\374\376\376\376\376\377\377" "\377\377\377\377\377\377\377\377\377\377\376\376\376\376\374\374\370\370\370\360\340\340\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\370\374\376\377\377\377\377\377\377\377\377\377\177\177\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\177\377\377\377\377\377\377\377\377\377\376\374\370\340\300\0" "\0\0\0\0\0\300\360\376\377\377\377\377\377\377\377\377\377\377\377\347\303\201\0\0\0\0\1\3\7\17\37\77" "\177\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\201\303\347\377\377\377\377\377\377\377\377\377\377\377" "\376\360\300\0\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0" "\0\0\1\3\3\1\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\374\77\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0" "\0\0\200\300\300\200\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\77\0\3\17\177\377\377\377\377\377\377\377\377\377\377\377\347\303\201\0\0\0\0\200\300\340\360\370\374" "\376\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\201\303\347\377\377\377\377\377\377\377\377\377\377\377" "\177\17\3\0\0\0\0\0\0\3\7\37\77\177\377\377\377\377\377\377\377\377\377\376\376\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376\377\377\377\377\377\377\377\377\377\177\77\37\7\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\7\17\37\37\37\77\77\177\177\177\177\377\377" "\377\377\377\377\377\377\377\377\377\377\177\177\177\177\77\77\37\37\37\17\7\7\3\1\1\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\200\300\340\360\370\374\376\376\374\370\360" "\340\300\200\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\177\77\37\17" "\7\3\1\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\376\374\370\360" "\340\300\200\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\200\300\340\360\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7" "\17\37\77\177\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\370\374\376\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\376\374\370\360\340\300\200\0" "\0\0\0\0\10\34>\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0" "\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177" ">\34\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\376\374\370\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177" "\77\37\17\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0" "\0\0\0\0\10\34>\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0" "\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177" ">\34\0\0\0\0\0\0\0\1\3\7\17\37\77\77\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\77\77\37\17\7\3\1\0\0" "\0\0\0"; /* Fontname: open_iconic_embedded_8x Copyright: https://github.com/iconic/open-iconic, SIL OPEN FONT LICENSE Glyphs: 17/17 BBX Build Mode: 3 */ const uint8_t u8x8_font_open_iconic_embedded_8x8[8708] U8X8_FONT_SECTION("u8x8_font_open_iconic_embedded_8x8") = "@P\10\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\374\376\376\376" "\377\377\377\377\377\377\377\377\376\376\376\374\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\376\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\360\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\370\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\370\340\300\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300" "\200\0\0\0\360\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\37\77\177" "\177\377\377\377\377\377\377\177\177\77\37\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0\0\0\0\0\300\360\376" "\377\377\377\377\377\377\377\377\376\360\300\0\0\0\0\0\0\0\0\0\0\200\200\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0x\374\376\377\377\377\377\377\377\377\376\376\374\374\374\374\374\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\374\374\374\374\374\376\376\377\377\377\377\377\377\377\376\374x\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\1\17\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\37" "\37\17\17\17\17\17\17\37\37\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\7\1\0\0\0\0" "\0\0\0\0\360\370\370\370\374\374\376\376\377\377\377\377\377\377\377\377\377\377\377\377\37\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\37\377\377\377\377\377\377\377\377\377\377\377\377\376\376\374\374" "\370\370\370\360\17\37\37\77\77\77\177\177\377\377\377\377\377\377\377\377\377\377\377\377\370\300\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\370\377\377\377\377\377\377\377\377\377\377\377\377\177\177\77\77" "\77\37\37\17\0\0\0\0\0\0\0\0\200\340\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\370" "\370\360\360\360\360\360\360\370\370\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\340\200\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\36\77\177\377\377\377\377\377\377\377\177\177\177\77\77\77\77\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\77\77\77\77\177\177\177\377\377\377\377\377\377\377\177\77\36\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\0\0\0\0\0\0\0\0\0\0\3\37\177" "\377\377\377\377\377\377\377\377\177\37\3\0\0\0\0\0\0\0\0\0\0\1\1\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376" "\377\377\377\377\377\377\377\377\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\377\377\377" "\377\377\377\377\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\340\374\377\377\377\377\377\377\377\377\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "\370\377\377\377\377\377\377\377\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\37\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\77\377\377\377\377\377\377\377" "\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\177\177\77\37\17" "\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\360\370" "\370\374\376\377\377\376\374\370\370\360\340\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\360\360\370\374\376\376\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376\374\370\360\360\340\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300\340\340\360\370\374\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\374\370\360\340" "\340\300\200\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\376\374\370\360\340\300\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\376\374\370\360" "\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340" "\360\370\374\376\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\177\77\37\17" "\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17" "\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\374\374\340" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\370\377\377\377\377\377" "\377\370\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\374\377\377\377\377\377\377\377" "\377\377\377\374\340\0\0\0\0\0\0\0\200\340\374\377\374\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\360\376\377\377\377\377\377\377\17\17\177" "\377\377\377\377\377\377\370\300\0\200\360\374\377\377\377\377\377\377\377\377\376\370\340\300\300\300\300\300\300\300\300\300" "\300\300\300\300\77\77\77\77\77\77\77\77\77\77\377\377\377\377\377\377\377\377\377\377\377\377\77\7\0\0\0\0" "\3\77\377\377\377\377\377\377\376\377\377\377\377\377\377\77\17\37\77\77\77\77\77\77\77\77\77\77\77\77\77\77" "\77\77\77\77\0\0\0\0\0\0\0\0\0\0\1\17\177\377\377\377\377\377\377\377\17\1\0\0\0\0\0\0" "\0\0\1\17\177\377\377\377\377\377\377\377\37\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\77\377\377\77\7\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\3\77\377\177\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\377\377\377\377" "\377\377\377\377\374\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\374\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\376\370\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\376\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\374\360\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\376\370\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\374\360\200\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\340\370\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\370\300\0\0\0\0\0\0\0\0" "\0\0\0\0\300\360\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\374\340\200\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\200\300\340\360\360\370\374\374\376\376\376\376\377\177\77\37\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\374\376" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340" "\360\370\374\376\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\177\77\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\177\177\177\177\377\377\377\377\377\377\377\377\377\177\177\177\77\77\37\17\17\7\3\1" "\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340\370\374\376\77\37\17\17\17\17\37\77\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\7\37\77\177|\370\360\360\360\360\370|\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\376\374\370" "\370\360\340\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\0\0\0\0\0\377\377\377\377\377\377\377\377" "\17\37\77\77\177\377\377\377\376\374\374\370\360\340\340\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\30<~\377\377\377\377\376\374\370\360\377\377\377\377\377\377\377\377" "\0\0\0\0\0\0\0\201\303\303\347\377\377\377\377\377\377\377\377~<<\30\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377" "\360\370\374\374\376\377\177\177\77\37\37\17\7\7\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377" "\17\37\77\77\177\377\377\376\376\374\370\370\360\340\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\30<~\377\377\377\377\177\77\37\17\377\377\377\377\377\377\377\377" "\0\0\0\0\0\0\0\201\303\303\347\377\377\377\377\377\377\377\377~<<\30\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0\0\0\377\377\377\377\377\377\377\377" "\360\370\374\374\376\377\377\377\177\77\77\37\17\7\7\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\177\77\37" "\37\17\7\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\340\360\370\370\370\374\374\376\376\376\376\377\377" "\377\377\377\377\377\377\377\377\377\377\376\376\376\376\374\374\370\370\360\360\340\340\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\1\1\1\3\3\3\7\17\17\37\77\177\377\377\377\377\377\376\374\370\340\300\0" "\0\0\0\0\0\300\360\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\37\377\377\377\377\377\377" "\374\360\300\0\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\377\377\377\377" "\377\377\377\374\77\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\377\377\377\377" "\377\377\377\77\0\3\17\77\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\377\377\377\377\377\377" "\77\17\3\0\0\0\0\0\0\3\7\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\200\200\200\300\300\300\340\360\360\370\374\376\377\377\377\377\377\177\77\17\7\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\7\17\17\37\37\77\77\177\177\177\177\377\377" "\377\377\377\377\377\377\377\377\377\377\177\177\177\177\77\77\37\37\17\17\7\7\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\0\0\0\0" "\0\0\0\0\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\303\201\0\0\0\0\201\303\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\340\340\360\360" "\370\370\374\374\376\376\377\377\377\377~<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\360\370\370\374\374\376\376\377\377\377\377\177\177\77\77\37\37" "\17\17\7\7\3\3\1\1\200\200\300\300\340\340\360\360\360\360\340\300\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\7\17\17\17\17\17\7\7\3\3\1\1\200\200\300\300\340\340\360\360" "\370\370\374\374\376\376\377\377\377\377\177\177\77\77\37\37\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\360\370\370\374\374\376\376\377\377\377\377\177\177\77\77\37\37" "\17\17\7\7\3\3\1\1\200\200\300\300\340\340\360\360\360\360\340\300\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\7\17\17\17\17\17\7\7\3\3\1\1\200\200\300\300\340\340\360\360" "\370\370\374\374\376\376\377\377\377\377\177\177\77\77\37\37\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0<~\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377~\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30~\377\377\377\377\377\377\377" "\377\377\377\377\377\377~<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\360\360\300\200\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\200\300\360\360\340\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\340\370\374\376\377\377\377\377\177\77\37\17\7\7\2\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\2\7\17\17\37\77\177\377\377\377\377\376\374\370\340\200\0\0\0\0\0\0\0" "\0\0\0\0\200\370\377\377\377\377\377\377\177\17\3\1\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\377\377\377\377\377\377\376\370\200\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\1\37\377\377\377\377\377\377\377\360\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\377\377\377\377\377\377\177\37\1\0\0\0\0" "\0\0\0\0\0\0\0\3\7\37\77\177\377\377\377\377\376\374\370\360\360\340\300\300\200\200\200\200\0\0\0\0" "\0\0\0\0\200\200\200\200\300\300\340\360\360\370\374\376\377\377\377\377\177\77\37\7\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\17\37\37\37\77\77\177\177\177\177\377\377\377\377\377" "\377\377\377\377\377\177\177\177\177\77\77\37\37\17\17\7\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\340\360\370\370\370\374\374\376\376\376\376\377\377" "\377\377\377\377\377\377\377\377\377\376\376\376\376\374\374\374\370\370\360\360\340\340\300\200\0\0\0\0\200\300\340\360" "\370\374\376\376\0\0\0\0\0\300\340\370\374\376\377\377\377\377\177\77\77\37\17\7\7\3\3\3\1\1\1\0" "\0\0\0\0\0\0\0\0\0\1\1\1\3\3\7\7\17\37\37\77\377\377\377\377\377\376\376\377\377\377\377\377" "\377\377\377\377\0\300\360\376\377\377\377\377\377\177\37\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\374\377\377\377\377\377\377\377\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\77\377\377\377\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\3\17\77\377\377\377\377\377\376\370\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\3\7\37\77\177\377\377\377\377\376\374\374\370\360\340\340\300\300\300\200\200\200\0" "\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\340\360\360\370\374\376\374\370\360\340\300\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\7\17\17\37\37\77\77\177\177\177\177\377\377" "\377\377\377\377\377\377\377\377\377\377\177\177\177\177\77\77\77\37\37\17\17\7\3\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\200\300\300\340\340\360\360\360\370\370\374\374\374\374\376\376\376\376\376\376\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\376\376\376\376\376\374\374\374\374\370\370\370\360\360\340\340\300\300\200\200\0\0" "\0\0\0\0\1\7\37\77\177\77\77\37\37\17\17\7\7\7\3\3\3\1\1\1\1\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\3\3\3\7\7\7\17\17\37\37\77\77\177\77\37\7\3" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 p\360\370\370\374\374\376\376\376\376\377\377\377\377" "\377\377\377\377\377\377\377\376\376\376\376\376\374\374\370\370\360\360 \0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\17\7\3\3\3\1\1\1\0\0\0" "\0\0\0\0\0\0\0\1\1\1\3\3\3\7\7\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\374\376\376\377" "\377\377\377\377\377\376\376\374\370\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\37\77\177\177\377" "\377\377\377\377\377\177\177\77\37\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: open_iconic_play_8x Copyright: https://github.com/iconic/open-iconic, SIL OPEN FONT LICENSE Glyphs: 18/18 BBX Build Mode: 3 */ const uint8_t u8x8_font_open_iconic_play_8x8[9220] U8X8_FONT_SECTION("u8x8_font_open_iconic_play_8x8") = "@Q\10\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\200\300\300\340\340\360\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\340\340\360\360\370\370\374" "\374\376\376\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\1\17\177\377\377\377\377\377\377\377\307\3\3\7\7\17\17\37\37\77" "\77\177\177\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\77\377\377\377\377\377\377\374\340\200\0\0\0\0\0" "\0\0\0\0\0\1\1\3\3\7\7\17\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\77\177\377\377\377\377\177<\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300" "\360\370\374\376\376\374\370\360\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\370\376\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\376\370\360\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370\374\376\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\340\300\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\340\360\370\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\374\370\360\340\200\0\0\0" "\0\0\0\0\200\300\340\360\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374" "\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\360\370\374\374\374\376\376\376\377" "\377\377\377\377\377\377\377\377\377\376\376\376\374\374\374\370\360\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\374\376\377\377\377\377\177\77\37\17\7\3\3\1\1\1" "\0\0\0\0\0\0\0\0\1\1\1\3\3\7\17\37\77\177\377\377\377\377\376\374\360\340\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\370\377\377\377\377\377\377\377\17\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\377\377\377\377\377\377\377\370\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\376\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\77\177\377\377\377\377\377\377\377\377\377\377\377\377\177\77\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\177\377\377\377\377\377\377\377\377\377\377" "\377\377\177\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\376\376\374\374\370\370\360\360\340\340\300\300\200\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376\374" "\374\370\370\360\360\340\340\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376\374\374\370\370\360\360\340\340\300\300\200\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\177\177\77\77\37\37\17\17\7\7\3\3\1\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\177\77" "\77\37\37\17\17\7\7\3\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\177\177\77\77\37\37\17\17\7\7\3\3\1\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\360\370\374\374\374\376\376\376\377" "\377\377\377\377\377\377\377\377\377\376\376\376\374\374\374\370\360\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\360\340\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\370\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\370\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\37\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\37\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\17\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\17\7\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\17\37\77\77\77\177\177\177\377" "\377\377\377\377\377\377\377\377\377\177\177\177\77\77\77\37\17\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\360\370" "\370\374\376\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\360\370" "\370\374\376\377\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\360\360\370\374\376\376\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\360\360\370\374\376\376\377\377\377\377\377\377\377" "\377\377\377\377\0\200\300\340\340\360\370\374\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\200\300\340\340\360\370\374\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\1\3\7\7\17\37\77\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\1\3\7\7\17\37\77\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\17\17\37\77\177\177\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\17\17\37\77\177\177\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\17\37" "\37\77\177\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\17\37" "\37\77\177\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\376\374\370\370\360\340\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\376\374\370\370\360\340\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\376\376\374\370\360\360\340\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\376\376\374\370\360\360\340\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\374\370\360\340" "\340\300\200\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\374\370\360\340" "\340\300\200\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\77\37\17\7" "\7\3\1\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\77\37\17\7" "\7\3\1\0\377\377\377\377\377\377\377\377\377\377\377\177\177\77\37\17\17\7\3\1\1\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\177\177\77\37\17\17\7\3\1\1\0\0\0\0\0\0\0" "\0\0\0\0\377\177\77\37\37\17\7\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\177\77\37\37\17\7\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\340\360\370\370\374\374\376\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\200\200\300\300\340\360\360\370\370\374\376\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\200\200\300\340\340\360\360\370\374\374\376" "\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\1\1\3\7\7\17\17\37\77\77\177" "\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\1\1\3\3\7\17\17\37\37\77\177\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\17\37\37\77\77\177\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\376\374\374\370\370\360\340\340\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376\374\370\370\360\360\340\300\300\200\200\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376" "\376\374\374\370\360\360\340\340\300\200\200\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177" "\177\77\77\37\17\17\7\7\3\1\1\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\177\77\37\37\17\17\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\177\77\77\37\37\17\7\7\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\374\376" "\376\377\377\377\377\377\377\376\376\374\370\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\374\376\377\377\377\377\376\374\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\374\376\377\377\377\377\376\374\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\17\377\377\377\377\377\377\377\370\300\0\0\0\0\0\0\7\37\77\177" "\177\377\377\377\377\377\377\177\177\77\37\7\0\0\0\0\0\0\200\340\377\377\377\377\377\377\377\37\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\177\377\377\377\377\377\374\370\360\340\340\300\200\200\200" "\0\0\0\0\0\0\0\0\200\200\200\300\300\340\360\370\374\376\377\377\377\377\177\77\37\7\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\17\37\37\77\77\177\177\177\177" "\377\377\377\377\377\377\377\377\377\177\177\177\77\77\37\37\17\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\374\376\376\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376\374\370\340\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\340\340\360\360\360\360\370" "\370\370\370\374\374\374\374\374\374\374\376\376\376\376\376\376\376\376\376\376\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\17\17\17\7" "\7\7\7\3\3\3\3\3\3\3\1\1\1\1\1\1\1\1\1\1\1\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\370\374\376\376\376\377\377\377\377\377\377\376\377\377\377\377" "\377\377\377\377\0\300\340\360\370\374\376\376\376\377\377\377\377\377\377\376\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0~\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\177~\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\37\77\177\177\177\377\377\377\377\377\377\177\177\177\77\37" "\17\7\3\0\0\3\7\17\37\77\177\177\177\377\377\377\377\377\377\177\177\177\77\37\17\7\3\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\340\360\370\370\370\374\374\376\376\376\376\377\377" "\377\377\377\377\377\377\377\377\377\377\376\376\376\376\374\374\370\370\370\360\340\340\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\340\300\0" "\0\0\0\0\0\300\360\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\1\3\3" "\7\17\17\37\77\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\376\360\300\0\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\1\3\3\7\17\17\37\77\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\374\77\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\300\340\360\360\370\374\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\77\0\3\17\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\200\300\300" "\340\360\360\370\374\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\177\17\3\0\0\0\0\0\0\3\7\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\7\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\7\17\37\37\37\77\77\177\177\177\177\377\377" "\377\377\377\377\377\377\377\377\377\377\177\177\177\177\77\77\37\37\37\17\7\7\3\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\370\374\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\376\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\376\376\376\374\374\374\370\370\360\340\300\200\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\3\3\7\17\37\77\177\377\377\377\377\376\374" "\360\340\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\376\376\374\370\340\0\0\0\0\0\0\1\17\377\377\377\377" "\377\377\377\370\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\177\177\77\37\7\0\0\0\0\0\0\200\360\377\377\377\377" "\377\377\377\37\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\340\360\370\374\376\377\377\377\377\177\77" "\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\37\177\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\177\177\177\77\77\77\37\17\17\7\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\37\77\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\300\340\370\374\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370" "\376\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\376\376\374\370\340\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\177\177\77\37\7\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\37" "\177\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\3\7\37\77\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\300\340\370\374\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\200\300\360\370\376\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\1\3\17\37\177\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\3\7\37\77\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: open_iconic_thing_8x Copyright: https://github.com/iconic/open-iconic, SIL OPEN FONT LICENSE Glyphs: 19/19 BBX Build Mode: 3 */ const uint8_t u8x8_font_open_iconic_thing_8x8[9732] U8X8_FONT_SECTION("u8x8_font_open_iconic_thing_8x8") = "@R\10\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370" "\374\376\377\377\377\377\376\374\370\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\376\377\377\377\377\377" "\77\37\17\7\7\17\37\77\377\377\377\377\377\376\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\370\374\376\377\377\377\377\177\77\17\7\3\1\0" "\0\0\0\0\0\0\0\0\0\1\3\7\17\77\177\377\377\377\377\377\374\370\360\340\300\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\3\1\0\0\0\0\1\3\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\3\1\0\0\0\0\1\3\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\300\200\0\0\0\0\200\300\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\300\200\0\0\0\0\200\300\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\374\376\376\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376\374\370\340\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\177\77\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\200\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\376\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\200\300\340\360\360\370\374\374\376\376\376\376\377\377\377\377\377\377\377\377\376\376\376\376\374\374\370\360\360\340\300\200" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\374\376" "\377\377\377\377\377\377\377\377\377\377\377\377\37\7\3\1\1\0\0\0\0\0\0\1\1\3\7\37\377\377\377\377" "\376\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\370\340\300\200\200\0\0\0\0\0\0\200\200\300\340\370\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\177\77\17\0\0\0\0\0\0\0\0\0\0\200\300\340\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\177\177\177\77\77\37\17\17\7\3\1" "\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\374\376\376\376" "\377\377\377\377\377\377\377\377\376\376\376\374\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\376\377\377\377\377\377\377\37\7\3\1" "\1\0\0\0\0\0\0\1\1\3\7\37\377\377\377\377\377\377\376\360\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300" "\340\360\370\370\374\376\376\376\377\377\377\377\377\377\377\377\376\376\374\374\370\370\360\340\300\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377" "\377\177\77\37\17\7\3\1\1\0\0\0\0\0\0\1\1\3\7\37\377\377\377\377\377\377\374\340\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\177\77\37\17\7\3\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370\377\377\377\377\377\377\77\7\0\0\0\0" "\0\0\0\0\0\0\0\300\340\360\374\376\377\377\377\377\377\177\77\37\17\7\203\301\340\360\370\374\376\374\370\360" "\340\300\0\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\177\77\37\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\300\374\377\377\377\377\377\377\77\17\3\1\0\0\300\370\374\377\377\377\377\377\177\77\37\17\7\3" "\201\300\340\360\370\374\376\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\77\377\377\377\377\377\377\377\300\0\0\0\0\0\3\17\77\177\377\377\377\377\376\374\374\374\376\377" "\377\377\177\77\77\37\17\7\203\301\340\360\370\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\3\17\77\177\377\377\377\377\376\374\360\340\340\300\200\200\200\0\0\1\1\3\3\3\3\201\201" "\201\300\340\340\370\374\376\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\3\3\7\17\37\37\77\77\177\177\177\177\377\377\377\377\377\377\377\377\177\177" "\177\177\77\77\37\37\17\7\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\374\376\376\377\377\377\377\377\377\376" "\376\374\370\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\377\377\377\377\377\377\377\377\377\377" "\377\377\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\374\374\374\374\376\376\377\377\377\377\377\376" "\376\374\370\340\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\77\77\77\77\177\177\377\377\377\377\377\177" "\177\77\37\7\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\37\7\3\1\1\0\0\0\0\0\0\1" "\1\3\7\37\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\374\360\0\0\0\0\0\0\0\0\0\0" "\0\0\360\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\360\360\370\374\374\376\377" "\376\374\70\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\300\300\340\360\370\370\374\376\376\377\377\377\377\377\377\377\377\177\37\17\7" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\300\340\340\360\370\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\17\7\3\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1" "\3\3\7\7\17\37\77\177\377\377\377\377\377\377\377\377\377\77\37\17\3\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\370\374\376\376\377\377\377\377\377\377\377\376\376\374" "\370\360\340\200\0\0\0\0\0\3\17\37\17\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\300\360\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\77\37\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\60\60x|~\177\377\377\377\377\377\377\377\377\177\177\177\77\77\77\37\17\17\7\3\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340" "\360\374\376\376\376\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\374\376\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\376\374\360\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\376\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\370\360\300\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\374\360\300\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\340\376\377\377\377\377\377\377\377\177\77\77\77\77\177\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\340\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\177\377\377\377\377\377\377\377\300\0\0\0\0\0\0\0\17\77\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\77\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\377\377\377\377\374\360\340\300\200\200\0\0\0\0" "\1\1\3\3\3\3\7\17\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\77\17\3\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\77\177\177\377\377\377\377\376\376" "\376\374\374\374\374\376\376\377\377\377\377\377\377\377\177\177\77\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\177\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\360\370\370\374\374\374\376\376\376\376\377\377\377\377\377" "\377\377\377\377\377\377\376\376\376\374\374\374\370\370\360\340\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\370\374\376\377\377\377\377\177\77\37\17\17\7\3\3\1\1\1\1\0\0\0\0" "\0\0\0\0\1\1\1\1\3\3\7\17\17\37\77\177\377\377\377\377\376\374\370\340\300\0\0\0\0\0\0\0" "\0\0\0\0\200\370\377\377\377\377\377\377\177\17\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\377\377\377\377\377\377\377\370\300\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\1\37\377\377\377\377\377\377\376\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\376\377\377\377\377\377\177\37\1\0\0\0\0" "\0\0\0\0\0\0\0\3\7\37\77\177\377\377\377\377\376\374\370\360\340\340\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\200\200\200\300\300\340\340\360\370\374\376\377\377\377\377\377\377\377\377\377\374\370\360\340\300\200\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\17\37\37\37\77\77\177\177\177\177\377\377\377\377\377" "\377\377\377\377\377\177\177\177\177\77\77\77\37\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\376\374\370\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\177\177\377\377\377\377\377\377\377" "\177\177\77\17\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\77\37\17\17" "\17\17\37\77\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\374\370\360\360" "\360\360\370\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300\340\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\1\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\370\360\340\300\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\374\374\376\376\377\377\377" "\377\377\377\376\376\374\374\370\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\376\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0<~\377\377\377\377\376\376\374\374\370\370\360\360\340\340\341\347\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\347\341\340\340\360\360\370\370\374\374\376\376\377\377\377\377~<\0\0\0\0" "\0\0\0\0\0\0\0\0\1\1\3\3\3\7\307\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\307\7\3\3\3\1\1\0\0\0\0\0\0\0\0" "\0\0\0\0<~\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\3\1\0\0" "\0\0\1\3\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377~<\0\0\0\0" "\0\0\0\0\0\0\0\0\200\200\300\300\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\300\300\200\200\0\0\0\0\0\0\0\0" "\0\0\0\0|\376\377\377\377\377\177\177\77\77\37\77\177\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\177\77\37\77\77\177\177\377\377\377\377\376~\70\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\17\37\37\37\17\7\3\0\0\0\0" "\0\0\0\0\1\7\17\37\37\37\17\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\36\374\374\370\360\340\300\200\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\377\377\377\377\377\377\377\377\377\376\374" "\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\340\360\370\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\177\17\0\0\0\0\0\0\0\0\0\36\374\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\360\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\37\17" "\7\1\0\0\0\0\0\0\0\0\200\300\360\377\377\377\377\377\377\377\377\377\376\374\360\300\0\0\0\0\0\0" "\0\0\0\0\37\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\3\1\0\0\0\0" "\0\0\0\0\200\300\340\370\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\370\0\0\0\0" "\0\0\0\0\0\0\3\17\77\177\377\377\377\377\377\377\377\377\377\37\3\1\0\0\0\0\0\0\0\0\200\340" "\360\370\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\77\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\77y\200\0\0\0\0\0\0\0\0\360\376\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\3\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\374\376\376\376" "\377\377\377\377\377\377\377\377\376\376\376\374\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\376\377\377\377\377\377\377\37\7\3\1" "\1\0\0\0\0\0\0\1\1\3\7\37\377\377\377\377\377\377\376\360\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\376\374\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\177\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\340\370\374\376\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376\374\370\340\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\30~\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377~<\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340\370\374\376\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376\374\370\340\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\77\177" "\77\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\77\37\17\17" "\17\17\37\77\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\374\370\360\360" "\360\360\370\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\0\0\0\0" "\0\0\0"; /* Fontname: open_iconic_weather_8x Copyright: https://github.com/iconic/open-iconic, SIL OPEN FONT LICENSE Glyphs: 6/6 BBX Build Mode: 3 */ const uint8_t u8x8_font_open_iconic_weather_8x8[3076] U8X8_FONT_SECTION("u8x8_font_open_iconic_weather_8x8") = "@E\10\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\360\370\374\374" "\376\376\376\376\377\377\377\377\377\377\377\377\376\376\376\376\374\374\370\360\360\340\300\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\360\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\360\370\374\374\376\376\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\360\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376\374" "\370\360\300\0\17\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377~\0\0\1\3\7\17\37\77\77\177\177\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\177\177\77\37" "\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360\360\370\374\374\376\376\376\376\377\377\377\377\377\377\377\377\376\376\376\376" "\374\374\370\360\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\360\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\37\17\7\7\3\3\3\1" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\377\377\377\377\77\17\7\3\1\0\0\0\0\200\300\340\360\360\370\374\374" "\376\376\376\376\377\377\377\377\377\377\377\377\376\376\376\376\374\374\370\360\360\340\300\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\7\17\7\7\3\3\3\1\1\0\0\0\0\0\0\300\360\374\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\360\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\360\370\374\374\376\376\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\360\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376\374" "\370\360\300\0\17\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377~\0\0\1\3\7\17\37\77\77\177\177\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\177\177\77\37" "\17\7\3\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\360\370\374\374\376\376\37\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\360\370\374\376\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\340\374\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\360\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\370\360\300\200" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\17\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\376\374\370\360\360\340\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\7\37\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376\376\374\374\374\374\374\374\374\374\374\374\374\374\374\376>" "\36\2\0\0\0\0\0\0\0\0\3\7\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\17\17\17\37\37\37\77\77\77" "\77\77\77\77\77\77\77\77\77\77\77\37\37\37\17\17\17\7\7\3\3\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\360\370\374\374" "\376\376\376\376\377\377\377\377\377\377\377\377\376\376\376\376\374\374\370\360\360\340\300\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\374\360\200\0\0\0\0" "\0\0\0\0\0\0\200\300\340\360\370\374\374\376\376\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\360\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\376\374" "\370\360\300\0\17\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\77\37\17\7\3\1\1\1\0\0\0" "\0\0\0\1\1\1\3\7\17\37\77\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\0\0\0\3\3\3\1\1\0\0\0\0\0\0\0\1\1\0\0\0\0\0\0\0\374\376\377\377" "\377\377\376\374\0\0\0\0\0\0\0\1\1\0\0\0\0\0\0\1\1\1\3\7\17\37\77\177\177\177\77\37" "\17\7\3\0\0\0\0\0\0\0\0\0\374\376\377\377\377\377\376\374\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\377\0\0\0\0\0\0\0\0\374\376\377\377\377\377\376\374\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\77\177\377\377\377\377\177\77\0\0\0\0\0\0\0\0\77\177\377\377" "\377\377\177\77\0\0\0\0\0\0\0\0\77\177\377\377\377\377\177\77\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\340\374\374\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "\370\377\377\377\377\377\377\370\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\376\377" "\377\377\377\377\377\377\377\377\377\376\360\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\1\3\7\17\17\37\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\17" "\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\17\37\77\177\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\77\37\17\17\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\374\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\374\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\377\377\377\377\177\77\37\17\17" "\7\3\1\0\0\1\3\7\17\17\37\77\177\377\377\377\377\377\377\370\300\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0p>\37\17\17\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\17\37>p\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "<~\377\377\377\377~<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0<~\377\377\377\377~<\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0<~\377\377\377\377~<\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\374\376\376\376" "\377\377\377\377\377\377\377\377\376\376\376\374\374\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\340\360\360\360\360\340\300\0\0\0\0\0\0\0\0\360\376\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\376\360\0\0\0\0\0\0\0\0\300\340\360\360" "\360\360\340\300\3\7\17\17\17\17\7\3\0\0\0\0\0\0\0\0\17\177\377\377\377\377\377\377\377\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\177\17\0\0\0\0\0\0\0\0\3\7\17\17" "\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\77\77\177\177\177" "\377\377\377\377\377\377\377\377\177\177\177\77\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0<~\377\377\377\377~<\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0<~\377\377\377\377~<\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "<~\377\377\377\377~<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: ProFont29 Copyright: ProFont Distribution 2.2 Generated by Fontographer 4.1.5 Glyphs: 224/256 BBX Build Mode: 3 */ const uint8_t u8x8_font_profont29_2x3_f[10756] U8X8_FONT_SECTION("u8x8_font_profont29_2x3_f") = " \377\2\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0" "\0\0\0\0\0\0\77\77\77\0\0\0\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\34\34\34\377\377\377\34\34\34\377\377\377" "\34\34\34\0\7\7\7\77\77\77\7\7\7\77\77\77\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0p\374\376\216\7\377\377\377\7\16><\60\0\0\0`\341\343\203\7\377\377\377\7\216\376\374" "p\0\0\0\0\1\3\3\7\77\77\77\7\3\3\1\0\0\0\0p\374\376\7\7\377\377\367\307\347\367\177" "\77\37\0\0\300\341\363\177\77\177\377\377\7\7\375\374p\0\0\0\7\7\7\0\0\0\1\3\7\7\3\1" "\0\0\0\0p\374\376\216\207\307\347\367~>\34\0\0\0\0\0p\375\377\217\17\37=\370\360\340\360\370" "<\30\0\0\0\1\3\3\7\7\7\3\3\1\3\7\7\2\0\0\0\0\0\0\0\77\77\77\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\370\374\376\17\7\3\1\0\0\0\0\0\0\0\0\0\377\377\377\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\1\3\7\17\36<\70\20\0\0\0\0\0\0\0\0\1\3\7\17\376\374\370\0" "\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\0\0\0\0\0\0\0\20\70<\36\17\7\3\1\0\0" "\0\0\0\0\20\70\70\360\340\376\376\376\360\360\70\70\20\0\0\0\2\7\7\3\3\77\77\77\3\3\7\7" "\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\0\0\0\0" "\0\0\0\0\7\7\7\7\7\377\377\377\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0" "\0\0\0\0\0\0\0@\341\363\177\77\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0" "\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\77" "\17\3\0\0\0\0\0\0\300\360\374\77\17\3\0\0\0\0\0\0\300\360\374\77\17\3\0\0\0\0\0\0" "\0\0\0\0\360\374\376\16\7\7\7\207\307\347\376\376\374\360\0\0\177\377\377\370<\36\17\7\3\1\200\377" "\377\177\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1\0\0\0\0\70\70\70<\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7" "\7\0\0\0\60<>\16\7\7\7\7\7\7\216\376\374p\0\0\0\0\200\300\340\360x<\36\17\7\3" "\1\0\0\0\6\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0\60<>\16\7\7\7\7\7\207\216\376" "\374p\0\0`\340\340\200\0\0\7\7\7\17\217\375\370p\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\0\200\300\340\360x<\36\377\377\377\0\0\0\0\0\37\37\37\35\34\34\34\34\377\377\377\34" "\34\34\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\0\0\377\377\377\347\347\347\347\347\347\347\307\307" "\207\7\0\0`\340\340\200\0\0\0\0\0\0\201\377\377~\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\360\374\376\356\347\347\347\347\347\347\307\300\200\0\0\0\177\377\377\200\0\0\0\0\0\0\201\377" "\377~\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1\0\0\0\7\7\7\7\7\7\7\7\7\207\307\377" "\377\177\0\0\0\0\0\0\0\370\374\376\17\7\3\1\0\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0" "\0\0\0\0p\374\376\216\207\7\7\7\7\207\216\376\374p\0\0p\370\375\217\17\7\7\7\7\17\217\375" "\370p\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1\0\0\0\360\374\376\16\7\7\7\7\7\7\16\376" "\374\360\0\0\3\17\37\34\70\70\70\70\70\70\270\377\377\177\0\0\0\0\0\7\7\7\7\7\7\7\3\3" "\1\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0\0\0\0\0\0\0\0\0\301\343\343\343\301\0\0\0" "\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0" "\0\0\0\0\0\0\0\0\301\343\343\343\301\0\0\0\0\0\0\0\0\0\0@\341\363\177\77\37\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360x<\36\17\7\2\0\0\0\0\2\7\17\37=x\360\340\300\200" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\2\0\0\340\340\340\340\340\340\340\340\340\340\340\340" "\340\340\0\0\70\70\70\70\70\70\70\70\70\70\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\2\7\17\36\16\7\7\7\7\7\7\216\376" "\374\360\0\0\0\0\0\0\0\60\70<\36\17\7\3\1\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0" "\0\0\0\0\360\374\376\16\7\207\307\347\347\347\356\376\374\360\0\0\177\377\377\200\0\17\37\77\70\70\70\77" "\37\17\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\0\0\0\0\300\360\374\77\17\17\77\374\360\300" "\0\0\0\0\374\377\377;\70\70\70\70\70\70;\377\377\374\0\0\7\7\7\0\0\0\0\0\0\0\0\7" "\7\7\0\0\377\377\377\7\7\7\7\7\7\207\216\376\374p\0\0\377\377\377\7\7\7\7\7\7\17\217\375" "\370p\0\0\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0\360\374\376\16\7\7\7\7\7\7\16>" "<\60\0\0\177\377\377\200\0\0\0\0\0\0\200\340\340`\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\377\377\377\7\7\7\7\7\7\7\16\376\374\360\0\0\377\377\377\0\0\0\0\0\0\0\200\377" "\377\177\0\0\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0\377\377\377\7\7\7\7\7\7\7\7\7" "\7\7\0\0\377\377\377\7\7\7\7\7\7\7\7\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\377\377\377\7\7\7\7\7\7\7\7\7\7\7\0\0\377\377\377\7\7\7\7\7\7\7\7\0" "\0\0\0\0\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\360\374\376\16\7\7\7\7\7\7\16>" "<\60\0\0\177\377\377\200\0\0\0\0\7\7\207\377\377\177\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\377\377\377\0\0\0\0\0\0\0\0\377\377\377\0\0\377\377\377\7\7\7\7\7\7\7\7\377" "\377\377\0\0\7\7\7\0\0\0\0\0\0\0\0\7\7\7\0\0\7\7\7\7\7\377\377\377\7\7\7\7" "\7\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0x\370\370\200\0\0\0\0\0\0\200\377" "\377\177\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1\0\0\0\377\377\377\200\300\340\360x<\36\17\7" "\3\0\0\0\377\377\377\17\37=x\360\340\300\200\0\0\0\0\0\7\7\7\0\0\0\0\0\1\3\7\7" "\6\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0\377\377\377\36" "<\60\0\0`\341\343\203\7\7\7\7\7\7\216\376\374p\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\7\7\7\7\7\377\377\377\7\7\7\7\7\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\377" "\377\377\0\0\177\377\377\200\0\0\0\0\0\0\200\377\377\177\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\177\377\377\200\0\0\0\0\0\0\200\377\377\177\0\0\0\1\7\37~\370\340\340\370~\37\7" "\1\0\0\0\0\0\0\0\0\1\7\7\1\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0" "\377\377\377\0\377\377\377\300\340\360\177\77\177\360\340\340\377\377\377\0\7\7\7\3\1\0\0\0\0\0\1\3" "\7\7\7\0\37\77\177\360\340\300\200\200\300\340\360\177\77\37\0\0\300\340\360x=\37\17\17\37=x\360" "\340\300\0\0\7\7\7\0\0\0\0\0\0\0\0\7\7\7\0\0\377\377\377\200\0\0\0\0\0\200\377\377" "\377\0\0\0\0\1\3\7\17\376\374\376\17\7\3\1\0\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0" "\0\0\0\0\7\7\7\7\7\7\7\207\307\347\367\177\77\37\0\0\300\340\360x<\36\17\7\3\1\0\0" "\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\70\70\70\0" "\0\0\0\0\0\0\3\17\77\374\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\374\360\300" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\374\360\300\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\70\70\70\77\77\77\0\0\0\0" "\0\0\0\0@\340\360x<\36\17\17\36\0\0\0\1\3\3\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\340\340\340\360\374\376\356\347\347\7\7\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0\0\0\0\0\0\200\300\300\340\340\340\340\340\340\340\340" "\340\340\0\0~\377\377\201\0\0\0\0\0\0\0\377\377\377\0\0\0\1\3\343\347\347\347\347\347\347w\177" "\77\17\0\0\377\377\377\340\340\340\340\340\340\340\300\300\200\0\0\0\377\377\377\0\0\0\0\0\0\0\1\377" "\377\376\0\0\7\7\7\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0\340\340\340\347\347\347\0\0\0\0" "\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\0" "\0\0\0\0\0\0\340\340\340\347\347\347\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\340\340\340\340p\177\77\17\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\200\300\340\340`" " \0\0\0\377\377\377x<\36\77\177\363\341\300\200\0\0\0\0\7\7\7\0\0\0\0\0\0\1\3\7" "\7\6\0\0\0\0\7\7\7\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\300" "\300\200\0\0\377\377\377\0\0\0\377\377\377\0\0\1\377\377\376\0\7\7\7\0\0\0\7\7\7\0\0\0" "\7\7\7\0\340\340\340\0\200\300\300\340\340\340\300\300\200\0\0\0\377\377\377\7\3\1\1\0\0\0\1\377" "\377\376\0\0\7\7\7\0\0\0\0\0\0\0\0\7\7\7\0\0\0\200\300\300\340\340\340\340\340\340\300\300" "\200\0\0\0~\377\377\201\0\0\0\0\0\0\201\377\377~\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\340\340\340\340\340\340\340\340\340\340\300\300\200\0\0\0\377\377\377\0\0\0\0\0\0\0\201\377" "\377~\0\0\377\377\377\7\7\7\7\7\7\7\3\3\1\0\0\0\0\200\300\300\340\340\340\340\340\340\340\340" "\340\340\0\0~\377\377\201\0\0\0\0\0\0\0\377\377\377\0\0\0\1\3\3\7\7\7\7\7\7\7\377" "\377\377\0\0\340\340\340\0\200\300\300\340\340\340\300\300\200\0\0\0\377\377\377\7\3\1\1\0\0\0\1\7" "\7\6\0\0\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\340\340\340\340\340\340\340" "\340\340\0\0\7\17\17\35\34\34\34\34\34\34\270\370\360\340\0\0\7\7\7\7\7\7\7\7\7\7\3\3" "\1\0\0\0\0\0\340\340\340\377\377\377\340\340\340\0\0\0\0\0\0\0\0\0\0\177\377\377\200\0\0\0" "\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\0\0\0\340\340\340\0\0\0\0\0\0\0\0\340" "\340\340\0\0\177\377\377\200\0\0\0\200\200\300\340\377\377\377\0\0\0\1\3\3\7\7\7\3\3\1\0\7" "\7\7\0\0\340\340\340\0\0\0\0\0\0\0\0\340\340\340\0\0\3\17\77\374\360\300\0\0\300\360\374\77" "\17\3\0\0\0\0\0\0\3\7\7\7\7\3\0\0\0\0\0\0\340\340\340\0\0\0\340\340\340\0\0\0" "\340\340\340\0\377\377\377\200\0\200\377\377\377\200\0\200\377\377\377\0\0\3\3\7\7\7\3\1\3\7\7\7" "\3\3\0\0\340\340\340\200\0\0\0\0\0\0\200\340\340\340\0\0\0\201\303\347\377~<<~\377\347\303" "\201\0\0\0\7\7\7\1\0\0\0\0\0\0\1\7\7\7\0\0\340\340\340\0\0\0\0\0\0\0\0\340" "\340\340\0\0\177\377\377\200\0\0\0\0\0\0\0\377\377\377\0\0\0\1\3\343\347\347\347\347\347\347w\177" "\77\17\0\0\340\340\340\340\340\340\340\340\340\340\340\340\340\0\0\0\0\200\300\340\360x<\36\17\7\3\1" "\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\200\377\377\377\0\0\0" "\0\0\0\0\0\0\0\7\7\17\375\375\370\0\0\0\0\0\0\0\0\0\0\0\0\0\37\177\177\360\340\340" "\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\200\0\0\0" "\0\0\0\0\0\0\0\0\0\370\375\375\17\7\7\0\0\0\0\0\0\0\340\340\360\177\177\37\0\0\0\0" "\0\0\0\0\0\200\300\300\300\300\200\200\0\0\300\300\300\0\0\0\7\7\7\1\1\3\3\7\7\7\7\3" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\0\0\0\0\0\0\0" "\0\0\0\0\20\70\77\37\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\340\377\377\377\340\340\0\0" "\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\340\340\340\340p\177\77\17\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\0\0\0\300\300\300\0" "\0\0\0\0\20\70\77\37\17\0\20\70\77\37\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\0\0\7\7\7\0\0\7\7" "\7\0\0\0\0\0\70\70\70\377\377\377\70\70\70\0\0\0\0\0\0\0\0\0\0\77\77\77\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70\377\377\377\70\70\70\0" "\0\0\0\0\0\0\7\7\7\77\77\77\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\2\7\7\3\1\1\3\7\7\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\36\177\377\361\340\361\377\377x<\36\17" "\7\3\1\0x<\36\376\377\217\7\217\376\376\217\7\217\376\370\0\0\0\0\0\3\7\7\7\3\3\7\7" "\7\3\0\0p\374\376\216\7\7\7\7\7\7\16><\60\0\0`\341\343\203\7\7\7\7\7\7\216\376" "\374p\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1\0\0\0\0\0\200\200\0\0\0\0\0\0\0\0" "\0\0\0\0\370\376\377\7\1\0\0\0\0\0\0\0\0\0\0\0\0\3\17\17\4\0\0\0\0\0\0\0" "\0\0\0\0\360\374\376\16\7\377\377\377\7\7\7\7\7\7\0\0\177\377\377\200\0\377\377\377\7\7\7\0" "\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\376\377\7\2\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0@\340\377\177\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\376\377\7\2\0\374\376\377\7" "\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0@\340\377\177\77\0@\340\377\177\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\360\370\370\370\370\370\360\360\340" "\200\0\0\0\17\77\177\177\377\377\377\377\377\177\177\77\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\7\7\7\1\1\3\3\7\7\7\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\377\377\377\7\7\377\377\377\36\36" "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300\300\341\343\347\347\343\341\340\340\340\340\0\0\7\17\17\35\34\34\34\34\34\34\270\370" "\360\340\0\0\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0\0\200\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\1\7\377\376\370\0\0\0\0\0\0\0\0\0\0\0\4\17\17\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\300\340\340\340\340\300\300\340\340\340\340\300\0\0\0\377\377\377\0\0\377\377\377\70\70\70\77" "\77\77\0\0\0\3\7\7\7\7\3\3\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\200\0\0\0\0\0\200\377\377" "\377\0\0\0\0\1\3\7\17\376\374\376\17\7\3\1\0\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\347\347\347\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\0" "\0\0\0\0\0\200\300\300\340\374\374\374\340\300\300\200\0\0\0\0~\377\377\201\0\377\377\377\0\1\7\7" "\6\0\0\0\0\1\3\3\7\77\77\77\7\7\7\7\7\0\0\0\376\377\377\341\340\340\340\341\7\7\6\0" "\0\0\0\0\377\377\377\0\0\0\0\0\0\200\340\340`\0\0\0\7\7\7\7\7\7\7\7\7\3\3\1" "\0\0\0\0\200\300\200\0\0\0\0\0\0\0\200\300\200\0\0\0\0\1\203\377\376\356\306\356\376\377\203\1" "\0\0\0\0\2\7\3\1\0\0\0\0\0\1\3\7\2\0\0\0\2\347\357\376\374\370\360\340\360\370\374\376" "\357\347\2\0\0\70\70\70\70\70\377\377\377\70\70\70\70\70\0\0\0\0\0\0\0\0\7\7\7\0\0\0" "\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\0\0\0\0" "\0\0\0\0\0\0\0\0\0\77\77\77\0\0\0\0\0\0\0\0\370\371\373\207\17\36\0\0\3\17\37\34\70\70\70\70\70\31\37\37" "\7\0\0\0\0\0\0\7\7\7\0\0\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\316\306\347\347\347\346\356\16\34|\370" "\340\0\0\0\207\237\37\70\70\70\70\270\200\300\360\377\77\7\0\0\3\3\3\7\7\7\3\3\3\1\1\0" "\0\0\0\0\0\0\3\17\37\34\70\70\70\70\70\77\77\77\0\0\0\0\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\0\0\0\0\0\0\200\200" "\0\0\0\0\370\376\377\7\1\0\0\0\370\376\377\7\1\0\0\0\0\3\17\17\4\0\0\0\0\3\17\17" "\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\356\356\346\347\347\307\306\16\16\34|\370\340\0\0\0\377\377\377\70x\377\377\307\300\300\360\377" "\77\7\0\0\1\1\1\0\0\0\1\1\1\1\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\36\177\377\341\300\300\300\300\341\377\177\36\0\0\0\0\0\0\0\0\1\1\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\0\0\0\0" "\0\0\0\0\7\7\7\7\7\377\377\377\7\7\7\7\7\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7" "\7\0\0\0\0\0\0\0\10\14\12\11\10\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\10\10\10\11\6\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\2\7\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\0\0\0\0\0\300\300\300\0" "\0\0\0\0\377\377\377\0\0\0\0\200\377\377\377\200\0\0\0\0\377\377\377\7\7\7\7\3\3\1\3\3" "\7\7\0\0<\377\377\303\201\377\377\377\0\0\0\377\377\377\0\0\0\0\1\3\3\377\377\377\7\7\7\377" "\377\377\0\0\0\0\0\0\0\7\7\7\0\0\0\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\16\37\37\37\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0g\367\377\177\77\37\0\0\0\0\0\0\0\0\0\0\0\10\10\10\17\10\10\10\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\3\17\37\34\70\70\70\34\37\17\3\0\0\0\0\0\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\0\0\0\0\0\0\200\200\0" "\0\0\0\0\1\7\377\376\370\0\0\0\1\7\377\376\370\0\0\0\4\17\17\3\0\0\0\0\4\17\17\3" "\0\0\0\0\0\10\10\10\17\10\10\10\200@ \20\10\4\2\0\200@ \20\10\4\2\1\300\240\220\210" "\374\200\200\0\0\0\0\0\0\0\0\0\0\0\4\4\7\4\4\0\0\10\10\10\17\10\10\10\200@ \20" "\10\4\2\0\200@ \20\10\4\2\1\10\4\4\204D\70\0\0\0\0\0\0\0\0\0\0\4\6\5\4" "\4\4\0\0\0\0\4\10\10\10\11\6\200@ \20\10\4\2\0\200@ \20\10\4\2\1\300\240\220\210" "\374\200\200\0\0\0\0\0\0\0\0\0\0\0\4\4\7\4\4\0\0\0\0\0\200\300\347\347g\0\0\0" "\0\0\0\0x\374\376\217\7\3\1\0\0\0\200\340\340`\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\0\0\300\360\374\77\17\17\77\374\360\300\0\0\0\0\374\377\377;\70\70\70\70\70\70;\377" "\377\374\0\0\7\7\7\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0\300\360\374\77\17\17\77\374\360\300" "\0\0\0\0\374\377\377;\70\70\70\70\70\70;\377\377\374\0\0\7\7\7\0\0\0\0\0\0\0\0\7" "\7\7\0\0\0\0\300\360\375>\17\17>\375\360\300\0\0\0\0\374\377\377;\70\70\70\70\70\70;\377" "\377\374\0\0\7\7\7\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0\300\360\374\77\17\17\77\374\360\300" "\0\0\0\0\374\377\377;\70\70\70\70\70\70;\377\377\374\0\0\7\7\7\0\0\0\0\0\0\0\0\7" "\7\7\0\0\0\0\300\360\374\77\17\17\77\374\360\300\0\0\0\0\374\377\377;\70\70\70\70\70\70;\377" "\377\374\0\0\7\7\7\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0\300\360\375\77\17\17\77\375\360\300" "\0\0\0\0\374\377\377;\70\70\70\70\70\70;\377\377\374\0\0\7\7\7\0\0\0\0\0\0\0\0\7" "\7\7\0\0\360\374\376\16\7\377\377\377\7\7\7\7\7\7\0\0\377\377\377\7\7\377\377\377\7\7\7\0" "\0\0\0\0\7\7\7\0\0\7\7\7\7\7\7\7\7\7\0\0\360\374\376\16\7\7\7\7\7\7\16>" "<\60\0\0\177\377\377\200\0\0\0\0\0\0\200\340\340`\0\0\0\1C\343\367\177\77\37\7\7\3\3" "\1\0\0\0\377\377\377\7\7\7\7\7\7\7\7\7\7\7\0\0\377\377\377\7\7\7\7\7\7\7\7\0" "\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0\377\377\377\7\7\7\7\7\7\7\7\7" "\7\7\0\0\377\377\377\7\7\7\7\7\7\7\7\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\377\377\377\7\7\7\7\7\7\7\7\7\7\7\0\0\377\377\377\7\7\7\7\7\7\7\7\0" "\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0\377\377\377\7\7\7\7\7\7\7\7\7" "\7\7\0\0\377\377\377\7\7\7\7\7\7\7\7\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\7\7\7\7\7\377\377\377\7\7\7\7\7\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0\0\7\7\7\7\7\377\377\377\7\7\7\7" "\7\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7" "\7\0\0\0\7\7\7\7\7\377\377\377\7\7\7\7\7\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0\0\7\7\7\7\7\377\377\377\7\7\7\7" "\7\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7" "\7\0\0\0\0\0\0\377\377\377\7\7\7\7\16\376\374\360\0\0\7\7\7\377\377\377\7\7\7\0\200\377" "\377\177\0\0\0\0\0\7\7\7\7\7\7\7\3\3\1\0\0\0\377\377\377\36\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\0\0\0\200\300\300\340\340\340\340\340\340\300\300" "\200\0\0\0~\377\377\201\0\0\0\0\0\0\1\7\7\6\0\0\0\1C\343\367\177\77\37\7\7\7\7" "\7\7\0\0\0\200\300\300\341\343\347\347\342\340\300\300\200\0\0\0~\377\377\271\70\70\70\70\70\70\71\77" "\77>\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\0\0\0\200\300\300\340\342\347\347\343\341\300\300" "\200\0\0\0~\377\377\271\70\70\70\70\70\70\71\77\77>\0\0\0\1\3\3\7\7\7\7\7\7\7\7" "\7\7\0\0\0\200\302\307\347\343\341\341\343\347\307\302\200\0\0\0~\377\377\271\70\70\70\70\70\70\71\77" "\77>\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\0\0\0\200\307\307\347\340\340\340\340\347\307\307" "\200\0\0\0~\377\377\271\70\70\70\70\70\70\71\77\77>\0\0\0\1\3\3\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\340\340\341\343\347\347\2\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\0\0\0\0\0\0\0\340\340\342\347\347\343\1\0\0\0" "\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\0" "\0\0\0\0\0\0\342\347\347\343\341\341\3\7\7\2\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\0\0\0\0\0\0\0\347\347\347\340\340\340\7\7\7\0" "\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\0" "\0\0\0\0\0\204\316\317\347\343\347\357\376\374\370\360\340\300\0\0~\377\377\201\0\0\0\0\0\0\201\377" "\377\177\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1\0\0\0\347\347\347\1\201\303\303\347\347\347\307\303" "\201\0\0\0\377\377\377\7\3\1\1\0\0\0\1\377\377\376\0\0\7\7\7\0\0\0\0\0\0\0\0\7" "\7\7\0\0\0\200\300\300\341\343\347\347\342\340\300\300\200\0\0\0~\377\377\201\0\0\0\0\0\0\201\377" "\377~\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1\0\0\0\0\200\300\300\340\342\347\347\343\341\300\300" "\200\0\0\0~\377\377\201\0\0\0\0\0\0\201\377\377~\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\0\200\302\307\347\343\341\341\343\347\307\302\200\0\0\0~\377\377\201\0\0\0\0\0\0\201\377" "\377~\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1\0\0\0\7\207\307\301\341\343\343\347\347\347\307\303" "\201\0\0\0~\377\377\201\0\0\0\0\0\0\201\377\377~\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\0\200\307\307\347\340\340\340\340\347\307\307\200\0\0\0~\377\377\201\0\0\0\0\0\0\201\377" "\377~\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1\0\0\0\0\0\0\0\0\70\70\70\0\0\0\0" "\0\0\0\0\7\7\7\7\7\307\307\307\7\7\7\7\7\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0" "\0\0\0\0\0\200\300\300\340\340\340\340\340\340\300\300\200\0\0\0~\377\377\301\340p\70\34\16\7\203\377" "\377~\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1\0\0\0\340\340\340\0\1\3\7\7\2\0\0\340" "\340\340\0\0\177\377\377\200\0\0\0\200\200\300\340\377\377\377\0\0\0\1\3\3\7\7\7\3\3\1\0\7" "\7\7\0\0\340\340\340\0\0\2\7\7\3\1\0\340\340\340\0\0\177\377\377\200\0\0\0\200\200\300\340\377" "\377\377\0\0\0\1\3\3\7\7\7\3\3\1\0\7\7\7\0\0\340\340\342\7\7\3\1\1\3\7\7\342" "\340\340\0\0\177\377\377\200\0\0\0\200\200\300\340\377\377\377\0\0\0\1\3\3\7\7\7\3\3\1\0\7" "\7\7\0\0\340\340\347\7\7\0\0\0\0\7\7\347\340\340\0\0\177\377\377\200\0\0\0\200\200\300\340\377" "\377\377\0\0\0\1\3\3\7\7\7\3\3\1\0\7\7\7\0\0\340\340\340\0\0\2\7\7\3\1\0\340" "\340\340\0\0\177\377\377\200\0\0\0\0\0\0\0\377\377\377\0\0\0\1\3\343\347\347\347\347\347\347w\177" "\77\17\0\0\377\377\377\340\340\340\340\340\340\340\300\300\200\0\0\0\377\377\377\0\0\0\0\0\0\0\201\377" "\377~\0\0\377\377\377\7\7\7\7\7\7\7\3\3\1\0\0\0\340\340\347\7\7\0\0\0\0\7\7\347" "\340\340\0\0\177\377\377\200\0\0\0\0\0\0\0\377\377\377\0\0\0\1\3\347\347\347\347\347\347\347\367\177" "\77\17\0"; /* Fontname: ProFont29 Copyright: ProFont Distribution 2.2 Generated by Fontographer 4.1.5 Glyphs: 96/256 BBX Build Mode: 3 */ const uint8_t u8x8_font_profont29_2x3_r[4612] U8X8_FONT_SECTION("u8x8_font_profont29_2x3_r") = " \177\2\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0" "\0\0\0\0\0\0\77\77\77\0\0\0\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\34\34\34\377\377\377\34\34\34\377\377\377" "\34\34\34\0\7\7\7\77\77\77\7\7\7\77\77\77\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0p\374\376\216\7\377\377\377\7\16><\60\0\0\0`\341\343\203\7\377\377\377\7\216\376\374" "p\0\0\0\0\1\3\3\7\77\77\77\7\3\3\1\0\0\0\0p\374\376\7\7\377\377\367\307\347\367\177" "\77\37\0\0\300\341\363\177\77\177\377\377\7\7\375\374p\0\0\0\7\7\7\0\0\0\1\3\7\7\3\1" "\0\0\0\0p\374\376\216\207\307\347\367~>\34\0\0\0\0\0p\375\377\217\17\37=\370\360\340\360\370" "<\30\0\0\0\1\3\3\7\7\7\3\3\1\3\7\7\2\0\0\0\0\0\0\0\77\77\77\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\370\374\376\17\7\3\1\0\0\0\0\0\0\0\0\0\377\377\377\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\1\3\7\17\36<\70\20\0\0\0\0\0\0\0\0\1\3\7\17\376\374\370\0" "\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\0\0\0\0\0\0\0\20\70<\36\17\7\3\1\0\0" "\0\0\0\0\20\70\70\360\340\376\376\376\360\360\70\70\20\0\0\0\2\7\7\3\3\77\77\77\3\3\7\7" "\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\0\0\0\0" "\0\0\0\0\7\7\7\7\7\377\377\377\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0" "\0\0\0\0\0\0\0@\341\363\177\77\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0" "\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\77" "\17\3\0\0\0\0\0\0\300\360\374\77\17\3\0\0\0\0\0\0\300\360\374\77\17\3\0\0\0\0\0\0" "\0\0\0\0\360\374\376\16\7\7\7\207\307\347\376\376\374\360\0\0\177\377\377\370<\36\17\7\3\1\200\377" "\377\177\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1\0\0\0\0\70\70\70<\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7" "\7\0\0\0\60<>\16\7\7\7\7\7\7\216\376\374p\0\0\0\0\200\300\340\360x<\36\17\7\3" "\1\0\0\0\6\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0\60<>\16\7\7\7\7\7\207\216\376" "\374p\0\0`\340\340\200\0\0\7\7\7\17\217\375\370p\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\0\200\300\340\360x<\36\377\377\377\0\0\0\0\0\37\37\37\35\34\34\34\34\377\377\377\34" "\34\34\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\0\0\377\377\377\347\347\347\347\347\347\347\307\307" "\207\7\0\0`\340\340\200\0\0\0\0\0\0\201\377\377~\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\360\374\376\356\347\347\347\347\347\347\307\300\200\0\0\0\177\377\377\200\0\0\0\0\0\0\201\377" "\377~\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1\0\0\0\7\7\7\7\7\7\7\7\7\207\307\377" "\377\177\0\0\0\0\0\0\0\370\374\376\17\7\3\1\0\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0" "\0\0\0\0p\374\376\216\207\7\7\7\7\207\216\376\374p\0\0p\370\375\217\17\7\7\7\7\17\217\375" "\370p\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1\0\0\0\360\374\376\16\7\7\7\7\7\7\16\376" "\374\360\0\0\3\17\37\34\70\70\70\70\70\70\270\377\377\177\0\0\0\0\0\7\7\7\7\7\7\7\3\3" "\1\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0\0\0\0\0\0\0\0\0\301\343\343\343\301\0\0\0" "\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0" "\0\0\0\0\0\0\0\0\301\343\343\343\301\0\0\0\0\0\0\0\0\0\0@\341\363\177\77\37\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360x<\36\17\7\2\0\0\0\0\2\7\17\37=x\360\340\300\200" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\2\0\0\340\340\340\340\340\340\340\340\340\340\340\340" "\340\340\0\0\70\70\70\70\70\70\70\70\70\70\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\2\7\17\36\16\7\7\7\7\7\7\216\376" "\374\360\0\0\0\0\0\0\0\60\70<\36\17\7\3\1\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0" "\0\0\0\0\360\374\376\16\7\207\307\347\347\347\356\376\374\360\0\0\177\377\377\200\0\17\37\77\70\70\70\77" "\37\17\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\0\0\0\0\300\360\374\77\17\17\77\374\360\300" "\0\0\0\0\374\377\377;\70\70\70\70\70\70;\377\377\374\0\0\7\7\7\0\0\0\0\0\0\0\0\7" "\7\7\0\0\377\377\377\7\7\7\7\7\7\207\216\376\374p\0\0\377\377\377\7\7\7\7\7\7\17\217\375" "\370p\0\0\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0\360\374\376\16\7\7\7\7\7\7\16>" "<\60\0\0\177\377\377\200\0\0\0\0\0\0\200\340\340`\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\377\377\377\7\7\7\7\7\7\7\16\376\374\360\0\0\377\377\377\0\0\0\0\0\0\0\200\377" "\377\177\0\0\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0\377\377\377\7\7\7\7\7\7\7\7\7" "\7\7\0\0\377\377\377\7\7\7\7\7\7\7\7\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\377\377\377\7\7\7\7\7\7\7\7\7\7\7\0\0\377\377\377\7\7\7\7\7\7\7\7\0" "\0\0\0\0\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\360\374\376\16\7\7\7\7\7\7\16>" "<\60\0\0\177\377\377\200\0\0\0\0\7\7\207\377\377\177\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\377\377\377\0\0\0\0\0\0\0\0\377\377\377\0\0\377\377\377\7\7\7\7\7\7\7\7\377" "\377\377\0\0\7\7\7\0\0\0\0\0\0\0\0\7\7\7\0\0\7\7\7\7\7\377\377\377\7\7\7\7" "\7\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0x\370\370\200\0\0\0\0\0\0\200\377" "\377\177\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1\0\0\0\377\377\377\200\300\340\360x<\36\17\7" "\3\0\0\0\377\377\377\17\37=x\360\340\300\200\0\0\0\0\0\7\7\7\0\0\0\0\0\1\3\7\7" "\6\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0\377\377\377\36" "<\60\0\0`\341\343\203\7\7\7\7\7\7\216\376\374p\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\7\7\7\7\7\377\377\377\7\7\7\7\7\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\377" "\377\377\0\0\177\377\377\200\0\0\0\0\0\0\200\377\377\177\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\177\377\377\200\0\0\0\0\0\0\200\377\377\177\0\0\0\1\7\37~\370\340\340\370~\37\7" "\1\0\0\0\0\0\0\0\0\1\7\7\1\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0" "\377\377\377\0\377\377\377\300\340\360\177\77\177\360\340\340\377\377\377\0\7\7\7\3\1\0\0\0\0\0\1\3" "\7\7\7\0\37\77\177\360\340\300\200\200\300\340\360\177\77\37\0\0\300\340\360x=\37\17\17\37=x\360" "\340\300\0\0\7\7\7\0\0\0\0\0\0\0\0\7\7\7\0\0\377\377\377\200\0\0\0\0\0\200\377\377" "\377\0\0\0\0\1\3\7\17\376\374\376\17\7\3\1\0\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0" "\0\0\0\0\7\7\7\7\7\7\7\207\307\347\367\177\77\37\0\0\300\340\360x<\36\17\7\3\1\0\0" "\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\70\70\70\0" "\0\0\0\0\0\0\3\17\77\374\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\374\360\300" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\374\360\300\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\70\70\70\77\77\77\0\0\0\0" "\0\0\0\0@\340\360x<\36\17\17\36\0\0\0\1\3\3\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\340\340\340\360\374\376\356\347\347\7\7\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0\0\0\0\0\0\200\300\300\340\340\340\340\340\340\340\340" "\340\340\0\0~\377\377\201\0\0\0\0\0\0\0\377\377\377\0\0\0\1\3\343\347\347\347\347\347\347w\177" "\77\17\0\0\377\377\377\340\340\340\340\340\340\340\300\300\200\0\0\0\377\377\377\0\0\0\0\0\0\0\1\377" "\377\376\0\0\7\7\7\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0\340\340\340\347\347\347\0\0\0\0" "\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\0" "\0\0\0\0\0\0\340\340\340\347\347\347\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\340\340\340\340p\177\77\17\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\200\300\340\340`" " \0\0\0\377\377\377x<\36\77\177\363\341\300\200\0\0\0\0\7\7\7\0\0\0\0\0\0\1\3\7" "\7\6\0\0\0\0\7\7\7\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\300" "\300\200\0\0\377\377\377\0\0\0\377\377\377\0\0\1\377\377\376\0\7\7\7\0\0\0\7\7\7\0\0\0" "\7\7\7\0\340\340\340\0\200\300\300\340\340\340\300\300\200\0\0\0\377\377\377\7\3\1\1\0\0\0\1\377" "\377\376\0\0\7\7\7\0\0\0\0\0\0\0\0\7\7\7\0\0\0\200\300\300\340\340\340\340\340\340\300\300" "\200\0\0\0~\377\377\201\0\0\0\0\0\0\201\377\377~\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\340\340\340\340\340\340\340\340\340\340\300\300\200\0\0\0\377\377\377\0\0\0\0\0\0\0\201\377" "\377~\0\0\377\377\377\7\7\7\7\7\7\7\3\3\1\0\0\0\0\200\300\300\340\340\340\340\340\340\340\340" "\340\340\0\0~\377\377\201\0\0\0\0\0\0\0\377\377\377\0\0\0\1\3\3\7\7\7\7\7\7\7\377" "\377\377\0\0\340\340\340\0\200\300\300\340\340\340\300\300\200\0\0\0\377\377\377\7\3\1\1\0\0\0\1\7" "\7\6\0\0\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\340\340\340\340\340\340\340" "\340\340\0\0\7\17\17\35\34\34\34\34\34\34\270\370\360\340\0\0\7\7\7\7\7\7\7\7\7\7\3\3" "\1\0\0\0\0\0\340\340\340\377\377\377\340\340\340\0\0\0\0\0\0\0\0\0\0\177\377\377\200\0\0\0" "\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\0\0\0\340\340\340\0\0\0\0\0\0\0\0\340" "\340\340\0\0\177\377\377\200\0\0\0\200\200\300\340\377\377\377\0\0\0\1\3\3\7\7\7\3\3\1\0\7" "\7\7\0\0\340\340\340\0\0\0\0\0\0\0\0\340\340\340\0\0\3\17\77\374\360\300\0\0\300\360\374\77" "\17\3\0\0\0\0\0\0\3\7\7\7\7\3\0\0\0\0\0\0\340\340\340\0\0\0\340\340\340\0\0\0" "\340\340\340\0\377\377\377\200\0\200\377\377\377\200\0\200\377\377\377\0\0\3\3\7\7\7\3\1\3\7\7\7" "\3\3\0\0\340\340\340\200\0\0\0\0\0\0\200\340\340\340\0\0\0\201\303\347\377~<<~\377\347\303" "\201\0\0\0\7\7\7\1\0\0\0\0\0\0\1\7\7\7\0\0\340\340\340\0\0\0\0\0\0\0\0\340" "\340\340\0\0\177\377\377\200\0\0\0\0\0\0\0\377\377\377\0\0\0\1\3\343\347\347\347\347\347\347w\177" "\77\17\0\0\340\340\340\340\340\340\340\340\340\340\340\340\340\0\0\0\0\200\300\340\360x<\36\17\7\3\1" "\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\200\377\377\377\0\0\0" "\0\0\0\0\0\0\0\7\7\17\375\375\370\0\0\0\0\0\0\0\0\0\0\0\0\0\37\177\177\360\340\340" "\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\200\0\0\0" "\0\0\0\0\0\0\0\0\0\370\375\375\17\7\7\0\0\0\0\0\0\0\340\340\360\177\177\37\0\0\0\0" "\0\0\0\0\0\200\300\300\300\300\200\200\0\0\300\300\300\0\0\0\7\7\7\1\1\3\3\7\7\7\7\3" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: ProFont29 Copyright: ProFont Distribution 2.2 Generated by Fontographer 4.1.5 Glyphs: 18/256 BBX Build Mode: 3 */ const uint8_t u8x8_font_profont29_2x3_n[1300] U8X8_FONT_SECTION("u8x8_font_profont29_2x3_n") = " :\2\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\20\70\70\360\340\376\376\376\360\360\70\70\20\0\0\0\2\7\7\3\3\77\77\77\3\3\7\7" "\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\0\0\0\0" "\0\0\0\0\7\7\7\7\7\377\377\377\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0" "\0\0\0\0\0\0\0@\341\363\177\77\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0" "\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\77" "\17\3\0\0\0\0\0\0\300\360\374\77\17\3\0\0\0\0\0\0\300\360\374\77\17\3\0\0\0\0\0\0" "\0\0\0\0\360\374\376\16\7\7\7\207\307\347\376\376\374\360\0\0\177\377\377\370<\36\17\7\3\1\200\377" "\377\177\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1\0\0\0\0\70\70\70<\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7" "\7\0\0\0\60<>\16\7\7\7\7\7\7\216\376\374p\0\0\0\0\200\300\340\360x<\36\17\7\3" "\1\0\0\0\6\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0\60<>\16\7\7\7\7\7\207\216\376" "\374p\0\0`\340\340\200\0\0\7\7\7\17\217\375\370p\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\0\200\300\340\360x<\36\377\377\377\0\0\0\0\0\37\37\37\35\34\34\34\34\377\377\377\34" "\34\34\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\0\0\377\377\377\347\347\347\347\347\347\347\307\307" "\207\7\0\0`\340\340\200\0\0\0\0\0\0\201\377\377~\0\0\0\1\3\3\7\7\7\7\7\7\3\3" "\1\0\0\0\360\374\376\356\347\347\347\347\347\347\307\300\200\0\0\0\177\377\377\200\0\0\0\0\0\0\201\377" "\377~\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1\0\0\0\7\7\7\7\7\7\7\7\7\207\307\377" "\377\177\0\0\0\0\0\0\0\370\374\376\17\7\3\1\0\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0" "\0\0\0\0p\374\376\216\207\7\7\7\7\207\216\376\374p\0\0p\370\375\217\17\7\7\7\7\17\217\375" "\370p\0\0\0\1\3\3\7\7\7\7\7\7\3\3\1\0\0\0\360\374\376\16\7\7\7\7\7\7\16\376" "\374\360\0\0\3\17\37\34\70\70\70\70\70\70\270\377\377\177\0\0\0\0\0\7\7\7\7\7\7\7\3\3" "\1\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0\0\0\0\0\0\0\0\0\301\343\343\343\301\0\0\0" "\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0"; /* Fontname: -FontForge-Artos Sans-Medium-R-Normal-Sans-8-80-75-75-P-50-ISO10646-1 Copyright: (null) Glyphs: 96/170 BBX Build Mode: 3 */ const uint8_t u8x8_font_artossans8_r[772] U8X8_FONT_SECTION("u8x8_font_artossans8_r") = " \177\1\1\0\0\0\0\0\0\0\0\0\0\0_\0\0\0\0\0\3\0\0\0\3\0\0\0\42\177\42" "\42\177\42\0\0$*k*\22\0\0B%\22\10$R!\0\0 VIIU\42P\0\0\0\0" "\3\0\0\0\0\0\34\42A\0\0\0\0\0\0A\42\34\0\0\0\0\12\4\37\4\12\0\0\10\10>" "\10\10\0\0\0\0\0@\60\0\0\0\0\10\10\10\10\10\10\0\0\0\0@\0\0\0\0@ \20\10" "\4\2\1\0\0>AAA>\0\0\0@B\177@@\0\0\0bQIIF\0\0\0\42AI" "I\66\0\0\0\34\22\21\177\20\0\0\0'EEE\71\0\0\0>III\62\0\0\0\1\1y" "\5\3\0\0\0\66III\66\0\0\0&III>\0\0\0\0\0\22\0\0\0\0\0\0\0 " "\22\0\0\0\0\0\10\24\42A\0\0\0\24\24\24\24\24\24\0\0\0\0A\42\24\10\0\0\2\1Y" "\11\6\0\0AAA" "AA\42\0\177AAAAA>\0\177IIIIAA\0\177\11\11\11\11\1\1\0>AAA" "II:\0\177\10\10\10\10\10\177\0\0AA\177AA\0\0 @@@@@\77\0\177\10\10\10" "\24\42A\0\177@@@@@@\0\177\2\4\10\4\2\177\0\177\2\4\10\20 \177\0>AAA" "AA>\0\177\21\21\21\21\21\16\0>AAAaA\276\0\177\11\11\11\11\31f\0&III" "II\62\0\1\1\1\177\1\1\1\0\77@@@@@\77\0\17\20 @ \20\17\0\37` \34" " `\37\0A\42\24\10\24\42A\0\3\4\10p\10\4\3\0AaQIECA\0\0\0\177A" "A\0\0\0\1\2\4\10\20 @\0\0\0\0AA\177\0\0\0\4\2\1\2\4\0\0\200\200\200\200" "\200\200\200\200\0\0\0\1\2\0\0\0\0 TTTTx\0\0\177DDDD\70\0\0\70DD" "DD(\0\0\70DDDD\177\0\0\70TTTTH\0\0\0\4~\5\1\0\0\0\30\244\244" "\244\244|\0\0\177\4\4\4\4x\0\0\0D}@\0\0\0\0@\200\200\204}\0\0\0\177\20\20" "\20(D\0\0\0\1\177\0\0\0\0|\4\4|\4\4x\0\0|\4\4\4\4x\0\0\70DD" "DD\70\0\0\374DDDD\70\0\0\70DDDD\374\0\0|\10\4\4\4\4\0\0HTT" "TT$\0\0\0\4\77D@\0\0\0<@@@@|\0\0\34 @@ \34\0\0<@@" "\70@@<\0D(\20(D\0\0\0\34\240\240\240\240|\0\0DdTLD\0\0\0\0\10\66" "A\0\0\0\0\0\0\377\0\0\0\0\0\0\0A\66\10\0\0\10\4\4\10\20\20\10\0\0\0\0\0" "\0\0\0"; /* Fontname: -FontForge-Artos Sans-Medium-R-Normal-Sans-8-80-75-75-P-50-ISO10646-1 Copyright: (null) Glyphs: 18/170 BBX Build Mode: 3 */ const uint8_t u8x8_font_artossans8_n[220] U8X8_FONT_SECTION("u8x8_font_artossans8_n") = " :\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\24\10>\10\24\0\0\20\20|" "\20\20\0\0\0\0\0\200`\0\0\0\0\20\20\20\20\20\20\0\0\0\0\200\0\0\0\0\200@ \20" "\10\4\2\0\0|\202\202\202|\0\0\0\200\204\376\200\200\0\0\0\304\242\222\222\214\0\0\0D\202\222" "\222l\0\0\0\70$\42\376 \0\0\0N\212\212\212r\0\0\0|\222\222\222d\0\0\0\2\2\362" "\12\6\0\0\0l\222\222\222l\0\0\0L\222\222\222|\0\0\0\0\0$\0\0\0"; /* Fontname: -FontForge-Artos Sans-Medium-R-Normal-Sans-8-80-75-75-P-50-ISO10646-1 Copyright: (null) Glyphs: 64/170 BBX Build Mode: 3 */ const uint8_t u8x8_font_artossans8_u[517] U8X8_FONT_SECTION("u8x8_font_artossans8_u") = " _\1\1\0\0\0\0\0\0\0\0\0\0\0_\0\0\0\0\0\3\0\0\0\3\0\0\0\42\177\42" "\42\177\42\0\0$*k*\22\0\0B%\22\10$R!\0\0 VIIU\42P\0\0\0\0" "\3\0\0\0\0\0\34\42A\0\0\0\0\0\0A\42\34\0\0\0\0\12\4\37\4\12\0\0\10\10>" "\10\10\0\0\0\0\0@\60\0\0\0\0\10\10\10\10\10\10\0\0\0\0@\0\0\0\0@ \20\10" "\4\2\1\0\0>AAA>\0\0\0@B\177@@\0\0\0bQIIF\0\0\0\42AI" "I\66\0\0\0\34\22\21\177\20\0\0\0'EEE\71\0\0\0>III\62\0\0\0\1\1y" "\5\3\0\0\0\66III\66\0\0\0&III>\0\0\0\0\0\22\0\0\0\0\0\0\0 " "\22\0\0\0\0\0\10\24\42A\0\0\0\24\24\24\24\24\24\0\0\0\0A\42\24\10\0\0\2\1Y" "\11\6\0\0AAA" "AA\42\0\177AAAAA>\0\177IIIIAA\0\177\11\11\11\11\1\1\0>AAA" "II:\0\177\10\10\10\10\10\177\0\0AA\177AA\0\0 @@@@@\77\0\177\10\10\10" "\24\42A\0\177@@@@@@\0\177\2\4\10\4\2\177\0\177\2\4\10\20 \177\0>AAA" "AA>\0\177\21\21\21\21\21\16\0>AAAaA\276\0\177\11\11\11\11\31f\0&III" "II\62\0\1\1\1\177\1\1\1\0\77@@@@@\77\0\17\20 @ \20\17\0\37` \34" " `\37\0A\42\24\10\24\42A\0\3\4\10p\10\4\3\0AaQIECA\0\0\0\177A" "A\0\0\0\1\2\4\10\20 @\0\0\0\0AA\177\0\0\0\4\2\1\2\4\0\0\200\200\200\200" "\200\200\200\200"; /* Fontname: -FontForge-Artos Serif-Medium-R-Normal--8-80-75-75-M-80-ISO8859-1 Copyright: (null) Glyphs: 95/95 BBX Build Mode: 3 */ const uint8_t u8x8_font_artosserif8_r[764] U8X8_FONT_SECTION("u8x8_font_artosserif8_r") = " ~\1\1\0\0\0\0\0\0\0\0\0\0\0_\0\0\0\0\0\3\0\0\0\3\0\0\0\42\177\42" "\42\177\42\0\0$*k*\22\0\0B%\22\10$R!\0\0 VIIU\42P\0\0\0\0" "\3\0\0\0\0\0\34\42A\0\0\0\0\0\0A\42\34\0\0\0\0\12\4\37\4\12\0\0\10\10>" "\10\10\0\0\0\0\0@\60\0\0\0\0\10\10\10\10\10\10\0\0\0\0@\0\0\0\0@ \20\10" "\4\2\1\0\0>AAA>\0\0\0@B\177@@\0\0\0bQIIF\0\0\0\42AI" "I\66\0\0\0\34\22Q\177P\0\0\0'EEE\71\0\0\0>III\62\0\0\0\1\1y" "\5\3\0\0\0\66III\66\0\0\0&III>\0\0\0\0\0\22\0\0\0\0\0\0\0 " "\22\0\0\0\0\0\10\24\42A\0\0\0\24\24\24\24\24\24\0\0\0\0A\42\24\10\0\0\2\1Y" "\11\6\0\0\0A\177IIIAc\0A\177I\11\11\1\3\0\34\42AA" "II:\0A\177I\10I\177A\0\0\0A\177A\0\0\0 @@@A\77\1\0A\177I\10" "UcA\0A\177A@@@`\0A\177E\10E\177A\0A\177E\10Q\177A\0\0>AA" "AA>\0A\177Q\21\21\21\16\0\0>AAaA\276\0A\177I\11\11Iv@&III" "II\62\0\3\1A\177A\1\3\0\1\77A@A\77\1\0\1\17\61@\61\17\1\0\1\177!\34" "!\177\1\0AcU\10UcA\0\1\7IpI\7\1\0CaQIECa\0\0\0\177A" "A\0\0\0\1\2\4\10\20 @\0\0\0\0AA\177\0\0\0\4\2\1\2\4\0\0\200\200\200\200" "\200\200\200\200\0\0\0\1\2\0\0\0\0 TTTx\0\0\0\177DDD\70\0\0\0\70DD" "D(\0\0\0\70DDD\177\0\0\0\70TTTH\0\0\0\0\4~\5\1\0\0\0\30\244\244" "\244|\0\0\0\177\4\4\4x\0\0\0\0D}@\0\0\0\0@\200\200\204}\0\0\0\177\20\20" "(D\0\0\0\0A\177@\0\0\0\0|\4x\4x\0\0\0|\10\4\4x\0\0\0\70DD" "D\70\0\0\0\374DDD\70\0\0\0\70DDD\374\0\0\0|\10\4\4\4\0\0\0HTT" "T$\0\0\0\0\4\77D@\0\0\0<@@@|\0\0\0\34 @ \34\0\0\0<@\60" "@<\0\0\0D(\20(D\0\0\0\34\240\240\240|\0\0\0DdTLD\0\0\0\0\10\66" "A\0\0\0\0\0\0\377\0\0\0\0\0\0\0A\66\10\0\0\10\4\4\10\20\20\10"; /* Fontname: -FontForge-Artos Serif-Medium-R-Normal--8-80-75-75-M-80-ISO8859-1 Copyright: (null) Glyphs: 18/95 BBX Build Mode: 3 */ const uint8_t u8x8_font_artosserif8_n[220] U8X8_FONT_SECTION("u8x8_font_artosserif8_n") = " :\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\24\10>\10\24\0\0\20\20|" "\20\20\0\0\0\0\0\200`\0\0\0\0\20\20\20\20\20\20\0\0\0\0\200\0\0\0\0\200@ \20" "\10\4\2\0\0|\202\202\202|\0\0\0\200\204\376\200\200\0\0\0\304\242\222\222\214\0\0\0D\202\222" "\222l\0\0\0\70$\242\376\240\0\0\0N\212\212\212r\0\0\0|\222\222\222d\0\0\0\2\2\362" "\12\6\0\0\0l\222\222\222l\0\0\0L\222\222\222|\0\0\0\0\0$\0\0\0"; /* Fontname: -FontForge-Artos Serif-Medium-R-Normal--8-80-75-75-M-80-ISO8859-1 Copyright: (null) Glyphs: 64/95 BBX Build Mode: 3 */ const uint8_t u8x8_font_artosserif8_u[517] U8X8_FONT_SECTION("u8x8_font_artosserif8_u") = " _\1\1\0\0\0\0\0\0\0\0\0\0\0_\0\0\0\0\0\3\0\0\0\3\0\0\0\42\177\42" "\42\177\42\0\0$*k*\22\0\0B%\22\10$R!\0\0 VIIU\42P\0\0\0\0" "\3\0\0\0\0\0\34\42A\0\0\0\0\0\0A\42\34\0\0\0\0\12\4\37\4\12\0\0\10\10>" "\10\10\0\0\0\0\0@\60\0\0\0\0\10\10\10\10\10\10\0\0\0\0@\0\0\0\0@ \20\10" "\4\2\1\0\0>AAA>\0\0\0@B\177@@\0\0\0bQIIF\0\0\0\42AI" "I\66\0\0\0\34\22Q\177P\0\0\0'EEE\71\0\0\0>III\62\0\0\0\1\1y" "\5\3\0\0\0\66III\66\0\0\0&III>\0\0\0\0\0\22\0\0\0\0\0\0\0 " "\22\0\0\0\0\0\10\24\42A\0\0\0\24\24\24\24\24\24\0\0\0\0A\42\24\10\0\0\2\1Y" "\11\6\0\0\0A\177IIIAc\0A\177I\11\11\1\3\0\34\42AA" "II:\0A\177I\10I\177A\0\0\0A\177A\0\0\0 @@@A\77\1\0A\177I\10" "UcA\0A\177A@@@`\0A\177E\10E\177A\0A\177E\10Q\177A\0\0>AA" "AA>\0A\177Q\21\21\21\16\0\0>AAaA\276\0A\177I\11\11Iv@&III" "II\62\0\3\1A\177A\1\3\0\1\77A@A\77\1\0\1\17\61@\61\17\1\0\1\177!\34" "!\177\1\0AcU\10UcA\0\1\7IpI\7\1\0CaQIECa\0\0\0\177A" "A\0\0\0\1\2\4\10\20 @\0\0\0\0AA\177\0\0\0\4\2\1\2\4\0\0\200\200\200\200" "\200\200\200\200"; /* Fontname: -FontForge-Chroma 48-Medium-R-Normal-Sans-8-80-75-75-P-50-ISO10646-1 Copyright: (null) Glyphs: 96/98 BBX Build Mode: 3 */ const uint8_t u8x8_font_chroma48medium8_r[772] U8X8_FONT_SECTION("u8x8_font_chroma48medium8_r") = " \177\1\1\0\0\0\0\0\0\0\0\0\0\0^\0\0\0\0\0\0\6\0\0\6\0\0\0$~$" "$~$\0\0$k**k\22\0\0F&\20\10db\0\0\64JJT P\0\0\0\0\0" "\6\0\0\0\0\0\0\34*\0\0\0\10\10>" "\10\10\0\0\0\0@\60\0\0\0\0\0\10\10\10\10\10\10\0\0\0\0@\0\0\0\0\0@ \20" "\10\4\2\0\0\0\0~\10\10" "\10\24b\0\0~@@@@@\0\0~\4\10\10\4~\0\0~\4\10\20 ~\0\0@@@@>\0\0\36 @@ \36\0\0~ \20" "\20 ~\0\0B$\30\30$B\0\0\2\4x\4\2\0\0\0BbRJFB\0\0\0~B" "B\0\0\0\0\2\4\10\20 @\0\0\0\0BB~\0\0\0\0\0\4\2\4\0\0\200\200\200\200" "\200\200\200\200\0\0\0\2\4\0\0\0\0 TTTx\0\0\0~HHH\60\0\0\0\70DD" "D(\0\0\0\60HHH~\0\0\0\70TTTH\0\0\0\0\10|\12\2\0\0\0\30\244\244" "\244|\0\0\0~\10\10\10p\0\0\0\0Hz@\0\0\0\0@\200\200\210z\0\0\0~\20\20" "(D\0\0\0\0B~@\0\0\0\0|\4x\4x\0\0\0|\4\4\4x\0\0\0\70DD" "D\70\0\0\0\374DDD\70\0\0\0\70DDD\374\0\0\0|\10\4\4\4\0\0\0HTT" "T$\0\0\0\0\4>D\0\0\0\0<@@ |\0\0\0\34 @ \34\0\0\0\34`\34" "`\34\0\0\0D(\20(D\0\0\0\34\240\240\240|\0\0\0DdTLD\0\0\0\0\10\66" "A\0\0\0\0\0\0\377\0\0\0\0\0\0A\66\10\0\0\0\10\4\4\10\20\20\10\0\0\0\0\0" "\0\0\0"; /* Fontname: -FontForge-Chroma 48-Medium-R-Normal-Sans-8-80-75-75-P-50-ISO10646-1 Copyright: (null) Glyphs: 18/98 BBX Build Mode: 3 */ const uint8_t u8x8_font_chroma48medium8_n[220] U8X8_FONT_SECTION("u8x8_font_chroma48medium8_n") = " :\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0T\70|\70T\0\0\0\20\20|" "\20\20\0\0\0\0\200`\0\0\0\0\0\20\20\20\20\20\20\0\0\0\0\200\0\0\0\0\0\200@ " "\20\10\4\0\0x\304\244\224\214x\0\0\200\210\374\200\200\0\0\0\310\244\244\244\244\230\0\0H\204\224" "\224\224h\0\0pHDD\374@\0\0\134\224\224\224\224d\0\0x\224\224\224\224`\0\0\4\4\304" "$\24\14\0\0h\224\224\224\224h\0\0\30\244\244\244\244x\0\0\0\0H\0\0\0"; /* Fontname: -FontForge-Chroma 48-Medium-R-Normal-Sans-8-80-75-75-P-50-ISO10646-1 Copyright: (null) Glyphs: 64/98 BBX Build Mode: 3 */ const uint8_t u8x8_font_chroma48medium8_u[517] U8X8_FONT_SECTION("u8x8_font_chroma48medium8_u") = " _\1\1\0\0\0\0\0\0\0\0\0\0\0^\0\0\0\0\0\0\6\0\0\6\0\0\0$~$" "$~$\0\0$k**k\22\0\0F&\20\10db\0\0\64JJT P\0\0\0\0\0" "\6\0\0\0\0\0\0\34*\0\0\0\10\10>" "\10\10\0\0\0\0@\60\0\0\0\0\0\10\10\10\10\10\10\0\0\0\0@\0\0\0\0\0@ \20" "\10\4\2\0\0\0\0~\10\10" "\10\24b\0\0~@@@@@\0\0~\4\10\10\4~\0\0~\4\10\20 ~\0\0@@@@>\0\0\36 @@ \36\0\0~ \20" "\20 ~\0\0B$\30\30$B\0\0\2\4x\4\2\0\0\0BbRJFB\0\0\0~B" "B\0\0\0\0\2\4\10\20 @\0\0\0\0BB~\0\0\0\0\0\4\2\4\0\0\200\200\200\200" "\200\200\200\200"; /* Fontname: -FontForge-Saikyo Sans-Medium-R-Normal-Sans-8-80-75-75-P-50-ISO10646-1 Copyright: (null) Glyphs: 18/72 BBX Build Mode: 3 */ const uint8_t u8x8_font_saikyosansbold8_n[220] U8X8_FONT_SECTION("u8x8_font_saikyosansbold8_n") = " :\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10*>\34>*\10\0\0\20\20|" "|\20\20\0\0\0\200\340`\0\0\0\0\20\20\20\20\20\20\0\0\0\0\300\300\0\0\0\0\300`\60" "\30\14\6\0|\376\202\202\202\376|\0\0\200\204\376\376\200\200\0\304\346\262\222\222\236\214\0D\306\222\222" "\222\376l\0\70<&\42\376\376 \0N\316\212\212\212\372r\0|\376\222\222\222\366d\0\6\6\2\362" "\372\16\6\0l\376\222\222\222\376l\0L\336\222\222\222\376|\0\0\0\0ll\0\0"; /* Fontname: -FontForge-Saikyo Sans-Medium-R-Normal-Sans-8-80-75-75-P-50-ISO10646-1 Copyright: (null) Glyphs: 64/72 BBX Build Mode: 3 */ const uint8_t u8x8_font_saikyosansbold8_u[517] U8X8_FONT_SECTION("u8x8_font_saikyosansbold8_u") = " _\1\1\0\0\0\0\0\0\0\0\0\0\0__\0\0\0\0\7\7\0\0\7\7\0\0\42\177\177" "\42\177\177\42$.*k*:\22\0Ff\60\30\14fb\0 v_I\77vP\0\0\0\0\7" "\7\0\0\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\4\25\37\16\37\25\4\0\0\10\10>" ">\10\10\0\0\0@p\60\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0\0`\60\30" "\14\6\3\0>\177AAA\177>\0\0@B\177\177@@\0bsYIIOF\0\42cII" "I\177\66\0\34\36\23\21\177\177\20\0'gEEE}\71\0>\177III{\62\0\3\3\1y" "}\7\3\0\66\177III\177\66\0&oIII\177>\0\0\0\0\66\66\0\0\0\0\0@v" "\66\0\0\0\0\0\10\34\66cA\0\0\24\24\24\24\24\24\0\0\0Ac\66\34\10\0\0\2\1Y" "Y\17\6\0\177AA" "Ac\42\0\177\177AAA\177>\0\177\177IIIIA\0\177\177\11\11\11\1\1\0>\177AA" "I{:\0\177\177\10\10\10\177\177\0\0\0\0\177\177\0\0\0 `@@@\177\77\0\177\177\10\34" "\66cA\0\177\177@@@@@\0\177\177\6\14\6\177\177\0\177\177\6\14\30\177\177\0>\177AA" "A\177>\0\177\177\21\21\21\37\16\0>\177AAA\377\276\0\177\177\21\21\21\177n\0&oII" "I{\62\0\0\1\1\177\177\1\1\0\77\177@@@\177\77\0\17\37\60`\60\37\17\0\177\177\60\34" "\60\177\177\0cw\34\10\34wc\0\0\7\17xx\17\7\0aqy]OGC\0\0\0\177\177" "AA\0\0\0\3\6\14\30\60`\0\0\0AA\177\177\0\0\0\0\14\6\3\6\14\0\200\200\200\200" "\200\200\200\200"; /* Fontname: -FontForge-Torus Sans-Medium-R-Normal-Sans-8-80-75-75-P-50-ISO10646-1 Copyright: (null) Glyphs: 96/170 BBX Build Mode: 3 */ const uint8_t u8x8_font_torussansbold8_r[772] U8X8_FONT_SECTION("u8x8_font_torussansbold8_r") = " \177\1\1\0\0\0\0\0\0\0\0\0\0\0__\0\0\0\0\3\7\0\0\7\3\0\0\42\177\177" "\42\177\177\42\0$.kk:\22\0\0c\63\30\14fc\0\0 vOY\67fP\0\0\0\7" "\3\0\0\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\0\0\12\4\37\4\12\0\0\0\10\10" ">\10\10\0\0\0\0p\60\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0\0`\60\30" "\14\6\3\0\0>\177AA\177>\0\0@B\177\177@@\0\0bqYIOF\0\0\42AI" "I\177\66\0\0\34\36Q\177\177P\0\0'GEE}\71\0\0>\177IIy\62\0\0\1\1y" "}\7\3\0\0\66\177II\177\66\0\0&OII\177>\0\0\0\0\66\66\0\0\0\0\0\0v" "\66\0\0\0\0\0\10\34\66cA\0\0\24\24\24\24\24\24\0\0\0Ac\66\34\10\0\0\2\1Y" "Y\17\6\0\177A" "AA\42\0\0\177\177AA\177>\0\0\177\177IIAA\0\0\177\177\11\11\1\1\0\0>\177A" "Iy:\0\0\177\177\10\10\177\177\0\0\0A\177\177A\0\0\0 @@@\177\77\0\0\177\177\10" "\34wc\0\0\177\177@@@@\0\177\6\14\30\14\6\177\177\177\7\16\34\70p\177\0\0>\177A" "A\177>\0\0\177\177\21\21\37\16\0\0>\177AA\377\276\0\0\177\177\11\11\177v\0\0&OI" "Iy\62\0\0\1\1\177\177\1\1\0\0\77\177@@\177\77\0\0\177\177@@\77\37\0\177\177@\177" "@\77\37\0\0w\177\10\10\177w\0\0\7\17xx\17\7\0\0aqYMGC\0\0\0\177\177" "AA\0\0\0\3\6\14\30\60`\0\0\0AA\177\177\0\0\0\0\14\6\3\6\14\0\200\200\200\200" "\200\200\200\200\0\0\0\1\3\2\0\0\0 tTT|x\0\0\177\177DD|\70\0\0\70|D" "DD(\0\0\70|DD\177\177\0\0\70|TT\134H\0\0\0\4~\177\5\1\0\0\30\274\244" "\244\374|\0\0\177\177\4\4|x\0\0\0D}}@\0\0\0\0@\200\204\375}\0\0\177\177\20" "\70lD\0\0\0\0\1\177\177\0\0||\4|\4|x\0\0||\4\4|x\0\0\70|D" "D|\70\0\0\374\374DD|\70\0\0\70|DD\374\374\0\0||\10\4\4\4\0\0H\134T" "Tt$\0\0\0\4\77\177D\0\0\0<|@@||\0\0||@@<\34\0||@|" "@<\34\0\0l|\20\20|l\0\0\34\274\240\240\374|\0\0Ddt\134LD\0\0\0\10>" "wA\0\0\0\0\0\377\377\0\0\0\0\0Aw>\10\0\0\0\10\14\4\10\20\30\10\0\0\0\0" "\0\0\0"; /* Fontname: -FontForge-Torus Sans-Medium-R-Normal-Sans-8-80-75-75-P-50-ISO10646-1 Copyright: (null) Glyphs: 18/170 BBX Build Mode: 3 */ const uint8_t u8x8_font_torussansbold8_n[220] U8X8_FONT_SECTION("u8x8_font_torussansbold8_n") = " :\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\24\10>\10\24\0\0\0\20\20" "|\20\20\0\0\0\0\340`\0\0\0\0\20\20\20\20\20\20\0\0\0\0\300\300\0\0\0\0\300`\60" "\30\14\6\0\0|\376\202\202\376|\0\0\200\204\376\376\200\200\0\0\304\342\262\222\236\214\0\0D\202\222" "\222\376l\0\0\70<\242\376\376\240\0\0N\216\212\212\372r\0\0|\376\222\222\362d\0\0\2\2\362" "\372\16\6\0\0l\376\222\222\376l\0\0L\236\222\222\376|\0\0\0\0ll\0\0"; /* Fontname: -FontForge-Torus Sans-Medium-R-Normal-Sans-8-80-75-75-P-50-ISO10646-1 Copyright: (null) Glyphs: 64/170 BBX Build Mode: 3 */ const uint8_t u8x8_font_torussansbold8_u[517] U8X8_FONT_SECTION("u8x8_font_torussansbold8_u") = " _\1\1\0\0\0\0\0\0\0\0\0\0\0__\0\0\0\0\3\7\0\0\7\3\0\0\42\177\177" "\42\177\177\42\0$.kk:\22\0\0c\63\30\14fc\0\0 vOY\67fP\0\0\0\7" "\3\0\0\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\0\0\12\4\37\4\12\0\0\0\10\10" ">\10\10\0\0\0\0p\60\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0\0`\60\30" "\14\6\3\0\0>\177AA\177>\0\0@B\177\177@@\0\0bqYIOF\0\0\42AI" "I\177\66\0\0\34\36Q\177\177P\0\0'GEE}\71\0\0>\177IIy\62\0\0\1\1y" "}\7\3\0\0\66\177II\177\66\0\0&OII\177>\0\0\0\0\66\66\0\0\0\0\0\0v" "\66\0\0\0\0\0\10\34\66cA\0\0\24\24\24\24\24\24\0\0\0Ac\66\34\10\0\0\2\1Y" "Y\17\6\0\177A" "AA\42\0\0\177\177AA\177>\0\0\177\177IIAA\0\0\177\177\11\11\1\1\0\0>\177A" "Iy:\0\0\177\177\10\10\177\177\0\0\0A\177\177A\0\0\0 @@@\177\77\0\0\177\177\10" "\34wc\0\0\177\177@@@@\0\177\6\14\30\14\6\177\177\177\7\16\34\70p\177\0\0>\177A" "A\177>\0\0\177\177\21\21\37\16\0\0>\177AA\377\276\0\0\177\177\11\11\177v\0\0&OI" "Iy\62\0\0\1\1\177\177\1\1\0\0\77\177@@\177\77\0\0\177\177@@\77\37\0\177\177@\177" "@\77\37\0\0w\177\10\10\177w\0\0\7\17xx\17\7\0\0aqYMGC\0\0\0\177\177" "AA\0\0\0\3\6\14\30\60`\0\0\0AA\177\177\0\0\0\0\14\6\3\6\14\0\200\200\200\200" "\200\200\200\200"; /* Fontname: -FontForge-Victoria-Bold-R-Normal-Sans-8-80-75-75-P-50-ISO10646-1 Copyright: (null) Glyphs: 96/98 BBX Build Mode: 3 */ const uint8_t u8x8_font_victoriabold8_r[772] U8X8_FONT_SECTION("u8x8_font_victoriabold8_r") = " \177\1\1\0\0\0\0\0\0\0\0\0\0\0__\0\0\0\0\7\7\0\0\7\7\0\0\42\177\177" "\42\177\177\42\0$.kk:\22\0\0c\63\30\14fc\0\0 v_I\177vP\0\0\0\7" "\7\0\0\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\4\25\37\16\37\25\4\0\0\0\10\10" ">\10\10\0\0\0@p\60\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0\0`\60\30" "\14\6\3\0\0>\177AA\177>\0\0@B\177\177@@\0\0bsYIOF\0\0\42cI" "I\177\66\0\0\34\36S\177\177P\0\0'gEE}\71\0\0>\177II{\62\0\0\1\1y" "}\7\3\0\0\66\177II\177\66\0\0&oII\177>\0\0\0\0\66\66\0\0\0\0\0\0v" "\66\0\0\0\0\0\10\34\66cA\0\0\24\24\24\24\24\24\0\0\0Ac\66\34\10\0\0\2\1Y" "Y\17\6\0\177A" "Ac\42\0\0\177\177AA\177>\0\0\177\177IIAA\0\0\177\177\11\11\1\1\0\0>\177A" "I{:\0\0\177\177\10\10\177\177\0\0\0A\177\177A\0\0\0 `@@\177\77\0\0\177\177\34" "\66cA\0\0\177\177@@@@\0\177\177\6\14\6\177\177\0\0\177\177\14\30\177\177\0\0>\177A" "A\177>\0\0\177\177\11\11\17\6\0\0>\177AA\377\276\0\0\177\177\31\71oF\0\0&oI" "I{\62\0\0\1\1\177\177\1\1\0\0\77\177@@\177\77\0\0\37\77``\77\37\0\177\177\60\30" "\60\177\177\0\0cw\34\34wc\0\0\7\17xx\17\7\0\0aqYMGC\0\0\0\177\177" "AA\0\0\0\3\6\14\30\60`\0\0\0AA\177\177\0\0\0\0\14\6\3\6\14\0\200\200\200\200" "\200\200\200\200\0\0\0\1\3\2\0\0\0 tTT|x\0\0\177\177DD|\70\0\0\70|D" "Dl(\0\0\70|DD\177\177\0\0\70|TT\134H\0\0\0\4~\177\5\1\0\0\30\274\244" "\244\374|\0\0\177\177\4\4|x\0\0\0D}}@\0\0\0@\300\200\204\375}\0\0\177\177\20" "\70lD\0\0\0\0A\177\177@\0||\14x\14|x\0\0||\4\4|x\0\0\70|D" "D|\70\0\0\374\374DD|\70\0\0\70|DD\374\374\0\0||\10\4\4\4\0\0H\134T" "Tt$\0\0\0\4\77\177D\0\0\0<|@@||\0\0\34<``<\34\0\34|p<" "p|\34\0\0Dl\70\70lD\0\0\34\274\240\240\374|\0\0Ddt\134LD\0\0\0\10>" "wA\0\0\0\0\0\377\377\0\0\0\0\0Aw>\10\0\0\0\10\14\4\10\20\30\10\0\0\0\0" "\0\0\0"; /* Fontname: -FontForge-Victoria-Bold-R-Normal-Sans-8-80-75-75-P-50-ISO10646-1 Copyright: (null) Glyphs: 18/98 BBX Build Mode: 3 */ const uint8_t u8x8_font_victoriabold8_n[220] U8X8_FONT_SECTION("u8x8_font_victoriabold8_n") = " :\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10*>\34>*\10\0\0\0\20\20" "|\20\20\0\0\0\200\340`\0\0\0\0\20\20\20\20\20\20\0\0\0\0\300\300\0\0\0\0\300`\60" "\30\14\6\0\0|\376\202\202\376|\0\0\200\204\376\376\200\200\0\0\304\346\262\222\236\214\0\0D\306\222" "\222\376l\0\0\70<\246\376\376\240\0\0N\316\212\212\372r\0\0|\376\222\222\366d\0\0\2\2\362" "\372\16\6\0\0l\376\222\222\376l\0\0L\336\222\222\376|\0\0\0\0ll\0\0"; /* Fontname: -FontForge-Victoria-Bold-R-Normal-Sans-8-80-75-75-P-50-ISO10646-1 Copyright: (null) Glyphs: 64/98 BBX Build Mode: 3 */ const uint8_t u8x8_font_victoriabold8_u[517] U8X8_FONT_SECTION("u8x8_font_victoriabold8_u") = " _\1\1\0\0\0\0\0\0\0\0\0\0\0__\0\0\0\0\7\7\0\0\7\7\0\0\42\177\177" "\42\177\177\42\0$.kk:\22\0\0c\63\30\14fc\0\0 v_I\177vP\0\0\0\7" "\7\0\0\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\4\25\37\16\37\25\4\0\0\0\10\10" ">\10\10\0\0\0@p\60\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0\0`\60\30" "\14\6\3\0\0>\177AA\177>\0\0@B\177\177@@\0\0bsYIOF\0\0\42cI" "I\177\66\0\0\34\36S\177\177P\0\0'gEE}\71\0\0>\177II{\62\0\0\1\1y" "}\7\3\0\0\66\177II\177\66\0\0&oII\177>\0\0\0\0\66\66\0\0\0\0\0\0v" "\66\0\0\0\0\0\10\34\66cA\0\0\24\24\24\24\24\24\0\0\0Ac\66\34\10\0\0\2\1Y" "Y\17\6\0\177A" "Ac\42\0\0\177\177AA\177>\0\0\177\177IIAA\0\0\177\177\11\11\1\1\0\0>\177A" "I{:\0\0\177\177\10\10\177\177\0\0\0A\177\177A\0\0\0 `@@\177\77\0\0\177\177\34" "\66cA\0\0\177\177@@@@\0\177\177\6\14\6\177\177\0\0\177\177\14\30\177\177\0\0>\177A" "A\177>\0\0\177\177\11\11\17\6\0\0>\177AA\377\276\0\0\177\177\31\71oF\0\0&oI" "I{\62\0\0\1\1\177\177\1\1\0\0\77\177@@\177\77\0\0\37\77``\77\37\0\177\177\60\30" "\60\177\177\0\0cw\34\34wc\0\0\7\17xx\17\7\0\0aqYMGC\0\0\0\177\177" "AA\0\0\0\3\6\14\30\60`\0\0\0AA\177\177\0\0\0\0\14\6\3\6\14\0\200\200\200\200" "\200\200\200\200"; /* Fontname: -FontForge-Victoria-Medium-R-Normal-Sans-8-80-75-75-P-50-ISO10646-1 Copyright: (null) Glyphs: 96/98 BBX Build Mode: 3 */ const uint8_t u8x8_font_victoriamedium8_r[772] U8X8_FONT_SECTION("u8x8_font_victoriamedium8_r") = " \177\1\1\0\0\0\0\0\0\0\0\0\0\0_\0\0\0\0\0\7\0\0\0\7\0\0\0\42\177\42" "\42\177\42\0\0$*k*\22\0\0\0\42\20\10\4\42\0\0 VIIV P\0\0\0\0\7" "\0\0\0\0\0\0\34\42A\0\0\0\0\0A\42\34\0\0\0\0*\34\177\34*\0\0\0\10\10>" "\10\10\0\0\0\0@\60\0\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0\0@ \20" "\10\4\2\0\0>QIE>\0\0\0@B\177@@\0\0\0bQIIF\0\0\0\42AI" "I\66\0\0\0\34\22Q\177P\0\0\0'EEE\71\0\0\0AA" "A\42\0\0\0\177AAA>\0\0\0\177IIAA\0\0\0\177\11\11\11\1\0\0\0>AA" "I:\0\0\0\177\10\10\10\177\0\0\0\0A\177A\0\0\0\0 @@@\77\0\0\0\177\10\24" "\42A\0\0\0\177@@@@\0\0\0\177\2\4\2\177\0\0\0\177\4\10\20\177\0\0\0>AA" "A>\0\0\0\177\11\11\11\6\0\0\0>AaA\276\0\0\0\177\11\31)F\0\0\0&II" "I\62\0\0\0\1\1\177\1\1\0\0\0\77@@@\77\0\0\0\37 @ \37\0\0\0\177 \20" " \177\0\0\0c\24\10\24c\0\0\0\7\10p\10\7\0\0\0aQIEC\0\0\0\0\177A" "A\0\0\0\0\2\4\10\20 @\0\0\0\0AA\177\0\0\0\0\4\2\1\2\4\0\200\200\200\200" "\200\200\200\200\0\0\0\1\2\0\0\0\0 TTTx\0\0\0\177DDD\70\0\0\0\70DD" "D(\0\0\0\70DDD\177\0\0\0\70TTTH\0\0\0\0\4~\5\5\0\0\0\30\244\244" "\244|\0\0\0\177\4\4\4x\0\0\0\0D}@\0\0\0\0@\200\200\204}\0\0\0\177\20\20" "(D\0\0\0\0A\177@\0\0\0\0|\4x\4x\0\0\0|\4\4\4x\0\0\0\70DD" "D\70\0\0\0\374DDD\70\0\0\0\70DDD\374\0\0\0|\10\4\4\4\0\0\0HTT" "T$\0\0\0\0\4\77D\0\0\0\0<@@ |\0\0\0\34 @ \34\0\0\0\34`\34" "`\34\0\0\0D(\20(D\0\0\0\34\240\240\240|\0\0\0DdTLD\0\0\0\0\10\66" "A\0\0\0\0\0\0\377\0\0\0\0\0\0A\66\10\0\0\0\10\4\4\10\20\20\10\0\0\0\0\0" "\0\0\0"; /* Fontname: -FontForge-Victoria-Medium-R-Normal-Sans-8-80-75-75-P-50-ISO10646-1 Copyright: (null) Glyphs: 18/98 BBX Build Mode: 3 */ const uint8_t u8x8_font_victoriamedium8_n[220] U8X8_FONT_SECTION("u8x8_font_victoriamedium8_n") = " :\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0T\70\376\70T\0\0\0\20\20|" "\20\20\0\0\0\0\200`\0\0\0\0\0\20\20\20\20\20\20\0\0\0\0\300\300\0\0\0\0\200@ " "\20\10\4\0\0|\242\222\212|\0\0\0\200\204\376\200\200\0\0\0\304\242\222\222\214\0\0\0D\202\222" "\222l\0\0\0\70$\242\376\240\0\0\0N\212\212\212r\0\0\0x\224\222\222`\0\0\0\2\2\362" "\12\6\0\0\0l\222\222\222l\0\0\0\14\222\222R<\0\0\0\0\0$\0\0\0"; /* Fontname: -FontForge-Victoria-Medium-R-Normal-Sans-8-80-75-75-P-50-ISO10646-1 Copyright: (null) Glyphs: 64/98 BBX Build Mode: 3 */ const uint8_t u8x8_font_victoriamedium8_u[517] U8X8_FONT_SECTION("u8x8_font_victoriamedium8_u") = " _\1\1\0\0\0\0\0\0\0\0\0\0\0_\0\0\0\0\0\7\0\0\0\7\0\0\0\42\177\42" "\42\177\42\0\0$*k*\22\0\0\0\42\20\10\4\42\0\0 VIIV P\0\0\0\0\7" "\0\0\0\0\0\0\34\42A\0\0\0\0\0A\42\34\0\0\0\0*\34\177\34*\0\0\0\10\10>" "\10\10\0\0\0\0@\60\0\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0\0@ \20" "\10\4\2\0\0>QIE>\0\0\0@B\177@@\0\0\0bQIIF\0\0\0\42AI" "I\66\0\0\0\34\22Q\177P\0\0\0'EEE\71\0\0\0AA" "A\42\0\0\0\177AAA>\0\0\0\177IIAA\0\0\0\177\11\11\11\1\0\0\0>AA" "I:\0\0\0\177\10\10\10\177\0\0\0\0A\177A\0\0\0\0 @@@\77\0\0\0\177\10\24" "\42A\0\0\0\177@@@@\0\0\0\177\2\4\2\177\0\0\0\177\4\10\20\177\0\0\0>AA" "A>\0\0\0\177\11\11\11\6\0\0\0>AaA\276\0\0\0\177\11\31)F\0\0\0&II" "I\62\0\0\0\1\1\177\1\1\0\0\0\77@@@\77\0\0\0\37 @ \37\0\0\0\177 \20" " \177\0\0\0c\24\10\24c\0\0\0\7\10p\10\7\0\0\0aQIEC\0\0\0\0\177A" "A\0\0\0\0\2\4\10\20 @\0\0\0\0AA\177\0\0\0\0\4\2\1\2\4\0\200\200\200\200" "\200\200\200\200"; /* Fontname: -Adobe-Courier-Bold-R-Normal--25-180-100-100-M-150-ISO10646-1 Copyright: Copyright (c) 1984, 1987 Adobe Systems Incorporated. All Rights Reserved. Copyright (c) 1988, 1991 Digital Equipment Corporation. All Rights Reserved. Glyphs: 191/873 BBX Build Mode: 3 */ const uint8_t u8x8_font_courB18_2x3_f[10756] U8X8_FONT_SECTION("u8x8_font_courB18_2x3_f") = " \377\2\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\374\374\370\0\0\0" "\0\0\0\0\0\0\0\0\0\1\277\277\1\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\0\0\0\0" "\0\0\0\0\0\0\0<\374<\0<\374<\0\0\0\0\0\0\0\0\0\0\1\0\0\0\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\376\376\200\200\376\376\200" "\200\0\0\0\0\60\61\361\377\77\61\361\377\77\61\61\1\0\0\0\0\0\0\17\17\0\0\17\17\0\0\0" "\0\0\0\0\0\0\340\360\30\30\36\36\60xx\0\0\0\0\0\0\0\341\343\303\206\206\206\206\314\374x" "\0\0\0\0\0\0\1\1\0\1\37\37\1\1\0\0\0\0\0\0\0\0`\360\230\10\10\230\360`\0\0" "\0\0\0\0\0\0\20\20\31\311\355\65\24\26\62\342\300\0\0\0\0\0\0\0\0\0\1\3\2\2\3\1" "\0\0\0\0\0\0\0\300\340\60\60\60p`\0\0\0\0\0\0\0\0\340\371\37\16\34\270\360\360\270\30" "\0\0\0\0\0\0\1\3\3\3\3\3\1\1\3\3\3\0\0\0\0\0\0\0\0\370\370\370\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\340\370\34\14\0\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\7\37\70\60\0\0\0\0\0\0\0\0\14\34\370\340\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0\0\0\0\0\0\0\0\60\70\37\7\0\0\0\0\0" "\0\0\0\0\0\0``\300\300\374\374\300\300``\0\0\0\0\0\0\0\30\36\16\3\3\16\36\30\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\340\0\0\0\0" "\0\0\0\0\0\14\14\14\14\14\377\377\14\14\14\14\14\0\0\0\0\0\0\0\0\0\1\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0" "\0\0\0\0\0\0\0\0\30\16\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\14\14\14\14\14\14\14\14\14\14\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0" "\0\0\0\0\0\0\0\0\0\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340x\36" "\6\0\0\0\0\0\0\0\200\340x\36\7\1\0\0\0\0\0\0\0\0\30\36\7\1\0\0\0\0\0\0" "\0\0\0\0\0\0\340\370\30\14\14\14\14\30\370\340\0\0\0\0\0\0\177\377\200\0\0\0\0\200\377\177" "\0\0\0\0\0\0\0\1\1\3\3\3\3\1\1\0\0\0\0\0\0\0\30\30\30\34\374\374\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3" "\0\0\0\0\0\0px\34\14\14\14\14\34\370\360\0\0\0\0\0\0\200\300\340p\70\34\16\7\3\1" "\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\0\0\0\0\0\0\60\70\34\14\14\14\14\234\370\360" "\0\0\0\0\0\300\300\200\0\6\6\6\7\217\375\370\0\0\0\0\0\0\1\3\3\3\3\3\3\3\1\0" "\0\0\0\0\0\0\0\0\300\360\70\34\374\374\0\0\0\0\0\0\0\60<\77\63\60\60\60\377\377\60\60" "\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\0\0\0\0\0\0\0\374\374\14\214\214\214\214\14\14" "\0\0\0\0\0\0\300\303\203\3\1\1\1\203\307\377|\0\0\0\0\0\0\1\3\3\3\3\3\3\1\1" "\0\0\0\0\0\0\200\340\360\70\30\34\14\14\14\14\0\0\0\0\0\0\177\377\306\203\3\3\3\207\376\374" "\0\0\0\0\0\0\0\1\1\3\3\3\3\3\1\0\0\0\0\0\0\0\34\34\14\14\14\14\14\314\374<" "\0\0\0\0\0\0\0\0\0\0\200\360~\17\1\0\0\0\0\0\0\0\0\0\0\0\3\3\0\0\0\0" "\0\0\0\0\0\0\360\370\30\14\14\14\14\30\370\360\0\0\0\0\0\0\370\375\217\6\6\6\6\217\375\370" "\0\0\0\0\0\0\0\1\3\3\3\3\3\3\1\0\0\0\0\0\0\0\0\340\370\30\14\14\14\14\30\370" "\340\0\0\0\0\0\0\7\17\34\30\30\30\214\306\377\77\0\0\0\0\0\0\3\3\3\3\3\3\1\1\0" "\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\203\203\203\0\0\0\0" "\0\0\0\0\0\0\0\0\0\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0" "\0\0\0\0\0\0\0\0\0\203\203\203\0\0\0\0\0\0\0\0\0\0\0\30\16\7\3\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300`` \0\0\0\14\14\36\36\63\63aa\300\300\200" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\63\63\63\63\63\63\63\63\63\63\63\63\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 ``\300\300\200\200\0\0\0\0\0\0\0\0\0\0\200\200\300\300aa\63\63\36\36" "\14\14\0\0\0\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\370\30\30\30\30\70\360\340" "\0\0\0\0\0\0\0\0\0\0\270\274\14\6\7\3\0\0\0\0\0\0\0\0\0\0\3\3\0\0\0\0" "\0\0\0\0\0\0\340\370\30\14\14\214\230\370\340\0\0\0\0\0\0\0\377\377\0\36\77sa\177\177`" "\0\0\0\0\0\0\1\7\6\14\14\14\14\6\6\0\0\0\0\0\0\0\30\30\230\370xx\340\200\0\0" "\0\0\0\0\0\300\360~\77\63\60\60\63\77~\360\300\0\0\0\3\3\3\3\3\3\0\0\3\3\3\3" "\3\3\0\0\0\30\30\370\370\30\30\30\30\30\70\360\340\0\0\0\0\0\0\377\377\6\6\6\6\6\7\217" "\375\370\0\0\0\3\3\3\3\3\3\3\3\3\3\3\1\0\0\0\0\200\340\360\60\30\30\30\30\30\60\370" "\370\0\0\0\0\77\377\340\200\0\0\0\0\0\0\200\200\0\0\0\0\0\0\1\1\3\3\3\3\3\3\1" "\1\0\0\0\30\30\370\370\30\30\30\30\30\30\60\360\340\200\0\0\0\0\377\377\0\0\0\0\0\0\200\300" "\377\77\0\0\3\3\3\3\3\3\3\3\3\3\3\1\0\0\0\0\0\30\30\370\370\30\30\30\230\230\30\370" "\370\0\0\0\0\0\0\377\377\6\6\6\37\37\0\0\340\340\0\0\0\3\3\3\3\3\3\3\3\3\3\3" "\3\3\0\0\0\30\30\370\370\30\30\30\230\230\30\30\370\370\0\0\0\0\0\377\377\6\6\6\37\37\0\0" "\0\0\0\0\0\3\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\200\340\360\60\30\30\30\30\30\30\60" "\370\370\0\0\0\77\377\340\200\0\0\0\30\30\30\230\370\370\0\0\0\0\0\1\1\3\3\3\3\3\3\1" "\1\0\0\0\30\30\370\370\30\30\0\0\30\30\370\370\30\30\0\0\0\0\377\377\6\6\6\6\6\6\377\377" "\0\0\0\0\3\3\3\3\3\3\0\0\3\3\3\3\3\3\0\0\0\0\30\30\30\30\370\370\30\30\30\30" "\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3" "\0\0\0\0\0\0\0\0\30\30\30\30\30\370\370\30\30\30\0\0\0\360\360\200\0\0\0\0\200\377\377\0" "\0\0\0\0\0\0\1\3\3\3\3\3\3\1\0\0\0\0\0\0\30\30\370\370\30\30\200\300\370x\70\30" "\30\0\0\0\0\0\377\377\16\7\17\35\70\360\340\200\0\0\0\0\3\3\3\3\3\3\0\0\0\0\3\3" "\3\3\0\0\0\30\30\30\370\370\30\30\30\0\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0\0\340" "\340\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\3\0\0\0\30\370\370x\340\200\0\0\200\340x\370" "\370\30\0\0\0\377\377\0\3\7\34\34\7\3\0\377\377\0\0\0\3\3\3\3\3\0\0\0\0\3\3\3" "\3\3\0\0\0\30\370\370x\340\200\0\0\30\30\370\370\30\0\0\0\0\377\377\0\1\7\36x\340\200\377" "\377\0\0\0\0\3\3\3\3\3\0\0\0\1\3\3\3\0\0\0\0\200\340\360\60\30\30\30\30\30\60\360" "\340\200\0\0\0\77\377\340\200\0\0\0\0\0\200\340\377\77\0\0\0\0\0\1\1\3\3\3\3\3\1\1" "\0\0\0\0\0\30\30\370\370\30\30\30\30\30\30\60\360\340\0\0\0\0\0\377\377\30\30\30\30\30\30\14" "\17\7\0\0\0\3\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\200\340\360\60\30\30\30\30\30\60\360" "\340\200\0\0\0\77\377\340\200\0\0\0\0\0\200\340\377\77\0\0\0\0\0\31\31\37\17\17\33\33\31\31" "\14\14\0\0\30\30\370\370\30\30\30\30\30\60\360\340\0\0\0\0\0\0\377\377\14\14\14\34<\366\347\203" "\0\0\0\0\3\3\3\3\3\3\0\0\0\0\3\3\3\3\0\0\0\0\340\360\70\30\30\30\30\30\60\370" "\370\0\0\0\0\340\341\203\7\6\6\16\14\14\234\370\360\0\0\0\0\3\3\1\3\3\3\3\3\3\3\1" "\0\0\0\0\0\370\370\30\30\30\370\370\30\30\30\370\370\0\0\0\0\1\1\0\0\0\377\377\0\0\0\1" "\1\0\0\0\0\0\0\3\3\3\3\3\3\3\3\0\0\0\0\0\0\30\370\370\30\30\0\0\0\30\30\370" "\370\30\0\0\0\0\177\377\200\0\0\0\0\0\200\377\177\0\0\0\0\0\0\1\3\3\3\3\3\3\3\1" "\0\0\0\0\30x\370\230\30\0\0\0\0\30\230\370x\30\0\0\0\0\3\37|\340\200\200\340|\37\3" "\0\0\0\0\0\0\0\0\0\3\3\3\3\0\0\0\0\0\0\0\30\370\370\30\30\0\300\300\0\30\30\370" "\370\30\0\0\0\37\377\340\374\77\7\7\77\374\340\377\37\0\0\0\0\0\3\3\3\0\0\0\0\3\3\3" "\0\0\0\0\30\70x\370\330\230\0\0\230\330\370x\70\30\0\0\0\200\300\340q;\17\17;q\340\300" "\200\0\0\0\3\3\3\3\3\3\0\0\3\3\3\3\3\3\0\0\30\70x\370\330\30\0\0\30\330\370x" "\70\30\0\0\0\0\0\0\3\7\376\376\7\3\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\0" "\0\0\0\0\0\0\370\370\30\30\30\30\230\330\370x\70\0\0\0\0\0\200\300\340x<\16\7\3\0\340" "\340\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\374\374\14\14\14\0" "\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\60\60\60\0" "\0\0\0\0\0\0\6\36x\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\36x\340\200\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\36\30\0\0\0\0\0\0\14\14\14\374\374\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0\0\0\0\0\0\0\0\60\60\60\77\77\0\0\0\0" "\0\0\0\0\0\0\0\0\300\360<<\360\300\0\0\0\0\0\0\0\0\0\3\3\0\0\0\0\3\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\60\60\60\60\60\60\60\60\60\60\60\60" "\60\60\60\0\0\0\0\0\10\30\60`@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\0\0\0" "\0\0\0\0\0\340\363\63\31\31\31\31\233\377\376\0\0\0\0\0\0\1\3\3\3\3\3\3\1\3\3\3" "\3\0\0\0\0\14\14\374\374\0\200\200\200\200\200\0\0\0\0\0\0\0\0\377\377\307\203\1\1\1\203\307" "\377|\0\0\0\3\3\3\3\1\3\3\3\3\3\1\1\0\0\0\0\0\0\0\200\200\200\200\200\200\0\200" "\200\0\0\0\0|\377\307\203\1\1\1\1\3\207\217\217\0\0\0\0\0\1\1\3\3\3\3\3\3\3\1" "\1\0\0\0\0\0\0\0\200\200\200\200\214\14\374\374\0\0\0\0\0|\377\307\203\1\1\1\203\307\377\377" "\0\0\0\0\0\0\1\1\3\3\3\3\3\1\3\3\3\3\0\0\0\0\0\0\200\200\200\200\200\200\0\0" "\0\0\0\0\0|\377\367\263\61\61\61\61\63\267\277\274\0\0\0\0\0\1\1\3\3\3\3\3\3\3\1" "\1\0\0\0\0\0\200\200\200\360\370\234\214\214\214\214\14\0\0\0\0\0\1\1\1\377\377\1\1\1\1\1" "\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\200\200\200\200\200\0\200\200" "\200\200\0\0\0|\377\307\203\1\1\1\203\307\377\377\1\1\0\0\0\0\1acccccq\77\37" "\0\0\0\0\14\14\374\374\0\200\200\200\200\200\0\0\0\0\0\0\0\0\377\377\7\3\1\1\1\3\377\376" "\0\0\0\0\3\3\3\3\3\3\0\0\3\3\3\3\3\3\0\0\0\0\0\200\200\234\234\234\0\0\0\0" "\0\0\0\0\0\0\0\1\1\1\377\377\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3" "\0\0\0\0\0\0\200\200\200\200\234\234\234\200\0\0\0\0\0\0\0\0\1\1\1\1\1\1\377\377\0\0" "\0\0\0\0\0\0`````p\77\37\0\0\0\0\0\0\0\14\14\374\374\0\0\0\200\200\200\200" "\0\0\0\0\0\0\0\377\377\30<~\347\303\201\1\0\0\0\0\0\3\3\3\3\0\0\0\3\3\3\3" "\3\3\0\0\0\0\0\14\14\14\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0" "\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\0\0\0\0\200\200\200\0\200\200\200\200\0\200\200\200" "\200\0\0\0\1\1\377\377\3\1\1\377\377\3\1\1\377\377\0\0\3\3\3\3\3\0\0\3\3\3\3\0" "\3\3\3\3\200\200\200\200\0\0\200\200\200\200\0\0\0\0\0\0\1\1\377\377\6\3\1\1\1\3\377\376" "\0\0\0\0\3\3\3\3\3\3\0\0\3\3\3\3\3\3\0\0\0\0\0\0\200\200\200\200\200\200\0\0" "\0\0\0\0\0|\377\307\203\1\1\1\1\203\307\377|\0\0\0\0\0\1\1\3\3\3\3\3\3\1\1" "\0\0\0\0\200\200\200\200\0\200\200\200\200\200\0\0\0\0\0\0\1\1\377\377\307\203\1\1\1\203\307\377" "|\0\0\0``\177\177acc\3\3\3\1\1\0\0\0\0\0\0\0\0\200\200\200\200\200\0\200\200" "\200\200\0\0\0|\377\307\203\1\1\1\203\307\377\377\1\1\0\0\0\0\1\1\3\3\3cca\177\177" "``\0\0\0\0\200\200\200\200\0\0\200\200\200\200\0\0\0\0\0\0\1\1\377\377\7\3\1\1\1\3" "\3\0\0\0\0\3\3\3\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\200\200\200\200\200\0\200\200" "\0\0\0\0\0\0\306\317\217\31\31\71\61\63\347\347\300\0\0\0\0\0\3\3\1\3\3\3\3\3\3\1" "\0\0\0\0\0\200\200\370\370\200\200\200\200\200\200\0\0\0\0\0\0\1\1\377\377\201\1\1\1\201\201\200" "\0\0\0\0\0\0\0\0\1\3\3\3\3\3\1\1\0\0\0\0\200\200\200\200\0\0\0\0\200\200\200\200" "\0\0\0\0\1\1\377\377\200\0\0\0\1\201\377\377\0\0\0\0\0\0\0\1\3\3\3\3\3\1\3\3" "\3\3\0\0\200\200\200\200\200\200\0\0\200\200\200\200\200\200\0\0\1\1\7\37y\341\200\200\341y\37\7" "\1\1\0\0\0\0\0\0\0\1\3\3\1\0\0\0\0\0\0\0\200\200\200\200\200\0\0\0\0\200\200\200" "\200\200\0\0\1\7\177\371\301\360>>\360\301\371\177\7\1\0\0\0\0\0\3\3\0\0\0\0\3\3\0" "\0\0\0\0\0\200\200\200\200\200\0\0\200\200\200\200\200\0\0\0\0\1\1\203\307m\70\70m\307\203\1" "\1\0\0\0\0\3\3\3\3\3\0\0\3\3\3\3\3\0\0\0\0\200\200\200\200\200\0\0\200\200\200\200" "\200\0\0\0\0\1\7\37}\361\200\300\361}\37\7\1\0\0\0\0```p}\177g\1\0\0\0" "\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200\0\0\0\0\0\0\207\307\341q\71\35\17\7\303\301" "\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\360\370\14\4\4\0" "\0\0\0\0\0\0\0\0\10\34\377\367\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\37\60 \0" "\0\0\0\0\0\0\0\0\0\0\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\17\17\0\0\0\0\0\0\0\0\0\0\0\4\4\14\370\360\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\367\377\34\10\0\0\0\0\0\0\0\0\0 \60\37\17\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\34\16\6\6\16\34\30\30\34\16" "\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\373\373\0\0\0\0\0\0\0\0\0\0\0\0\0\77\177\177\77\0\0\0\0" "\0\0\0\0\0\0\200\300\340`||\300\340\340\0\0\0\0\0\0\0\37\77p`\340\340`q\61\0" "\0\0\0\0\0\0\0\0\0\0\3\3\0\0\0\0\0\0\0\0\0\0\0\340\360\70\30\30\30\70\60\0" "\0\0\0\0\0\14\214\317\377|\14\14\14\0\0\200\200\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3" "\1\0\0\0\0\0`\340\300\300\300\300\300\300\340`\0\0\0\0\0\0\337\377q````q\377\337" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\70\370\370\230\0\0\230\370\370\70" "\30\0\0\0\0\0\0()/\376\376/)(\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\0" "\0\0\0\0\0\0\0\0\0\0\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\363\363\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\17\17\0\0\0\0\0\0\0\0\0\0\200\360\370\334\214\214\14\14<<" "\0\0\0\0\0\7\17\14\34\31\71\63s\347\346~<\0\0\0\0\0\17\17\14\14\14\14\16\7\3\0" "\0\0\0\0\0\0\0\70\70\0\0\0\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\60\260\330\330\330\330\260\60\340" "\300\0\0\0\17\77p\317\337\271\260\260\271\331\300p\77\17\0\0\0\0\0\0\0\1\1\1\1\0\0\0" "\0\0\0\0\0\0\0\200\320XHH\370\360\0\0\0\0\0\0\0\0\0\63\67\64\64\66\63\67\66\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\20\70|\356\307\203\21\70|\356\307\203\1\0\0\0\0\0\0\0\1\1\1\0\0\0\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\77" "\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\14\14\14\14\14\14\14\14\14\14\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\340\60\360\330\330\330\330\260\60\340\300\0\0\0\17\77p\300\377\277\204\214\277\363\300p" "\77\17\0\0\0\0\0\0\0\1\1\1\1\0\0\0\0\0\0\0\0\0\0\30\30\30\30\30\30\30\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0p\370\214\4\4\214\370p\0\0\0\0\0\0\0\0\0\0\1\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\0\0\0\0" "\0\0\0\0\0\3\3\3\3\3\77\77\3\3\3\3\3\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3" "\3\0\0\0\0\0\0\0\30\34\204\304d<\30\0\0\0\0\0\0\0\0\0\6\7\5\4\4\6\6\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\34DDd\374\230\0" "\0\0\0\0\0\0\0\0\3\7\4\4\4\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0 \60\70\34\14\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\0\0\0\0\200\200\200\200" "\0\0\0\0\1\1\377\377\200\0\0\0\1\201\377\377\0\0\0\0\0\0\177\177\3\3\3\3\3\1\3\3" "\3\3\0\0\0\360\370\370\14\14\374\374\14\374\374\14\14\0\0\0\0\1\3\3\6\6\377\377\0\377\377\0" "\0\0\0\0\0\0\0\14\14\14\17\17\0\17\17\14\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\16\16\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0 hn~\70\0\0\0\0\0\0\0\0\0\0\10\10\10\374\374\0\0\0\0" "\0\0\0\0\0\0\0\4\4\4\7\7\4\4\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\340\360\30\30\30\30\360\340\0\0\0\0\0\0\0\0\61\63\66\66\66\66\63\61\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\1\203\307\356|\70\21\203\307\356|\70\20\0\0\0\1\1\1\0\0\0\1\1\1\0\0" "\0\0\0\0\10\10\10\374\374\0\0\0\0\0\0\200\300`\60\30\4\4\4\207\307d\64\34\314\246\223\211" "\374\376\200\0\0\0\3\1\0\0\0\0\0\0\0\2\3\3\2\0\10\10\10\374\374\0\0\0\0\0\0\200" "\300`\60\30\4\4\4\207\307d\64\34\14\6\217\307b\62\36\14\0\0\3\1\0\0\0\0\0\3\3\2" "\2\2\3\3\30\34DDd\374\230\0\0\0\200\300`\60\30\0\3\7\204\304d\67\33\314\246\223\211\374" "\376\200\0\0\0\3\1\0\0\0\0\0\0\0\2\3\3\2\0\0\0\0\0\0\0\0\200\200\0\0\0\0" "\0\0\0\0\0\0\200\300\300`{;\0\0\0\0\0\0\0\0\0\0\17\37\70\60\60\60\60>\36\0" "\0\0\0\0\0\0\30\30\231\373{z\340\200\0\0\0\0\0\0\0\300\360~\77\63\60\60\63\77~\360" "\300\0\0\0\3\3\3\3\3\3\0\0\3\3\3\3\3\3\0\0\0\0\30\30\230\372{{\341\200\0\0" "\0\0\0\0\0\300\360~\77\63\60\60\63\77~\360\300\0\0\0\3\3\3\3\3\3\0\0\3\3\3\3" "\3\3\0\0\0\2\33\33\231\370xy\343\203\2\0\0\0\0\0\0\300\360~\77\63\60\60\63\77~\360" "\300\0\0\0\3\3\3\3\3\3\0\0\3\3\3\3\3\3\0\0\0\0\32\33\231\371{{\343\201\0\0" "\0\0\0\0\0\300\360~\77\63\60\60\63\77~\360\300\0\0\0\3\3\3\3\3\3\0\0\3\3\3\3" "\3\3\0\0\0\0\30\33\233\370xx\343\203\0\0\0\0\0\0\0\300\360~\77\63\60\60\63\77~\360" "\300\0\0\0\3\3\3\3\3\3\0\0\3\3\3\3\3\3\0\0\0\0\30\30\233\376|~\343\200\0\0" "\0\0\0\0\0\300\360~\77\63\60\60\63\77~\360\300\0\0\0\3\3\3\3\3\3\0\0\3\3\3\3" "\3\3\0\0\0\0\0\0\30\330\370\370\370\30\30\30\30xx\0\0\300\360<\37\31\30\377\377\6\6\17" "\17\300\300\0\3\3\3\3\0\3\3\3\3\3\3\3\3\3\3\0\0\200\340\360\60\30\30\30\30\30\60\370" "\370\0\0\0\0\77\377\340\200\0\0\0\0\0\0\200\300\0\0\0\0\0\0\1!ko\177;\3\3\1" "\0\0\0\0\0\30\30\370\370\31\33\33\232\230\30\370\370\0\0\0\0\0\0\377\377\6\6\6\37\37\0\0" "\340\340\0\0\0\3\3\3\3\3\3\3\3\3\3\3\3\3\0\0\0\30\30\370\370\30\32\33\233\231\30\370" "\370\0\0\0\0\0\0\377\377\6\6\6\37\37\0\0\340\340\0\0\0\3\3\3\3\3\3\3\3\3\3\3" "\3\3\0\0\0\30\30\372\373\33\31\30\230\231\33\373\372\0\0\0\0\0\0\377\377\6\6\6\37\37\0\0" "\340\340\0\0\0\3\3\3\3\3\3\3\3\3\3\3\3\3\0\0\0\30\30\370\373\33\30\30\230\233\33\370" "\370\0\0\0\0\0\0\377\377\6\6\6\37\37\0\0\340\340\0\0\0\3\3\3\3\3\3\3\3\3\3\3" "\3\3\0\0\0\0\30\30\30\31\373\373\32\30\30\30\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0" "\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\0\0\0\0\0\0\30\30\30\32\373\373\31\30\30\30" "\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3" "\0\0\0\0\0\0\32\33\33\31\370\370\31\33\33\32\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0" "\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\0\0\0\0\0\0\30\30\33\33\370\370\33\33\30\30" "\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3" "\0\0\0\0\30\30\370\370\30\30\30\30\30\30\60\360\340\200\0\0\6\6\377\377\6\6\6\0\0\0\200\300" "\377\77\0\0\3\3\3\3\3\3\3\3\3\3\3\1\0\0\0\0\0\30\370\372{\341\201\3\3\33\31\370" "\370\30\0\0\0\0\377\377\0\1\7\36x\340\200\377\377\0\0\0\0\3\3\3\3\3\0\0\0\1\3\3" "\3\0\0\0\0\200\340\360\60\30\31\33\33\32\60\360\340\200\0\0\0\77\377\340\200\0\0\0\0\0\200\340" "\377\77\0\0\0\0\0\1\1\3\3\3\3\3\1\1\0\0\0\0\0\200\340\360\60\30\32\33\33\31\60\360" "\340\200\0\0\0\77\377\340\200\0\0\0\0\0\200\340\377\77\0\0\0\0\0\1\1\3\3\3\3\3\1\1" "\0\0\0\0\0\200\340\362\63\33\31\30\30\31\63\363\342\200\0\0\0\77\377\340\200\0\0\0\0\0\200\340" "\377\77\0\0\0\0\0\1\1\3\3\3\3\3\1\1\0\0\0\0\0\200\340\362\63\31\31\33\33\33\61\360" "\340\200\0\0\0\77\377\340\200\0\0\0\0\0\200\340\377\77\0\0\0\0\0\1\1\3\3\3\3\3\1\1" "\0\0\0\0\0\200\340\360\63\33\30\30\30\33\63\360\340\200\0\0\0\77\377\340\200\0\0\0\0\0\200\340" "\377\77\0\0\0\0\0\1\1\3\3\3\3\3\1\1\0\0\0\0\0@\340\300\200\0\0\0\0\200\300\340" "@\0\0\0\0\200\300\341s\77\36\36\77s\341\300\200\0\0\0\0\0\1\0\0\0\0\0\0\0\0\1" "\0\0\0\0\0\200\340\360\60\30\30\30\230\330x\374\346\202\0\0\0\77\377\340\300p\34\6\3\0\200\340" "\377\77\0\0\0\4\6\3\1\3\3\3\3\3\1\1\0\0\0\0\0\30\370\370\30\31\3\3\2\30\30\370" "\370\30\0\0\0\0\177\377\200\0\0\0\0\0\200\377\177\0\0\0\0\0\0\1\3\3\3\3\3\3\3\1" "\0\0\0\0\0\30\370\370\30\30\2\3\3\31\30\370\370\30\0\0\0\0\177\377\200\0\0\0\0\0\200\377" "\177\0\0\0\0\0\0\1\3\3\3\3\3\3\3\1\0\0\0\0\0\30\370\372\33\33\1\0\0\31\33\373" "\372\30\0\0\0\0\177\377\200\0\0\0\0\0\200\377\177\0\0\0\0\0\0\1\3\3\3\3\3\3\3\1" "\0\0\0\0\0\30\370\370\33\33\0\0\0\33\33\370\370\30\0\0\0\0\177\377\200\0\0\0\0\0\200\377" "\177\0\0\0\0\0\0\1\3\3\3\3\3\3\3\1\0\0\0\0\30\70x\370\330\32\3\3\31\330\370x" "\70\30\0\0\0\0\0\0\3\7\376\376\7\3\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\0" "\0\0\0\0\0\30\30\370\370\330\330\300\300\300\300\200\200\0\0\0\0\0\0\377\377``````\61" "\77\37\0\0\0\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\360\370\34\14\14\234\370\360\0" "\0\0\0\0\0\0\0\377\377\0\3\203\203\7\216\374\370\0\0\0\0\3\3\3\3\3\0\1\3\3\3\1" "\0\0\0\0\0\0\4\214\234\270\260\240\200\0\0\0\0\0\0\0\0\340\363\63\31\31\31\31\233\377\376\0" "\0\0\0\0\0\1\3\3\3\3\3\3\1\3\3\3\3\0\0\0\0\0\0\200\200\240\260\270\234\14\4\0" "\0\0\0\0\0\340\363\63\31\31\31\31\233\377\376\0\0\0\0\0\0\1\3\3\3\3\3\3\1\3\3\3" "\3\0\0\0\0\0 \260\270\234\214\234\270\60 \0\0\0\0\0\0\340\363\63\31\31\31\31\233\377\376\0" "\0\0\0\0\0\1\3\3\3\3\3\3\1\3\3\3\3\0\0\0\0\0 \260\230\230\270\260\260\30\10\0" "\0\0\0\0\0\340\363\63\31\31\31\31\233\377\376\0\0\0\0\0\0\1\3\3\3\3\3\3\1\3\3\3" "\3\0\0\0\0\0\0\270\270\200\200\200\270\70\0\0\0\0\0\0\0\340\363\63\31\31\31\31\233\377\376\0" "\0\0\0\0\0\1\3\3\3\3\3\3\1\3\3\3\3\0\0\0\0\0\0\200\270\354\304\354\270\0\0\0" "\0\0\0\0\0\340\363\63\31\31\31\31\233\377\376\0\0\0\0\0\0\1\3\3\3\3\3\3\1\3\3\3" "\3\0\0\0\0\0\200\200\200\200\0\0\200\200\200\200\0\0\0\0\340\363\63\31\31\233\377\377\263\61\61\63" "\277\276\0\0\1\3\3\3\3\3\1\1\3\3\3\3\1\1\0\0\0\0\0\0\200\200\200\200\200\0\200\200" "\0\0\0\0\0|\377\307\203\1\1\1\1\3\217\217\0\0\0\0\0\0\1\1#ko\177;\3\3\1" "\0\0\0\0\0\0\0\4\214\234\270\260\240\200\0\0\0\0\0\0\0|\377\367\263\61\61\61\61\63\267\277" "\274\0\0\0\0\0\1\1\3\3\3\3\3\3\3\1\1\0\0\0\0\0\0\0\200\240\260\270\234\214\4\0" "\0\0\0\0\0|\377\367\263\61\61\61\61\63\267\277\274\0\0\0\0\0\1\1\3\3\3\3\3\3\3\1" "\1\0\0\0\0\0\0 \260\270\234\214\234\270\60 \0\0\0\0\0|\377\367\263\61\61\61\61\63\267\277" "\274\0\0\0\0\0\1\1\3\3\3\3\3\3\3\1\1\0\0\0\0\0\0\70\270\200\200\200\270\270\0\0" "\0\0\0\0\0|\377\367\263\61\61\61\61\63\267\277\274\0\0\0\0\0\1\1\3\3\3\3\3\3\3\1" "\1\0\0\0\0\0\4\214\234\270\260\240\0\0\0\0\0\0\0\0\0\0\0\1\1\1\377\377\0\0\0\0" "\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\0\0\0\0\0\0\0\200\200\240\260\270\34\14\4\0" "\0\0\0\0\0\0\0\1\1\1\377\377\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3" "\0\0\0\0\0\0 \260\270\234\214\234\70\60 \0\0\0\0\0\0\0\0\1\1\1\377\377\0\0\0\0" "\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\0\0\0\0\0\0\0\270\270\200\200\200\70\70\0\0" "\0\0\0\0\0\0\0\1\1\1\377\377\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3" "\0\0\0\0\6ffv\274\274\230\270\370\354\314\214\0\0\0\0\0|\377\307\203\1\1\1\1\203\307\377" "~\0\0\0\0\0\1\1\3\3\3\3\3\3\1\1\0\0\0\0\200\200\240\260\30\30\270\260\260\230\10\0" "\0\0\0\0\1\1\377\377\6\3\1\1\1\3\377\376\0\0\0\0\3\3\3\3\3\3\0\0\3\3\3\3" "\3\3\0\0\0\0\0\4\214\234\270\260\240\200\0\0\0\0\0\0\0|\377\307\203\1\1\1\1\203\307\377" "|\0\0\0\0\0\1\1\3\3\3\3\3\3\1\1\0\0\0\0\0\0\0\0\200\240\260\270\234\214\4\0" "\0\0\0\0\0|\377\307\203\1\1\1\1\203\307\377|\0\0\0\0\0\1\1\3\3\3\3\3\3\1\1" "\0\0\0\0\0\0 \60\270\234\214\234\270\260 \0\0\0\0\0\0|\377\307\203\1\1\1\1\203\307\377" "|\0\0\0\0\0\1\1\3\3\3\3\3\3\1\1\0\0\0\0\0\0 \60\230\230\270\260\260\230\10\0" "\0\0\0\0\0|\377\307\203\1\1\1\1\203\307\377|\0\0\0\0\0\1\1\3\3\3\3\3\3\1\1" "\0\0\0\0\0\0\0\70\270\200\200\200\270\270\0\0\0\0\0\0\0|\377\307\203\1\1\1\1\203\307\377" "|\0\0\0\0\0\1\1\3\3\3\3\3\3\1\1\0\0\0\0\0\0\0\0\0\340\340\340\0\0\0\0" "\0\0\0\0\14\14\14\14\14\314\314\314\14\14\14\14\14\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0" "\0\0\0\0\0\0\0\0\200\200\200\200\200\200\0\200\300@\0\0\0|\377\207\303a\61\31\15\207\303\377" "|\0\0\0\10\14\7\3\3\3\3\3\3\3\1\1\0\0\0\0\200\200\204\214\34\70\60 \200\200\200\200" "\0\0\0\0\1\1\377\377\200\0\0\0\1\201\377\377\0\0\0\0\0\0\0\1\3\3\3\3\3\1\3\3" "\3\3\0\0\200\200\200\200 \60\70\34\214\204\200\200\0\0\0\0\1\1\377\377\200\0\0\0\1\201\377\377" "\0\0\0\0\0\0\0\1\3\3\3\3\3\1\3\3\3\3\0\0\200\200\240\260\70\34\14\34\270\260\240\200" "\0\0\0\0\1\1\377\377\200\0\0\0\1\201\377\377\0\0\0\0\0\0\0\1\3\3\3\3\3\1\3\3" "\3\3\0\0\200\200\200\270\70\0\0\0\270\270\200\200\0\0\0\0\1\1\377\377\200\0\0\0\1\201\377\377" "\0\0\0\0\0\0\0\1\3\3\3\3\3\1\3\3\3\3\0\0\0\200\200\200\200\200 \60\270\234\214\204" "\200\0\0\0\0\1\7\37}\361\200\300\361}\37\7\1\0\0\0\0```p}\177g\1\0\0\0" "\0\0\0\0\0\14\14\374\374\0\200\200\200\200\200\0\0\0\0\0\0\0\0\377\377\307\203\1\1\1\203\307" "\377|\0\0\0``\177\177acc\3\3\3\1\1\0\0\0\0\200\200\270\270\200\0\0\270\270\200\200" "\200\0\0\0\0\1\7\37}\361\200\300\361}\37\7\1\0\0\0\0```p}\177g\1\0\0\0" "\0\0\0"; /* Fontname: -Adobe-Courier-Bold-R-Normal--25-180-100-100-M-150-ISO10646-1 Copyright: Copyright (c) 1984, 1987 Adobe Systems Incorporated. All Rights Reserved. Copyright (c) 1988, 1991 Digital Equipment Corporation. All Rights Reserved. Glyphs: 95/873 BBX Build Mode: 3 */ const uint8_t u8x8_font_courB18_2x3_r[4564] U8X8_FONT_SECTION("u8x8_font_courB18_2x3_r") = " ~\2\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\374\374\370\0\0\0" "\0\0\0\0\0\0\0\0\0\1\277\277\1\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\0\0\0\0" "\0\0\0\0\0\0\0<\374<\0<\374<\0\0\0\0\0\0\0\0\0\0\1\0\0\0\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\376\376\200\200\376\376\200" "\200\0\0\0\0\60\61\361\377\77\61\361\377\77\61\61\1\0\0\0\0\0\0\17\17\0\0\17\17\0\0\0" "\0\0\0\0\0\0\340\360\30\30\36\36\60xx\0\0\0\0\0\0\0\341\343\303\206\206\206\206\314\374x" "\0\0\0\0\0\0\1\1\0\1\37\37\1\1\0\0\0\0\0\0\0\0`\360\230\10\10\230\360`\0\0" "\0\0\0\0\0\0\20\20\31\311\355\65\24\26\62\342\300\0\0\0\0\0\0\0\0\0\1\3\2\2\3\1" "\0\0\0\0\0\0\0\300\340\60\60\60p`\0\0\0\0\0\0\0\0\340\371\37\16\34\270\360\360\270\30" "\0\0\0\0\0\0\1\3\3\3\3\3\1\1\3\3\3\0\0\0\0\0\0\0\0\370\370\370\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\340\370\34\14\0\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\7\37\70\60\0\0\0\0\0\0\0\0\14\34\370\340\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0\0\0\0\0\0\0\0\60\70\37\7\0\0\0\0\0" "\0\0\0\0\0\0``\300\300\374\374\300\300``\0\0\0\0\0\0\0\30\36\16\3\3\16\36\30\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\340\0\0\0\0" "\0\0\0\0\0\14\14\14\14\14\377\377\14\14\14\14\14\0\0\0\0\0\0\0\0\0\1\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0" "\0\0\0\0\0\0\0\0\30\16\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\14\14\14\14\14\14\14\14\14\14\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0" "\0\0\0\0\0\0\0\0\0\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340x\36" "\6\0\0\0\0\0\0\0\200\340x\36\7\1\0\0\0\0\0\0\0\0\30\36\7\1\0\0\0\0\0\0" "\0\0\0\0\0\0\340\370\30\14\14\14\14\30\370\340\0\0\0\0\0\0\177\377\200\0\0\0\0\200\377\177" "\0\0\0\0\0\0\0\1\1\3\3\3\3\1\1\0\0\0\0\0\0\0\30\30\30\34\374\374\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3" "\0\0\0\0\0\0px\34\14\14\14\14\34\370\360\0\0\0\0\0\0\200\300\340p\70\34\16\7\3\1" "\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\0\0\0\0\0\0\60\70\34\14\14\14\14\234\370\360" "\0\0\0\0\0\300\300\200\0\6\6\6\7\217\375\370\0\0\0\0\0\0\1\3\3\3\3\3\3\3\1\0" "\0\0\0\0\0\0\0\0\300\360\70\34\374\374\0\0\0\0\0\0\0\60<\77\63\60\60\60\377\377\60\60" "\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\0\0\0\0\0\0\0\374\374\14\214\214\214\214\14\14" "\0\0\0\0\0\0\300\303\203\3\1\1\1\203\307\377|\0\0\0\0\0\0\1\3\3\3\3\3\3\1\1" "\0\0\0\0\0\0\200\340\360\70\30\34\14\14\14\14\0\0\0\0\0\0\177\377\306\203\3\3\3\207\376\374" "\0\0\0\0\0\0\0\1\1\3\3\3\3\3\1\0\0\0\0\0\0\0\34\34\14\14\14\14\14\314\374<" "\0\0\0\0\0\0\0\0\0\0\200\360~\17\1\0\0\0\0\0\0\0\0\0\0\0\3\3\0\0\0\0" "\0\0\0\0\0\0\360\370\30\14\14\14\14\30\370\360\0\0\0\0\0\0\370\375\217\6\6\6\6\217\375\370" "\0\0\0\0\0\0\0\1\3\3\3\3\3\3\1\0\0\0\0\0\0\0\0\340\370\30\14\14\14\14\30\370" "\340\0\0\0\0\0\0\7\17\34\30\30\30\214\306\377\77\0\0\0\0\0\0\3\3\3\3\3\3\1\1\0" "\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\203\203\203\0\0\0\0" "\0\0\0\0\0\0\0\0\0\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0" "\0\0\0\0\0\0\0\0\0\203\203\203\0\0\0\0\0\0\0\0\0\0\0\30\16\7\3\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300`` \0\0\0\14\14\36\36\63\63aa\300\300\200" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\63\63\63\63\63\63\63\63\63\63\63\63\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 ``\300\300\200\200\0\0\0\0\0\0\0\0\0\0\200\200\300\300aa\63\63\36\36" "\14\14\0\0\0\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\370\30\30\30\30\70\360\340" "\0\0\0\0\0\0\0\0\0\0\270\274\14\6\7\3\0\0\0\0\0\0\0\0\0\0\3\3\0\0\0\0" "\0\0\0\0\0\0\340\370\30\14\14\214\230\370\340\0\0\0\0\0\0\0\377\377\0\36\77sa\177\177`" "\0\0\0\0\0\0\1\7\6\14\14\14\14\6\6\0\0\0\0\0\0\0\30\30\230\370xx\340\200\0\0" "\0\0\0\0\0\300\360~\77\63\60\60\63\77~\360\300\0\0\0\3\3\3\3\3\3\0\0\3\3\3\3" "\3\3\0\0\0\30\30\370\370\30\30\30\30\30\70\360\340\0\0\0\0\0\0\377\377\6\6\6\6\6\7\217" "\375\370\0\0\0\3\3\3\3\3\3\3\3\3\3\3\1\0\0\0\0\200\340\360\60\30\30\30\30\30\60\370" "\370\0\0\0\0\77\377\340\200\0\0\0\0\0\0\200\200\0\0\0\0\0\0\1\1\3\3\3\3\3\3\1" "\1\0\0\0\30\30\370\370\30\30\30\30\30\30\60\360\340\200\0\0\0\0\377\377\0\0\0\0\0\0\200\300" "\377\77\0\0\3\3\3\3\3\3\3\3\3\3\3\1\0\0\0\0\0\30\30\370\370\30\30\30\230\230\30\370" "\370\0\0\0\0\0\0\377\377\6\6\6\37\37\0\0\340\340\0\0\0\3\3\3\3\3\3\3\3\3\3\3" "\3\3\0\0\0\30\30\370\370\30\30\30\230\230\30\30\370\370\0\0\0\0\0\377\377\6\6\6\37\37\0\0" "\0\0\0\0\0\3\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\200\340\360\60\30\30\30\30\30\30\60" "\370\370\0\0\0\77\377\340\200\0\0\0\30\30\30\230\370\370\0\0\0\0\0\1\1\3\3\3\3\3\3\1" "\1\0\0\0\30\30\370\370\30\30\0\0\30\30\370\370\30\30\0\0\0\0\377\377\6\6\6\6\6\6\377\377" "\0\0\0\0\3\3\3\3\3\3\0\0\3\3\3\3\3\3\0\0\0\0\30\30\30\30\370\370\30\30\30\30" "\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3" "\0\0\0\0\0\0\0\0\30\30\30\30\30\370\370\30\30\30\0\0\0\360\360\200\0\0\0\0\200\377\377\0" "\0\0\0\0\0\0\1\3\3\3\3\3\3\1\0\0\0\0\0\0\30\30\370\370\30\30\200\300\370x\70\30" "\30\0\0\0\0\0\377\377\16\7\17\35\70\360\340\200\0\0\0\0\3\3\3\3\3\3\0\0\0\0\3\3" "\3\3\0\0\0\30\30\30\370\370\30\30\30\0\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0\0\340" "\340\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\3\0\0\0\30\370\370x\340\200\0\0\200\340x\370" "\370\30\0\0\0\377\377\0\3\7\34\34\7\3\0\377\377\0\0\0\3\3\3\3\3\0\0\0\0\3\3\3" "\3\3\0\0\0\30\370\370x\340\200\0\0\30\30\370\370\30\0\0\0\0\377\377\0\1\7\36x\340\200\377" "\377\0\0\0\0\3\3\3\3\3\0\0\0\1\3\3\3\0\0\0\0\200\340\360\60\30\30\30\30\30\60\360" "\340\200\0\0\0\77\377\340\200\0\0\0\0\0\200\340\377\77\0\0\0\0\0\1\1\3\3\3\3\3\1\1" "\0\0\0\0\0\30\30\370\370\30\30\30\30\30\30\60\360\340\0\0\0\0\0\377\377\30\30\30\30\30\30\14" "\17\7\0\0\0\3\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\200\340\360\60\30\30\30\30\30\60\360" "\340\200\0\0\0\77\377\340\200\0\0\0\0\0\200\340\377\77\0\0\0\0\0\31\31\37\17\17\33\33\31\31" "\14\14\0\0\30\30\370\370\30\30\30\30\30\60\360\340\0\0\0\0\0\0\377\377\14\14\14\34<\366\347\203" "\0\0\0\0\3\3\3\3\3\3\0\0\0\0\3\3\3\3\0\0\0\0\340\360\70\30\30\30\30\30\60\370" "\370\0\0\0\0\340\341\203\7\6\6\16\14\14\234\370\360\0\0\0\0\3\3\1\3\3\3\3\3\3\3\1" "\0\0\0\0\0\370\370\30\30\30\370\370\30\30\30\370\370\0\0\0\0\1\1\0\0\0\377\377\0\0\0\1" "\1\0\0\0\0\0\0\3\3\3\3\3\3\3\3\0\0\0\0\0\0\30\370\370\30\30\0\0\0\30\30\370" "\370\30\0\0\0\0\177\377\200\0\0\0\0\0\200\377\177\0\0\0\0\0\0\1\3\3\3\3\3\3\3\1" "\0\0\0\0\30x\370\230\30\0\0\0\0\30\230\370x\30\0\0\0\0\3\37|\340\200\200\340|\37\3" "\0\0\0\0\0\0\0\0\0\3\3\3\3\0\0\0\0\0\0\0\30\370\370\30\30\0\300\300\0\30\30\370" "\370\30\0\0\0\37\377\340\374\77\7\7\77\374\340\377\37\0\0\0\0\0\3\3\3\0\0\0\0\3\3\3" "\0\0\0\0\30\70x\370\330\230\0\0\230\330\370x\70\30\0\0\0\200\300\340q;\17\17;q\340\300" "\200\0\0\0\3\3\3\3\3\3\0\0\3\3\3\3\3\3\0\0\30\70x\370\330\30\0\0\30\330\370x" "\70\30\0\0\0\0\0\0\3\7\376\376\7\3\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\0" "\0\0\0\0\0\0\370\370\30\30\30\30\230\330\370x\70\0\0\0\0\0\200\300\340x<\16\7\3\0\340" "\340\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\374\374\14\14\14\0" "\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\60\60\60\0" "\0\0\0\0\0\0\6\36x\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\36x\340\200\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\36\30\0\0\0\0\0\0\14\14\14\374\374\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0\0\0\0\0\0\0\0\60\60\60\77\77\0\0\0\0" "\0\0\0\0\0\0\0\0\300\360<<\360\300\0\0\0\0\0\0\0\0\0\3\3\0\0\0\0\3\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\60\60\60\60\60\60\60\60\60\60\60\60" "\60\60\60\0\0\0\0\0\10\30\60`@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\0\0\0" "\0\0\0\0\0\340\363\63\31\31\31\31\233\377\376\0\0\0\0\0\0\1\3\3\3\3\3\3\1\3\3\3" "\3\0\0\0\0\14\14\374\374\0\200\200\200\200\200\0\0\0\0\0\0\0\0\377\377\307\203\1\1\1\203\307" "\377|\0\0\0\3\3\3\3\1\3\3\3\3\3\1\1\0\0\0\0\0\0\0\200\200\200\200\200\200\0\200" "\200\0\0\0\0|\377\307\203\1\1\1\1\3\207\217\217\0\0\0\0\0\1\1\3\3\3\3\3\3\3\1" "\1\0\0\0\0\0\0\0\200\200\200\200\214\14\374\374\0\0\0\0\0|\377\307\203\1\1\1\203\307\377\377" "\0\0\0\0\0\0\1\1\3\3\3\3\3\1\3\3\3\3\0\0\0\0\0\0\200\200\200\200\200\200\0\0" "\0\0\0\0\0|\377\367\263\61\61\61\61\63\267\277\274\0\0\0\0\0\1\1\3\3\3\3\3\3\3\1" "\1\0\0\0\0\0\200\200\200\360\370\234\214\214\214\214\14\0\0\0\0\0\1\1\1\377\377\1\1\1\1\1" "\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\200\200\200\200\200\0\200\200" "\200\200\0\0\0|\377\307\203\1\1\1\203\307\377\377\1\1\0\0\0\0\1acccccq\77\37" "\0\0\0\0\14\14\374\374\0\200\200\200\200\200\0\0\0\0\0\0\0\0\377\377\7\3\1\1\1\3\377\376" "\0\0\0\0\3\3\3\3\3\3\0\0\3\3\3\3\3\3\0\0\0\0\0\200\200\234\234\234\0\0\0\0" "\0\0\0\0\0\0\0\1\1\1\377\377\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3" "\0\0\0\0\0\0\200\200\200\200\234\234\234\200\0\0\0\0\0\0\0\0\1\1\1\1\1\1\377\377\0\0" "\0\0\0\0\0\0`````p\77\37\0\0\0\0\0\0\0\14\14\374\374\0\0\0\200\200\200\200" "\0\0\0\0\0\0\0\377\377\30<~\347\303\201\1\0\0\0\0\0\3\3\3\3\0\0\0\3\3\3\3" "\3\3\0\0\0\0\0\14\14\14\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0" "\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\0\0\0\0\200\200\200\0\200\200\200\200\0\200\200\200" "\200\0\0\0\1\1\377\377\3\1\1\377\377\3\1\1\377\377\0\0\3\3\3\3\3\0\0\3\3\3\3\0" "\3\3\3\3\200\200\200\200\0\0\200\200\200\200\0\0\0\0\0\0\1\1\377\377\6\3\1\1\1\3\377\376" "\0\0\0\0\3\3\3\3\3\3\0\0\3\3\3\3\3\3\0\0\0\0\0\0\200\200\200\200\200\200\0\0" "\0\0\0\0\0|\377\307\203\1\1\1\1\203\307\377|\0\0\0\0\0\1\1\3\3\3\3\3\3\1\1" "\0\0\0\0\200\200\200\200\0\200\200\200\200\200\0\0\0\0\0\0\1\1\377\377\307\203\1\1\1\203\307\377" "|\0\0\0``\177\177acc\3\3\3\1\1\0\0\0\0\0\0\0\0\200\200\200\200\200\0\200\200" "\200\200\0\0\0|\377\307\203\1\1\1\203\307\377\377\1\1\0\0\0\0\1\1\3\3\3cca\177\177" "``\0\0\0\0\200\200\200\200\0\0\200\200\200\200\0\0\0\0\0\0\1\1\377\377\7\3\1\1\1\3" "\3\0\0\0\0\3\3\3\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\200\200\200\200\200\0\200\200" "\0\0\0\0\0\0\306\317\217\31\31\71\61\63\347\347\300\0\0\0\0\0\3\3\1\3\3\3\3\3\3\1" "\0\0\0\0\0\200\200\370\370\200\200\200\200\200\200\0\0\0\0\0\0\1\1\377\377\201\1\1\1\201\201\200" "\0\0\0\0\0\0\0\0\1\3\3\3\3\3\1\1\0\0\0\0\200\200\200\200\0\0\0\0\200\200\200\200" "\0\0\0\0\1\1\377\377\200\0\0\0\1\201\377\377\0\0\0\0\0\0\0\1\3\3\3\3\3\1\3\3" "\3\3\0\0\200\200\200\200\200\200\0\0\200\200\200\200\200\200\0\0\1\1\7\37y\341\200\200\341y\37\7" "\1\1\0\0\0\0\0\0\0\1\3\3\1\0\0\0\0\0\0\0\200\200\200\200\200\0\0\0\0\200\200\200" "\200\200\0\0\1\7\177\371\301\360>>\360\301\371\177\7\1\0\0\0\0\0\3\3\0\0\0\0\3\3\0" "\0\0\0\0\0\200\200\200\200\200\0\0\200\200\200\200\200\0\0\0\0\1\1\203\307m\70\70m\307\203\1" "\1\0\0\0\0\3\3\3\3\3\0\0\3\3\3\3\3\0\0\0\0\200\200\200\200\200\0\0\200\200\200\200" "\200\0\0\0\0\1\7\37}\361\200\300\361}\37\7\1\0\0\0\0```p}\177g\1\0\0\0" "\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200\0\0\0\0\0\0\207\307\341q\71\35\17\7\303\301" "\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\360\370\14\4\4\0" "\0\0\0\0\0\0\0\0\10\34\377\367\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\37\60 \0" "\0\0\0\0\0\0\0\0\0\0\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\17\17\0\0\0\0\0\0\0\0\0\0\0\4\4\14\370\360\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\367\377\34\10\0\0\0\0\0\0\0\0\0 \60\37\17\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\34\16\6\6\16\34\30\30\34\16" "\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; /* Fontname: -Adobe-Courier-Bold-R-Normal--25-180-100-100-M-150-ISO10646-1 Copyright: Copyright (c) 1984, 1987 Adobe Systems Incorporated. All Rights Reserved. Copyright (c) 1988, 1991 Digital Equipment Corporation. All Rights Reserved. Glyphs: 18/873 BBX Build Mode: 3 */ const uint8_t u8x8_font_courB18_2x3_n[1300] U8X8_FONT_SECTION("u8x8_font_courB18_2x3_n") = " :\2\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\200\0\0\360\360\0\0\200\200\0\0\0\0\0\0\1a{;\17\17;{a\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\0\0\0\0" "\0\0\0\0\0\60\60\60\60\60\377\377\60\60\60\60\60\0\0\0\0\0\0\0\0\0\7\7\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0`\70\36\16\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\60\60\60\60\60\60\60\60\60\60\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\16\16\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340x" "\30\0\0\0\0\0\0\0\0\200\340x\36\7\1\0\0\0\0\0\0\0`x\36\7\1\0\0\0\0\0" "\0\0\0\0\0\0\200\340`\60\60\60\60`\340\200\0\0\0\0\0\0\377\377\0\0\0\0\0\0\377\377" "\0\0\0\0\0\0\1\7\6\14\14\14\14\6\7\1\0\0\0\0\0\0```p\360\360\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0\0\0\0\0\0\0\0\14\14\14\14\17\17\14\14\14\14" "\0\0\0\0\0\0\300\340p\60\60\60\60p\340\300\0\0\0\0\0\0\1\1\200\300\340p\70\34\17\7" "\0\0\0\0\0\14\16\17\17\15\14\14\14\14\14\14\0\0\0\0\0\0\300\340p\60\60\60\60p\340\300" "\0\0\0\0\0\0\0\0\0\30\30\30\34>\367\343\0\0\0\0\0\3\7\16\14\14\14\14\14\16\7\3" "\0\0\0\0\0\0\0\0\0\300\340p\360\360\0\0\0\0\0\0\0\300\360\374\317\303\300\300\377\377\300\300" "\0\0\0\0\0\0\0\0\0\14\14\14\17\17\14\14\0\0\0\0\0\0\0\360\360\60\60\60\60\60\60\60" "\0\0\0\0\0\0\0\17\17\14\6\6\6\16\34\374\360\0\0\0\0\0\3\7\16\14\14\14\14\16\7\7" "\1\0\0\0\0\0\0\200\300\340`p\60\60\60\60\0\0\0\0\0\0\376\377\33\14\14\14\14\34\370\360" "\0\0\0\0\0\0\1\7\7\16\14\14\14\16\7\3\0\0\0\0\0\0pp\60\60\60\60\60\60\360\360" "\0\0\0\0\0\0\0\0\0\0\0\300\370\77\7\0\0\0\0\0\0\0\0\0\0\0\16\17\1\0\0\0" "\0\0\0\0\0\0\300\340`\60\60\60\60`\340\300\0\0\0\0\0\0\343\367<\30\30\30\30<\367\343" "\0\0\0\0\0\0\3\7\16\14\14\14\14\16\7\3\0\0\0\0\0\0\0\200\340`\60\60\60\60`\340" "\200\0\0\0\0\0\0\37\77p```\60\30\377\377\0\0\0\0\0\0\14\14\14\14\14\14\6\7\3" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\16\16\0\0\0\0" "\0\0\0\0\0\0\0\0\0\16\16\16\0\0\0\0\0\0\0"; /* Fontname: -Adobe-Courier-Medium-R-Normal--25-180-100-100-M-150-ISO10646-1 Copyright: Copyright (c) 1984, 1987 Adobe Systems Incorporated. All Rights Reserved. Copyright (c) 1988, 1991 Digital Equipment Corporation. All Rights Reserved. Glyphs: 191/873 BBX Build Mode: 3 */ const uint8_t u8x8_font_courR18_2x3_f[10756] U8X8_FONT_SECTION("u8x8_font_courR18_2x3_f") = " \377\2\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\0\0\0\0" "\0\0\0\0\0\0\0<\374<\0\0<\374<\0\0\0\0\0\0\0\0\0\1\0\0\0\0\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\0\0\374\0\0" "\0\0\0\0\0\0\20\21\21\377\21\21\377\21\21\1\0\0\0\0\0\0\0\0\0\7\0\0\7\0\0\0" "\0\0\0\0\0\0\0\0\300 \20\36\20\20 p\0\0\0\0\0\0\0\300\201\2\4\4\4\4\210p" "\0\0\0\0\0\0\0\1\0\1\1\37\1\1\0\0\0\0\0\0\0\0p\210\4\4\4\210p\0\0\0" "\0\0\0\0\0\10\10\10\5\5\345\22\12\12\11\21\341\0\0\0\0\0\0\0\0\0\0\1\2\2\2\1" "\0\0\0\0\0\0\0\0\300 `@ \0\0\0\0\0\0\0\0\360\10\5\6\30 \340\230\10\0" "\0\0\0\0\0\0\0\1\2\2\2\1\0\1\2\2\0\0\0\0\0\0\0\0\0\0\370\370\370\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\340\30\4\0\0\0\0\0\0\0\0\0\0\0\0\177\200\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\3\14\20\0\0\0\0\0\0\0\0\4\30\340\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\177\0\0\0\0\0\0\0\0\0\0\0\0\20\14\3\0\0\0\0\0\0" "\0\0\0\0\0\0\0 `@\300\374\300@` \0\0\0\0\0\0\0\4\6\3\1\0\1\3\6\4" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\0\0\0\0" "\0\0\0\0\0\0\4\4\4\4\4\377\4\4\4\4\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0" "\0\0\0\0\0\0\0\0\30\16\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\4\4\4\4\4\4\4\4\4\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0" "\0\0\0\0\0\0\0\0\0\0\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\60\14" "\0\0\0\0\0\0\0\0\0\300\60\14\3\0\0\0\0\0\0\0\0\0\0\14\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\60\20\10\10\10\20\60\300\0\0\0\0\0\0\0\177\200\0\0\0\0\0\200\177" "\0\0\0\0\0\0\0\0\1\1\2\2\2\1\1\0\0\0\0\0\0\0\0\20\20\20\10\370\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\2\2\2\2\3\2\2\2\2" "\0\0\0\0\0\0`\20\20\10\10\10\10\20\340\0\0\0\0\0\0\0\0\200@ \20\10\4\2\1\0" "\0\0\0\0\0\0\3\2\2\2\2\2\2\2\2\3\0\0\0\0\0\0\0\20\10\10\10\10\10\20\360\0" "\0\0\0\0\0\0\200\0\0\2\2\2\2\5\4\370\0\0\0\0\0\0\0\1\1\2\2\2\2\1\1\0" "\0\0\0\0\0\0\0\0\0\200`\20\10\370\0\0\0\0\0\0\0\0\60,# \377 " "\0\0\0\0\0\0\0\0\0\0\2\2\2\3\2\2\0\0\0\0\0\0\0\370\10\10\10\10\10\10\10\0" "\0\0\0\0\0\0\0\3\2\1\1\1\1\2\206x\0\0\0\0\0\0\1\1\2\2\2\2\2\1\1\0" "\0\0\0\0\0\0\0\200`\60\20\10\10\10\10\0\0\0\0\0\0\0\0\177\204\2\1\1\1\1\2\374" "\0\0\0\0\0\0\0\0\1\1\2\2\2\2\1\0\0\0\0\0\0\0\70\10\10\10\10\10\10\350\30\0" "\0\0\0\0\0\0\0\0\0\0\200p\17\0\0\0\0\0\0\0\0\0\0\0\0\0\3\0\0\0\0\0" "\0\0\0\0\0\0\0\340\20\10\10\10\10\20\340\0\0\0\0\0\0\0p\211\6\4\4\4\4\6\211p" "\0\0\0\0\0\0\0\1\1\2\2\2\2\1\1\0\0\0\0\0\0\0\0\340\60\20\10\10\10\20\60\340" "\0\0\0\0\0\0\0\1\6\4\10\10\10\4\302\77\0\0\0\0\0\0\0\2\2\2\2\2\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\203\203\203\0\0\0" "\0\0\0\0\0\0\0\0\0\0\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0" "\0\0\0\0\0\0\0\0\0\0\203\203\203\0\0\0\0\0\0\0\0\0\0\0\30\16\7\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200@@ \0\0\0\0\0\4\16\12\21\21 @@\200\200" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\22\22\22\22\22\22\22\22\22\22\22\22\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0 @@\200\200\0\0\0\0\0\0\0\0\0\0\200\200@@ \21\21\12\16" "\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\20\20\20\20\20 \300\0" "\0\0\0\0\0\0\0\0\0\0\60\10\10\4\3\0\0\0\0\0\0\0\0\0\0\0\3\3\0\0\0\0" "\0\0\0\0\0\0\340\30\10\4\4\4\204\210\360\0\0\0\0\0\0\0\377\0\0\0\36!@@\177@" "\0\0\0\0\0\0\1\6\4\10\10\10\10\14\4\0\0\0\0\0\0\0\0\20\20\320\60\20\60\300\0\0" "\0\0\0\0\0\0\200p\36\21\20\20\20\21\36p\200\0\0\0\0\2\3\2\2\0\0\0\0\0\2\2" "\3\2\0\0\0\20\20\360\20\20\20\20\20\20\20 \300\0\0\0\0\0\0\377\4\4\4\4\4\4\4\12" "\361\0\0\0\0\2\2\3\2\2\2\2\2\2\2\1\0\0\0\0\0\0\0\300` \20\20\20\20 @" "\360\0\0\0\0\0\77\300\200\0\0\0\0\0\0\200\300\0\0\0\0\0\0\0\1\1\2\2\2\2\1\1" "\0\0\0\0\0\20\360\20\20\20\20\20\20\20 `\200\0\0\0\0\0\377\0\0\0\0\0\0\0\0\200" "\177\0\0\0\0\2\3\2\2\2\2\2\2\2\1\1\0\0\0\0\0\20\20\360\20\20\20\20\20\20\20\360" "\0\0\0\0\0\0\0\377\4\4\4\37\0\0\0\0\340\0\0\0\0\2\2\3\2\2\2\2\2\2\2\2" "\3\0\0\0\0\0\20\20\360\20\20\20\20\20\20\20\360\0\0\0\0\0\0\0\377\4\4\4\37\0\0\0" "\0\0\0\0\0\0\2\2\3\2\2\2\2\0\0\0\0\0\0\0\0\0\300` \20\20\20\20 @\360" "\0\0\0\0\0\77\300\200\0\0\0\20\20\20\20\360\20\0\0\0\0\0\0\1\1\2\2\2\2\2\1\0" "\0\0\0\0\0\20\20\360\20\20\0\0\0\20\20\360\20\20\0\0\0\0\0\377\4\4\4\4\4\4\4\377" "\0\0\0\0\0\2\2\3\2\2\0\0\0\2\2\3\2\2\0\0\0\0\0\20\20\20\20\360\20\20\20\20" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\2\2\2\2\3\2\2\2\2" "\0\0\0\0\0\0\0\0\0\20\20\20\20\20\360\20\20\20\0\0\0\0\360\0\0\0\0\0\0\200\177\0" "\0\0\0\0\0\0\0\1\2\2\2\2\1\1\0\0\0\0\0\0\0\20\20\360\20\20\0\0\200P\60\20" "\20\0\0\0\0\0\0\377\10\4\6\11\20 \300\0\0\0\0\0\0\2\2\3\2\2\0\0\0\0\2\3" "\2\2\0\0\0\20\20\20\360\20\20\20\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0" "\340\0\0\0\0\2\2\2\3\2\2\2\2\2\2\2\3\0\0\0\0\20\360p\200\0\0\0\0\0\200p" "\360\20\0\0\0\0\377\0\1\6\30\20\30\6\1\0\377\0\0\0\0\2\3\2\2\0\0\0\0\0\2\2" "\3\2\0\0\20\20\360\60@\200\0\0\20\20\20\360\20\20\0\0\0\0\377\0\0\1\6\30`\200\0\377" "\0\0\0\0\2\2\3\2\2\2\0\0\0\0\3\3\0\0\0\0\0\0\300` \20\20\20\20\20 `" "\300\0\0\0\0\77\300\200\0\0\0\0\0\0\0\200\300\77\0\0\0\0\0\1\1\2\2\2\2\2\1\1" "\0\0\0\0\0\0\20\20\360\20\20\20\20\20\20 \300\0\0\0\0\0\0\0\377\10\10\10\10\10\10\4" "\3\0\0\0\0\0\2\2\3\2\2\2\2\0\0\0\0\0\0\0\0\0\300` \20\20\20\20\20 `" "\300\0\0\0\0\77\300\200\0\0\0\0\0\0\0\200\300\77\0\0\0\0\0\1\11\12\6\16\12\12\11\5" "\4\0\0\0\0\20\20\360\20\20\20\20\20\20 \300\0\0\0\0\0\0\0\377\10\10\10\10\30(\304\3" "\0\0\0\0\0\2\2\3\2\2\0\0\0\0\0\3\2\2\0\0\0\0\300 \20\20\20\20 @\360" "\0\0\0\0\0\0\301\202\2\4\4\4\4\10\10\360\0\0\0\0\0\0\3\0\1\2\2\2\2\2\1\0" "\0\0\0\0\0\0\360\20\20\20\20\360\20\20\20\20\360\0\0\0\0\0\1\0\0\0\0\377\0\0\0\0" "\1\0\0\0\0\0\0\0\2\2\2\3\2\2\2\0\0\0\0\0\0\20\360\20\20\20\0\0\20\20\20\360" "\20\0\0\0\0\0\377\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\1\2\2\2\2\2\2\1\0" "\0\0\0\0\0\20p\220\20\20\0\0\0\20\20\220p\20\0\0\0\0\0\1\16p\200\0\200p\16\1" "\0\0\0\0\0\0\0\0\0\0\1\3\1\0\0\0\0\0\0\0\0\20\360\20\20\20\0\200\0\20\20\20" "\360\20\0\0\0\0\7\370\200p\16\1\16p\200\370\7\0\0\0\0\0\0\3\3\0\0\0\0\0\3\3" "\0\0\0\0\0\20\20\60\320\20\0\0\0\20\320\60\20\20\0\0\0\0\0\200@\61\12\4\12\61@\200" "\0\0\0\0\0\2\2\3\2\2\0\0\0\2\2\3\2\2\0\0\0\20\20\60\320\0\0\0\0\0\320\60" "\20\20\0\0\0\0\0\0\0\3\4\370\4\3\0\0\0\0\0\0\0\0\0\0\2\2\2\3\2\2\2\0" "\0\0\0\0\0\0\360\20\20\20\20\20\20\220P\60\0\0\0\0\0\0\1\200@\60\10\4\3\0\0\340" "\0\0\0\0\0\0\3\2\2\2\2\2\2\2\2\3\0\0\0\0\0\0\0\0\0\0\0\374\4\4\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\20\20\0\0" "\0\0\0\0\0\0\0\14\60\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\14\60\300\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\14\0\0\0\0\0\0\0\0\0\4\4\374\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\20\20\37\0\0\0\0" "\0\0\0\0\0\0\0@ \20\10\14\10\20 @\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@@@@@@@@@@@@" "@@@\0\0\0\0\0\4\14\30\60 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\0\0\0" "\0\0\0\0\0\0\340\21\10\10\10\10\10\21\376\0\0\0\0\0\0\0\0\1\2\2\2\2\2\1\3\2" "\2\0\0\0\0\10\10\370\0\0\200\200\200\200\200\0\0\0\0\0\0\0\0\377\202\1\0\0\0\0\0\1" "\203|\0\0\0\2\2\3\0\1\2\2\2\2\2\1\1\0\0\0\0\0\0\0\0\200\200\200\200\200\0\200" "\0\0\0\0\0\0|\203\1\0\0\0\0\0\1\207\200\0\0\0\0\0\0\1\1\2\2\2\2\2\1\1" "\0\0\0\0\0\0\0\0\200\200\200\200\200\10\10\370\0\0\0\0\0|\203\1\0\0\0\0\0\1\202\377" "\0\0\0\0\0\0\1\1\2\2\2\2\2\1\0\3\2\2\0\0\0\0\0\0\0\200\200\200\200\200\0\0" "\0\0\0\0\0\0|\223\21\20\20\20\20\20\21\23\34\0\0\0\0\0\0\1\1\2\2\2\2\2\2\1" "\1\0\0\0\0\0\0\200\200\200\360\230\210\210\210\210\20\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0" "\0\0\0\0\0\0\0\2\2\2\3\2\2\2\2\2\0\0\0\0\0\0\0\0\200\200\200\200\200\0\0\200" "\200\200\0\0\0|\203\1\0\0\0\0\0\1\202\377\0\0\0\0\0\0\1ABBBBB!\60\17" "\0\0\0\0\0\10\10\370\0\0\200\200\200\200\0\0\0\0\0\0\0\0\0\377\2\1\0\0\0\0\1\376" "\0\0\0\0\0\2\2\3\2\2\0\0\0\2\2\3\2\2\0\0\0\0\0\0\200\200\200\234\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\2\2\2\2\3\2\2\2\2" "\0\0\0\0\0\0\0\200\200\200\200\200\200\234\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0" "\0\0\0\0\0\0\0@@@@@ \60\17\0\0\0\0\0\0\0\10\10\370\0\0\0\200\200\200\200" "\0\0\0\0\0\0\0\0\377\20\30$B\201\0\0\0\0\0\0\0\0\2\2\3\0\0\0\0\2\3\2" "\2\0\0\0\0\0\0\10\10\10\10\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0" "\0\0\0\0\0\0\2\2\2\2\2\3\2\2\2\2\2\0\0\0\200\200\200\0\200\200\200\0\0\200\200\200" "\0\0\0\0\0\0\377\1\0\0\0\377\1\0\0\0\377\0\0\0\2\2\3\2\2\0\0\3\2\0\0\0" "\3\2\0\0\0\200\200\200\0\0\200\200\200\200\0\0\0\0\0\0\0\0\0\377\2\1\0\0\0\0\1\376" "\0\0\0\0\0\2\2\3\2\2\0\0\0\2\2\3\2\2\0\0\0\0\0\0\0\200\200\200\200\200\0\0" "\0\0\0\0\0\0|\203\1\0\0\0\0\0\1\203|\0\0\0\0\0\0\1\1\2\2\2\2\2\1\1" "\0\0\0\0\0\200\200\200\0\0\200\200\200\200\200\0\0\0\0\0\0\0\0\377\202\1\0\0\0\0\0\1" "\203|\0\0\0@@\177@AB\2\2\2\2\1\1\0\0\0\0\0\0\0\200\200\200\200\200\0\0\200" "\200\200\0\0\0|\203\1\0\0\0\0\0\1\202\377\0\0\0\0\0\0\1\1\2\2\2\2BA@\177" "@@\0\0\0\0\0\200\200\200\0\0\0\200\200\200\0\0\0\0\0\0\0\0\0\377\2\1\1\0\0\0" "\1\0\0\0\0\0\2\2\2\3\2\2\2\2\2\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\0\200" "\0\0\0\0\0\0\0\200\7\10\10\10\20\20\21\343\0\0\0\0\0\0\0\3\1\2\2\2\2\2\1\0" "\0\0\0\0\0\0\200\200\370\200\200\200\200\200\200\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\1\2\2\2\2\1\1\0\0\0\0\0\200\200\200\0\0\0\0\0\200\200\200" "\0\0\0\0\0\0\0\377\0\0\0\0\0\0\200\377\0\0\0\0\0\0\0\0\1\2\2\2\2\1\0\3" "\2\0\0\0\0\200\200\200\200\200\0\0\0\200\200\200\200\200\0\0\0\0\0\3\34`\200\0\200`\34\3" "\0\0\0\0\0\0\0\0\0\0\1\3\1\0\0\0\0\0\0\0\0\200\200\200\200\0\0\0\0\0\200\200" "\200\200\0\0\0\0\7x\200\0\360\14\360\0\200x\7\0\0\0\0\0\0\0\3\3\0\0\0\3\3\0" "\0\0\0\0\0\0\200\200\200\200\0\0\0\200\200\200\200\0\0\0\0\0\0\1\202D(\20(D\202\1" "\0\0\0\0\0\0\2\3\2\2\0\0\0\2\2\3\2\0\0\0\0\200\200\200\200\0\0\0\0\200\200\200" "\200\0\0\0\0\0\3\34`\200\0\0\300\60\14\3\0\0\0\0\0@@@@qNC\0\0\0\0" "\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\3\200@ \20\10\4\2\201" "\0\0\0\0\0\0\0\3\2\2\2\2\2\2\2\3\0\0\0\0\0\0\0\0\0\0\0\370\4\4\0\0" "\0\0\0\0\0\0\0\0\0\10\10\367\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\20\20\0\0" "\0\0\0\0\0\0\0\0\0\0\0\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\37\0\0\0\0\0\0\0\0\0\0\0\0\0\4\4\370\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\367\10\10\0\0\0\0\0\0\0\0\0\0\0\20\20\17\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\14\6\2\2\6\14\10\10\14\6" "\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\361\201\0\0\0\0\0\0\0\0\0\0\0\0\0\0\177\177\0\0\0\0" "\0\0\0\0\0\0\0\0\200\200@|@\200\300\0\0\0\0\0\0\0\0\16\61 @\300@ !\0" "\0\0\0\0\0\0\0\0\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\300 \20\20\20 \0" "\0\0\0\0\0\0\4\4\207|\4\4\4\0\0\200\0\0\0\0\0\0\2\3\2\2\2\2\2\2\2\1" "\0\0\0\0\0\0@\200\0\200\200\200\200\0\200@\0\0\0\0\0\0\200^!@@@@!^\200" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\20\60\320\20\0\0\0\20\320\60" "\20\0\0\0\0\0\0HHKL\370LKHH\0\0\0\0\0\0\0\0\2\2\2\3\2\2\2\0" "\0\0\0\0\0\0\0\0\0\0\0\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\343\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\37\0\0\0\0\0\0\0\0\0\0\0\200\360\210\4\4\4\4\4<" "\0\0\0\0\0\0\3\4\10\20!!B\304H\60\0\0\0\0\0\0\17\10\10\10\10\10\4\3\0\0" "\0\0\0\0\0\0\0\0\60\60\0\0\0\60\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300 \20\220\220\20\220 " "\300\0\0\0\0\37`\200\216\21 !\23\200\200`\37\0\0\0\0\0\0\0\1\1\1\1\1\0\0" "\0\0\0\0\0\0\0\0 \220PPP\340\0\0\0\0\0\0\0\0\0\0\23\24\24\24\22\27\24\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\0\0\0\200" "\200\0\0\0\0\20\70l\306\203\21\70l\306\203\1\0\0\0\0\0\0\0\0\0\1\3\2\0\0\1\3" "\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\2\2\2\2\2\2\2\2\2" "\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\4\4\4\4\4\4\4\4\4\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300 \220\220\220\220\20 \300\0\0\0\0\37`\200\200\77\4\4\14\63\200\200" "`\37\0\0\0\0\0\0\0\1\1\1\1\1\0\0\0\0\0\0\0\0\0\0 \0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0p\210\4\4\4\210p\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\0\0\0\0" "\0\0\0\0\0\0\2\2\2\2\2\177\2\2\2\2\2\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\0\0\0\20\10\4\204D\70\0\0\0\0\0\0\0\0\0\0\4\6\5\4\4\6\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\4DDd\230\0\0" "\0\0\0\0\0\0\0\0\2\4\4\4\4\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0 \60\30\14\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\200\200\200" "\0\0\0\0\0\0\0\377\0\0\0\0\0\0\200\377\0\0\0\0\0\0\0\177\1\2\2\2\2\1\0\3" "\2\0\0\0\0\0\360\370\10\4\4\374\4\4\374\4\4\0\0\0\0\0\1\3\2\4\4\377\0\0\377\0" "\0\0\0\0\0\0\0\0\10\10\10\17\0\0\17\10\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\16\16\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\20 &\30\0\0\0\0\0\0\0\0\0\0\0\10\10\4\374\0\0\0\0" "\0\0\0\0\0\0\0\0\4\4\4\7\4\4\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300 \20\20\20 \300\0\0\0\0\0\0\0\0\0\21\22\24\24\24\22\21\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\0\0\0\200\200\0\0\0\0" "\0\0\0\0\0\0\1\203\306l\70\21\203\306l\70\20\0\0\0\0\2\3\1\0\0\2\3\1\0\0\0" "\0\0\0\0\10\10\4\374\0\0\0\0\0\0\300 \20\0\0\0\4\4\4\207D\64\14\304\242\231\204\202" "\376\200\0\0\0\0\0\0\0\0\0\0\0\0\0\2\3\2\0\0\10\10\4\374\0\0\0\0\0\0\300 " "\20\0\0\0\4\4\4\207D\64\14\4\12\5\202B\42\34\0\0\0\0\0\0\0\0\0\0\2\3\2\2" "\2\3\0\0\10\4DDd\230\0\0\0\0\300 \20\0\0\0\2\4\4\204D\63\10\304\242\231\204\202" "\376\200\0\0\0\0\0\0\0\0\0\0\0\0\0\2\3\2\0\0\0\0\0\0\0\0\200\200\0\0\0\0" "\0\0\0\0\0\0\0\200@ !\31\0\0\0\0\0\0\0\0\0\0\0\7\10\20\20\20\20\20\14\0" "\0\0\0\0\0\0\0\20\20\321\63\26\64\300\0\0\0\0\0\0\0\0\200p\36\21\20\20\20\21\36p" "\200\0\0\0\0\2\3\2\2\0\0\0\0\0\2\2\3\2\0\0\0\0\0\20\20\320\64\26\63\301\0\0" "\0\0\0\0\0\0\200p\36\21\20\20\20\21\36p\200\0\0\0\0\2\3\2\2\0\0\0\0\0\2\2" "\3\2\0\0\0\0\0\24\26\323\61\21\63\306\4\0\0\0\0\0\0\0\200p\36\21\20\20\20\21\36p" "\200\0\0\0\0\2\3\2\2\0\0\0\0\0\2\2\3\2\0\0\0\0\0\26\23\321\63\26\64\306\3\0" "\0\0\0\0\0\0\200p\36\21\20\20\20\21\36p\200\0\0\0\0\2\3\2\2\0\0\0\0\0\2\2" "\3\2\0\0\0\0\0\20\23\323\60\20\60\303\3\0\0\0\0\0\0\0\200p\36\21\20\20\20\21\36p" "\200\0\0\0\0\2\3\2\2\0\0\0\0\0\2\2\3\2\0\0\0\0\0\20\20\327\70\30\70\307\0\0" "\0\0\0\0\0\0\200p\36\21\20\20\20\21\36p\200\0\0\0\0\2\3\2\2\0\0\0\0\0\2\2" "\3\2\0\0\0\0\0\0\20\320\60\20\360\20\20\20\20\20\360\0\0\0\200p\36\21\20\20\377\4\4\4" "\37\0\340\0\2\2\3\2\0\0\2\2\3\2\2\2\2\2\3\0\0\0\0\300` \20\20\20\20 `" "\360\0\0\0\0\0\77\300\200\0\0\0\0\0\0\200\300\0\0\0\0\0\0\0\1\21\42&\32\2\1\1" "\0\0\0\0\0\20\20\360\20\21\23\26\24\20\20\360\0\0\0\0\0\0\0\377\4\4\4\37\0\0\0\0" "\340\0\0\0\0\2\2\3\2\2\2\2\2\2\2\2\3\0\0\0\0\20\20\360\20\20\24\26\23\21\20\360" "\0\0\0\0\0\0\0\377\4\4\4\37\0\0\0\0\340\0\0\0\0\2\2\3\2\2\2\2\2\2\2\2" "\3\0\0\0\0\20\20\364\26\23\21\21\23\26\24\360\0\0\0\0\0\0\0\377\4\4\4\37\0\0\0\0" "\340\0\0\0\0\2\2\3\2\2\2\2\2\2\2\2\3\0\0\0\0\20\20\360\23\23\20\20\23\23\20\360" "\0\0\0\0\0\0\0\377\4\4\4\37\0\0\0\0\340\0\0\0\0\2\2\3\2\2\2\2\2\2\2\2" "\3\0\0\0\0\0\0\20\20\21\23\366\24\20\20\20\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0" "\0\0\0\0\0\0\0\2\2\2\2\3\2\2\2\2\0\0\0\0\0\0\0\20\20\20\24\366\23\21\20\20" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\2\2\2\2\3\2\2\2\2" "\0\0\0\0\0\0\0\24\26\23\21\361\23\26\24\20\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0" "\0\0\0\0\0\0\0\2\2\2\2\3\2\2\2\2\0\0\0\0\0\0\0\20\23\23\20\360\20\23\23\20" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\2\2\2\2\3\2\2\2\2" "\0\0\0\0\0\20\360\20\20\20\20\20\20\20 `\200\0\0\0\4\4\377\4\4\4\0\0\0\0\0\200" "\177\0\0\0\0\2\3\2\2\2\2\2\2\2\1\1\0\0\0\0\20\20\360\66C\201\3\6\24\26\23\360" "\20\20\0\0\0\0\377\0\0\1\6\30`\200\0\377\0\0\0\0\2\2\3\2\2\2\0\0\0\0\3\3" "\0\0\0\0\0\0\300` \21\23\26\24\20 `\300\0\0\0\0\77\300\200\0\0\0\0\0\0\0\200" "\300\77\0\0\0\0\0\1\1\2\2\2\2\2\1\1\0\0\0\0\0\0\300` \20\20\24\26\23!`" "\300\0\0\0\0\77\300\200\0\0\0\0\0\0\0\200\300\77\0\0\0\0\0\1\1\2\2\2\2\2\1\1" "\0\0\0\0\0\0\300`$\26\23\21\21\23&d\300\0\0\0\0\77\300\200\0\0\0\0\0\0\0\200" "\300\77\0\0\0\0\0\1\1\2\2\2\2\2\1\1\0\0\0\0\0\0\300`&\23\21\23\26\24&c" "\300\0\0\0\0\77\300\200\0\0\0\0\0\0\0\200\300\77\0\0\0\0\0\1\1\2\2\2\2\2\1\1" "\0\0\0\0\0\0\300`#\23\20\20\20\23#`\300\0\0\0\0\77\300\200\0\0\0\0\0\0\0\200" "\300\77\0\0\0\0\0\1\1\2\2\2\2\2\1\1\0\0\0\0\0\0 @\200\0\0\0\0\0\200@" " \0\0\0\0\0\200@ \21\12\4\12\21 @\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300` \20\20\20\20\220``\220\10\0\0\0\77\300\300 \20\10\4\3\0\200\300" "\77\0\0\0\2\1\0\1\1\2\2\2\2\1\1\0\0\0\0\0\0\20\360\20\20\21\3\6\24\20\20\360" "\20\0\0\0\0\0\377\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\1\2\2\2\2\2\2\1\0" "\0\0\0\0\0\20\360\20\20\20\4\6\23\21\20\360\20\0\0\0\0\0\377\0\0\0\0\0\0\0\0\377" "\0\0\0\0\0\0\0\1\2\2\2\2\2\2\1\0\0\0\0\0\0\20\360\24\26\23\1\1\23\26\24\360" "\20\0\0\0\0\0\377\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\1\2\2\2\2\2\2\1\0" "\0\0\0\0\0\20\360\20\23\23\0\0\23\23\20\360\20\0\0\0\0\0\377\0\0\0\0\0\0\0\0\377" "\0\0\0\0\0\0\0\1\2\2\2\2\2\2\1\0\0\0\0\0\0\20\20\60\320\0\4\6\3\1\320\60" "\20\20\0\0\0\0\0\0\0\3\4\370\4\3\0\0\0\0\0\0\0\0\0\0\2\2\2\3\2\2\2\0" "\0\0\0\0\0\0\20\20\360\220\220\200\200\200\200\0\0\0\0\0\0\0\0\0\377@@@@@@!" "\36\0\0\0\0\0\2\2\3\2\2\0\0\0\0\0\0\0\0\0\0\0\0\0\360\10\4\4\4\10\360\0" "\0\0\0\0\0\0\0\0\377\0\0\202\2\3\4\14\360\0\0\0\0\0\2\2\3\2\0\1\2\2\2\1" "\0\0\0\0\0\0\0\0\4\214\230\260\240\0\0\0\0\0\0\0\0\0\300!\21\20\20\20\20\21\376\0" "\0\0\0\0\0\0\1\2\2\2\2\2\2\1\3\2\2\0\0\0\0\0\0\0\0\200\240\260\230\14\4\0" "\0\0\0\0\0\0\300!\21\20\20\20\20\21\376\0\0\0\0\0\0\0\1\2\2\2\2\2\2\1\3\2" "\2\0\0\0\0\0\0 \60\230\214\214\230\60 \0\0\0\0\0\0\0\300!\21\20\20\20\20\21\376\0" "\0\0\0\0\0\0\1\2\2\2\2\2\2\1\3\2\2\0\0\0\0\0\0\60\30\210\230\260\240\60\30\0" "\0\0\0\0\0\0\300!\21\20\20\20\20\21\376\0\0\0\0\0\0\0\1\2\2\2\2\2\2\1\3\2" "\2\0\0\0\0\0\0\0\30\230\200\200\200\30\30\0\0\0\0\0\0\0\300!\21\20\20\20\20\21\376\0" "\0\0\0\0\0\0\1\2\2\2\2\2\2\1\3\2\2\0\0\0\0\0\0\0\0\234\242\242\242\34\0\0" "\0\0\0\0\0\0\300!\21\20\20\20\20\21\376\0\0\0\0\0\0\0\1\2\2\2\2\2\2\1\3\2" "\2\0\0\0\0\0\0\200\200\200\0\0\0\200\200\200\0\0\0\0\300#\21\20\20\20\21\376\21\20\20\20" "\21\23\234\0\1\2\2\2\2\2\1\0\1\2\2\2\2\1\0\0\0\0\0\0\0\200\200\200\200\200\0\200" "\0\0\0\0\0\0|\203\1\0\0\0\0\0\1\207\200\0\0\0\0\0\0\1\1\22\42&\32\2\1\1" "\0\0\0\0\0\0\0\0\4\214\230\260\240\200\0\0\0\0\0\0\0\0|\223\21\20\20\20\20\20\21\23" "\34\0\0\0\0\0\0\1\1\2\2\2\2\2\2\1\1\0\0\0\0\0\0\0\0\200\240\260\230\214\4\0" "\0\0\0\0\0\0|\223\21\20\20\20\20\20\21\23\34\0\0\0\0\0\0\1\1\2\2\2\2\2\2\1" "\1\0\0\0\0\0\0 \60\230\214\214\230\260 \0\0\0\0\0\0\0|\223\21\20\20\20\20\20\21\23" "\34\0\0\0\0\0\0\1\1\2\2\2\2\2\2\1\1\0\0\0\0\0\0\0\30\230\200\200\200\230\30\0" "\0\0\0\0\0\0|\223\21\20\20\20\20\20\21\23\34\0\0\0\0\0\0\1\1\2\2\2\2\2\2\1" "\1\0\0\0\0\0\0\0\204\214\230\260 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0" "\0\0\0\0\0\0\0\2\2\2\2\3\2\2\2\2\0\0\0\0\0\0\0\0\200\200\240\260\30\14\4\0" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\2\2\2\2\3\2\2\2\2" "\0\0\0\0\0\0\0 \260\230\214\214\30\60 \0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0" "\0\0\0\0\0\0\0\2\2\2\2\3\2\2\2\2\0\0\0\0\0\0\0\0\230\230\200\200\0\30\30\0" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\2\2\2\2\3\2\2\2\2" "\0\0\0\0\0\10\4$$\224\234\210\230\244\304\200\0\0\0\0\0\0|\203\1\0\0\0\0\0\1\203" "~\0\0\0\0\0\0\1\1\2\2\2\2\2\1\1\0\0\0\0\0\200\200\260\30\10\230\260\240\260\30\0" "\0\0\0\0\0\0\0\377\2\1\0\0\0\0\1\376\0\0\0\0\0\2\2\3\2\2\0\0\0\2\2\3" "\2\2\0\0\0\0\0\0\0\204\214\230\260\240\0\0\0\0\0\0\0\0|\203\1\0\0\0\0\0\1\203" "|\0\0\0\0\0\0\1\1\2\2\2\2\2\1\1\0\0\0\0\0\0\0\0\0\200\240\260\230\214\4\0" "\0\0\0\0\0\0|\203\1\0\0\0\0\0\1\203|\0\0\0\0\0\0\1\1\2\2\2\2\2\1\1" "\0\0\0\0\0\0\0 \60\230\214\214\230\260 \0\0\0\0\0\0\0|\203\1\0\0\0\0\0\1\203" "|\0\0\0\0\0\0\1\1\2\2\2\2\2\1\1\0\0\0\0\0\0\0\0\60\230\210\230\260\240\60\30" "\0\0\0\0\0\0|\203\1\0\0\0\0\0\1\203|\0\0\0\0\0\0\1\1\2\2\2\2\2\1\1" "\0\0\0\0\0\0\0\0\30\230\200\200\200\230\30\0\0\0\0\0\0\0|\203\1\0\0\0\0\0\1\203" "|\0\0\0\0\0\0\1\1\2\2\2\2\2\1\1\0\0\0\0\0\0\0\0\0\0\300\300\300\0\0\0" "\0\0\0\0\0\0\4\4\4\4ddd\4\4\4\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\200\200\200\200\0\200@\0\0\0\0\0|\203A \20\10\4\2\1\202" "|\0\0\0\0\2\1\0\1\2\2\2\2\2\1\1\0\0\0\0\0\200\200\200\4\14\30\60 \200\200\200" "\0\0\0\0\0\0\0\377\0\0\0\0\0\0\200\377\0\0\0\0\0\0\0\0\1\2\2\2\2\1\0\3" "\2\0\0\0\0\200\200\200\0\0 \60\30\214\204\200\0\0\0\0\0\0\0\377\0\0\0\0\0\0\200\377" "\0\0\0\0\0\0\0\0\1\2\2\2\2\1\0\3\2\0\0\0\0\200\200\240\60\30\14\14\30\260\240\200" "\0\0\0\0\0\0\0\377\0\0\0\0\0\0\200\377\0\0\0\0\0\0\0\0\1\2\2\2\2\1\0\3" "\2\0\0\0\0\200\200\200\30\30\0\0\30\230\200\200\0\0\0\0\0\0\0\377\0\0\0\0\0\0\200\377" "\0\0\0\0\0\0\0\0\1\2\2\2\2\1\0\3\2\0\0\0\0\200\200\200\200\0 \60\30\214\204\200" "\200\0\0\0\0\0\3\34`\200\0\0\300\60\14\3\0\0\0\0\0@@@@qNC\0\0\0\0" "\0\0\0\0\0\4\4\374\0\0\200\200\200\200\200\0\0\0\0\0\0\0\0\377\203\1\0\0\0\0\0\1" "\203|\0\0\0@@\177AAB\2\2\2\2\1\1\0\0\0\0\200\200\200\230\30\0\0\30\230\200\200" "\200\0\0\0\0\0\3\34`\200\0\0\300\60\14\3\0\0\0\0\0@@@@qNC\0\0\0\0" "\0\0\0"; /* Fontname: -Adobe-Courier-Medium-R-Normal--25-180-100-100-M-150-ISO10646-1 Copyright: Copyright (c) 1984, 1987 Adobe Systems Incorporated. All Rights Reserved. Copyright (c) 1988, 1991 Digital Equipment Corporation. All Rights Reserved. Glyphs: 95/873 BBX Build Mode: 3 */ const uint8_t u8x8_font_courR18_2x3_r[4564] U8X8_FONT_SECTION("u8x8_font_courR18_2x3_r") = " ~\2\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\0\0\0\0" "\0\0\0\0\0\0\0<\374<\0\0<\374<\0\0\0\0\0\0\0\0\0\1\0\0\0\0\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\0\0\374\0\0" "\0\0\0\0\0\0\20\21\21\377\21\21\377\21\21\1\0\0\0\0\0\0\0\0\0\7\0\0\7\0\0\0" "\0\0\0\0\0\0\0\0\300 \20\36\20\20 p\0\0\0\0\0\0\0\300\201\2\4\4\4\4\210p" "\0\0\0\0\0\0\0\1\0\1\1\37\1\1\0\0\0\0\0\0\0\0p\210\4\4\4\210p\0\0\0" "\0\0\0\0\0\10\10\10\5\5\345\22\12\12\11\21\341\0\0\0\0\0\0\0\0\0\0\1\2\2\2\1" "\0\0\0\0\0\0\0\0\300 `@ \0\0\0\0\0\0\0\0\360\10\5\6\30 \340\230\10\0" "\0\0\0\0\0\0\0\1\2\2\2\1\0\1\2\2\0\0\0\0\0\0\0\0\0\0\370\370\370\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\340\30\4\0\0\0\0\0\0\0\0\0\0\0\0\177\200\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\3\14\20\0\0\0\0\0\0\0\0\4\30\340\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\177\0\0\0\0\0\0\0\0\0\0\0\0\20\14\3\0\0\0\0\0\0" "\0\0\0\0\0\0\0 `@\300\374\300@` \0\0\0\0\0\0\0\4\6\3\1\0\1\3\6\4" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\0\0\0\0" "\0\0\0\0\0\0\4\4\4\4\4\377\4\4\4\4\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0" "\0\0\0\0\0\0\0\0\30\16\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\4\4\4\4\4\4\4\4\4\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0" "\0\0\0\0\0\0\0\0\0\0\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\60\14" "\0\0\0\0\0\0\0\0\0\300\60\14\3\0\0\0\0\0\0\0\0\0\0\14\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\60\20\10\10\10\20\60\300\0\0\0\0\0\0\0\177\200\0\0\0\0\0\200\177" "\0\0\0\0\0\0\0\0\1\1\2\2\2\1\1\0\0\0\0\0\0\0\0\20\20\20\10\370\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\2\2\2\2\3\2\2\2\2" "\0\0\0\0\0\0`\20\20\10\10\10\10\20\340\0\0\0\0\0\0\0\0\200@ \20\10\4\2\1\0" "\0\0\0\0\0\0\3\2\2\2\2\2\2\2\2\3\0\0\0\0\0\0\0\20\10\10\10\10\10\20\360\0" "\0\0\0\0\0\0\200\0\0\2\2\2\2\5\4\370\0\0\0\0\0\0\0\1\1\2\2\2\2\1\1\0" "\0\0\0\0\0\0\0\0\0\200`\20\10\370\0\0\0\0\0\0\0\0\60,# \377 " "\0\0\0\0\0\0\0\0\0\0\2\2\2\3\2\2\0\0\0\0\0\0\0\370\10\10\10\10\10\10\10\0" "\0\0\0\0\0\0\0\3\2\1\1\1\1\2\206x\0\0\0\0\0\0\1\1\2\2\2\2\2\1\1\0" "\0\0\0\0\0\0\0\200`\60\20\10\10\10\10\0\0\0\0\0\0\0\0\177\204\2\1\1\1\1\2\374" "\0\0\0\0\0\0\0\0\1\1\2\2\2\2\1\0\0\0\0\0\0\0\70\10\10\10\10\10\10\350\30\0" "\0\0\0\0\0\0\0\0\0\0\200p\17\0\0\0\0\0\0\0\0\0\0\0\0\0\3\0\0\0\0\0" "\0\0\0\0\0\0\0\340\20\10\10\10\10\20\340\0\0\0\0\0\0\0p\211\6\4\4\4\4\6\211p" "\0\0\0\0\0\0\0\1\1\2\2\2\2\1\1\0\0\0\0\0\0\0\0\340\60\20\10\10\10\20\60\340" "\0\0\0\0\0\0\0\1\6\4\10\10\10\4\302\77\0\0\0\0\0\0\0\2\2\2\2\2\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\203\203\203\0\0\0" "\0\0\0\0\0\0\0\0\0\0\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0" "\0\0\0\0\0\0\0\0\0\0\203\203\203\0\0\0\0\0\0\0\0\0\0\0\30\16\7\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200@@ \0\0\0\0\0\4\16\12\21\21 @@\200\200" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\22\22\22\22\22\22\22\22\22\22\22\22\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0 @@\200\200\0\0\0\0\0\0\0\0\0\0\200\200@@ \21\21\12\16" "\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\20\20\20\20\20 \300\0" "\0\0\0\0\0\0\0\0\0\0\60\10\10\4\3\0\0\0\0\0\0\0\0\0\0\0\3\3\0\0\0\0" "\0\0\0\0\0\0\340\30\10\4\4\4\204\210\360\0\0\0\0\0\0\0\377\0\0\0\36!@@\177@" "\0\0\0\0\0\0\1\6\4\10\10\10\10\14\4\0\0\0\0\0\0\0\0\20\20\320\60\20\60\300\0\0" "\0\0\0\0\0\0\200p\36\21\20\20\20\21\36p\200\0\0\0\0\2\3\2\2\0\0\0\0\0\2\2" "\3\2\0\0\0\20\20\360\20\20\20\20\20\20\20 \300\0\0\0\0\0\0\377\4\4\4\4\4\4\4\12" "\361\0\0\0\0\2\2\3\2\2\2\2\2\2\2\1\0\0\0\0\0\0\0\300` \20\20\20\20 @" "\360\0\0\0\0\0\77\300\200\0\0\0\0\0\0\200\300\0\0\0\0\0\0\0\1\1\2\2\2\2\1\1" "\0\0\0\0\0\20\360\20\20\20\20\20\20\20 `\200\0\0\0\0\0\377\0\0\0\0\0\0\0\0\200" "\177\0\0\0\0\2\3\2\2\2\2\2\2\2\1\1\0\0\0\0\0\20\20\360\20\20\20\20\20\20\20\360" "\0\0\0\0\0\0\0\377\4\4\4\37\0\0\0\0\340\0\0\0\0\2\2\3\2\2\2\2\2\2\2\2" "\3\0\0\0\0\0\20\20\360\20\20\20\20\20\20\20\360\0\0\0\0\0\0\0\377\4\4\4\37\0\0\0" "\0\0\0\0\0\0\2\2\3\2\2\2\2\0\0\0\0\0\0\0\0\0\300` \20\20\20\20 @\360" "\0\0\0\0\0\77\300\200\0\0\0\20\20\20\20\360\20\0\0\0\0\0\0\1\1\2\2\2\2\2\1\0" "\0\0\0\0\0\20\20\360\20\20\0\0\0\20\20\360\20\20\0\0\0\0\0\377\4\4\4\4\4\4\4\377" "\0\0\0\0\0\2\2\3\2\2\0\0\0\2\2\3\2\2\0\0\0\0\0\20\20\20\20\360\20\20\20\20" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\2\2\2\2\3\2\2\2\2" "\0\0\0\0\0\0\0\0\0\20\20\20\20\20\360\20\20\20\0\0\0\0\360\0\0\0\0\0\0\200\177\0" "\0\0\0\0\0\0\0\1\2\2\2\2\1\1\0\0\0\0\0\0\0\20\20\360\20\20\0\0\200P\60\20" "\20\0\0\0\0\0\0\377\10\4\6\11\20 \300\0\0\0\0\0\0\2\2\3\2\2\0\0\0\0\2\3" "\2\2\0\0\0\20\20\20\360\20\20\20\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0" "\340\0\0\0\0\2\2\2\3\2\2\2\2\2\2\2\3\0\0\0\0\20\360p\200\0\0\0\0\0\200p" "\360\20\0\0\0\0\377\0\1\6\30\20\30\6\1\0\377\0\0\0\0\2\3\2\2\0\0\0\0\0\2\2" "\3\2\0\0\20\20\360\60@\200\0\0\20\20\20\360\20\20\0\0\0\0\377\0\0\1\6\30`\200\0\377" "\0\0\0\0\2\2\3\2\2\2\0\0\0\0\3\3\0\0\0\0\0\0\300` \20\20\20\20\20 `" "\300\0\0\0\0\77\300\200\0\0\0\0\0\0\0\200\300\77\0\0\0\0\0\1\1\2\2\2\2\2\1\1" "\0\0\0\0\0\0\20\20\360\20\20\20\20\20\20 \300\0\0\0\0\0\0\0\377\10\10\10\10\10\10\4" "\3\0\0\0\0\0\2\2\3\2\2\2\2\0\0\0\0\0\0\0\0\0\300` \20\20\20\20\20 `" "\300\0\0\0\0\77\300\200\0\0\0\0\0\0\0\200\300\77\0\0\0\0\0\1\11\12\6\16\12\12\11\5" "\4\0\0\0\0\20\20\360\20\20\20\20\20\20 \300\0\0\0\0\0\0\0\377\10\10\10\10\30(\304\3" "\0\0\0\0\0\2\2\3\2\2\0\0\0\0\0\3\2\2\0\0\0\0\300 \20\20\20\20 @\360" "\0\0\0\0\0\0\301\202\2\4\4\4\4\10\10\360\0\0\0\0\0\0\3\0\1\2\2\2\2\2\1\0" "\0\0\0\0\0\0\360\20\20\20\20\360\20\20\20\20\360\0\0\0\0\0\1\0\0\0\0\377\0\0\0\0" "\1\0\0\0\0\0\0\0\2\2\2\3\2\2\2\0\0\0\0\0\0\20\360\20\20\20\0\0\20\20\20\360" "\20\0\0\0\0\0\377\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\1\2\2\2\2\2\2\1\0" "\0\0\0\0\0\20p\220\20\20\0\0\0\20\20\220p\20\0\0\0\0\0\1\16p\200\0\200p\16\1" "\0\0\0\0\0\0\0\0\0\0\1\3\1\0\0\0\0\0\0\0\0\20\360\20\20\20\0\200\0\20\20\20" "\360\20\0\0\0\0\7\370\200p\16\1\16p\200\370\7\0\0\0\0\0\0\3\3\0\0\0\0\0\3\3" "\0\0\0\0\0\20\20\60\320\20\0\0\0\20\320\60\20\20\0\0\0\0\0\200@\61\12\4\12\61@\200" "\0\0\0\0\0\2\2\3\2\2\0\0\0\2\2\3\2\2\0\0\0\20\20\60\320\0\0\0\0\0\320\60" "\20\20\0\0\0\0\0\0\0\3\4\370\4\3\0\0\0\0\0\0\0\0\0\0\2\2\2\3\2\2\2\0" "\0\0\0\0\0\0\360\20\20\20\20\20\20\220P\60\0\0\0\0\0\0\1\200@\60\10\4\3\0\0\340" "\0\0\0\0\0\0\3\2\2\2\2\2\2\2\2\3\0\0\0\0\0\0\0\0\0\0\0\374\4\4\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\20\20\0\0" "\0\0\0\0\0\0\0\14\60\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\14\60\300\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\14\0\0\0\0\0\0\0\0\0\4\4\374\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\20\20\37\0\0\0\0" "\0\0\0\0\0\0\0@ \20\10\14\10\20 @\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@@@@@@@@@@@@" "@@@\0\0\0\0\0\4\14\30\60 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\0\0\0" "\0\0\0\0\0\0\340\21\10\10\10\10\10\21\376\0\0\0\0\0\0\0\0\1\2\2\2\2\2\1\3\2" "\2\0\0\0\0\10\10\370\0\0\200\200\200\200\200\0\0\0\0\0\0\0\0\377\202\1\0\0\0\0\0\1" "\203|\0\0\0\2\2\3\0\1\2\2\2\2\2\1\1\0\0\0\0\0\0\0\0\200\200\200\200\200\0\200" "\0\0\0\0\0\0|\203\1\0\0\0\0\0\1\207\200\0\0\0\0\0\0\1\1\2\2\2\2\2\1\1" "\0\0\0\0\0\0\0\0\200\200\200\200\200\10\10\370\0\0\0\0\0|\203\1\0\0\0\0\0\1\202\377" "\0\0\0\0\0\0\1\1\2\2\2\2\2\1\0\3\2\2\0\0\0\0\0\0\0\200\200\200\200\200\0\0" "\0\0\0\0\0\0|\223\21\20\20\20\20\20\21\23\34\0\0\0\0\0\0\1\1\2\2\2\2\2\2\1" "\1\0\0\0\0\0\0\200\200\200\360\230\210\210\210\210\20\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0" "\0\0\0\0\0\0\0\2\2\2\3\2\2\2\2\2\0\0\0\0\0\0\0\0\200\200\200\200\200\0\0\200" "\200\200\0\0\0|\203\1\0\0\0\0\0\1\202\377\0\0\0\0\0\0\1ABBBBB!\60\17" "\0\0\0\0\0\10\10\370\0\0\200\200\200\200\0\0\0\0\0\0\0\0\0\377\2\1\0\0\0\0\1\376" "\0\0\0\0\0\2\2\3\2\2\0\0\0\2\2\3\2\2\0\0\0\0\0\0\200\200\200\234\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\2\2\2\2\3\2\2\2\2" "\0\0\0\0\0\0\0\200\200\200\200\200\200\234\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0" "\0\0\0\0\0\0\0@@@@@ \60\17\0\0\0\0\0\0\0\10\10\370\0\0\0\200\200\200\200" "\0\0\0\0\0\0\0\0\377\20\30$B\201\0\0\0\0\0\0\0\0\2\2\3\0\0\0\0\2\3\2" "\2\0\0\0\0\0\0\10\10\10\10\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0" "\0\0\0\0\0\0\2\2\2\2\2\3\2\2\2\2\2\0\0\0\200\200\200\0\200\200\200\0\0\200\200\200" "\0\0\0\0\0\0\377\1\0\0\0\377\1\0\0\0\377\0\0\0\2\2\3\2\2\0\0\3\2\0\0\0" "\3\2\0\0\0\200\200\200\0\0\200\200\200\200\0\0\0\0\0\0\0\0\0\377\2\1\0\0\0\0\1\376" "\0\0\0\0\0\2\2\3\2\2\0\0\0\2\2\3\2\2\0\0\0\0\0\0\0\200\200\200\200\200\0\0" "\0\0\0\0\0\0|\203\1\0\0\0\0\0\1\203|\0\0\0\0\0\0\1\1\2\2\2\2\2\1\1" "\0\0\0\0\0\200\200\200\0\0\200\200\200\200\200\0\0\0\0\0\0\0\0\377\202\1\0\0\0\0\0\1" "\203|\0\0\0@@\177@AB\2\2\2\2\1\1\0\0\0\0\0\0\0\200\200\200\200\200\0\0\200" "\200\200\0\0\0|\203\1\0\0\0\0\0\1\202\377\0\0\0\0\0\0\1\1\2\2\2\2BA@\177" "@@\0\0\0\0\0\200\200\200\0\0\0\200\200\200\0\0\0\0\0\0\0\0\0\377\2\1\1\0\0\0" "\1\0\0\0\0\0\2\2\2\3\2\2\2\2\2\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\0\200" "\0\0\0\0\0\0\0\200\7\10\10\10\20\20\21\343\0\0\0\0\0\0\0\3\1\2\2\2\2\2\1\0" "\0\0\0\0\0\0\200\200\370\200\200\200\200\200\200\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\1\2\2\2\2\1\1\0\0\0\0\0\200\200\200\0\0\0\0\0\200\200\200" "\0\0\0\0\0\0\0\377\0\0\0\0\0\0\200\377\0\0\0\0\0\0\0\0\1\2\2\2\2\1\0\3" "\2\0\0\0\0\200\200\200\200\200\0\0\0\200\200\200\200\200\0\0\0\0\0\3\34`\200\0\200`\34\3" "\0\0\0\0\0\0\0\0\0\0\1\3\1\0\0\0\0\0\0\0\0\200\200\200\200\0\0\0\0\0\200\200" "\200\200\0\0\0\0\7x\200\0\360\14\360\0\200x\7\0\0\0\0\0\0\0\3\3\0\0\0\3\3\0" "\0\0\0\0\0\0\200\200\200\200\0\0\0\200\200\200\200\0\0\0\0\0\0\1\202D(\20(D\202\1" "\0\0\0\0\0\0\2\3\2\2\0\0\0\2\2\3\2\0\0\0\0\200\200\200\200\0\0\0\0\200\200\200" "\200\0\0\0\0\0\3\34`\200\0\0\300\60\14\3\0\0\0\0\0@@@@qNC\0\0\0\0" "\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\3\200@ \20\10\4\2\201" "\0\0\0\0\0\0\0\3\2\2\2\2\2\2\2\3\0\0\0\0\0\0\0\0\0\0\0\370\4\4\0\0" "\0\0\0\0\0\0\0\0\0\10\10\367\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\20\20\0\0" "\0\0\0\0\0\0\0\0\0\0\0\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\37\0\0\0\0\0\0\0\0\0\0\0\0\0\4\4\370\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\367\10\10\0\0\0\0\0\0\0\0\0\0\0\20\20\17\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\14\6\2\2\6\14\10\10\14\6" "\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; /* Fontname: -Adobe-Courier-Medium-R-Normal--25-180-100-100-M-150-ISO10646-1 Copyright: Copyright (c) 1984, 1987 Adobe Systems Incorporated. All Rights Reserved. Copyright (c) 1988, 1991 Digital Equipment Corporation. All Rights Reserved. Glyphs: 18/873 BBX Build Mode: 3 */ const uint8_t u8x8_font_courR18_2x3_n[1300] U8X8_FONT_SECTION("u8x8_font_courR18_2x3_n") = " :\2\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\200\0\0\360\0\0\200\200\0\0\0\0\0\0\0\20\31\15\7\3\7\15\31\20" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\0\0\0\0" "\0\0\0\0\0\0\20\20\20\20\20\377\20\20\20\20\20\0\0\0\0\0\0\0\0\0\0\3\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0`\70\36\16\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\20\20\20\20\20\20\20\20\20\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\16\16\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\60" "\0\0\0\0\0\0\0\0\0\0\300\60\14\3\0\0\0\0\0\0\0\0\0\60\14\3\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300@ @\300\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\377" "\0\0\0\0\0\0\0\1\6\4\10\10\10\4\6\1\0\0\0\0\0\0\0@@@ \340\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\10\10\10\10\17\10\10\10\10" "\0\0\0\0\0\0\200@@ @\200\0\0\0\0\0\0\0\1\0\0\200@ \20\10\7\0" "\0\0\0\0\0\0\14\12\11\10\10\10\10\10\10\14\0\0\0\0\0\0\0@ @\300\0" "\0\0\0\0\0\0\0\0\0\10\10\10\10\24\23\340\0\0\0\0\0\0\2\4\4\10\10\10\10\4\4\3" "\0\0\0\0\0\0\0\0\0\0\200@ \340\0\0\0\0\0\0\0\0\300\260\214\202\201\200\200\377\200\200" "\0\0\0\0\0\0\0\0\0\0\10\10\10\17\10\10\0\0\0\0\0\0\0\340 \0" "\0\0\0\0\0\0\0\17\10\4\4\4\4\10\30\340\0\0\0\0\0\0\4\4\10\10\10\10\10\4\6\1" "\0\0\0\0\0\0\0\0\200\300@ \0\0\0\0\0\0\0\0\376\21\10\4\4\4\4\10\360" "\0\0\0\0\0\0\0\1\6\4\10\10\10\10\4\3\0\0\0\0\0\0\340 \240`\0" "\0\0\0\0\0\0\0\0\0\0\0\300<\3\0\0\0\0\0\0\0\0\0\0\0\0\16\1\0\0\0\0" "\0\0\0\0\0\0\0\200@ @\200\0\0\0\0\0\0\0\300'\30\20\20\20\20\30'\300" "\0\0\0\0\0\0\1\6\4\10\10\10\10\4\6\1\0\0\0\0\0\0\0\200\300@ @\300\200" "\0\0\0\0\0\0\0\7\30\20 \20\10\377\0\0\0\0\0\0\0\10\10\10\10\10\4\4\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\16\16\0\0\0" "\0\0\0\0\0\0\0\0\0\0\16\16\16\0\0\0\0\0\0"; /* Fontname: -Adobe-Courier-Bold-R-Normal--34-240-100-100-M-200-ISO10646-1 Copyright: Copyright (c) 1984, 1987 Adobe Systems Incorporated. All Rights Reserved. Copyright (c) 1988, 1991 Digital Equipment Corporation. All Rights Reserved. Glyphs: 191/873 BBX Build Mode: 3 */ const uint8_t u8x8_font_courB24_3x4_f[21508] U8X8_FONT_SECTION("u8x8_font_courB24_3x4_f") = " \377\3\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\370\374\374\374\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 qsq " "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\370\370\370\0\0\0\370\370\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\17\37\17\0\0\0\17\37\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\200\207" "\207\377\377\377\207\207\207\377\377\377\207\207\7\0\0\0\0\0\0\0\0\0\3\3\377\377\377\3\3\3\377\377" "\377\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\0\0\0\3\3\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\360p\70\77\77\77\70x\360\370\370\0\0\0\0\0\0\0\0\0\0\0\7" "\17\37\36\34<<\70xx\361\361\341\300\0\0\0\0\0\0\0\0\0\0\77\77\77\34\30\370\370\370\70" "\30\34\37\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\340\370\34\14\14\14\34\370\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\301" "\303\347ff\66\267\333\331\334\314\316\206\7\0\0\0\0\0\0\0\0\0\1\1\0\0\0\0\17\77q`" "``q\77\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\300\340\340\340\340\300\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "\317\377\377\371\340\300\200\1\301\300\300\300\0\0\0\0\0\0\0\0\0\0\37\77\177qppqs\77\36" "\177\177qq\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\374\374|\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\374<\34\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\370\377\377\77\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\77\377\377" "\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\17\16\0\0\0\0\0" "\0\0\0\0\0\0\0\0\34<\374\360\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\1\77\377\377\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\377\377\77\7\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\17\17\3\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\300\200\200\0\374\374\374\0\200\200\300\300\200\0\0\0\0\0\0\0\0\0\0" "A\341\363\177\77\37\17\37\77\177\363\341A\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\340\340\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0ppp" "pppp\377\377\377ppppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\374|<\14" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\17\7\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0pp" "ppppppppppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\60xxx\60" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\374\377\37\7\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\300\360\374\177\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\77\17\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370x\34\34\34\34\34x\370\360\300\0\0\0\0\0\0\0\0\0\0\0\377" "\377\377\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\7\37\77\177\367\343\200\0\0\0\0\0\0\0\0\0\70\70xppppppp" "x<\77\37\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\340\370|\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\200\340" "\360\374\277\217\207\201\200\377\377\377\200\200\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3sss\177" "\177\177ss\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\374\374\374\34\34\34\34\34\34\34\34\34\0\0\0\0\0\0\0\0\0\0\0\0" "\37\37\37\16\16\16\16\36\36<\374\370\340\0\0\0\0\0\0\0\0\0\30<\70xpppppp" "x<\77\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360x\70<\34\34\34\34\34\0\0\0\0\0\0\0\0\0\0\0\374" "\377\377s\70\30\34\34\34xpppp" "x<\77\37\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\374\374\374\34\34\34\34\34\34\34\374\374\374<\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\360\376\377\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0p|\177\37\7" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370\70\34\34\34\34\34\70\370\360\300\0\0\0\0\0\0\0\0\0\0\0\301" "\347\377~<<\34\34<>\177\367\341\300\0\0\0\0\0\0\0\0\0\0\17\37\77\70xpppp" "x\70\77\37\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370x<\34\34\34\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70\70\370\370\370\70\70\70\70\70\70\70\370\370\370\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\70\70\70\376\376\376\0\3\3\3\0\0\0\0\0\0\0\0ppp\177\177\177ppppp" "ppp\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70\70\370\370\370\70\70\70\70\70\70\70\70\370\370\370\0\0\0\0\0\0\0\0\0\0" "\377\377\377\70\70\70\376\376\376\0\0\3\3\3\0\0\0\0\0\0\0ppp\177\177\177ppppp" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\360p\70\70\70\70\70\70p\360\370\370\0\0\0\0\0\0\0\0\376\377" "\377\3\0\0\0\0\300\300\300\300\300\303\303\303\300\0\0\0\0\0\0\0\3\17\37>\70xppqq" "qqy\77\77\37\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70\370\370\370\70\70\70\0\70\70\70\370\370\370\70\70\0\0\0\0\0\0\0\0\0\377" "\377\377\70\70\70\70\70\70\70\377\377\377\0\0\0\0\0\0\0\0\0pp\177\177\177ppp\0pp" "p\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\70\70\70\70\70\370\370\370\70\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0ppppp\177\177\177p" "pppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70\370\370\370\70\70\70\70\0\0\0\0\0\0\0\340\340" "\340\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\37\77\77xppppx<" "\77\37\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70\70\370\370\370\70\70\70\0\0\270\370\370\370x\70\70\0\0\0\0\0\0\0\0\0" "\377\377\377x\70<~\377\367\343\301\0\0\0\0\0\0\0\0\0\0ppp\177\177\177ppp\0\0" "\1\7\177\177|ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70\70\70\370\370\370\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\377\377\377\0\0\0\0\0\0\0\300\300\300\0\0\0\0\0\0\0pppp\177\177\177pppp" "ppp\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\70\370\370\370\370\340\200\0\0\0\0\0\200\340\370\370\370\370\70\70\0\0\0\0\0\377\377" "\377\1\17\77\376\370\300\370\376\77\17\1\377\377\377\0\0\0\0\0pp\177\177\177ppp\1\7\7\7" "\1ppp\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\70\370\370\370\360\340\200\0\0\0\70\70\70\370\370\370\70\70\0\0\0\0\0\0\0\377\377" "\377\1\7\37>\374\360\340\200\0\377\377\377\0\0\0\0\0\0\0pp\177\177\177ppp\0\0\1\7" "\17>\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\360p\70\70\70\70\70\70p\360\340\300\200\0\0\0\0\0\0\0\376\377\377" "\3\0\0\0\0\0\0\0\0\0\0\3\377\377\376\0\0\0\0\0\0\1\7\17\37<\70ppppp" "p\70<\37\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70\70\370\370\370\70\70\70\70\70\70xp\360\340\200\0\0\0\0\0\0\0\0\0\0" "\377\377\377\340\340\340\340\340\340px\77\37\17\0\0\0\0\0\0\0ppp\177\177\177ppppp" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\360p\70\70\70\70\70\70p\340\340\300\200\0\0\0\0\0\0\0\376\377\377" "\3\0\0\0\0\0\0\0\0\0\0\3\377\377\376\0\0\0\0\0\0\1\7\17\36\274\370\360pppp" "p\70<\36\17\7\1\0\0\0\0\0\0\0\0\16\17\17\7\7\7\7\7\17\16\16\16\16\17\7\7\0" "\0\0\0\0\0\70\70\70\370\370\370\70\70\70\70\70\70x\360\360\340\200\0\0\0\0\0\0\0\0\0\0" "\377\377\377pppp\360\360\370\274\37\17\7\0\0\0\0\0\0\0ppp\177\177\177ppp\0\0" "\1\3\7\37~|xpp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\340\360p\70\70\70\70\70xp\360\370\370\0\0\0\0\0\0\0\0\0\0\7\17" "\37\36<\70\70xpp\360\343\343\303\200\0\0\0\0\0\0\0\0\0\177\177\177\70\60ppppp" "p\71\77\37\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\370\370\370\70\70\70\70\370\370\370\70\70\70\70\370\370\370\0\0\0\0\0\0\0\17\17\17" "\0\0\0\0\377\377\377\0\0\0\0\17\17\17\0\0\0\0\0\0\0\0\0ppppp\177\177\177p" "pppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\70\370\370\370\70\70\70\0\0\0\70\70\70\370\370\370\70\70\0\0\0\0\0\0\0\377\377" "\377\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\3\17\37<\70xpppx" "\70<\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\70\70\370\370\370\70\70\70\0\0\0\70\70\70\370\370\370\70\70\70\0\0\0\0\0\0\1" "\7\77\377\370\340\0\0\0\340\370\377\77\7\1\0\0\0\0\0\0\0\0\0\0\0\0\1\7\77\177x\177" "\77\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\370\370\370\70\70\70\70\0\0\0\70\70\70\70\370\370\370\70\0\0\0\0\0\0\7\377\377" "\370\0\340\374\377\37\377\374\340\0\370\377\377\7\0\0\0\0\0\0\0\0\3\177\177\177\37\3\0\0\0\3" "\37\177\177\177\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\70x\370\370\370\270\70\0\0\0\70\270\370\370\370x\70\70\0\0\0\0\0\0\0\0\0" "\1\203\307\357\376|\376\357\307\203\1\0\0\0\0\0\0\0\0\0ppx|\177\177wq\0\0\0q" "w\177\177|xpp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\70xx\370\370\270\70\0\0\0\70\270\370\370xx\70\70\0\0\0\0\0\0\0\0\0" "\1\7\17\77\374\370\374\77\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0pppp\177\177\177p" "ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\370\370\370\70\70\70\70\70\70\370\370\370x\0\0\0\0\0\0\0\0\0\0\0\7" "\7\7\300\340\360|>\37\7\3\201\200\200\0\0\0\0\0\0\0\0\0p|~\177wsqppp" "pp\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\34\34\34\34\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\17\17\16\16\16\16\0\0\0\0\0" "\0\0\0\0\0\0\0\7\37\377\374\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\3\37\177\374\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\77" "\376\370\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7\0\0\0\0" "\0\0\0\0\0\0\0\0\34\34\34\34\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\16\16\16\17\17\17\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\360|>|\360\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\16" "\17\17\3\1\0\0\0\1\3\17\17\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70" "\0\0\0\0\0\0\0\0\0\0\6\16\34\70p`\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\216" "\216\217\307\307\307\307\307\307\317\376\376\374\0\0\0\0\0\0\0\0\0\0\36\77\177sqqqqq\71" "\31\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\34\34\34\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377" "\377\377<\16\16\7\7\7\7\17\16>\374\370\340\0\0\0\0\0ppp\177\177\177<\70pppp" "ppx<\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370" "\374\36\16\17\7\7\7\7\17\16~\177\177\0\0\0\0\0\0\0\0\0\7\37\77\16\17\7\7\7\7\17\16>\377\377\377\0\0\0\0\0\0\0\0\3\17\37<\70xppppx" "\70\34\177\177\177ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370" "\374\336\316\317\307\307\307\307\317\316\336\374\370\360\0\0\0\0\0\0\0\3\17\37\77=yyqqqq" "qqqy\71\71\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\340\370\370<\34\34\34\34\34\34\34\34\0\0\0\0\0\0\0\0\7" "\7\7\7\377\377\377\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0pppp\177\177\177pp" "ppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\374" ">\16\17\7\7\7\17\16>\377\377\377\7\7\7\0\0\0\0\0\0\3\17\37>xppppx\70" "\36\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70\70\70<\36\37\17\3\0\0\0\0" "\0\0\0\0\0\34\34\34\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\34\16\7\7\7\7\17\376\374\370\0\0\0\0\0\0\0\0\0pp\177\177\177pp\0\0\0" "pp\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\7\7\7\7\7\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0pppppp\177\177\177" "pppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7" "\7\7\7\7\7\7\7\7\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70\70\70\70<\37\17\7\0\0\0\0\0" "\0\0\0\0\0\34\34\34\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\300\340\367\377\77\37\17\7\7\7\0\0\0\0\0\0\0\0ppp\177\177\177\1\3\7\17\177" "~|xppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\34\34\34\34\34\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0pppppp\177\177\177" "pppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\377\377" "\377\16\6\7\7\377\376\376\16\7\7\7\377\376\374\0\0\0\0\0\0p\177\177\177pp\0\0\177\177\177" "pp\0\0\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7" "\377\377\377\34\16\7\7\7\7\17\376\374\370\0\0\0\0\0\0\0\0\0pp\177\177\177pp\0\0\0" "pp\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370" "\374>\16\7\7\7\7\7\7\7\16>\374\370\340\0\0\0\0\0\0\0\3\17\37>\70ppppp" "pp\70>\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\377" "\377\377\34\16\6\7\7\7\7\7\16\36\374\370\360\0\0\0\0\0\0\0\0\377\377\377\34\70\60ppp" "p\70\70\36\37\17\3\0\0\0\0\0\70\70\70\77\77\77\70\70\70\70\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\374" ">\16\17\7\7\7\7\17\16>\377\377\377\7\7\7\0\0\0\0\0\3\17\37>\70xpppp\70" "\70\36\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\77\77\77\70\70\70" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7" "\7\7\377\377\377<\16\16\7\7\7\17\37\16\4\0\0\0\0\0\0\0pppp\177\177\177ppp" "pppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "x\376\376\357\307\307\307\307\307\217\236\237\37\0\0\0\0\0\0\0\0\0\0~~~\70\71qqqq" "qs;\77\37\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\370\370\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7" "\7\377\377\377\7\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\37\77\77xppp" "px\70<<\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7" "\377\377\377\0\0\0\0\7\7\7\377\377\377\0\0\0\0\0\0\0\0\0\0\0\37\77\177xpppp" "x\70\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\17\77" "\377\377\347\207\0\0\0\207\347\377\177\37\7\7\7\0\0\0\0\0\0\0\0\0\0\3\17\77~x~\37" "\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\177\377" "\377\307\7\340\370\370\370\340\7\307\377\377\177\7\7\0\0\0\0\0\0\0\0\7\177\177\177\17\1\0\1\17" "\177\177\177\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\17" "\37\77\177\367\340\300\340\367\77\37\17\7\7\7\0\0\0\0\0\0\0pppx|~w\3\1\3w" "\177~|xpp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\17" "\77\377\377\347\207\0\0\0\7\307\367\377\77\17\7\7\0\0\0\0\0\0\0\0\0\0\3\17\77\376\370\374" "\77\17\3\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70<\77\77;\70\70\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\77\77\77\7\207\307\347\367\177\77\37\17\7\0\0\0\0\0\0\0\0\0\0\0x|~\177wsqp" "pp|||\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\340\370\374<\34\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\300\300\340\377\377\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\377\377\377\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\16\16\16\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\17\17\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\34\34<\374\370\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\77\377\377\340\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\16\16\17\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360" "\370\70\34" "wc\303\307\206\216\34\30\70\60`\340\300\0\0\0\0\0\0\0\0\0\0\0\360\360\200\201\201\203\207\206" "\316\374|\16\7\3\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\30<<\30\0\0\0\30<<\30\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340`p\60\70\270\270\70\70\70pp\340\340\300\0\0\0\0\0\374\377\17\3" "\360\374\376\17\7\3\3\7\36\237\237\0\0\3\377\377\374\0\0\0\3\17\37<\70swgnnnn" "gw\63\71\34\37\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\60\260\230\230\230\230\370\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\236\277\263\261\261\261\231\277\277\260\260\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340" "p\70\34\16\206\300\340p\70\34\16\6\0\0\0\0\0\0\0\0\0\1\3\7\16\34\70pa\3\7\16" "\34\70p`\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\34\34" "\34\34\34\34\34\34\34\34\34\34\34\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0pp" "ppppppppppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\340\340p\260\270\270\270\270\270\70\60p\340\340\300\200\0\0\0\0\0\374\377\377\3" "\0\0\377\377\377c\343\347\377\177>\0\3\17\377\376\370\0\0\0\1\7\17\37<\70wwwpqs" "ww><\34\37\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\60\60\60\60\60\60\60\60\60\60\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\340\60\20\30\10\30\20\60\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\3\6\4\14\10\14\4\6\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\340\340\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70" "\70\70\70\70\377\377\377\70\70\70\70\70\70\70\0\0\0\0\0\0\0ppppppp\177\177\177p" "pppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\60\70\34\14\14\234\370\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\340\360\370\334\317\303\301\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\30\34\214\214\314\374x\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\60p\340\301\301\301c\177\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0@\340p\60\70\34\34\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7" "\377\377\377\0\0\0\0\7\7\7\377\377\377\0\0\0\0\0\0\0\0\0\0\0\377\377\377\70pppp" "\70\34\177\177\177pp\0\0\0\0\0\0\0\0\0\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\340\360\370\70\34\14\374\374\14\14\14\374\374\14\14\0\0\0\0\0\0\0\0\0\7\17" "\37\70\60\60\377\377\0\0\0\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\377\377\0\0" "\200\377\377\200\200\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\0\0\3\3\3\3\3\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\60xxx\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\34\35\37\16\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\60\60\30\370\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\300\300\300\377\377\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\340p\60\30\30\30\60p\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0" "\207\217\234\230\260\260\260\230\234\217\207\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\16" "\34\70p\340\300\206\16\34\70p\340\300\200\0\0\0\0\0\0\0\0\0`p\70\34\16\7\3ap\70" "\34\16\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\60\60\30\370\370\0\0\0\0\0\0\0\0\0\0\300\340@\0\0\0\0\0\0```\177" "\177```\0\300\340x\34\216\343\61\370\370\0\0\0\0\0\0\0\0\0\0\0\10\34\16\7\1\0\14" "\17\17\15l\177\177l\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\60\60\30\370\370\0\0\0\0\0\0\0\200\300\340@\0\0\0\0\0\0\0\0```\177" "\177``\300\340x<\316\347q\60\60p\340\300\0\0\0\0\0\0\0\0\0\4\16\7\3\0\0\0p" "x|lfgsq\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\30\34\214\214\214\374x\0\0\0\0\0\200\300\340@\0\0\0\0\0\0\0\30\70\60a" "aa;\77\216\340p<\16\207\343\60\370\370\0\0\0\0\0\0\0\0\0\0\0\4\16\7\3\1\0\14" "\17\17ml\177\177l\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\6\217\217\217\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370<\34\37\17\17\0" "\0\200\200\200\0\0\0\0\0\0\0\0\0\0\0\3\7\17\36\34\34\34\34\34\34\37\17\17\0\0\0\0" "\0\0\0\0\0\0\0\70\70\70\70\370\371\371{\373\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\200\360\376\377\217\203\200\203\217\377\376\360\200\0\0\0\0\0\0\0ppp~\177\177sss\3\3\3" "sss\177\177~ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\70\70\70\70\370\370\373{\371\361\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\200\360\376\377\217\203\200\203\217\377\376\360\200\0\0\0\0\0\0\0ppp~\177\177sss\3\3\3" "sss\177\177~ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\70:;;\371\370\370x\371\363\303\2\0\0\0\0\0\0\0\0\0\0\0\0\0" "\200\360\376\377\217\203\200\203\217\377\376\360\200\0\0\0\0\0\0\0ppp~\177\177sss\3\3\3" "sss\177\177~ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\70\70;;\370\370\371y\373\362\303\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\200\360\376\377\217\203\200\203\217\377\376\360\200\0\0\0\0\0\0\0ppp~\177\177sss\3\3\3" "sss\177\177~ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\71;;\71\370\370\370y\373\363\301\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\200\360\376\377\217\203\200\203\217\377\376\360\200\0\0\0\0\0\0\0ppp~\177\177sss\3\3\3" "sss\177\177~ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\70\70\70\70\371\373\372z\373\361\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\200\360\376\377\217\203\200\203\217\377\376\360\200\0\0\0\0\0\0\0ppp~\177\177sss\3\3\3" "sss\177\177~ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\70\70\370\370\370\70\370\370\370\70\70\70\70\370\370\370\0\0\0\0\0\0\0\0\340" "\376\377\237\200\200\377\377\377\60\60\374\374\3\3\3\0\0\0\0\0pp~\177\177qqqq\177\177\177" "ppqqp~~~\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\360px\70\70\70\70p\360\360\370\370\0\0\0\0\0\0\0\0\376\377\377" "\3\0\0\0\0\0\0\0\0\0\3\3\3\0\0\0\0\0\0\0\0\1\7\37\37<\70xp\360\360p" "px\70<\36\14\0\0\0\0\0\0\0\0\0\0\0\0\14\30\30\33\37\36\14\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70\70\370\370\370\70\70\71\71;;\70\370\370\370\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\70\70\70\376\376\376\0\3\3\3\0\0\0\0\0\0\0\0ppp\177\177\177ppppp" "ppp\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70\70\370\370\370\70;;\71\71\70\70\370\370\370\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\70\70\70\376\376\376\0\3\3\3\0\0\0\0\0\0\0\0ppp\177\177\177ppppp" "ppp\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70\70\372\373\373\71\70\70\70\71;;\372\370\370\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\70\70\70\376\376\376\0\3\3\3\0\0\0\0\0\0\0\0ppp\177\177\177ppppp" "ppp\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70\70\370\371\373;\71\70\70\70\71;\373\371\370\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\70\70\70\376\376\376\0\3\3\3\0\0\0\0\0\0\0\0ppp\177\177\177ppppp" "ppp\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\70\70\70\70\70\371\371\373;\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0ppppp\177\177\177p" "pppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\70\70\70\70\70\373\373\371\71\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0ppppp\177\177\177p" "pppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\70:;;\71\370\370\370\71;;:\70\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0ppppp\177\177\177p" "pppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\70\71;;\71\370\370\370\71;;\71\70\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0ppppp\177\177\177p" "pppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\70\70\370\370\370\70\70\70\70\70xp\360\340\300\200\0\0\0\0\0\0\0\0\70\70" "\377\377\377\70\70\70\70\0\0\0\0\3\377\377\374\0\0\0\0\0\0\0pp\177\177\177ppppp" "px\70>\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\70\70\370\370\373\363\340\200\1\1;:;\71\370\370\370\70\70\0\0\0\0\0\0\0\377" "\377\377\1\7\37>\374\360\340\200\0\377\377\377\0\0\0\0\0\0\0pp\177\177\177pppp\0\1" "\7\37>\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\360x\70\71\71;;x\360\360\300\200\0\0\0\0\0\0\0\0\374\377\377" "\3\0\0\0\0\0\0\0\0\0\3\377\377\374\0\0\0\0\0\0\0\0\3\17\37>\70xpppx" "\70<\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\360x;;\71\71\70x\360\360\300\200\0\0\0\0\0\0\0\0\374\377\377" "\3\0\0\0\0\0\0\0\0\0\3\377\377\374\0\0\0\0\0\0\0\0\3\17\37>\70xpppx" "\70<\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\342\363{\71\70\70\70\71{\363\362\300\200\0\0\0\0\0\0\0\0\374\377\377" "\3\0\0\0\0\0\0\0\0\0\3\377\377\374\0\0\0\0\0\0\0\0\3\17\37>\70xpppx" "\70<\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\363{\70\70\71\71;z\363\361\300\200\0\0\0\0\0\0\0\0\374\377\377" "\3\0\0\0\0\0\0\0\0\0\3\377\377\374\0\0\0\0\0\0\0\0\3\17\37>\70xpppx" "\70<\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\341\363{\71\70\70\70\71{\363\361\300\200\0\0\0\0\0\0\0\0\374\377\377" "\3\0\0\0\0\0\0\0\0\0\3\377\377\374\0\0\0\0\0\0\0\0\3\17\37>\70xpppx" "\70<\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0\0\0\3\7" "\17\37>\370\360\340\360\370>\37\17\7\3\0\0\0\0\0\0\0\0\0px|>\37\7\3\1\3\7" "\37>|xp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\360px\70\70\70x\360\360\360\374<\34\0\0\0\0\0\0\0\374\377\377" "\3\1\200\300\360\370~\37\17\7\3\377\377\374\0\0\0\0\0\0\0\301\367\377\177\77\177wqppp" "x<\37\17\7\1\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\70\370\370\370\70\70\70\1\1\3;\70\70\370\370\370\70\70\0\0\0\0\0\0\0\377\377" "\377\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\3\17\37<\70xpppx" "x<\37\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\70\370\370\370\70\70;\3\1\1\70\70\70\370\370\370\70\70\0\0\0\0\0\0\0\377\377" "\377\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\3\17\37<\70xpppx" "x<\37\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\70\370\370\372;;\71\0\0\0\71;;\372\370\370\70\70\0\0\0\0\0\0\0\377\377" "\377\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\3\17\37<\70xpppx" "x<\37\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\70\370\370\370\71\71\70\70\0\70\70\71\71\370\370\370\70\70\0\0\0\0\0\0\0\377\377" "\377\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\3\17\37<\70xpppx" "x<\37\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70x\370\370\370;\3\1\1\70\370\370\370x\70\70\0\0\0\0\0\0\0\0\0\0" "\1\7\17\77\374\370\374\77\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0pppp\177\177\177p" "ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70\70\370\370\370\270\270\270\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\3\3\3\3\3\3\207\207\377\376\374\60\0\0\0\0\0\0ppp\177\177\177www\7\7" "\7\7\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\340\360\370<\34\34\34<\370\360\340\0\0\0\0\0\0\0\0\0\0\0\0\0\377" "\377\377\0\34\34\34\36\77\177\363\360\340\200\0\0\0\0\0\0\0ppp\177\177\177p\34<|p\360" "\360p\177\77\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\4\6\16\34\30\70\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\216\216\317\307\307\307\307\307\317\376\374\370\0\0\0\0\0\0\0\0\0\0\34\77\177wsqqqq\71" "\71\177\177\177ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0`p\60\70\34\16\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\216\216\317\307\307\307\307\307\317\376\374\370\0\0\0\0\0\0\0\0\0\0\34\77\177ssqqqq\71" "\35\177\177\177ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0 \60\70\30\14\6\14\30\70\60 \0\0\0\0\0\0\0\0\0\0\0\0\216" "\216\316\317\307\307\307\307\317\376\374\370\0\0\0\0\0\0\0\0\0\0\34\77\177wsqqqq\61\71" "\177\177\177ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\70<\14\14\30\30\60\60<\34\0\0\0\0\0\0\0\0\0\0\0\0\0\216" "\216\317\307\307\307\307\307\317\376\374\370\0\0\0\0\0\0\0\0\0\0\34\77\177wsqqqq\71\31" "\177\177\177ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\30<<\30\0\0\0\30<<\30\0\0\0\0\0\0\0\0\0\0\0\0" "\216\216\317\307\307\307\307\307\317\376\374\370\0\0\0\0\0\0\0\0\0\0\34\77\177wsqqqq\71" "\31\177\177\177ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\70lDDl\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\216" "\216\317\307\307\307\307\307\317\376\374\370\0\0\0\0\0\0\0\0\0\0\34\77\177wsqqqq\71\31" "\177\177\177ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\216\316" "\317\307\347\347\357\376\376\376\316\317\307\317\316\376\370\360\0\0\0\0\17\37\77{qqqy\71\77\177\77" "=qqqq\71\71\71\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370" "\374>\16\17\7\7\7\7\17\16~\177\177\0\0\0\0\0\0\0\0\0\7\17\37<\70xp\360\360p" "pp\70<\34\10\0\0\0\0\0\0\0\0\0\0\0\0\14\10\30\33\37\16\4\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\10\14\34\70\60p`\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\374" "\376\316\317\307\307\307\307\317\316\376\374\370\340\0\0\0\0\0\0\0\0\3\17\37=\71yqqqqq" "q\71\71\71\31\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0`p\60\70\34\16\14\0\0\0\0\0\0\0\0\0\0\0\340\370\374" "\376\316\317\307\307\307\307\317\316\376\374\370\340\0\0\0\0\0\0\0\0\3\17\37=\71yqqqqq" "q\71\71\71\21\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0 \60\70\30\14\6\14\30\70\60 \0\0\0\0\0\0\0\0\0\0\340\370\374" "\376\316\317\307\307\307\307\317\316\376\374\370\340\0\0\0\0\0\0\0\0\3\17\37=\71yqqqqq" "y\71\71\71\71\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\30<<\30\0\0\0\30<<\30\0\0\0\0\0\0\0\0\0\0\340\370\374" "\376\316\317\307\307\307\307\317\316\376\374\370\340\0\0\0\0\0\0\0\0\3\17\37=\71yqqqqq" "y\71\71\71\71\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\4\6\16\34\30\70\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7" "\7\7\7\7\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0pppppp\177\177\177p" "ppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\60\70\30\34\16\7\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7" "\7\7\7\7\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0pppppp\177\177\177p" "ppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0 \60\70\30\14\6\14\30\70\60 \0\0\0\0\0\0\0\0\0\0\0\0\0\7" "\7\7\7\7\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0pppppp\177\177\177p" "ppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\30<<\30\0\0\0\30<<\30\0\0\0\0\0\0\0\0\0\0\0\0\0\7" "\7\7\7\7\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0pppppp\177\177\177p" "ppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\30\234\234\234\334\334\374\370\370\360\370\370\234\34\14\10\0\0\0\0\0\0\0\0\300\363" "\363{\71\35\34\34\34\34\33\77\177\376\370\300\0\0\0\0\0\0\0\0\17\37\77|xppppp" "x\70>\37\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\70<\14\14\30\30\60\60<\34\0\0\0\0\0\0\0\0\0\0\0\7\7\377" "\377\377\14\6\7\7\7\7\17\376\376\374\0\0\0\0\0\0\0\0\0pp\177\177\177pp\0\0\0p" "p\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\10\14\34\70\60p`\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\374" "<\36\17\7\7\7\7\7\17\36<\374\360\340\0\0\0\0\0\0\0\3\17\37>\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0`p\60\70\34\16\14\0\0\0\0\0\0\0\0\0\0\0\340\360\374" "<\36\17\7\7\7\7\7\17\36<\374\360\340\0\0\0\0\0\0\0\3\17\37>\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0 \60\70\30\14\6\14\30\70\60 \0\0\0\0\0\0\0\0\0\0\340\360\374" "<\36\17\7\7\7\7\7\17\36<\374\360\340\0\0\0\0\0\0\0\3\17\37>\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\70<\14\14\30\30\60\60<\34\0\0\0\0\0\0\0\0\0\0\340\360\374" "<\36\17\7\7\7\7\7\17\36<\374\360\340\0\0\0\0\0\0\0\3\17\37>\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\30<<\30\0\0\0\30<<\30\0\0\0\0\0\0\0\0\0\0\340\360\374" "<\36\17\7\7\7\7\7\17\36<\374\360\340\0\0\0\0\0\0\0\3\17\37>\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0pp" "pppqsssqppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\36\36\36\14" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0\300\360\374" "<\36\16\17\207\307\347\377~>>\377\367\303\0\0\0\0\0\0\0\303\357\377|<~\177wsqp" "x\70<\37\17\3\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\4\6\16\34\30\70\60\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\377" "\377\377\0\0\0\0\7\7\7\377\377\377\0\0\0\0\0\0\0\0\0\0\0\37\77\177ppppp\70" "\34\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0`p\60\70\34\16\14\0\0\0\0\0\0\0\0\0\0\7\7\7\377" "\377\377\0\0\0\0\7\7\7\377\377\377\0\0\0\0\0\0\0\0\0\0\0\37\77\177ppppp\70" "\34\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0 \60\70\30\14\6\14\30\70\60 \0\0\0\0\0\0\0\0\0\0\7\7\7\377" "\377\377\0\0\0\0\7\7\7\377\377\377\0\0\0\0\0\0\0\0\0\0\0\37\77\177ppppp\70" "\34\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\30<<\30\0\0\0\30<<\30\0\0\0\0\0\0\0\0\0\0\7\7\7\377" "\377\377\0\0\0\0\7\7\7\377\377\377\0\0\0\0\0\0\0\0\0\0\0\37\77\177ppppp\70" "\34\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0`p\60\70\34\16\14\0\0\0\0\0\0\0\0\0\0\0\7\17\77" "\377\377\347\207\0\0\0\207\347\377\377\77\17\7\0\0\0\0\0\0\0\0\0\0\0\3\17\77\376\370\376\77" "\17\3\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70<\77\77;\70\70\0\0\0\0\0\0\0\0" "\0\0\0\0\34\34\34\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377" "\377\377>\36\17\7\7\7\7\17\36>\374\370\340\0\0\0\0\0\0\0\0\377\377\377>\70xppp" "px\70>\37\17\3\0\0\0\0\0\70\70\70\77\77\77\70\70\70\70\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\30<<\30\0\0\0\30<<\30\0\0\0\0\0\0\0\0\0\7\17\77" "\377\377\347\207\0\0\0\207\347\377\377\77\17\7\0\0\0\0\0\0\0\0\0\0\0\3\17\77\376\370\376\77" "\17\3\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70<\77\77;\70\70\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: -Adobe-Courier-Bold-R-Normal--34-240-100-100-M-200-ISO10646-1 Copyright: Copyright (c) 1984, 1987 Adobe Systems Incorporated. All Rights Reserved. Copyright (c) 1988, 1991 Digital Equipment Corporation. All Rights Reserved. Glyphs: 95/873 BBX Build Mode: 3 */ const uint8_t u8x8_font_courB24_3x4_r[9124] U8X8_FONT_SECTION("u8x8_font_courB24_3x4_r") = " ~\3\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\370\374\374\374\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 qsq " "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\370\370\370\0\0\0\370\370\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\17\37\17\0\0\0\17\37\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\200\207" "\207\377\377\377\207\207\207\377\377\377\207\207\7\0\0\0\0\0\0\0\0\0\3\3\377\377\377\3\3\3\377\377" "\377\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\0\0\0\3\3\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\360p\70\77\77\77\70x\360\370\370\0\0\0\0\0\0\0\0\0\0\0\7" "\17\37\36\34<<\70xx\361\361\341\300\0\0\0\0\0\0\0\0\0\0\77\77\77\34\30\370\370\370\70" "\30\34\37\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\340\370\34\14\14\14\34\370\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\301" "\303\347ff\66\267\333\331\334\314\316\206\7\0\0\0\0\0\0\0\0\0\1\1\0\0\0\0\17\77q`" "``q\77\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\300\340\340\340\340\300\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "\317\377\377\371\340\300\200\1\301\300\300\300\0\0\0\0\0\0\0\0\0\0\37\77\177qppqs\77\36" "\177\177qq\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\374\374|\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\374<\34\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\370\377\377\77\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\77\377\377" "\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\17\16\0\0\0\0\0" "\0\0\0\0\0\0\0\0\34<\374\360\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\1\77\377\377\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\377\377\77\7\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\17\17\3\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\300\200\200\0\374\374\374\0\200\200\300\300\200\0\0\0\0\0\0\0\0\0\0" "A\341\363\177\77\37\17\37\77\177\363\341A\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\340\340\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0ppp" "pppp\377\377\377ppppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\374|<\14" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\17\7\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0pp" "ppppppppppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\60xxx\60" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\374\377\37\7\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\300\360\374\177\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\77\17\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370x\34\34\34\34\34x\370\360\300\0\0\0\0\0\0\0\0\0\0\0\377" "\377\377\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\7\37\77\177\367\343\200\0\0\0\0\0\0\0\0\0\70\70xppppppp" "x<\77\37\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\340\370|\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\200\340" "\360\374\277\217\207\201\200\377\377\377\200\200\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3sss\177" "\177\177ss\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\374\374\374\34\34\34\34\34\34\34\34\34\0\0\0\0\0\0\0\0\0\0\0\0" "\37\37\37\16\16\16\16\36\36<\374\370\340\0\0\0\0\0\0\0\0\0\30<\70xpppppp" "x<\77\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360x\70<\34\34\34\34\34\0\0\0\0\0\0\0\0\0\0\0\374" "\377\377s\70\30\34\34\34xpppp" "x<\77\37\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\374\374\374\34\34\34\34\34\34\34\374\374\374<\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\360\376\377\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0p|\177\37\7" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370\70\34\34\34\34\34\70\370\360\300\0\0\0\0\0\0\0\0\0\0\0\301" "\347\377~<<\34\34<>\177\367\341\300\0\0\0\0\0\0\0\0\0\0\17\37\77\70xpppp" "x\70\77\37\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370x<\34\34\34\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70\70\370\370\370\70\70\70\70\70\70\70\370\370\370\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\70\70\70\376\376\376\0\3\3\3\0\0\0\0\0\0\0\0ppp\177\177\177ppppp" "ppp\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70\70\370\370\370\70\70\70\70\70\70\70\70\370\370\370\0\0\0\0\0\0\0\0\0\0" "\377\377\377\70\70\70\376\376\376\0\0\3\3\3\0\0\0\0\0\0\0ppp\177\177\177ppppp" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\360p\70\70\70\70\70\70p\360\370\370\0\0\0\0\0\0\0\0\376\377" "\377\3\0\0\0\0\300\300\300\300\300\303\303\303\300\0\0\0\0\0\0\0\3\17\37>\70xppqq" "qqy\77\77\37\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70\370\370\370\70\70\70\0\70\70\70\370\370\370\70\70\0\0\0\0\0\0\0\0\0\377" "\377\377\70\70\70\70\70\70\70\377\377\377\0\0\0\0\0\0\0\0\0pp\177\177\177ppp\0pp" "p\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\70\70\70\70\70\370\370\370\70\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0ppppp\177\177\177p" "pppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70\370\370\370\70\70\70\70\0\0\0\0\0\0\0\340\340" "\340\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\37\77\77xppppx<" "\77\37\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70\70\370\370\370\70\70\70\0\0\270\370\370\370x\70\70\0\0\0\0\0\0\0\0\0" "\377\377\377x\70<~\377\367\343\301\0\0\0\0\0\0\0\0\0\0ppp\177\177\177ppp\0\0" "\1\7\177\177|ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70\70\70\370\370\370\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\377\377\377\0\0\0\0\0\0\0\300\300\300\0\0\0\0\0\0\0pppp\177\177\177pppp" "ppp\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\70\370\370\370\370\340\200\0\0\0\0\0\200\340\370\370\370\370\70\70\0\0\0\0\0\377\377" "\377\1\17\77\376\370\300\370\376\77\17\1\377\377\377\0\0\0\0\0pp\177\177\177ppp\1\7\7\7" "\1ppp\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\70\370\370\370\360\340\200\0\0\0\70\70\70\370\370\370\70\70\0\0\0\0\0\0\0\377\377" "\377\1\7\37>\374\360\340\200\0\377\377\377\0\0\0\0\0\0\0pp\177\177\177ppp\0\0\1\7" "\17>\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\360p\70\70\70\70\70\70p\360\340\300\200\0\0\0\0\0\0\0\376\377\377" "\3\0\0\0\0\0\0\0\0\0\0\3\377\377\376\0\0\0\0\0\0\1\7\17\37<\70ppppp" "p\70<\37\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70\70\70\370\370\370\70\70\70\70\70\70xp\360\340\200\0\0\0\0\0\0\0\0\0\0" "\377\377\377\340\340\340\340\340\340px\77\37\17\0\0\0\0\0\0\0ppp\177\177\177ppppp" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\360p\70\70\70\70\70\70p\340\340\300\200\0\0\0\0\0\0\0\376\377\377" "\3\0\0\0\0\0\0\0\0\0\0\3\377\377\376\0\0\0\0\0\0\1\7\17\36\274\370\360pppp" "p\70<\36\17\7\1\0\0\0\0\0\0\0\0\16\17\17\7\7\7\7\7\17\16\16\16\16\17\7\7\0" "\0\0\0\0\0\70\70\70\370\370\370\70\70\70\70\70\70x\360\360\340\200\0\0\0\0\0\0\0\0\0\0" "\377\377\377pppp\360\360\370\274\37\17\7\0\0\0\0\0\0\0ppp\177\177\177ppp\0\0" "\1\3\7\37~|xpp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\340\360p\70\70\70\70\70xp\360\370\370\0\0\0\0\0\0\0\0\0\0\7\17" "\37\36<\70\70xpp\360\343\343\303\200\0\0\0\0\0\0\0\0\0\177\177\177\70\60ppppp" "p\71\77\37\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\370\370\370\70\70\70\70\370\370\370\70\70\70\70\370\370\370\0\0\0\0\0\0\0\17\17\17" "\0\0\0\0\377\377\377\0\0\0\0\17\17\17\0\0\0\0\0\0\0\0\0ppppp\177\177\177p" "pppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\70\370\370\370\70\70\70\0\0\0\70\70\70\370\370\370\70\70\0\0\0\0\0\0\0\377\377" "\377\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\3\17\37<\70xpppx" "\70<\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\70\70\370\370\370\70\70\70\0\0\0\70\70\70\370\370\370\70\70\70\0\0\0\0\0\0\1" "\7\77\377\370\340\0\0\0\340\370\377\77\7\1\0\0\0\0\0\0\0\0\0\0\0\0\1\7\77\177x\177" "\77\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\370\370\370\70\70\70\70\0\0\0\70\70\70\70\370\370\370\70\0\0\0\0\0\0\7\377\377" "\370\0\340\374\377\37\377\374\340\0\370\377\377\7\0\0\0\0\0\0\0\0\3\177\177\177\37\3\0\0\0\3" "\37\177\177\177\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\70x\370\370\370\270\70\0\0\0\70\270\370\370\370x\70\70\0\0\0\0\0\0\0\0\0" "\1\203\307\357\376|\376\357\307\203\1\0\0\0\0\0\0\0\0\0ppx|\177\177wq\0\0\0q" "w\177\177|xpp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70\70xx\370\370\270\70\0\0\0\70\270\370\370xx\70\70\0\0\0\0\0\0\0\0\0" "\1\7\17\77\374\370\374\77\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0pppp\177\177\177p" "ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\370\370\370\70\70\70\70\70\70\370\370\370x\0\0\0\0\0\0\0\0\0\0\0\7" "\7\7\300\340\360|>\37\7\3\201\200\200\0\0\0\0\0\0\0\0\0p|~\177wsqppp" "pp\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\34\34\34\34\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\17\17\16\16\16\16\0\0\0\0\0" "\0\0\0\0\0\0\0\7\37\377\374\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\3\37\177\374\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\77" "\376\370\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7\0\0\0\0" "\0\0\0\0\0\0\0\0\34\34\34\34\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\16\16\16\17\17\17\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\360|>|\360\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\16" "\17\17\3\1\0\0\0\1\3\17\17\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70" "\0\0\0\0\0\0\0\0\0\0\6\16\34\70p`\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\216" "\216\217\307\307\307\307\307\307\317\376\376\374\0\0\0\0\0\0\0\0\0\0\36\77\177sqqqqq\71" "\31\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\34\34\34\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377" "\377\377<\16\16\7\7\7\7\17\16>\374\370\340\0\0\0\0\0ppp\177\177\177<\70pppp" "ppx<\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370" "\374\36\16\17\7\7\7\7\17\16~\177\177\0\0\0\0\0\0\0\0\0\7\37\77\16\17\7\7\7\7\17\16>\377\377\377\0\0\0\0\0\0\0\0\3\17\37<\70xppppx" "\70\34\177\177\177ppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370" "\374\336\316\317\307\307\307\307\317\316\336\374\370\360\0\0\0\0\0\0\0\3\17\37\77=yyqqqq" "qqqy\71\71\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\340\370\370<\34\34\34\34\34\34\34\34\0\0\0\0\0\0\0\0\7" "\7\7\7\377\377\377\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0pppp\177\177\177pp" "ppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\374" ">\16\17\7\7\7\17\16>\377\377\377\7\7\7\0\0\0\0\0\0\3\17\37>xppppx\70" "\36\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70\70\70<\36\37\17\3\0\0\0\0" "\0\0\0\0\0\34\34\34\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\34\16\7\7\7\7\17\376\374\370\0\0\0\0\0\0\0\0\0pp\177\177\177pp\0\0\0" "pp\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\7\7\7\7\7\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0pppppp\177\177\177" "pppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7" "\7\7\7\7\7\7\7\7\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70\70\70\70<\37\17\7\0\0\0\0\0" "\0\0\0\0\0\34\34\34\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\300\340\367\377\77\37\17\7\7\7\0\0\0\0\0\0\0\0ppp\177\177\177\1\3\7\17\177" "~|xppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\34\34\34\34\34\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0pppppp\177\177\177" "pppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\377\377" "\377\16\6\7\7\377\376\376\16\7\7\7\377\376\374\0\0\0\0\0\0p\177\177\177pp\0\0\177\177\177" "pp\0\0\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7" "\377\377\377\34\16\7\7\7\7\17\376\374\370\0\0\0\0\0\0\0\0\0pp\177\177\177pp\0\0\0" "pp\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370" "\374>\16\7\7\7\7\7\7\7\16>\374\370\340\0\0\0\0\0\0\0\3\17\37>\70ppppp" "pp\70>\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\377" "\377\377\34\16\6\7\7\7\7\7\16\36\374\370\360\0\0\0\0\0\0\0\0\377\377\377\34\70\60ppp" "p\70\70\36\37\17\3\0\0\0\0\0\70\70\70\77\77\77\70\70\70\70\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\374" ">\16\17\7\7\7\7\17\16>\377\377\377\7\7\7\0\0\0\0\0\3\17\37>\70xpppp\70" "\70\36\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\77\77\77\70\70\70" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7" "\7\7\377\377\377<\16\16\7\7\7\17\37\16\4\0\0\0\0\0\0\0pppp\177\177\177ppp" "pppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "x\376\376\357\307\307\307\307\307\217\236\237\37\0\0\0\0\0\0\0\0\0\0~~~\70\71qqqq" "qs;\77\37\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\370\370\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7" "\7\377\377\377\7\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\37\77\77xppp" "px\70<<\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7" "\377\377\377\0\0\0\0\7\7\7\377\377\377\0\0\0\0\0\0\0\0\0\0\0\37\77\177xpppp" "x\70\177\177\177pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\17\77" "\377\377\347\207\0\0\0\207\347\377\177\37\7\7\7\0\0\0\0\0\0\0\0\0\0\3\17\77~x~\37" "\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\177\377" "\377\307\7\340\370\370\370\340\7\307\377\377\177\7\7\0\0\0\0\0\0\0\0\7\177\177\177\17\1\0\1\17" "\177\177\177\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\17" "\37\77\177\367\340\300\340\367\77\37\17\7\7\7\0\0\0\0\0\0\0pppx|~w\3\1\3w" "\177~|xpp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\17" "\77\377\377\347\207\0\0\0\7\307\367\377\77\17\7\7\0\0\0\0\0\0\0\0\0\0\3\17\77\376\370\374" "\77\17\3\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70<\77\77;\70\70\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\77\77\77\7\207\307\347\367\177\77\37\17\7\0\0\0\0\0\0\0\0\0\0\0x|~\177wsqp" "pp|||\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\340\370\374<\34\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\300\300\340\377\377\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\377\377\377\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\16\16\16\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\17\17\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\34\34<\374\370\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\77\377\377\340\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\16\16\17\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360" "\370\70\34\37\7\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300" "\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\1\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\340\340\300" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\374|\34\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\360\376\177\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\377\77\7\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\34\37\37\7\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\340\340ppppp\340\340\300\0\0\0\0\0\0\0\0\0\0\0\0\377" "\377\377\1\0\0\0\0\0\1\377\377\377\0\0\0\0\0\0\0\0\0\0\0\37\177\377\360\300\300\300\300\300" "\360\377\177\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\300\300\340\340\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\1\3\3\1\1\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\377\377\377" "\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0\0" "\0\0\0\0\0\0\0\200\300\340\340ppppp\340\340\300\200\0\0\0\0\0\0\0\0\0\0\0\7" "\7\7\0\0\0\200\300\340\360\177\77\17\0\0\0\0\0\0\0\0\0\0\300\340\360\370\374\336\317\307\303\301" "\300\300\300\300\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0\0\0" "\0\0\0\0\0\0\0\300\300\340\340ppppp\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\1" "\1\1\0pppp\360\370\377\337\217\0\0\0\0\0\0\0\0\0\0\340\340\340\300\300\300\300\300\300\300" "\340\361\377\177\36\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\200" "\300\360\374\77\37\7\1\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\16\17\17\17\16\16\316\316\316\377" "\377\377\316\316\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\0\0\0\0" "\0\0\0\0\0\0\0\0\360\360\360ppppppppp\0\0\0\0\0\0\0\0\0\0\0\0" "\177\177\177\70\70\70\70xx\360\360\340\200\0\0\0\0\0\0\0\0\0`\360\340\340\300\300\300\300\300\300" "\340\360\377\77\37\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\300\340\340\360ppppp\0\0\0\0\0\0\0\0\0\0\0\360" "\376\377\317\343appp\360\340\340\200\0\0\0\0\0\0\0\0\0\0\0\17\177\377\371\340\300\300\300\300" "\340\361\377\177\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\360\360\360ppppppp\360\360\360\360\0\0\0\0\0\0\0\0\0\0\3\3" "\3\0\0\0\0\0\300\370\377\177\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\376\177\37" "\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\340\340ppppp\340\340\300\0\0\0\0\0\0\0\0\0\0\0\0\7" "\237\377\370\360\360pp\360\370\377\337\207\0\0\0\0\0\0\0\0\0\0\0\77\177\377\341\340\300\300\300\300" "\340\341\377\177\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\340\340\360ppp\360\340\340\300\0\0\0\0\0\0\0\0\0\0\0\0\77" "\177\377\341\300\200\200\200\300\341\177\377\377\374\0\0\0\0\0\0\0\0\0\0\300\340\341\301\303\303\303\343\341" "x~\77\17\3\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\30<<<\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\340\340\300" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: -Adobe-Courier-Medium-R-Normal--34-240-100-100-M-200-ISO10646-1 Copyright: Copyright (c) 1984, 1987 Adobe Systems Incorporated. All Rights Reserved. Copyright (c) 1988, 1991 Digital Equipment Corporation. All Rights Reserved. Glyphs: 191/873 BBX Build Mode: 3 */ const uint8_t u8x8_font_courR24_3x4_f[21508] U8X8_FONT_SECTION("u8x8_font_courR24_3x4_f") = " \377\3\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\360\370\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\1\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\340\341\340" "@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\360\360\360\360\0\0\0\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0" "\1\77\7\1\0\0\0\1\77\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\370\0\0\200\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\10\10\10\377\10\10\10\377\10\10\10\10\0\0\0\0\0\0\0\0\0\0\0\2\2\2\302\77\2\2\342\77" "\2\2\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\0\0\0\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300@` < `@\300\340\0\0\0\0\0\0\0\0\0\0\0\0\0" "\7\14\30\20\20\60 `@\301\200\0\0\0\0\0\0\0\0\0\0\0\0<\30\20\60 \340 \60" "\20\30\14\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300`\60\20\20\60`\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200" "\203\206LHH,&#\20\20\20\10\10\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\340 \340 \340\0\0\0\0\0\0\0\0\0\17\0" "\0\0\0\0\0\377\0\0\0\0\0\0\17\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\377\200\200" "\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \340 \0\0\0 \340 \0\0\0\0\0\0\0\0\0\377" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\300" "@`\70\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0 `\340 \0\0\0\0\0 \340` \0\0\0\0\0\0\0\0\3" "\36\360\200\0\0\0\0\0\200\360\36\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\16p\300p\16" "\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \340 \0\0\0\0\0 \340 \0\0\0\0\0\0\0\0\7\374" "\0\0\0\340\34\4\34\340\0\0\0\374\7\0\0\0\0\0\0\0\0\0\0\17\370\300>\3\0\0\0\3" ">\300\370\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0 `\340 \0\0\0\0\0 \340` \0\0\0\0\0\0\0\0\0\0\0" "\1\3\4\30\260\340\260\30\4\3\1\0\0\0\0\0\0\0\0\0\0\200\300\340\260\214\206\1\0\0\0\1" "\206\214\260\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0 `\340\240 \0\0\0\0\0 \240\340` \0\0\0\0\0\0\0\0\0\0\0" "\0\3\6\30p\300p\30\6\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\377\200\200" "\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340 \240\340\0\0\0\0\0\0\0\0\0\0\0\0\0" "\7\0\0\0\300`\60\34\6\3\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\230\216\203\201\200\200\200" "\200\200\200\376\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\360\20\20\20\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\10\10\10\10\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\14x\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\1\7<\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\34" "p\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\6\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\20\20\20\20\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\10\17\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\340\60\30\60\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\14\7\1\0\0\0\0\0\1\7\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0 \0" "\0\0\0\0\0\0\0\0\4\14\30\60`@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\10\10\14\4\4\4\14\10\70\340\0\0\0\0\0\0\0\0\0\0\0\0|\306\202\203\201\201\201\201\301A" "c\377\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\20\20\20\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377" "`\30\10\14\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\200\200\200\377\30`@\300\200\200\200\200" "\300@`\70\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "p\30\10\14\4\4\4\14\10\10\30|\0\0\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\300" "@@ \60\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\20\20\20\360\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\14\10\30`\377\0\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\200\300" "@`\30\377\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\0\0\0\17\71aA\301\201\201\201\201\201" "\301Aa!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\340\60\20\20\20\20 \0\0\0\0\0\0\0\0\0\0\0\4" "\4\4\4\377\4\4\4\4\4\4\4\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\377\200\200\200\200" "\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\14\10\30`\374\4\4\4\0\0\0\0\0\0\0\17\70`@\300\200\200\200\200\300" "@`\30\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \60\20\34\7\0\0\0\0" "\0\0\0\0\0\20\20\20\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377`\30\10\14\4\4\14\10\70\340\0\0\0\0\0\0\0\0\0\0\0\200\200\377\200\200\0\0\0\0\0" "\200\200\377\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\4\4\4\4\4\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\377\200\200" "\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\4\4\4\4\4\4\4\4\4\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \60\20\34\7\0\0\0\0\0\0" "\0\0\0\0\0\0\20\20\20\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\377\0\0\200\300d\64\34\14\4\4\0\0\0\0\0\0\0\0\0\0\200\200\200\377\1\1\3\6\14\30" "\260\340\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\20\20\20\20\20\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\377\200\200" "\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\4\374\60" "\10\4\4\14\30\360\60\10\4\4\14\30\360\0\0\0\0\0\0\0\200\200\377\200\200\0\0\0\0\377\200\200" "\0\0\0\0\377\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\4" "\374`\30\10\14\4\4\14\10\70\340\0\0\0\0\0\0\0\0\0\0\0\200\200\377\200\200\0\0\0\0\0" "\200\200\377\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\200\200" "\300@`\70\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\370" "`\30\10\14\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\0\0\0\377\30`@\300\200\200\200\200" "\300@`\70\17\0\0\0\0\0\0\0 \77 \0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\14\10\30p\370\10\10\10\0\0\0\0\0\0\0\17\70`@\300\200\200\200\200\300" "@`\70\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \77 \0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\4\4\4\374`\20\30\10\14\4\4\4\14\10\0\0\0\0\0\0\0\0\0\200\200\200\200\377\200\200\200\200" "\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "p\330\210\214\4\4\4\14\10\30<\0\0\0\0\0\0\0\0\0\0\0\0\370`@@\301\201\201\201\303" "Bf<\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\4" "\4\377\4\4\4\4\4\4\4\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77`\300\200\200\200\200" "\300@` \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\4\4" "\374\0\0\0\0\0\0\4\4\4\374\0\0\0\0\0\0\0\0\0\0\0\0\0\77`\300\200\200\200\200\300" "@\60\377\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\4\14" "|\304\4\0\0\0\0\0\4\304|\14\4\4\0\0\0\0\0\0\0\0\0\0\0\1\17\70\340\200\340\70" "\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\14\374" "\4\4\0\0\300@\300\0\0\4\4\374\14\4\0\0\0\0\0\0\0\0\0\1\77\340\60\36\3\0\3\36" "\60\340\77\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\14" "\34\64d\300\200\0\200\300d\64\34\14\4\0\0\0\0\0\0\0\0\0\200\300\340\260\230\14\7\3\7\14" "\230\260\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\34" "t\304\4\0\0\0\0\0\4\304t\34\4\0\0\0\0\0\0\0\0\0\0\0\0\1\7\34p\300p\34" "\7\1\0\0\0\0\0\0\0\0\0\0\0\0 \70/! \0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "<\4\4\4\4\204\304d\64\34\14\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\230\214\206\203\200\200" "\200\200\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\340\60\30\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\200\300\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\376\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\14\10\10\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\10\30\60\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\177\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\3\1" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\14\7\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "` \60\60`@\300\200\0\200\300`\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\10\34\34\34\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\77\37\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\370\14\6\3\1\1\1\1\3\2\16\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\6\14\10\370\10\10" "\14\4\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\300@ `\300\200\0\0\0\0\0\0\0\0\0\0\0@@" "@_\361@@@@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\237\200\200\200\200\200" "\200\200\300`\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1" "\363\36\4\6\2\2\2\6\4\36\363\1\0\0\0\0\0\0\0\0\0\0\0\20\31\17\4\14\10\10\10\14" "\4\17\31\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0 `\340\240 \0\0\0\0\0 \240\340` \0\0\0\0\0\0\0\0\0\0\0" "\200\203\216\230\360\300\360\230\216\203\200\0\0\0\0\0\0\0\0\0\0\0\0\0\4\204\204\204\204\377\204\204" "\204\204\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\360\20\30\10\10\10\10\10\10x\0\0\0\0\0\0\0\0\0\0\0<" "fB\303\203\6\14\30\20\60`@\300\200\0\0\0\0\0\0\0\0\0\0\0\300\0\0\1\3\2\6\14" "\30\370\10\10\17\0\0\0\0\0\0\0\0\0\0\0\3\2\2\2\2\2\2\3\1\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0 pp \0\0 pp \0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\200\300@` `@\300\200\200\0\0\0\0\0\0\0\0\360\34\7\1" "\360\30\14\6\2\2\2\4\36\0\0\1\7\34\360\0\0\0\0\0\3\16\30\60aCF\314\210\210\210\314" "FB`\60\30\16\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0@` `\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\34\66\42\42\62\26\77 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\200\300`\60\30\14\4\200\300`\60\30\14\4\0\0\0\0\0\0\0\0\2\7\17\30\60`\300\202\7\17" "\30\60`\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\20" "\20\20\20\20\20\20\20\20\20\20\20\20\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@@" "@@@@@@@@@@@@@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300@` `@\300\200\0\0\0\0\0\0\0\0\370\16\3\1" "\0\2\376\2\2\2\206\314x\0\0\1\3\16\370\0\0\0\0\0\3\16\30\60`H\317\211\201\201\203\206" "\314H`\60\30\16\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0`````````\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300p\30\10\10\10\30p\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\3\16\30\20\20\20\30\16\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 " " \377 \0\0\0\0\0\0\0\0\0@@@@@@@O@@" "@@@@@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0@p\30\10\10\30\260\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\200\300`\70\14\6\3\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0 \60\30\10\10\30\60\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0@\300\200\2\2\207\315x\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0@`\60\30\14\4\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\4\4" "\374\0\0\0\0\0\0\4\4\4\374\0\0\0\0\0\0\0\0\0\0\0\0\0\377p\300\200\200\200\200\300" "`\60\377\200\200\0\0\0\0\0\0\0\0\0\0\0\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\340\360\60\30\10\10\370\10\10\10\370\10\10\10\0\0\0\0\0\0\0\0\0\7\37" "<\60``@\377\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0" "\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\2\2\2\3\2\0\2\3\2\2\2\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\300\340\340\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\20\27\34\10\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\20\30\10\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\300@` `@\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\7\35\20\60 \60\20\35\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\14" "\30\60`\300\200\4\14\30\60`\300\200\0\0\0\0\0\0\0\0\0\0\0\200\300`\60\30\17\7\202\300" "`\60\30\17\7\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\20\20\30\370\0\0\0\0\0\0\0\0\0\0\300`\70\10\0\0\0\0\0\0\200\200\200" "\377\200\200\200\0\200\300p\30\16\303a\340\0\0\0\0\0\0\0\0\0\0\0\200\340\60\34\6\3\0\30" "\36\23\221\220\377\220\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\20\20\30\370\0\0\0\0\0\0\0\0\0\300`\60\30\0\0\0\0\0\0\0\200\200\200" "\377\200\200\0\200\300p\30\216\303a `\300\0\0\0\0\0\0\0\200\300`\70\14\7\1\0\0\300" "\340\260\230\210\214\207\201\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\20\30\10\10\230\360`\0\0\0\0\0\0\200\300`\60\20\0\0\0\0\0 `\300\201" "\201\303f<\200\300p\30\16\3\301`\340\0\0\0\0\0\0\0\0\0@`\60\30\14\7\1\0\0\30" "\36\23\221\220\377\220\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\10\34\34\34\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340 \60\30\16\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\14\30\60 \60\20\20\34\0\0\0\0\0" "\0\0\0\0\0\0\0 \241\343&\344\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\340<\7\0\0\0\7<\340\0\0\0\0\0\0\0\0\0\0\200\200\300\370\217\203\202\2\2\2\2\2" "\202\203\217\370\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0 \240\344&\343\201\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\340<\7\0\0\0\7<\340\0\0\0\0\0\0\0\0\0\0\200\200\300\370\217\203\202\2\2\2\2\2" "\202\203\217\370\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0 $&\243\341 \341\203\6\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\340<\7\0\0\0\7<\340\0\0\0\0\0\0\0\0\0\0\200\200\300\370\217\203\202\2\2\2\2\2" "\202\203\217\370\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0 &#\241\343\42\346\204\6\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\340<\7\0\0\0\7<\340\0\0\0\0\0\0\0\0\0\0\200\200\300\370\217\203\202\2\2\2\2\2" "\202\203\217\370\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0 \42''\242\340 \340\202\7\7\2\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\340<\7\0\0\0\7<\340\0\0\0\0\0\0\0\0\0\0\200\200\300\370\217\203\202\2\2\2\2\2" "\202\203\217\370\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0 \247\354(\354\207\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\340<\7\0\0\0\7<\340\0\0\0\0\0\0\0\0\0\0\200\200\300\370\217\203\202\2\2\2\2\2" "\202\203\217\370\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0 \340 \340 \340\0\0\0\0\0\0\0\0\0\0" "\0\360\37\1\0\0\377@@@\360\0\0\7\0\0\0\0\0\0\0\200\200\370\217\203\2\202\202\202\377\200" "\200\200\201\200\200\200\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300@` `@@\200\340\0\0\0\0\0\0\0\0\0\0\374\7" "\1\0\0\0\0\0\0\0\0\0\1\7\0\0\0\0\0\0\0\0\0\0\7\34\60`@\300\200\200\200\300" "@` \60\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\20\27\34\10\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \340 !#&$ \340\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377@@@@@\370\0\0\0\7\0\0\0\0\0\0\0\0\0\0\200\200\200\377\200\200\200\200\200\201\200" "\200\200\200\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \340 $&#! \340\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377@@@@@\370\0\0\0\7\0\0\0\0\0\0\0\0\0\0\200\200\200\377\200\200\200\200\200\201\200" "\200\200\200\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \340$&#! !#&$\340\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377@@@@@\370\0\0\0\7\0\0\0\0\0\0\0\0\0\0\200\200\200\377\200\200\200\200\200\201\200" "\200\200\200\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \342''\42 \42''\42\340\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377@@@@@\370\0\0\0\7\0\0\0\0\0\0\0\0\0\0\200\200\200\377\200\200\200\200\200\201\200" "\200\200\200\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0 !\343&$ \0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\377\200\200" "\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0 $\346#! \0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\377\200\200" "\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0 $&#!\340!#&$ \0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\377\200\200" "\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\42''\42 \340 \42''\42\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\377\200\200" "\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \340 `@\300\200\0\0\0\0\0\0\0\0\0\0\0@@\377" "@@@@\0\0\0\0\0\1\7\374\0\0\0\0\0\0\0\0\0\200\200\377\200\200\200\200\200\200\300@" "`\60\34\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0 \340`\306\3\1\3\2\6$&# \340 \0\0\0\0\0\0\0\0\0\377" "\0\1\7\14\70\340\200\0\0\0\0\377\0\0\0\0\0\0\0\0\0\200\200\377\200\200\200\200\0\0\3\6" "\34p\300\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300@a#&$`@\300\200\0\0\0\0\0\0\0\0\0\0\0\374\7" "\1\0\0\0\0\0\0\0\0\0\1\7\374\0\0\0\0\0\0\0\0\0\3\16\70`@\300\200\200\200\300" "@`\70\16\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300@` $&cA\300\200\0\0\0\0\0\0\0\0\0\0\0\374\7" "\1\0\0\0\0\0\0\0\0\0\1\7\374\0\0\0\0\0\0\0\0\0\3\16\70`@\300\200\200\200\300" "@`\70\16\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\304Fc! !cF\304\200\0\0\0\0\0\0\0\0\0\0\0\374\7" "\1\0\0\0\0\0\0\0\0\0\1\7\374\0\0\0\0\0\0\0\0\0\3\16\70`@\300\200\200\200\300" "@`\70\16\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\306Ca#\42&dF\303\200\0\0\0\0\0\0\0\0\0\0\0\374\7" "\1\0\0\0\0\0\0\0\0\0\1\7\374\0\0\0\0\0\0\0\0\0\3\16\70`@\300\200\200\200\300" "@`\70\16\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\2\207\307B` bG\307\202\0\0\0\0\0\0\0\0\0\0\0\374\7" "\1\0\0\0\0\0\0\0\0\0\1\7\374\0\0\0\0\0\0\0\0\0\3\16\70`@\300\200\200\200\300" "@`\70\16\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6" "\14\30\60`\300\200\300`\60\30\14\6\0\0\0\0\0\0\0\0\0\0\0`\60\30\14\6\3\1\3\6" "\14\30\60`\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300@` `@\300\200\300`\60\0\0\0\0\0\0\0\0\370\16" "\3\0\0\0\200\340\60\30\16\3\3\16\370\0\0\0\0\0\0\0\0\0\203\316xxN\303\201\200\200\200" "\300`\70\16\3\0\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \340 \1\3\6$ \340 \0\0\0\0\0\0\0\0\0\377" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\300" "@`\70\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \340 \4\6\3! \340 \0\0\0\0\0\0\0\0\0\377" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\300" "@`\70\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \340 $&#\1\0\1#&$ \340 \0\0\0\0\0\0\0\0\0\377" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\300" "@`\70\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \340\42''\42\0\0\0\42''\42\340 \0\0\0\0\0\0\0\0\0\377" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\300" "@`\70\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0 `\340\240 \0\4\6\3\1 \240\340` \0\0\0\0\0\0\0\0\0\0\0" "\0\3\16\30p\300p\30\16\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\377\200\200" "\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \340 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377\2\2\2\2\2\2\6\4\4\14\370`\0\0\0\0\0\0\0\0\200\200\200\377\204\204\204\4\4\4\6" "\2\2\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300p\30\10\10\10\30p\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377\0\0\0\20\20\70,g@\200\0\0\0\0\0\0\0\0\0\0\200\200\200\377\200\0\0p\300\200\200" "\200\300q\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\4\14\30\60`@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\10\10\14\4\4\4\14\10\70\340\0\0\0\0\0\0\0\0\0\0\0\0|\306\202\203\201\201\201\201\301A" "c\377\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0@`\60\30\14\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\10\10\14\4\4\4\14\10\70\340\0\0\0\0\0\0\0\0\0\0\0\0|\306\202\203\201\201\201\201\301A" "c\377\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0@`\60\30\14\30\60`@\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\10\10\14\4\4\4\14\10\70\340\0\0\0\0\0\0\0\0\0\0\0\0|\306\202\203\201\201\201\201\301A" "c\377\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0`\60\20\60 `@`\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\10\10\14\4\4\4\14\10\70\340\0\0\0\0\0\0\0\0\0\0\0\0|\306\202\203\201\201\201\201\301A" "c\377\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0 pp \0\0 pp \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\10\10\14\4\4\4\14\10\70\340\0\0\0\0\0\0\0\0\0\0\0\0|\306\202\203\201\201\201\201\301A" "c\377\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0c\301\201\200\200\301a\23\377\31a" "\301\201\201\201\301a!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "p\30\10\14\4\4\4\4\14\10\60\374\0\0\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\200" "\300@` \60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\20\27\34\10\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\4\14\30\60`@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\0\0\0\37\61aA\301\201\201\201\201\201" "\301Aa!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0@`\60\30\14\4\0\0\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\0\0\0\37\61aA\301\201\201\201\201\201" "\301Aa!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0@`\60\30\14\30\60`@\0\0\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\0\0\0\37\61aA\301\201\201\201\201\201" "\301Aa!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0 pp \0\0\0 pp \0\0\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\0\0\0\37\61aA\301\201\201\201\201\201" "\301Aa!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\4\14\30\60`@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\4\4\4\4\4\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\377\200\200" "\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0@`\60\30\14\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\4\4\4\4\4\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\377\200\200" "\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300`\60\30\60`\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\4\4\4\4\4\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\377\200\200" "\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0 pp \0\0 pp \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\4\4\4\4\4\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\377\200\200" "\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\60\20\20\60\60\240\340\300\300` \60\20\0\0\0\0\0\0\0\0\0\0\200\300" "f\42\63\21\21\20\20\21\63&L\370\340\0\0\0\0\0\0\0\0\0\17\70 @\300\200\200\200\200\200" "\300@`\70\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0`\60\20\60 `@`\60\0\0\0\0\0\0\0\0\0\0\0\0\4\4" "\374\60\30\10\14\4\4\14\10\70\340\0\0\0\0\0\0\0\0\0\0\0\200\200\377\200\200\0\0\0\0\0" "\200\200\377\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\4\14\30\60`@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\200\200" "\300@`\70\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0@`\60\30\14\4\0\0\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\200\200" "\300@`\70\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0@`\60\30\14\14\30\60`@\0\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\200\200" "\300@`\70\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0`\60\20\60 `@`\60\0\0\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\200\200" "\300@`\70\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0 pp \0\0 pp \0\0\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\200\200" "\300@`\70\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200" "\200\200\200\201\203\203\201\200\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 pp \0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300`" "\20\30\10\14\4\4\204\304l\70\30l\306\0\0\0\0\0\0\0\0\0\217\370`p\330\214\206\203\201\300" "@` \30\17\0\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\4\14\30\60`@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\4\4" "\374\0\0\0\0\0\0\4\4\4\374\0\0\0\0\0\0\0\0\0\0\0\0\0\77`\300\200\200\200\200\300" "`\60\377\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0@`\60\30\14\4\0\0\0\0\0\0\0\0\0\0\0\0\4\4\4" "\374\0\0\0\0\0\0\4\4\4\374\0\0\0\0\0\0\0\0\0\0\0\0\0\77`\300\200\200\200\200\300" "`\60\377\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300`\60\30\60`\300\200\0\0\0\0\0\0\0\0\0\0\0\4\4\4" "\374\0\0\0\0\0\0\4\4\4\374\0\0\0\0\0\0\0\0\0\0\0\0\0\77`\300\200\200\200\200\300" "`\60\377\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0 pp \0\0\0 pp \0\0\0\0\0\0\0\0\0\0\0\4\4\4" "\374\0\0\0\0\0\0\4\4\4\374\0\0\0\0\0\0\0\0\0\0\0\0\0\77`\300\200\200\200\200\300" "`\60\377\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0@`\60\30\14\4\0\0\0\0\0\0\0\0\0\0\0\0\4\34" "t\304\4\0\0\0\0\0\4\304t\34\4\0\0\0\0\0\0\0\0\0\0\0\0\1\7\34p\300p\34" "\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0 \70/! \0\0\0\0\0\0\0\0\0" "\0\0\0\0\10\10\10\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377" "p\30\10\14\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\0\0\0\377\70`@\300\200\200\200\200" "\300@`\70\17\0\0\0\0\0\0\0 \77 \0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0@\340\340@\0\0\0\0@\340\340@\0\0\0\0\0\0\0\0\0\0\4\34" "t\304\4\0\0\0\0\0\4\304t\34\4\0\0\0\0\0\0\0\0\0\0\0\0\1\7\34p\300p\34" "\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0 \70/! \0\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: -Adobe-Courier-Medium-R-Normal--34-240-100-100-M-200-ISO10646-1 Copyright: Copyright (c) 1984, 1987 Adobe Systems Incorporated. All Rights Reserved. Copyright (c) 1988, 1991 Digital Equipment Corporation. All Rights Reserved. Glyphs: 95/873 BBX Build Mode: 3 */ const uint8_t u8x8_font_courR24_3x4_r[9124] U8X8_FONT_SECTION("u8x8_font_courR24_3x4_r") = " ~\3\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\360\370\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\1\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\340\341\340" "@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\360\360\360\360\0\0\0\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0" "\1\77\7\1\0\0\0\1\77\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\370\0\0\200\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\10\10\10\377\10\10\10\377\10\10\10\10\0\0\0\0\0\0\0\0\0\0\0\2\2\2\302\77\2\2\342\77" "\2\2\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\0\0\0\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300@` < `@\300\340\0\0\0\0\0\0\0\0\0\0\0\0\0" "\7\14\30\20\20\60 `@\301\200\0\0\0\0\0\0\0\0\0\0\0\0<\30\20\60 \340 \60" "\20\30\14\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300`\60\20\20\60`\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200" "\203\206LHH,&#\20\20\20\10\10\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\340 \340 \340\0\0\0\0\0\0\0\0\0\17\0" "\0\0\0\0\0\377\0\0\0\0\0\0\17\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\377\200\200" "\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \340 \0\0\0 \340 \0\0\0\0\0\0\0\0\0\377" "\0\0\0\0\0\0\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\300" "@`\70\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0 `\340 \0\0\0\0\0 \340` \0\0\0\0\0\0\0\0\3" "\36\360\200\0\0\0\0\0\200\360\36\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\16p\300p\16" "\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \340 \0\0\0\0\0 \340 \0\0\0\0\0\0\0\0\7\374" "\0\0\0\340\34\4\34\340\0\0\0\374\7\0\0\0\0\0\0\0\0\0\0\17\370\300>\3\0\0\0\3" ">\300\370\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0 `\340 \0\0\0\0\0 \340` \0\0\0\0\0\0\0\0\0\0\0" "\1\3\4\30\260\340\260\30\4\3\1\0\0\0\0\0\0\0\0\0\0\200\300\340\260\214\206\1\0\0\0\1" "\206\214\260\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0 `\340\240 \0\0\0\0\0 \240\340` \0\0\0\0\0\0\0\0\0\0\0" "\0\3\6\30p\300p\30\6\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\377\200\200" "\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340 \240\340\0\0\0\0\0\0\0\0\0\0\0\0\0" "\7\0\0\0\300`\60\34\6\3\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\230\216\203\201\200\200\200" "\200\200\200\376\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\360\20\20\20\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\10\10\10\10\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\14x\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\1\7<\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\34" "p\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\6\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\20\20\20\20\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\10\17\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\340\60\30\60\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\14\7\1\0\0\0\0\0\1\7\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0 \0" "\0\0\0\0\0\0\0\0\4\14\30\60`@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\10\10\14\4\4\4\14\10\70\340\0\0\0\0\0\0\0\0\0\0\0\0|\306\202\203\201\201\201\201\301A" "c\377\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\20\20\20\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377" "`\30\10\14\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\200\200\200\377\30`@\300\200\200\200\200" "\300@`\70\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "p\30\10\14\4\4\4\14\10\10\30|\0\0\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\300" "@@ \60\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\20\20\20\360\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\14\10\30`\377\0\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\200\300" "@`\30\377\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\0\0\0\17\71aA\301\201\201\201\201\201" "\301Aa!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\340\60\20\20\20\20 \0\0\0\0\0\0\0\0\0\0\0\4" "\4\4\4\377\4\4\4\4\4\4\4\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\377\200\200\200\200" "\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\14\10\30`\374\4\4\4\0\0\0\0\0\0\0\17\70`@\300\200\200\200\200\300" "@`\30\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \60\20\34\7\0\0\0\0" "\0\0\0\0\0\20\20\20\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377`\30\10\14\4\4\14\10\70\340\0\0\0\0\0\0\0\0\0\0\0\200\200\377\200\200\0\0\0\0\0" "\200\200\377\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\4\4\4\4\4\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\377\200\200" "\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\4\4\4\4\4\4\4\4\4\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \60\20\34\7\0\0\0\0\0\0" "\0\0\0\0\0\0\20\20\20\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\377\0\0\200\300d\64\34\14\4\4\0\0\0\0\0\0\0\0\0\0\200\200\200\377\1\1\3\6\14\30" "\260\340\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\20\20\20\20\20\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\377\200\200" "\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\4\374\60" "\10\4\4\14\30\360\60\10\4\4\14\30\360\0\0\0\0\0\0\0\200\200\377\200\200\0\0\0\0\377\200\200" "\0\0\0\0\377\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\4" "\374`\30\10\14\4\4\14\10\70\340\0\0\0\0\0\0\0\0\0\0\0\200\200\377\200\200\0\0\0\0\0" "\200\200\377\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\0\0\17\70`@\300\200\200\200\200\200" "\300@`\70\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\10\370" "`\30\10\14\4\4\4\4\14\10\30p\300\0\0\0\0\0\0\0\0\0\0\377\30`@\300\200\200\200\200" "\300@`\70\17\0\0\0\0\0\0\0 \77 \0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300p" "\30\10\14\4\4\4\4\14\10\30p\370\10\10\10\0\0\0\0\0\0\0\17\70`@\300\200\200\200\200\300" "@`\70\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \77 \0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\4\4\4\374`\20\30\10\14\4\4\4\14\10\0\0\0\0\0\0\0\0\0\200\200\200\200\377\200\200\200\200" "\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "p\330\210\214\4\4\4\14\10\30<\0\0\0\0\0\0\0\0\0\0\0\0\370`@@\301\201\201\201\303" "Bf<\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\4" "\4\377\4\4\4\4\4\4\4\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77`\300\200\200\200\200" "\300@` \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\4\4" "\374\0\0\0\0\0\0\4\4\4\374\0\0\0\0\0\0\0\0\0\0\0\0\0\77`\300\200\200\200\200\300" "@\60\377\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\4\14" "|\304\4\0\0\0\0\0\4\304|\14\4\4\0\0\0\0\0\0\0\0\0\0\0\1\17\70\340\200\340\70" "\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\14\374" "\4\4\0\0\300@\300\0\0\4\4\374\14\4\0\0\0\0\0\0\0\0\0\1\77\340\60\36\3\0\3\36" "\60\340\77\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\14" "\34\64d\300\200\0\200\300d\64\34\14\4\0\0\0\0\0\0\0\0\0\200\300\340\260\230\14\7\3\7\14" "\230\260\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\34" "t\304\4\0\0\0\0\0\4\304t\34\4\0\0\0\0\0\0\0\0\0\0\0\0\1\7\34p\300p\34" "\7\1\0\0\0\0\0\0\0\0\0\0\0\0 \70/! \0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "<\4\4\4\4\204\304d\64\34\14\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\230\214\206\203\200\200" "\200\200\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\340\60\30\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\200\300\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\376\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\14\10\10\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\10\30\60\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\177\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\3\1" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\10\14\7\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "` \60\60`@\300\200\0\200\300`\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: -Adobe-Courier-Medium-R-Normal--34-240-100-100-M-200-ISO10646-1 Copyright: Copyright (c) 1984, 1987 Adobe Systems Incorporated. All Rights Reserved. Copyright (c) 1988, 1991 Digital Equipment Corporation. All Rights Reserved. Glyphs: 18/873 BBX Build Mode: 3 */ const uint8_t u8x8_font_courR24_3x4_n[2596] U8X8_FONT_SECTION("u8x8_font_courR24_3x4_n") = " :\3\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\6\4\204\314x\37x\314\204\4\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\3\0\0\0\0\0" "\3\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\377\1\1" "\1\1\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\340\340`\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0<\37\7\1\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\1\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\200" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\60\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\360\34\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300p\36\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\300@@@\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\370\7\1\0\0\0\0\0\1\7\370\0\0\0\0\0\0\0\0\0\0\0\0\0\37\360\200\0\0\0\0\0" "\200\360\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\2\2\2\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\1\1\1\0\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\2\2\2\2\3\2\2\2\2\2\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\200@@@@@\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\7\1\0\0\0\0\0\200\300p\37\0\0\0\0\0\0\0\0\0\0\0\0\200\300`\60\30\14\6\3\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\2\2\2\2\2\2\2\2\2\2\2\3\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\200\300@@@\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\1\1\0\0\200\200\200\200@!\37\0\0\0\0\0\0\0\0\0\0\0\0\200\200\0\0\0\0\0\0\0" "\1\201\302|\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\2\2\2\2\3\1\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200@\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\200`\60\14\6\1\0\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\13\11\10\10\10\10\10\10" "\377\10\10\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\2\2\3\2\2\2\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300@@@@@@@@@\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\377@@` `@\300\200\0\0\0\0\0\0\0\0\0\0\0\0@\300\200\0\0\0\0\0\0" "\0\200\343>\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\2\2\2\3\1\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\300@@@@\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\360\34\307A` `@\300\0\0\0\0\0\0\0\0\0\0\0\0\0\37\177\300\0\0\0\0\0" "\0\0\301\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\2\2\2\3\1\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300@@@@@@@@@\300\0\0\0\0\0\0\0\0\0\0\0\0\0" "\1\0\0\0\0\0\0\200\360\36\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300|\7" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\200@@@@@\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\36\63@\300\200\200\200\300@\63\36\0\0\0\0\0\0\0\0\0\0\0\0\0|\307\1\1\0\0\0\1" "\1\307|\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\2\2\2\3\1\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\200\300@@@@\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "~\303\0\0\0\0\0\0\200\301\77\374\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\2\2\3\201" "\301`\34\3\0\0\0\0\0\0\0\0\0\0\0\0\0\2\2\2\3\1\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0`\360\360\360`\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\200" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: -FreeType-LucasArts SCUMM Subtitle Roman Outline-Medium-R-Normal--32-320-72-72-P-107-ISO10646-1 Copyright: Copyright Goatmeal 2013 LucasArts SCUMM - Subtitle - Roman Glyphs: 89/95 BBX Build Mode: 3 */ const uint8_t u8x8_font_lucasarts_scumm_subtitle_o_2x2_f[7076] U8X8_FONT_SECTION("u8x8_font_lucasarts_scumm_subtitle_o_2x2_f") = " \374\2\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0~\303\1\1\303~\0\0\0\0\0\0\0\0\0\0\0\37\22\22\37\0\0\0\0\0\0\0" "\0\0\0\0\37\21\21\37\37\21\21\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\37\21\21\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\276\222\302b>\0\0\0\0\0\0" "\0\0\0\0\300@@@@@@@\300\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\36\22\22\36\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300`\60\30\214\306c\61\37\0\0\0\0\0\37\21\30\14\6\3\1\0\0\0\0\0" "\0\0\0\0\360\34\6\343\271\15\5\15\271\343\6\34\360\0\0\0\1\7\14\30\23\26\24\26\23\30\14\7" "\1\0\0\0\34\26\363\1\1\377\0\0\0\0\0\0\0\0\0\0\34\24\27\20\20\27\24\34\0\0\0\0" "\0\0\0\0\34\26\23\231\315e=\231\303f<\0\0\0\0\0\34\26\23\21\24\26\27\25\24\24\34\0" "\0\0\0\0\34\26\23\371\255\245\275\31C\346\274\0\0\0\0\0\7\15\31\23\26\24\27\23\30\14\7\0" "\0\0\0\0\300`\60\230\314\346\363\1\1\377\200\0\0\0\0\0\3\2\2\2\2\2\36\20\20\36\3\0" "\0\0\0\0\177AA]UU\325\225\65e\307\0\0\0\0\0\7\15\31\23\26\24\26\23\30\14\7\0" "\0\0\0\0\374\6\3\231\335U\335\231\63v\334\0\0\0\0\0\7\14\30\23\26\24\26\23\30\14\7\0" "\0\0\0\0\7\5\5\345\65\35\315e\61\31\17\0\0\0\0\0\0\0\0\37\20\20\37\0\0\0\0\0" "\0\0\0\0\274\346C\31\275\245\275\31C\346\274\0\0\0\0\0\7\14\30\23\27\24\27\23\30\14\7\0" "\0\0\0\0|\306\203\71mEm\71\3\6\374\0\0\0\0\0\7\15\31\23\27\25\27\23\30\14\7\0" "\0\0\0\0xHHx\0\0\0\0\0\0\0\0\0\0\0\0\17\11\11\17\0\0\0\0\0\0\0\0" "\0\0\0\0xHHx\0\0\0\0\0\0\0\0\0\0\0\0\77)\61\37\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\34\26\23\231\315e=\231\303f<\0\0\0\0\0\0\0\0\37\24\24\37\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\340\70\16CqqG\34p\300\0\0\0\34\26\23\20\24\37\1\1\1\1\37\24" "\21\27\34\0\7\375\1\1\275\275\231\3f\374\200\0\0\0\0\0\34\27\20\20\27\24\27\23\30\14\7\0" "\0\0\0\0\360\34\6\343\271\15\5\15\31\63!\77\0\0\0\0\1\7\14\30\23\26\24\26\22\33\15\7" "\0\0\0\0\7\375\1\1\375\5\15\271\343\6\34\360\0\0\0\0\34\27\20\20\27\24\26\23\30\14\7\1" "\0\0\0\0\7\375\1\1\275\35\15\375\31\21\37\0\0\0\0\0\34\27\20\20\27\27\26\27\23\21\37\0" "\0\0\0\0\7\375\1\1\275\35\15\375\31\21\37\0\0\0\0\0\34\27\20\20\27\27\36\3\0\0\0\0" "\0\0\0\0\360\34\6\343\271\15\305MYsa\177\300\0\0\0\1\7\14\30\23\26\25\27\33\20\20\37" "\1\0\0\0\7\375\1\1\275\247\247\275\1\1\375\7\0\0\0\0\34\27\20\20\27\34\34\27\20\20\27\34" "\0\0\0\0\7\375\1\1\375\7\0\0\0\0\0\0\0\0\0\0\34\27\20\20\27\34\0\0\0\0\0\0" "\0\0\0\0\0\200\200\200\207\375\1\1\375\7\0\0\0\0\0\0\17\31\20\22\27\23\20\30\17\0\0\0" "\0\0\0\0\7\375\1\1\235\17g\361\231\15\5\7\0\0\0\0\34\27\20\20\27\37\36\24\21\23\26\34" "\0\0\0\0\7\375\1\1\375\5\7\0\0\0\0\0\0\0\0\0\34\27\20\20\27\24\24\24\26\23\21\37" "\0\0\0\0\7\375\1\1\361\303\16<\16\303\361\1\1\375\7\0\34\27\20\20\27\37\3\2\3\37\27\20" "\20\27\34\0\7\375\1\1\361\307\34\177\375\1\1\375\7\0\0\0\34\27\20\20\27\37\7\34\21\20\20\27" "\34\0\0\0\360\34\6\343\271\15\5\15\271\343\6\34\360\0\0\0\1\7\14\30\23\26\24\26\23\30\14\7" "\1\0\0\0\7\375\1\1\275\245\275\231\303f<\0\0\0\0\0\34\27\20\20\27\34\0\0\0\0\0\0" "\0\0\0\0\360\34\6\343\271\15\5\15\271\343\6\34\360\0\0\0\1\7\14\30\23\66bFSX|\7" "\1\0\0\0\7\375\1\1\275\245\275\31C\346\274\0\0\0\0\0\34\27\20\20\27\34\35\27\20\20\27\34" "\0\0\0\0\232\332\326\324\34\60\340\0\0\0\0\0\0\7\14\30\22\26\26\26\22\33\17\0\0" "\0\0\0\0\300`\60\234\324\326\332\32>\340\0\0\0\0\0\0\7\14\30\22\26\26\26\22\33\17\0\0" "\0\0\0\0\300`<\226\322\332\322\26<\340\0\0\0\0\0\0\7\14\30\22\26\26\26\22\33\17\0\0" "\0\0\0\0\300`<\224\324\334\324\24<\340\0\0\0\0\0\0\7\14\30\22\26\26\26\22\33\17\0\0" "\0\0\0\0\16\12\372\26\24\374\0\0\0\0\0\0\0\0\0\0\0\34\27\20\20\27\34\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\34\366\32\32\366\34\0\0\0\0\0\0\0\0\0\0\34\27\20\20\27\34\0\0\0\0\0\0" "\0\0\0\0\34\364\34\34\364\34\0\0\0\0\0\0\0\0\0\0\34\27\20\20\27\34\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0p\334\24\24\334pp\334\24\24\374\0\0\0\0\0\0\17\30\20\23\26\26\33\20\20\27\34" "\0\0\0"; /* Fontname: -FreeType-LucasArts SCUMM Subtitle Roman Outline-Medium-R-Normal--32-320-72-72-P-107-ISO10646-1 Copyright: Copyright Goatmeal 2013 LucasArts SCUMM - Subtitle - Roman Glyphs: 74/95 BBX Build Mode: 3 */ const uint8_t u8x8_font_lucasarts_scumm_subtitle_o_2x2_r[2916] U8X8_FONT_SECTION("u8x8_font_lucasarts_scumm_subtitle_o_2x2_r") = " z\2\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0~\303\1\1\303~\0\0\0\0\0\0\0\0\0\0\0\37\22\22\37\0\0\0\0\0\0\0" "\0\0\0\0\37\21\21\37\37\21\21\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\37\21\21\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\276\222\302b>\0\0\0\0\0\0" "\0\0\0\0\300@@@@@@@\300\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\36\22\22\36\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300`\60\30\214\306c\61\37\0\0\0\0\0\37\21\30\14\6\3\1\0\0\0\0\0" "\0\0\0\0\360\34\6\343\271\15\5\15\271\343\6\34\360\0\0\0\1\7\14\30\23\26\24\26\23\30\14\7" "\1\0\0\0\34\26\363\1\1\377\0\0\0\0\0\0\0\0\0\0\34\24\27\20\20\27\24\34\0\0\0\0" "\0\0\0\0\34\26\23\231\315e=\231\303f<\0\0\0\0\0\34\26\23\21\24\26\27\25\24\24\34\0" "\0\0\0\0\34\26\23\371\255\245\275\31C\346\274\0\0\0\0\0\7\15\31\23\26\24\27\23\30\14\7\0" "\0\0\0\0\300`\60\230\314\346\363\1\1\377\200\0\0\0\0\0\3\2\2\2\2\2\36\20\20\36\3\0" "\0\0\0\0\177AA]UU\325\225\65e\307\0\0\0\0\0\7\15\31\23\26\24\26\23\30\14\7\0" "\0\0\0\0\374\6\3\231\335U\335\231\63v\334\0\0\0\0\0\7\14\30\23\26\24\26\23\30\14\7\0" "\0\0\0\0\7\5\5\345\65\35\315e\61\31\17\0\0\0\0\0\0\0\0\37\20\20\37\0\0\0\0\0" "\0\0\0\0\274\346C\31\275\245\275\31C\346\274\0\0\0\0\0\7\14\30\23\27\24\27\23\30\14\7\0" "\0\0\0\0|\306\203\71mEm\71\3\6\374\0\0\0\0\0\7\15\31\23\27\25\27\23\30\14\7\0" "\0\0\0\0xHHx\0\0\0\0\0\0\0\0\0\0\0\0\17\11\11\17\0\0\0\0\0\0\0\0" "\0\0\0\0xHHx\0\0\0\0\0\0\0\0\0\0\0\0\77)\61\37\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\34\26\23\231\315e=\231\303f<\0\0\0\0\0\0\0\0\37\24\24\37\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\340\70\16CqqG\34p\300\0\0\0\34\26\23\20\24\37\1\1\1\1\37\24" "\21\27\34\0\7\375\1\1\275\275\231\3f\374\200\0\0\0\0\0\34\27\20\20\27\24\27\23\30\14\7\0" "\0\0\0\0\360\34\6\343\271\15\5\15\31\63!\77\0\0\0\0\1\7\14\30\23\26\24\26\22\33\15\7" "\0\0\0\0\7\375\1\1\375\5\15\271\343\6\34\360\0\0\0\0\34\27\20\20\27\24\26\23\30\14\7\1" "\0\0\0\0\7\375\1\1\275\35\15\375\31\21\37\0\0\0\0\0\34\27\20\20\27\27\26\27\23\21\37\0" "\0\0\0\0\7\375\1\1\275\35\15\375\31\21\37\0\0\0\0\0\34\27\20\20\27\27\36\3\0\0\0\0" "\0\0\0\0\360\34\6\343\271\15\305MYsa\177\300\0\0\0\1\7\14\30\23\26\25\27\33\20\20\37" "\1\0\0\0\7\375\1\1\275\247\247\275\1\1\375\7\0\0\0\0\34\27\20\20\27\34\34\27\20\20\27\34" "\0\0\0\0\7\375\1\1\375\7\0\0\0\0\0\0\0\0\0\0\34\27\20\20\27\34\0\0\0\0\0\0" "\0\0\0\0\0\200\200\200\207\375\1\1\375\7\0\0\0\0\0\0\17\31\20\22\27\23\20\30\17\0\0\0" "\0\0\0\0\7\375\1\1\235\17g\361\231\15\5\7\0\0\0\0\34\27\20\20\27\37\36\24\21\23\26\34" "\0\0\0\0\7\375\1\1\375\5\7\0\0\0\0\0\0\0\0\0\34\27\20\20\27\24\24\24\26\23\21\37" "\0\0\0\0\7\375\1\1\361\303\16<\16\303\361\1\1\375\7\0\34\27\20\20\27\37\3\2\3\37\27\20" "\20\27\34\0\7\375\1\1\361\307\34\177\375\1\1\375\7\0\0\0\34\27\20\20\27\37\7\34\21\20\20\27" "\34\0\0\0\360\34\6\343\271\15\5\15\271\343\6\34\360\0\0\0\1\7\14\30\23\26\24\26\23\30\14\7" "\1\0\0\0\7\375\1\1\275\245\275\231\303f<\0\0\0\0\0\34\27\20\20\27\34\0\0\0\0\0\0" "\0\0\0\0\360\34\6\343\271\15\5\15\271\343\6\34\360\0\0\0\1\7\14\30\23\66bFSX|\7" "\1\0\0\0\7\375\1\1\275\245\275\31C\346\274\0\0\0\0\0\34\27\20\20\27\34\35\27\20\20\27\34" "\0\0\0\0\0\0\0\0\0>#\61\30\14\6\3\1\0\0\0\0" "\0\0\0\0\340\70\14\306r\32\12\32r\306\14\70\340\0\0\0\3\16\30\61',(,'\61\30\16" "\3\0\0\0\70,\346\2\2\376\0\0\0\0\0\0\0\0\0\0\70(/ /(\70\0\0\0\0" "\0\0\0\0\70,&\62\232\312z\62\206\314x\0\0\0\0\0\70,&#),.+)(\70\0" "\0\0\0\0\70,&\362ZJz\62\206\314x\0\0\0\0\0\16\32\62'-)/&\60\31\17\0" "\0\0\0\0\200\300`\60\230\314\346\2\2\376\0\0\0\0\0\0\7\4\4\5\5\5= =\7\0" "\0\0\0\0\376\202\202\272\252\252\252*j\312\216\0\0\0\0\0\16\32\62&,(-'\60\30\17\0" "\0\0\0\0\370\14\6\62\272\252\272\62f\354\270\0\0\0\0\0\17\30\60'-(-'\60\30\17\0" "\0\0\0\0\16\12\12\312j:\232\312b\62\36\0\0\0\0\0\0\0\0\77 \77\0\0\0\0\0" "\0\0\0\0x\314\206\62zJz\62\206\314x\0\0\0\0\0\17\31\60&/)/&\60\31\17\0" "\0\0\0\0\370\214\6r\332\212\332r\6\14\370\0\0\0\0\0\16\33\63&.*.&\60\30\17\0" "\0\0\0\0\360\220\220\360\0\0\0\0\0\0\0\0\0\0\0\0\36\22\22\36\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: -FreeType-LucasArts SCUMM Subtitle Roman-Medium-R-Normal--16-160-72-72-P-88-ISO10646-1 Copyright: Copyright Goatmeal 2013 Glyphs: 89/95 BBX Build Mode: 3 */ const uint8_t u8x8_font_lucasarts_scumm_subtitle_r_2x2_f[7076] U8X8_FONT_SECTION("u8x8_font_lucasarts_scumm_subtitle_r_2x2_f") = " \374\2\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0<\376\376<\0\0\0\0\0\0\0\0\0\0\0\0\0\15\15\0\0\0\0\0\0\0\0" "\0\0\0\0\0\16\16\0\0\16\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\16\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@l<\34\0\0\0\0\0\0\0" "\0\0\0\0\0\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\14\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340p\70\34\16\0\0\0\0\0\0\0\16\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\340\370\34\6\2\2\2\6\34\370\340\0\0\0\0\0\0\3\7\14\10\10\10\14\7\3\0" "\0\0\0\0\0\10\14\376\376\0\0\0\0\0\0\0\0\0\0\0\0\10\10\17\17\10\10\0\0\0\0\0" "\0\0\0\0\0\10\14\6\2\202\302f<\30\0\0\0\0\0\0\0\10\14\16\13\11\10\10\10\10\0\0" "\0\0\0\0\0\10\14\6BBB\346\274\30\0\0\0\0\0\0\0\2\6\14\10\10\10\14\7\3\0\0" "\0\0\0\0\0\200\300`\60\30\14\376\376\0\0\0\0\0\0\0\0\1\1\1\1\1\1\17\17\1\0\0" "\0\0\0\0\0>>\42\42\42\42b\302\202\0\0\0\0\0\0\0\2\6\14\10\10\10\14\7\3\0\0" "\0\0\0\0\0\370\374f\42\42\42f\314\210\0\0\0\0\0\0\0\3\7\14\10\10\10\14\7\3\0\0" "\0\0\0\0\0\2\2\2\302\342\62\32\16\6\0\0\0\0\0\0\0\0\0\0\17\17\0\0\0\0\0\0" "\0\0\0\0\0\30\274\346BBB\346\274\30\0\0\0\0\0\0\0\3\7\14\10\10\10\14\7\3\0\0" "\0\0\0\0\0\70|\306\202\202\202\306\374\370\0\0\0\0\0\0\0\2\6\14\10\10\10\14\7\3\0\0" "\0\0\0\0\0\60\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\6\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\60\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\26\16\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\10\14\6\2\202\302f<\30\0\0\0\0\0\0\0\0\0\0\13\13\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\360\274\216\216\270\340\200\0\0\0\0\0\10\14\17\13\0\0\0\0\0\0\13" "\16\10\0\0\0\2\376\376BBf\374\230\0\0\0\0\0\0\0\0\10\17\17\10\10\10\14\7\3\0\0" "\0\0\0\0\0\340\370\34\6\2\2\2\6\14\36\0\0\0\0\0\0\0\3\7\14\10\10\10\14\4\2\0" "\0\0\0\0\0\2\376\376\2\2\2\6\34\370\340\0\0\0\0\0\0\10\17\17\10\10\10\14\7\3\0\0" "\0\0\0\0\0\2\376\376B\342\362\2\6\16\0\0\0\0\0\0\0\10\17\17\10\10\11\10\14\16\0\0" "\0\0\0\0\0\2\376\376B\342\362\2\6\16\0\0\0\0\0\0\0\10\17\17\10\10\1\0\0\0\0\0" "\0\0\0\0\0\340\370\34\6\2\2\202\206\214\236\200\0\0\0\0\0\0\3\7\14\10\10\10\4\17\17\0" "\0\0\0\0\0\2\376\376B@@B\376\376\2\0\0\0\0\0\0\10\17\17\10\0\0\10\17\17\10\0" "\0\0\0\0\0\2\376\376\2\0\0\0\0\0\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\2\376\376\2\0\0\0\0\0\0\0\0\6\17\15\10\14\17\7\0\0\0\0" "\0\0\0\0\0\2\376\376b\360\230\16\6\2\2\0\0\0\0\0\0\10\17\17\10\0\1\13\16\14\10\0" "\0\0\0\0\0\2\376\376\2\2\0\0\0\0\0\0\0\0\0\0\0\10\17\17\10\10\10\10\10\14\16\0" "\0\0\0\0\0\2\376\376\16<\360\300\360<\16\376\376\2\0\0\0\10\17\17\10\0\0\1\0\0\10\17" "\17\10\0\0\0\2\376\376\16\70\340\200\2\376\376\2\0\0\0\0\0\10\17\17\10\0\0\3\16\17\17\10" "\0\0\0\0\0\340\370\34\6\2\2\2\6\34\370\340\0\0\0\0\0\0\3\7\14\10\10\10\14\7\3\0" "\0\0\0\0\0\2\376\376BBBf<\30\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0\0\0\0" "\0\0\0\0\0\340\370\34\6\2\2\2\6\34\370\340\0\0\0\0\0\0\3\7\14\10\34\70,'\3\0" "\0\0\0\0\0\2\376\376BBB\346\274\30\0\0\0\0\0\0\0\10\17\17\10\0\0\10\17\17\10\0" "\0\0\0\0\0\30<&fB\302\202\204\16\0\0\0\0\0\0\0\16\4\10\10\10\14\14\7\3\0\0" "\0\0\0\0\0\16\6\2\376\376\2\6\16\0\0\0\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0\0" "\0\0\0\0\0\2\376\376\2\0\0\2\376\2\0\0\0\0\0\0\0\0\7\17\14\10\10\14\7\0\0\0" "\0\0\0\0\0\2>\376\302\0\0\302>\2\0\0\0\0\0\0\0\0\0\1\17\16\16\1\0\0\0\0" "\0\0\0\0\0\2>\376\302\0\302\376\376\302\0\0\302>\2\0\0\0\0\1\17\16\17\1\1\17\16\16" "\1\0\0\0\0\2\6\16\32\260\340\340\260\32\16\6\2\0\0\0\0\10\14\16\13\1\0\0\1\13\16\14" "\10\0\0\0\0\2\16>r\300\300r>\16\2\0\0\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0" "\0\0\0\0\0\16\6\202\302\342r:\36\16\0\0\0\0\0\0\0\16\17\13\11\10\10\10\14\16\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\14\14\14\14\14\14\14\14\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0@` \340\300\0\0\0\0\0\0\0\0\6\17\11\11\11\15\7\17\10\0\0" "\0\0\0\0\0\2\376\376` `\300\200\0\0\0\0\0\0\0\0\17\17\4\10\10\14\7\3\0\0" "\0\0\0\0\0\200\300` `@\0\0\0\0\0\0\0\0\3\7\14\10\10\10\14\4\0\0\0" "\0\0\0\0\0\200\300` b\376\376\0\0\0\0\0\0\0\0\3\7\14\10\10\4\17\17\10\0\0" "\0\0\0\0\0\200\300` \340\300\0\0\0\0\0\0\0\0\3\7\15\11\11\11\15\4\0\0\0" "\0\0\0\0\0 \374\376\42\42\16\14\0\0\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300` p\320\220\0\0\0\0\0\0\0\61;fDDDj\71\61\0\0" "\0\0\0\0\0\2\376\376@ `\300\200\0\0\0\0\0\0\0\10\17\17\10\0\0\10\17\17\10\0" "\0\0\0\0\0\0\354\354\0\0\0\0\0\0\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\354\354\0\0\0\0\0\0\0\0\0 `@@`\177\77\0\0\0\0" "\0\0\0\0\0\2\376\376\2\0\240` \0\0\0\0\0\0\0\10\17\17\12\1\1\13\16\14\10\0" "\0\0\0\0\0\2\376\376\0\0\0\0\0\0\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0\0\0\0" "\0\0\0\0\0 \340\340@ \340\300` \340\300\0\0\0\0\0\10\17\17\10\0\17\17\10\0\17\17" "\10\0\0\0\0 \340\340@ \340\300\0\0\0\0\0\0\0\0\10\17\17\10\0\0\17\17\10\0\0" "\0\0\0\0\0\200\300` `\300\200\0\0\0\0\0\0\0\3\7\14\10\10\10\14\7\3\0\0" "\0\0\0\0\0 \340\340@ `\300\200\0\0\0\0\0\0\0\200\377\377\204\10\10\14\7\3\0\0" "\0\0\0\0\0\200\300` @\340\340\0\0\0\0\0\0\0\0\3\7\14\10\10\204\377\377\200\0\0" "\0\0\0\0\0 \340\340\300` \340\300\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0\0\0\0" "\0\0\0\0\0\300\340\240 @\340\0\0\0\0\0\0\0\0\0\16\5\11\11\13\17\6\0\0\0\0" "\0\0\0\0\0 \370\374 \0\0\0\0\0\0\0\0\0\0\0\0\7\17\10\10\4\0\0\0\0\0" "\0\0\0\0\0 \340\340 \0\0 \340\340\0\0\0\0\0\0\0\0\7\17\14\10\10\4\17\17\10\0" "\0\0\0\0\0 `\340\240\0\0\240\340` \0\0\0\0\0\0\0\0\1\7\16\16\7\1\0\0\0" "\0\0\0\0\0 `\340\240\0\0\240\340\340\240\0\0\0\240`\0\0\0\1\7\16\16\7\1\1\7\16" "\10\6\1\0\0 `\340\200\0\200\340` \0\0\0\0\0\10\10\14\16\3\1\3\16\14\10\10" "\0\0\0\0\0 `\340\240\0\0\0 \340 \0\0\0\0\0 `@Ac>\34\7\1\0\0" "\0\0\0\0\0\340` \240\340` \0\0\0\0\0\0\0\0\10\14\16\13\11\10\14\16\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\3\3\300\360\274\216\216\270\340\200\3\3\0\0\0\10\14\17\13\0\0\0\0\0\0\13" "\16\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\10\370\370\212\212\311\11\30\70\0\0\0\0\0\0\0\10\17\17\10\10\11\10\14\16\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0@`$$((\340\300\0\0\0\0\0\0\0\0\6\17\11\11\11\15\7\17\10\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0@`(,$,\350\300\0\0\0\0\0\0\0\0\6\17\11\11\11\15\7\17\10\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0@h( \350\310\0\0\0\0\0\0\0\0\6\17\11\11\11\15\7\17\10\0\0" "\0\0\0\0\0@`$**$\340\300\0\0\0\0\0\0\0\0\6\17\11\11\11\15\7\17\10\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300` `@\0\0\0\0\0\0\0\0\3\7\14(\30\10\14\4\0\0\0" "\0\0\0\0\0\200\300d$((\340\300\0\0\0\0\0\0\0\0\3\7\15\11\11\11\15\4\0\0\0" "\0\0\0\0\0\200\300`(($\344\300\0\0\0\0\0\0\0\0\3\7\15\11\11\11\15\4\0\0\0" "\0\0\0\0\0\200\300h,$,\350\300\0\0\0\0\0\0\0\0\3\7\15\11\11\11\15\4\0\0\0" "\0\0\0\0\0\200\300h( (\350\300\0\0\0\0\0\0\0\0\3\7\15\11\11\11\15\4\0\0\0" "\0\0\0\0\0\4\4\350\350\0\0\0\0\0\0\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\10\344\344\10\0\0\0\0\0\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0\0\0\0" "\0\0\0\0\0\10\340\340\10\0\0\0\0\0\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \350\350 \0\0 \350\350\0\0\0\0\0\0\0\0\7\17\14\10\10\4\17\17\10\0" "\0\0\0"; /* Fontname: -FreeType-LucasArts SCUMM Subtitle Roman-Medium-R-Normal--16-160-72-72-P-88-ISO10646-1 Copyright: Copyright Goatmeal 2013 Glyphs: 74/95 BBX Build Mode: 3 */ const uint8_t u8x8_font_lucasarts_scumm_subtitle_r_2x2_r[2916] U8X8_FONT_SECTION("u8x8_font_lucasarts_scumm_subtitle_r_2x2_r") = " z\2\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0<\376\376<\0\0\0\0\0\0\0\0\0\0\0\0\0\15\15\0\0\0\0\0\0\0\0" "\0\0\0\0\0\16\16\0\0\16\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\16\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@l<\34\0\0\0\0\0\0\0" "\0\0\0\0\0\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\14\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340p\70\34\16\0\0\0\0\0\0\0\16\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\340\370\34\6\2\2\2\6\34\370\340\0\0\0\0\0\0\3\7\14\10\10\10\14\7\3\0" "\0\0\0\0\0\10\14\376\376\0\0\0\0\0\0\0\0\0\0\0\0\10\10\17\17\10\10\0\0\0\0\0" "\0\0\0\0\0\10\14\6\2\202\302f<\30\0\0\0\0\0\0\0\10\14\16\13\11\10\10\10\10\0\0" "\0\0\0\0\0\10\14\6BBB\346\274\30\0\0\0\0\0\0\0\2\6\14\10\10\10\14\7\3\0\0" "\0\0\0\0\0\200\300`\60\30\14\376\376\0\0\0\0\0\0\0\0\1\1\1\1\1\1\17\17\1\0\0" "\0\0\0\0\0>>\42\42\42\42b\302\202\0\0\0\0\0\0\0\2\6\14\10\10\10\14\7\3\0\0" "\0\0\0\0\0\370\374f\42\42\42f\314\210\0\0\0\0\0\0\0\3\7\14\10\10\10\14\7\3\0\0" "\0\0\0\0\0\2\2\2\302\342\62\32\16\6\0\0\0\0\0\0\0\0\0\0\17\17\0\0\0\0\0\0" "\0\0\0\0\0\30\274\346BBB\346\274\30\0\0\0\0\0\0\0\3\7\14\10\10\10\14\7\3\0\0" "\0\0\0\0\0\70|\306\202\202\202\306\374\370\0\0\0\0\0\0\0\2\6\14\10\10\10\14\7\3\0\0" "\0\0\0\0\0\60\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\6\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\60\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\26\16\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\10\14\6\2\202\302f<\30\0\0\0\0\0\0\0\0\0\0\13\13\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\360\274\216\216\270\340\200\0\0\0\0\0\10\14\17\13\0\0\0\0\0\0\13" "\16\10\0\0\0\2\376\376BBf\374\230\0\0\0\0\0\0\0\0\10\17\17\10\10\10\14\7\3\0\0" "\0\0\0\0\0\340\370\34\6\2\2\2\6\14\36\0\0\0\0\0\0\0\3\7\14\10\10\10\14\4\2\0" "\0\0\0\0\0\2\376\376\2\2\2\6\34\370\340\0\0\0\0\0\0\10\17\17\10\10\10\14\7\3\0\0" "\0\0\0\0\0\2\376\376B\342\362\2\6\16\0\0\0\0\0\0\0\10\17\17\10\10\11\10\14\16\0\0" "\0\0\0\0\0\2\376\376B\342\362\2\6\16\0\0\0\0\0\0\0\10\17\17\10\10\1\0\0\0\0\0" "\0\0\0\0\0\340\370\34\6\2\2\202\206\214\236\200\0\0\0\0\0\0\3\7\14\10\10\10\4\17\17\0" "\0\0\0\0\0\2\376\376B@@B\376\376\2\0\0\0\0\0\0\10\17\17\10\0\0\10\17\17\10\0" "\0\0\0\0\0\2\376\376\2\0\0\0\0\0\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\2\376\376\2\0\0\0\0\0\0\0\0\6\17\15\10\14\17\7\0\0\0\0" "\0\0\0\0\0\2\376\376b\360\230\16\6\2\2\0\0\0\0\0\0\10\17\17\10\0\1\13\16\14\10\0" "\0\0\0\0\0\2\376\376\2\2\0\0\0\0\0\0\0\0\0\0\0\10\17\17\10\10\10\10\10\14\16\0" "\0\0\0\0\0\2\376\376\16<\360\300\360<\16\376\376\2\0\0\0\10\17\17\10\0\0\1\0\0\10\17" "\17\10\0\0\0\2\376\376\16\70\340\200\2\376\376\2\0\0\0\0\0\10\17\17\10\0\0\3\16\17\17\10" "\0\0\0\0\0\340\370\34\6\2\2\2\6\34\370\340\0\0\0\0\0\0\3\7\14\10\10\10\14\7\3\0" "\0\0\0\0\0\2\376\376BBBf<\30\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0\0\0\0" "\0\0\0\0\0\340\370\34\6\2\2\2\6\34\370\340\0\0\0\0\0\0\3\7\14\10\34\70,'\3\0" "\0\0\0\0\0\2\376\376BBB\346\274\30\0\0\0\0\0\0\0\10\17\17\10\0\0\10\17\17\10\0" "\0\0\0\0\0\30<&fB\302\202\204\16\0\0\0\0\0\0\0\16\4\10\10\10\14\14\7\3\0\0" "\0\0\0\0\0\16\6\2\376\376\2\6\16\0\0\0\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0\0" "\0\0\0\0\0\2\376\376\2\0\0\2\376\2\0\0\0\0\0\0\0\0\7\17\14\10\10\14\7\0\0\0" "\0\0\0\0\0\2>\376\302\0\0\302>\2\0\0\0\0\0\0\0\0\0\1\17\16\16\1\0\0\0\0" "\0\0\0\0\0\2>\376\302\0\302\376\376\302\0\0\302>\2\0\0\0\0\1\17\16\17\1\1\17\16\16" "\1\0\0\0\0\2\6\16\32\260\340\340\260\32\16\6\2\0\0\0\0\10\14\16\13\1\0\0\1\13\16\14" "\10\0\0\0\0\2\16>r\300\300r>\16\2\0\0\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0" "\0\0\0\0\0\16\6\202\302\342r:\36\16\0\0\0\0\0\0\0\16\17\13\11\10\10\10\14\16\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\14\14\14\14\14\14\14\14\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0@` \340\300\0\0\0\0\0\0\0\0\6\17\11\11\11\15\7\17\10\0\0" "\0\0\0\0\0\2\376\376` `\300\200\0\0\0\0\0\0\0\0\17\17\4\10\10\14\7\3\0\0" "\0\0\0\0\0\200\300` `@\0\0\0\0\0\0\0\0\3\7\14\10\10\10\14\4\0\0\0" "\0\0\0\0\0\200\300` b\376\376\0\0\0\0\0\0\0\0\3\7\14\10\10\4\17\17\10\0\0" "\0\0\0\0\0\200\300` \340\300\0\0\0\0\0\0\0\0\3\7\15\11\11\11\15\4\0\0\0" "\0\0\0\0\0 \374\376\42\42\16\14\0\0\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300` p\320\220\0\0\0\0\0\0\0\61;fDDDj\71\61\0\0" "\0\0\0\0\0\2\376\376@ `\300\200\0\0\0\0\0\0\0\10\17\17\10\0\0\10\17\17\10\0" "\0\0\0\0\0\0\354\354\0\0\0\0\0\0\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\354\354\0\0\0\0\0\0\0\0\0 `@@`\177\77\0\0\0\0" "\0\0\0\0\0\2\376\376\2\0\240` \0\0\0\0\0\0\0\10\17\17\12\1\1\13\16\14\10\0" "\0\0\0\0\0\2\376\376\0\0\0\0\0\0\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0\0\0\0" "\0\0\0\0\0 \340\340@ \340\300` \340\300\0\0\0\0\0\10\17\17\10\0\17\17\10\0\17\17" "\10\0\0\0\0 \340\340@ \340\300\0\0\0\0\0\0\0\0\10\17\17\10\0\0\17\17\10\0\0" "\0\0\0\0\0\200\300` `\300\200\0\0\0\0\0\0\0\3\7\14\10\10\10\14\7\3\0\0" "\0\0\0\0\0 \340\340@ `\300\200\0\0\0\0\0\0\0\200\377\377\204\10\10\14\7\3\0\0" "\0\0\0\0\0\200\300` @\340\340\0\0\0\0\0\0\0\0\3\7\14\10\10\204\377\377\200\0\0" "\0\0\0\0\0 \340\340\300` \340\300\0\0\0\0\0\0\0\10\17\17\10\0\0\0\0\0\0\0" "\0\0\0\0\0\300\340\240 @\340\0\0\0\0\0\0\0\0\0\16\5\11\11\13\17\6\0\0\0\0" "\0\0\0\0\0 \370\374 \0\0\0\0\0\0\0\0\0\0\0\0\7\17\10\10\4\0\0\0\0\0" "\0\0\0\0\0 \340\340 \0\0 \340\340\0\0\0\0\0\0\0\0\7\17\14\10\10\4\17\17\10\0" "\0\0\0\0\0 `\340\240\0\0\240\340` \0\0\0\0\0\0\0\0\1\7\16\16\7\1\0\0\0" "\0\0\0\0\0 `\340\240\0\0\240\340\340\240\0\0\0\240`\0\0\0\1\7\16\16\7\1\1\7\16" "\10\6\1\0\0 `\340\200\0\200\340` \0\0\0\0\0\10\10\14\16\3\1\3\16\14\10\10" "\0\0\0\0\0 `\340\240\0\0\0 \340 \0\0\0\0\0 `@Ac>\34\7\1\0\0" "\0\0\0\0\0\340` \240\340` \0\0\0\0\0\0\0\0\10\14\16\13\11\10\14\16\0\0\0" "\0\0\0"; /* Fontname: -FreeType-LucasArts SCUMM Subtitle Roman-Medium-R-Normal--16-160-72-72-P-88-ISO10646-1 Copyright: Copyright Goatmeal 2013 Glyphs: 16/95 BBX Build Mode: 3 */ const uint8_t u8x8_font_lucasarts_scumm_subtitle_r_2x2_n[868] U8X8_FONT_SECTION("u8x8_font_lucasarts_scumm_subtitle_r_2x2_n") = " :\2\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\330x\70\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\30\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340p\70\34\0\0\0\0\0\0\0\34\16\7\3\1\0\0\0\0\0\0" "\0\0\0\0\0\300\360\70\14\4\4\4\14\70\360\300\0\0\0\0\0\1\7\16\30\20\20\20\30\16\7\1" "\0\0\0\0\0\20\30\374\374\0\0\0\0\0\0\0\0\0\0\0\0\20\20\37\37\20\20\0\0\0\0\0" "\0\0\0\0\0\20\30\14\4\4\204\314x\60\0\0\0\0\0\0\0\20\30\34\26\23\21\20\20\20\0\0" "\0\0\0\0\0\20\30\14\204\204\204\314x\60\0\0\0\0\0\0\0\4\14\30\20\20\20\31\17\6\0\0" "\0\0\0\0\0\0\200\300`\60\30\374\374\0\0\0\0\0\0\0\0\3\3\2\2\2\2\37\37\2\0\0" "\0\0\0\0\0||DDDD\304\204\4\0\0\0\0\0\0\0\4\14\30\20\20\20\30\17\7\0\0" "\0\0\0\0\0\360\370\314DDD\314\230\20\0\0\0\0\0\0\0\7\17\30\20\20\20\30\17\7\0\0" "\0\0\0\0\0\4\4\4\204\304d\64\34\14\0\0\0\0\0\0\0\0\0\0\37\37\0\0\0\0\0\0" "\0\0\0\0\0\60x\314\204\204\204\314x\60\0\0\0\0\0\0\0\6\17\31\20\20\20\31\17\6\0\0" "\0\0\0\0\0p\370\214\4\4\4\214\370\360\0\0\0\0\0\0\0\4\14\31\21\21\21\31\17\7\0\0" "\0\0\0\0\0``\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\14\0\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: -FreeType-Inconsolata LGC-Medium-R-Normal--30-300-72-72-P-138-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 191/658 BBX Build Mode: 3 */ const uint8_t u8x8_font_inr21_2x4_f[14340] U8X8_FONT_SECTION("u8x8_font_inr21_2x4_f") = " \377\2\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\70\374\374\370\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0" "\0\0\0\0\0\0\0\0\0\0\300\343\343\303\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0" "\0\0\0\0\0\0\0\0\374\374\370\0\0\0\374\374\370\0\0\0\0\0\0\0\3\3\3\0\0\0\3\3" "\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\340\360\60\0\0\0\360\360\20\0\0\0\6\6\6\346\377\77\6\6\6\366\377" "\37\6\6\6\0\6\6\306\377\77\6\6\6\346\377\77\6\6\6\0\0\0\0\1\1\0\0\0\0\1\1\0" "\0\0\0\0\0\0\200\300\340p\60\374\374\374\60`\340@\0\0\0\0\7\17\37\70\60\377\377\377`\340" "\300\200\0\0\0\0\60p`\340\300\377\377\377\340p\177\77\6\0\0\0\0\0\0\0\0\3\3\3\0\0" "\0\0\0\0\300\340\360\60\60\360\340\300\0\0\0\300\360p\20\0\3\7\17\14\14\17\207\343x>\17\3" "\0\0\0\0\0\0\300\360|\36\7\1|\376\377\203\203\377\376|\0\1\1\0\0\0\0\0\0\0\1\1" "\1\1\0\0\0\0\0\300\340\340p\60\60p\340\340\200\0\0\0\0\0\0\203\317\337x\360\360\230\37\17" "\1\0\200\0\0<\177\377\301\200\200\200\201\307\357~\70\374\357\307\0\0\0\0\1\1\1\1\1\0\0\0" "\0\0\1\0\0\0\0\0\0\0\0\374\374\370\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\340\360\60\30\34\10\0\0\0\0\0\0\360\374\377\7\1\0\0\0" "\0\0\0\0\0\0\0\0\17\177\377\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\36\34\70" "p \0\0\0\0\34\70\70p\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\37\376\370\200" "\0\0\0\0\0\0\0\0\0\0\0\200\360\377\77\3\0\0\0\0\0\0p\60\70\34\17\7\3\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\0\0\0\0\0\0\0\0\30\30\30\60\60\240\377\377\240\60\60" "\30\30\30\0\0\0\10\34\36\7\3\0\0\3\7\36\14\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0``````\377\377\377``" "```\0\0\0\0\0\0\0\0\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\340\340\200\0\0\0\0\0\0\0\0\0\0\0\60\71\17\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0``````````" "```\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\300\340\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360|\30\0\0\0\0\0\0\0\0\200\340\370>\17\3" "\0\0\0\0\0\0\200\340\370>\17\3\0\0\0\0\0\0\0\0\0\0\3\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\340\340p\60\60\60`\340\300\0\0\0\0\370\377\377\1\0\200\300`\70\14\7" "\377\377\374\0\0\7\37\177\376\347\303\200\200\200\300\360\177\37\7\0\0\0\0\0\0\0\1\1\1\1\0\0" "\0\0\0\0\0\0\200\300\300``\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0" "\0\0\0\0\0\0\200\300\340`\60\60\60\60p\340\340\300\0\0\0\0\0\0\0\0\0\0\0\200\300\360" "\177\37\6\0\0\0\200\340\360\270\236\207\203\201\201\200\200\200\200\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\0\0\0``p\60\60\60p\340\340\300\0\0\0\0\0\0\0\0````\360\370\337" "\217\3\0\0\0\0@\340\300\200\200\200\200\300\341\377\177\36\0\0\0\0\0\0\0\1\1\1\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\0\0\0\0\0\0\200\300p\70\16\7\1\377\377\377" "\0\0\0\0\0\6\7\7\6\6\6\6\6\377\377\377\6\6\6\0\0\0\0\0\0\0\0\0\0\1\1\1" "\0\0\0\0\0\0\0\360\360\360\60\60\60\60\60\60\60\60\0\0\0\0\0\177\177\77\30\30\30\30\70x" "\360\340\200\0\0\0``\340\300\200\200\200\200\300\340\377\177\37\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\300\340`p\60\60\60p``\0\0\0\0\374\377\377q\60\30\30\30\70x" "\360\340\200\0\0\0\17\77\177\360\300\200\200\200\300\340\377\177\37\0\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\60\60\60\60\60\60\60\60\60\360\360\60\0\0\0\0\0\0\0\0\0\200\360\374\77\7" "\1\0\0\0\0\0\0\0\200\340\374\77\7\1\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340p\60\60\60p\340\340\300\0\0\0\0\0\7\237\337xp `p\370\237" "\217\3\0\0\0<\177\377\340\300\200\200\200\200\300\341\177\77\14\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\300\340`p\60\60\60p\340\300\200\0\0\0\0\37\177\377\340\300\200\200\200\300\300" "\377\377\376\0\0\0\0\300\300\300\201\201\201\301\300\360\177\37\7\0\0\0\0\0\0\1\1\1\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30<<\30\0\0" "\0\0\0\0\0\0\0\0\0\0\300\340\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30<<\30\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\340\340\200\0\0\0\0\0\0\0\0\0\0\0\60\71\17\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\0`\360\360\270\230\34\14\16\6\7\3\3" "\1\1\0\0\0\0\0\1\3\3\7\6\16\14\30\70\60p`\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\14\14\14\14\14\14\14\14\14\14" "\14\14\14\0\0\6\6\6\6\6\6\6\6\6\6\6\6\6\6\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\6\16\14\34\230" "\270\360\360`\0`p\70\30\34\14\16\6\7\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 p\70\30\34\14\14\14\34\34\370\360\340\0\0\0\0\0\0\0\0\0\340\360x\34\37" "\17\3\0\0\0\0\0\0\0\0\303\343\343\300\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0" "\0\0\0\0\0\0\200\300\340`p\60\60\60p`\340\300\0\0\370\377\377\3\0\360\370\374\16\6\6\6" "\377\377\377\0\3\37\77x\360\301\303\207\207\206\206\303\301\207\7\0\0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\0\0\0\0\0\300\370\340\0\0\0\0\0\0\0\0\0\0\200\360~\17\1\7\77\374\340" "\0\0\0\0\200\360\376\37\7\6\6\6\6\6\7\17\77\374\340\200\1\1\0\0\0\0\0\0\0\0\0\0" "\0\1\1\1\0\360\360\360\60\60\60\60\60\60p\340\340\300\0\0\0\377\377\377``````\360\370" "\237\217\3\0\0\377\377\377\200\200\200\200\200\200\300\301\377\177>\0\0\1\1\1\1\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\200\300\340`p\60\60\60p`\340\300\200\0\370\377\377\3\0\0\0\0\0\0\0" "\0\0\1\1\0\7\37\77x\340\300\300\200\200\200\200\300\340` \0\0\0\0\0\0\0\1\1\1\1\1" "\0\0\0\0\0\360\360\360\60\60\60\60\60p\340\340\300\0\0\0\0\377\377\377\0\0\0\0\0\0\0\1" "\377\377\374\0\0\377\377\377\200\200\200\200\200\300\340p\77\37\7\0\0\1\1\1\1\1\1\1\1\1\0\0" "\0\0\0\0\0\360\360\360\60\60\60\60\60\60\60\60\60\60\0\0\0\377\377\377````````" "`\0\0\0\0\377\377\377\200\200\200\200\200\200\200\200\200\200\0\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\0\0\0\0\360\360\360\60\60\60\60\60\60\60\60\60\60\0\0\0\377\377\377\60\60\60\60\60\60\60" "\60\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340`\60\60\60\60p`\340\300\200\0\370\377\377\1\0\0\0\0\0\200\200" "\200\200\201\200\0\7\37\77x\340\300\300\200\200\201\201\301\377\377\177\0\0\0\0\0\0\0\1\1\1\1\1" "\1\0\0\0\0\360\360\360\0\0\0\0\0\0\0\0\360\360\360\0\0\377\377\377````````" "\377\377\377\0\0\377\377\377\0\0\0\0\0\0\0\0\377\377\377\0\0\1\1\1\0\0\0\0\0\0\0\0" "\1\1\1\0\0\0\60\60\60\60\360\360\360\60\60\60\60\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\200\200\200\200\377\377\377\200\200\200\200\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\0\0\0\0\60\60\60\60\360\360\360\60\60\60\0\0\0\0\0\0\0\0\0\0\377\377\377" "\0\0\0\0\0@\340\300\200\200\200\300\340\377\177\17\0\0\0\0\0\0\0\1\1\1\1\1\0\0\0\0" "\0\0\0\0\0\360\360\360\0\0\0\0\0\200\300\340p\60\20\0\0\377\377\377`p\370\336\217\3\1\0" "\0\0\0\0\0\377\377\377\0\0\0\3\7\17x\340\300\0\0" "\377\377\377\0\0\377\377\377\0\0\0\0\1\7\37|\377\377\377\0\0\1\1\1\0\0\0\0\0\0\0\0" "\0\1\1\0\0\0\200\300\340p\60\60\60\60p\340\300\200\0\0\374\377\377\1\0\0\0\0\0\0\0\0" "\3\377\377\360\7\37\77x\340\300\200\200\200\200\300\340x\77\37\1\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\360\360\360\60\60\60\60\60\60p`\340\300\200\0\0\377\377\377\300\300\300\300\300\300\340`" "\177\77\37\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340p\60\60\60pp\340\300\200\0\0\370\377\377\1\0\0\0\0\0\0\0\0" "\3\377\377\360\7\77\177\360\300\200\200\200\200\200\200\300\370\177\37\3\0\0\0\0\1\1\7\37\77\71\61\61" "\60\60\60\0\0\360\360\360\60\60\60\60\60\60p\340\340\300\0\0\0\377\377\377\300\300\300\300\300\300\340p" "\177\37\6\0\0\377\377\377\0\0\0\0\3\17\36|\360\300\0\0\0\1\1\1\0\0\0\0\0\0\0\0" "\1\1\1\0\0\0\200\300\340`\60\60\60\60\60p\340\300\0\0\0\0\7\37\37\70\60p`\340\300\300" "\300\200\0\0\0@p\340\300\300\200\200\200\200\300\301\343\177\77\14\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\60\60\60\60\60\60\360\360\360\60\60\60\60\60\60\0\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0" "\0\0\0\0\0\360\360\360\0\0\0\0\0\0\0\0\360\360\360\0\0\377\377\377\0\0\0\0\0\0\0\0" "\377\377\377\0\0\37\177\377\340\300\200\200\200\200\300\340\377\177\37\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\20\360\360\300\0\0\0\0\0\0\0\0\200\360\360\20\0\0\7\77\376\360\200\0\0\0\340\374" "\77\7\0\0\0\0\0\0\0\7\77\374\370\177\17\1\0\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0" "\0\0\0\0\360\360\300\0\0\0\0\200\300\0\0\0\0\0\360\360\0\77\377\360\0\300\370\77\37\377\360\200" "\0\376\177\1\0\0\17\377\374\37\1\0\0\0\17\377\377\37\0\0\0\0\0\1\1\0\0\0\0\0\0\0" "\1\0\0\0\0\20p\360\300\0\0\0\0\0\0\300\360p\20\0\0\0\0\1\7\17\276\370\370\376\17\3" "\1\0\0\0\0\0\300\360|\37\7\3\3\7\37|\360\340\200\0\0\1\1\1\0\0\0\0\0\0\0\0" "\0\1\1\0\0\60\360\340\200\0\0\0\0\0\0\0\340\360p\0\0\0\0\3\17>\370\360\300\360|\37" "\7\1\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0" "\0\0\0\0\0\0\60\60\60\60\60\60\60\60\60\260\360\360\60\0\0\0\0\0\0\0\200\340\360|\36\7" "\3\0\0\0\0\200\340\360\374\236\217\203\200\200\200\200\200\200\200\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\0\0\0\0\374\374\374\14\14\14\14\14\14\14\0\0\0\0\0\0\377\377\377\0\0\0\0\0" "\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\17\17\17\14\14\14\14\14" "\14\14\0\0\0\0\30\374\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\370\340\200\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\3\17>\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\3\3\0\0\0\0\0\14\14\14\14\14\14\14\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\14\14\14\14\14\14\14\17\17" "\17\0\0\0\0\0\0\0\0\0\300\340\360\300\200\0\0\0\0\0\0\0\0\30\34\17\3\1\0\3\17>" "\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\14\14\14\14\14\14\14\14\14\14\14" "\14\14\14\0\0\0\0\0\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\17>x\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\14\216\206\206\206\206\216\214" "\374\370\340\0\0<\376\377\303\203\201\201\201\301\341q\377\377\377\0\0\0\0\0\1\1\1\1\1\0\0\0" "\1\1\1\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\10\14\6\6\6\16\16\34" "\374\370\340\0\0\377\377\177\340\300\200\200\200\200\300\340\177\77\17\0\0\1\1\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\34\14\16\6\6\6\6\16" "\34<\10\0\0\17\77\177\360\340\300\200\200\200\200\300\300\340@\0\0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\0\0\300\360\374\34\16\6\6\6\6\14\30" "\377\377\377\0\0\17\77\377\340\300\200\200\200\200\300p\377\377\377\0\0\0\0\0\0\1\1\1\1\1\0\0" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\234\216\206\206\206\206\216\214" "\370\360\200\0\0\17\77\177\341\301\301\201\201\201\201\301\301A\1\0\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\200\360\370\70\34\14\14\14\34\30\70\0\0\14\14\14\377\377\377\14\14\14\14\14" "\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\360\374\34\16\6\6\6\16\34\370" "\374\306\6\6\0\0s\177\377\316\314\314\314\316\307\307\303\200\200\0\0\34\77\77qp`````p" "\61\77\37\6\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\30\14\4\6\6\16\36" "\374\370\340\0\0\0\377\377\377\0\0\0\0\0\0\0\377\377\377\0\0\0\1\1\1\0\0\0\0\0\0\0" "\1\1\1\0\0\0\0\0\0\0\30<<\30\0\0\0\0\0\0\0\0\0\6\6\6\6\376\376\376\0\0" "\0\0\0\0\0\0\0\200\200\200\200\377\377\377\200\200\200\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\0\0\0\0\0\0\0\0\30<<\30\0\0\0\0\0\0\6\6\6\6\6\6\376\376\376" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\60\70p```p\60\77\37\7" "\0\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\200\300\300\340p\70\34" "\16\6\2\0\0\0\377\377\377\3\1\3\7\17\376\360\200\0\0\0\0\0\300" "\370>\16\0\0\0\0\0\7\37\376\360\340\374\37\7\1\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\376\376\200\0\0\200\370|\360\200\0" "\0\0\376~\0\0\37\377\360\370\77\3\0\7\77\374\300\377\37\0\0\0\0\1\1\1\0\0\0\0\0\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\6\36\16\0\0\0\0\0\3\17~\370\300\370\77\17\1\0\0\0 p```p\70\37\17\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\6\6\6\6\206\306\346v>" "\36\6\0\0\0\200\300\360\370\274\216\207\203\201\200\200\200\200\200\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\0\0\0\0\0\200\340\340p\60\60\60\60\60\0\0\0\0\0\0\200\377\177\37\0\0\0\0" "\0\0\0\0\0\3\3\3\7\376\374\340\0\0\0\0\0\0\0\0\0\0\0\0\0\17\77\77p```" "``\0\0\0\0\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\0\0" "\0\0\0\0\0\0\0\60\60\60\60pp\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\177\377\377" "\200\0\0\0\0\0\0\0\0\0\0\0\0\370\374\377\7\3\3\3\0\0\0````px\77\37\7" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\34\14\6\6\6\14\34\70\60\60" "\70\34\14\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\30<<\30\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376\0\0" "\0\0\0\0\0\0\0\0\0\0\360\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\20\0\0\0\0\0\340\370\374\16\6\3\3\373\377\17\3" "\7\16\4\0\0\7\37\77x`\340\374\377\307\300\340`p \0\0\0\0\0\0\0\14\17\3\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340p\60\60\60\60p`\0\0\0\0\60\66\377\377\360\60\60\60\0\0" "\0\0\0\0\0\200\300\340\177\177o`\340\300\300\200\200\200\300\300\0\0\0\0\0\0\0\0\0\0\0\1" "\1\1\1\0\0\0\0\200\0\0\0\0\0\0\0\0\0\200\0\0\0\0\1\373\377\216\7\3\3\3\7\216" "\377\373\1\0\0\0\4\16\7\3\7\6\6\6\7\3\7\16\4\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\60\360\340\300\0\0\0\0\0\0\200\340\360\60\0\0\0\0\1\7\37<\370\340\370\36\17" "\3\0\0\0\0\0\63\63\63\63\63\377\377\377\63\63\63\63\0\0\0\0\0\0\0\0\0\1\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\0\0" "\0\0\0\0\0\0\0\0\0\0\0\376\376\376\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\0\0" "\0\0\0\0\0\0\300\360\370\30\14\14\14\14\34x\60\0\0\0\0\0\340\363\377\17\16\14\14\34\70\370" "\360\300\0\0\0\0\200\301\3\3\7\6\6\16\36\377\371`\0\0\0\0\1\3\3\7\6\6\6\7\3\3" "\1\0\0\0\0\0\0\20\70\70\30\0\0\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\0\0\0\0\0\340\370\14\346\363\71\35\14\14\14\31\71" "#\6\16\370\7\17\70sg\316\234\230\230\230\214\314D`\70\17\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\60\60\30\30\30\30\70\360\340\0\0\0\0\0\0\70|\346\302\303\303\303c\377" "\377\0\0\0\0\0\14\14\14\14\14\14\14\14\14\14\14\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340p\70\20\200\300\340" "`\60\20\0\0\0\3\7\17\34\70p!\3\7\16\34\60 \0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`````````\340" "\340\340\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0``````````" "```\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\0\0\0\0\0\340\370\14\6\3\375\375\204\204\204\315\371" "\63\6\16\370\7\17\70p`\337\237\200\200\201\207\334H \70\17\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\60\60\60\60\60\60\60\60\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\340\360\360\30\30\30\70\360\340\300\0\0\0\0\0\0\1\7\7\16\14\14\16\7\3" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\340\340\340\0\0\0\0\0\0\0\30\30\30\30\30\30\377\377\377\30\30" "\30\30\30\0\0\300\300\300\300\300\300\307\307\307\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0 \60\30\30\30\30\30\360\340\0\0\0\0\0\0\0\300\340\360\330\314\316\307\303" "\301\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\60\60\30\30\30\30\30\360\340\0\0\0\0\0\0\0``\300\303\303\303\303g" "|<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0px\36\14\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376\0\0\0\0\0\0\376\376\376" "\0\0\0\0\377\377\377\340\300\200\200\200\300\177\377\377\200\200\200\300\177\177\177\0\1\1\1\1\0\0\0\1" "\1\1\1\0\0\0\300\360\370\370\374\374\374\374\374\14\374\374\374\0\0\0\3\17\37\37\37\77\377\377\377\0" "\377\377\377\0\0\0\0\0\0\0\0\0\377\377\377\0\377\377\377\0\0\0\0\0\0\0\0\0\7\7\7\0" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\360\360`\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 `@HNHx" "\70\0\0\0\0\0\0 \60\60\370\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\340p\30\30\30\30p\360\300\0\0\0\0\0\0\37\77p\300\300\300\300`\77" "\37\0\0\0\0\0\14\14\14\14\14\14\14\14\14\14\14\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\70p\340\300\200\30\30\60" "`\300\300\200\0\0\20\70\34\16\7\3\21\70\34\16\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\20\10\10\374\374\0\0\0\0\0\0\300\360<\10\0\0\0\0\17\17\0\0\200\340x\37\7" "\1\0\0\0\0\0\0\200\340x\36\7\201\340\260\230\206\377\377\200\0\0\0\3\1\0\0\0\0\0\0\0" "\0\7\7\0\20\10\10\374\374\0\0\0\0\0\0\300\360<\10\0\0\0\0\17\17\0\0\200\340x\37\7" "\1\0\0\0\0\0\0\200\340x\36\7\1\14\4\6\202\302f|\0\0\2\3\1\0\0\0\0\4\6\7" "\5\4\4\4\4\14\6BB\346\274\230\0\0\0\300\360<\14\0\6\6\14\14\14\14\7\303\360|\17\3" "\0\0\0\0\0\0\0\200\340x\36\7\201\340\260\230\206\377\377\200\0\0\0\3\1\0\0\0\0\0\0\0" "\0\7\7\0\0\0\0\0\0\0\30<<\30\0\0\0\0\0\0\0\0\0\200\200\300\340~>\16\0\0" "\0\0\0\0\0\0>\177\377\341\300\200\200\200\300\300\340p \0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\1\301\371\343\3\2\0\0\0\0\0\0\0\0\200\360~\17\1\7\77\374\340" "\0\0\0\0\200\360\376\37\7\6\6\6\6\6\7\17\77\374\340\200\1\1\0\0\0\0\0\0\0\0\0\0" "\0\1\1\1\0\0\0\0\0\2\303\373\341\1\1\0\0\0\0\0\0\0\0\200\360~\17\1\7\77\374\340" "\0\0\0\0\200\360\376\37\7\6\6\6\6\6\7\17\77\374\340\200\1\1\0\0\0\0\0\0\0\0\0\0" "\0\1\1\1\0\0\0\2\3\3\301\370\341\1\3\2\0\0\0\0\0\0\0\200\360~\17\1\7\77\374\340" "\0\0\0\0\200\360\376\37\7\6\6\6\6\6\7\17\77\374\340\200\1\1\0\0\0\0\0\0\0\0\0\0" "\0\1\1\1\0\0\1\1\0\0\300\370\341\3\3\3\1\0\0\0\0\0\0\200\360~\17\1\7\77\374\340" "\0\0\0\0\200\360\376\37\7\6\6\6\6\6\7\17\77\374\340\200\1\1\0\0\0\0\0\0\0\0\0\0" "\0\1\1\1\0\0\0\0\1\1\200\370\360\201\1\1\0\0\0\0\0\0\0\200\360\376\37\3\7\77\374\340" "\0\0\0\0\0\340\374\77\17\6\6\6\6\6\7\37\177\370\300\0\1\1\1\0\0\0\0\0\0\0\0\0" "\0\1\1\0\0\0\0\0\3\207\374\364\207\3\0\0\0\0\0\0\0\0\0\340\374\37\3\3\37\376\360\200" "\0\0\0\0\300\370\177\17\6\6\6\6\6\6\7\77\376\360\200\0\1\1\0\0\0\0\0\0\0\0\0\0" "\0\1\1\0\0\0\0\0\0\300\360p\360\360\360\60\60\60\60\60\0\0\200\360\376\37\3\0\377\377\377`" "```\0\300\370\77\7\6\6\6\6\377\377\377\200\200\200\200\200\1\1\0\0\0\0\0\0\1\1\1\1" "\1\1\1\1\0\0\0\200\300\340`\60\60\60\60p`\340\300\200\0\370\377\377\3\0\0\0\0\0\0\0" "\0\1\1\1\0\7\37\77x\340\300\300\200\200\200\300\300\340` \0\0\0\0\0\0`aIOMy" "\70\0\0\0\0\360\360\360\61\61\63\63\63\66\62\60\60\60\0\0\0\377\377\377````````" "`\0\0\0\0\377\377\377\200\200\200\200\200\200\200\200\200\200\0\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\0\0\0\360\360\360\60\62\66\63\63\61\61\61\60\60\0\0\0\377\377\377````````" "`\0\0\0\0\377\377\377\200\200\200\200\200\200\200\200\200\200\0\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\0\0\0\360\360\362\63\63\61\61\61\63\63\66\62\60\0\0\0\377\377\377````````" "`\0\0\0\0\377\377\377\200\200\200\200\200\200\200\200\200\200\0\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\0\0\0\360\360\361\61\60\60\60\60\61\61\61\60\60\0\0\0\377\377\377````````" "\0\0\0\0\0\377\377\377\200\200\200\200\200\200\200\200\200\200\0\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\0\0\0\0\60\60\61\61\363\363\363\66\62\60\60\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\200\200\200\200\377\377\377\200\200\200\200\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\0\30\30\30\31\371\371\371\30\30\30\30\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\300\300\300\300\377\377\377\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\62\66\63\61\361\360\361\63\63\62\60\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\200\200\200\200\377\377\377\200\200\200\200\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\0\60\60\61\61\360\360\360\61\61\61\60\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\200\200\200\200\377\377\377\200\200\200\200\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\360\360\360\60\60\60\60\60p\340\340\300\0\0\0`\377\377\377````\0\0\0\1" "\377\377\374\0\0\377\377\377\200\200\200\200\200\300\340p\77\37\3\0\0\1\1\1\1\1\1\1\1\0\0\0" "\0\0\0\0\0\360\360\361\301\200\0\0\1\3\3\3\363\361\360\0\0\377\377\377\3\17>x\340\300\0\0" "\377\377\377\0\0\377\377\377\0\0\0\0\1\7\37|\377\377\377\0\0\1\1\1\0\0\0\0\0\0\0\0" "\0\1\1\0\0\200\300\340p\70\31\31\31\33\71p\340\300\200\0\376\377\377\0\0\0\0\0\0\0\0\0" "\1\377\377\370\3\17\37\370\360\300\360|\37" "\7\1\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0" "\0\0\0\0\0\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\3\3\3\3\3\3\7\7" "\376\374\370\0\0\377\377\377\14\14\14\14\14\14\16\6\7\3\0\0\0\1\1\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\360\370\70\34\14\14\14\34\70\360\340\200\0\0\0\377\377\377\0\0\0\60\60\70|o" "\347\301\200\0\0\377\377\377\0\0\300\200\200\200\200\300\341\177\77\16\0\1\1\1\0\0\1\1\1\1\1\1" "\0\0\0\0\0\0\0\0\0\0\14\36\14\4\0\0\0\0\0\300\360\370\234\216\206\206\206\206\216\214" "\370\360\200\0\0\17\77\177\341\301\301\201\201\201\201\301\301A\1\0\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0@p\70\34\16\34x`\0\0\0\0\0\300\360\370\234\216\206\206\206\206\216\214" "\370\360\200\0\0\17\77\177\341\301\301\201\201\201\201\301\301A\1\0\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\10\34\34\14\0\0\10\34\34\14\0\0\0\0\300\360\370\234\216\206\206\206\206\216\234" "\370\360\200\0\0\17\77\177\341\301\301\201\201\201\201\301\301A\1\0\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\4\16\36<\60\0\0\0\0\0\0\0\0\0\0\6\6\6\6\376\376\376\0\0" "\0\0\0\0\0\0\0\200\200\200\200\377\377\377\200\200\200\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\0\0\0\0\0\0\60|\36\16\0\0\0\0\0\0\0\0\6\6\6\6\376\376\376\0\0" "\0\0\0\0\0\0\0\200\200\200\200\377\377\377\200\200\200\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\0\0\0\60\70\14\6\16\34\70\60\0\0\0\0\0\0\0\3\3\3\3\377\377\377\0\0" "\0\0\0\0\0\0\0\300\300\300\300\377\377\377\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\10\34\34\14\0\0\0\34\34\34\0\0\0\0\0\0\6\6\6\6\376\376\376\0\0" "\0\0\0\0\0\0\0\200\200\200\200\377\377\377\200\200\200\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\0\0\0\0dll\70\70p\360\330\30\20\0\0\300\360\370\34\14\16\6\6\6\16\15" "\77\377\374\300\0\17\77\177\360\300\300\200\200\200\300\300\360\177\37\3\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\30\30\14\14\14\34\70\60\60\70\30\0\0\0\0\376\376\376\30\14\4\6\6\16\36" "\374\370\340\0\0\0\377\377\377\0\0\0\0\0\0\0\377\377\377\0\0\0\1\1\1\0\0\0\0\0\0\0" "\1\1\1\0\0\0\0\0\0\0\4\36

\14\4\0\0\0\0\0\300\360\370\34\14\16\6\6\6\16\34" "<\370\360\200\0\17\77\177\360\300\300\200\200\200\300\300\360\177\37\3\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0p\70\34\16\34x`\0\0\0\0\0\300\360\370\34\14\16\6\6\6\16\34" "<\370\360\200\0\17\77\177\360\300\300\200\200\200\300\300\360\177\37\3\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\30\34\16\6\16\14\30\60\60\70\34\0\0\0\300\360\370\34\14\16\6\6\6\16\34" "<\370\360\200\0\17\77\177\360\300\300\200\200\200\300\300\360\177\37\3\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\10\34\34\14\0\0\0\34\34\34\0\0\0\0\300\360\370\34\14\16\6\6\6\16\34" "<\370\360\200\0\17\77\177\360\300\300\200\200\200\300\300\360\177\37\3\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\0\0\0\0\0\0\0\0\0`````cca``" "```\0\0\0\0\0\0\0\0\34\34\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\0\0\0\0\300\360\370\34\14\16\6\306\346~\36" "\77\373\340\200\0\17\77\377\360\360\374\217\203\200\300\340\360\177\37\3\0\0\2\7\1\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\4\16\36x\60\0\0\0\0\0\0\0\376\376\376\0\0\0\0\0\0\0\376" "\376\376\0\0\0\77\177\377\340\300\200\200\200\300`\377\377\377\0\0\0\0\0\0\1\1\1\1\1\0\0\1" "\1\1\0\0\0\0\0\0\0\0 x>\16\4\0\0\0\0\0\0\376\376\376\0\0\0\0\0\0\0\376" "\376\376\0\0\0\77\177\377\340\300\200\200\200\300`\377\377\377\0\0\0\0\0\0\1\1\1\1\1\0\0\1" "\1\1\0\0\0\0\0\0`\70\34\16\36\70p \0\0\0\0\0\376\376\376\0\0\0\0\0\0\0\376" "\376\376\0\0\0\77\177\377\340\300\200\200\200\300`\377\377\377\0\0\0\0\0\0\1\1\1\1\1\0\0\1" "\1\1\0\0\0\0\10\34\34\14\0\0\0\34\34\34\0\0\0\0\0\376\376\376\0\0\0\0\0\0\0\376" "\376\376\0\0\0\77\177\377\340\300\200\200\200\300`\377\377\377\0\0\0\0\0\0\1\1\1\1\1\0\0\1" "\1\1\0\0\0\0\0\0\0\0\0\60<\36\16\0\0\0\0\0\0\6\36~\370\300\0\0\0\0\0\300" "\370>\16\0\0\0\0\0\3\17~\370\300\370\77\17\1\0\0\0 p```p\70\37\17\1\0\0" "\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\10\14\6\6\6\16\16\34" "\374\370\340\0\0\377\377\377\340\300\200\200\200\200\300\340\177\77\17\0\0\177\177\177\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\10\34\34\14\0\0\34\34\34\0\0\0\0\0\6\36\376\360\300\0\0\0\0\200\370" "~\16\0\0\0\0\0\0\3\17~\370\340|\37\3\0\0\0\0 p```\60\70\37\3\0\0\0" "\0\0\0"; /* Fontname: -FreeType-Inconsolata LGC-Medium-R-Normal--30-300-72-72-P-138-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 95/658 BBX Build Mode: 3 */ const uint8_t u8x8_font_inr21_2x4_r[6084] U8X8_FONT_SECTION("u8x8_font_inr21_2x4_r") = " ~\2\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\70\374\374\370\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0" "\0\0\0\0\0\0\0\0\0\0\300\343\343\303\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0" "\0\0\0\0\0\0\0\0\374\374\370\0\0\0\374\374\370\0\0\0\0\0\0\0\3\3\3\0\0\0\3\3" "\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\340\360\60\0\0\0\360\360\20\0\0\0\6\6\6\346\377\77\6\6\6\366\377" "\37\6\6\6\0\6\6\306\377\77\6\6\6\346\377\77\6\6\6\0\0\0\0\1\1\0\0\0\0\1\1\0" "\0\0\0\0\0\0\200\300\340p\60\374\374\374\60`\340@\0\0\0\0\7\17\37\70\60\377\377\377`\340" "\300\200\0\0\0\0\60p`\340\300\377\377\377\340p\177\77\6\0\0\0\0\0\0\0\0\3\3\3\0\0" "\0\0\0\0\300\340\360\60\60\360\340\300\0\0\0\300\360p\20\0\3\7\17\14\14\17\207\343x>\17\3" "\0\0\0\0\0\0\300\360|\36\7\1|\376\377\203\203\377\376|\0\1\1\0\0\0\0\0\0\0\1\1" "\1\1\0\0\0\0\0\300\340\340p\60\60p\340\340\200\0\0\0\0\0\0\203\317\337x\360\360\230\37\17" "\1\0\200\0\0<\177\377\301\200\200\200\201\307\357~\70\374\357\307\0\0\0\0\1\1\1\1\1\0\0\0" "\0\0\1\0\0\0\0\0\0\0\0\374\374\370\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\340\360\60\30\34\10\0\0\0\0\0\0\360\374\377\7\1\0\0\0" "\0\0\0\0\0\0\0\0\17\177\377\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\36\34\70" "p \0\0\0\0\34\70\70p\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\37\376\370\200" "\0\0\0\0\0\0\0\0\0\0\0\200\360\377\77\3\0\0\0\0\0\0p\60\70\34\17\7\3\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\0\0\0\0\0\0\0\0\30\30\30\60\60\240\377\377\240\60\60" "\30\30\30\0\0\0\10\34\36\7\3\0\0\3\7\36\14\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0``````\377\377\377``" "```\0\0\0\0\0\0\0\0\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\340\340\200\0\0\0\0\0\0\0\0\0\0\0\60\71\17\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0``````````" "```\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\300\340\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360|\30\0\0\0\0\0\0\0\0\200\340\370>\17\3" "\0\0\0\0\0\0\200\340\370>\17\3\0\0\0\0\0\0\0\0\0\0\3\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\340\340p\60\60\60`\340\300\0\0\0\0\370\377\377\1\0\200\300`\70\14\7" "\377\377\374\0\0\7\37\177\376\347\303\200\200\200\300\360\177\37\7\0\0\0\0\0\0\0\1\1\1\1\0\0" "\0\0\0\0\0\0\200\300\300``\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0" "\0\0\0\0\0\0\200\300\340`\60\60\60\60p\340\340\300\0\0\0\0\0\0\0\0\0\0\0\200\300\360" "\177\37\6\0\0\0\200\340\360\270\236\207\203\201\201\200\200\200\200\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\0\0\0``p\60\60\60p\340\340\300\0\0\0\0\0\0\0\0````\360\370\337" "\217\3\0\0\0\0@\340\300\200\200\200\200\300\341\377\177\36\0\0\0\0\0\0\0\1\1\1\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\0\0\0\0\0\0\200\300p\70\16\7\1\377\377\377" "\0\0\0\0\0\6\7\7\6\6\6\6\6\377\377\377\6\6\6\0\0\0\0\0\0\0\0\0\0\1\1\1" "\0\0\0\0\0\0\0\360\360\360\60\60\60\60\60\60\60\60\0\0\0\0\0\177\177\77\30\30\30\30\70x" "\360\340\200\0\0\0``\340\300\200\200\200\200\300\340\377\177\37\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\300\340`p\60\60\60p``\0\0\0\0\374\377\377q\60\30\30\30\70x" "\360\340\200\0\0\0\17\77\177\360\300\200\200\200\300\340\377\177\37\0\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\60\60\60\60\60\60\60\60\60\360\360\60\0\0\0\0\0\0\0\0\0\200\360\374\77\7" "\1\0\0\0\0\0\0\0\200\340\374\77\7\1\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340p\60\60\60p\340\340\300\0\0\0\0\0\7\237\337xp `p\370\237" "\217\3\0\0\0<\177\377\340\300\200\200\200\200\300\341\177\77\14\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\300\340`p\60\60\60p\340\300\200\0\0\0\0\37\177\377\340\300\200\200\200\300\300" "\377\377\376\0\0\0\0\300\300\300\201\201\201\301\300\360\177\37\7\0\0\0\0\0\0\1\1\1\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30<<\30\0\0" "\0\0\0\0\0\0\0\0\0\0\300\340\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30<<\30\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\340\340\200\0\0\0\0\0\0\0\0\0\0\0\60\71\17\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\0`\360\360\270\230\34\14\16\6\7\3\3" "\1\1\0\0\0\0\0\1\3\3\7\6\16\14\30\70\60p`\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\14\14\14\14\14\14\14\14\14\14" "\14\14\14\0\0\6\6\6\6\6\6\6\6\6\6\6\6\6\6\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\6\16\14\34\230" "\270\360\360`\0`p\70\30\34\14\16\6\7\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 p\70\30\34\14\14\14\34\34\370\360\340\0\0\0\0\0\0\0\0\0\340\360x\34\37" "\17\3\0\0\0\0\0\0\0\0\303\343\343\300\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0" "\0\0\0\0\0\0\200\300\340`p\60\60\60p`\340\300\0\0\370\377\377\3\0\360\370\374\16\6\6\6" "\377\377\377\0\3\37\77x\360\301\303\207\207\206\206\303\301\207\7\0\0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\0\0\0\0\0\300\370\340\0\0\0\0\0\0\0\0\0\0\200\360~\17\1\7\77\374\340" "\0\0\0\0\200\360\376\37\7\6\6\6\6\6\7\17\77\374\340\200\1\1\0\0\0\0\0\0\0\0\0\0" "\0\1\1\1\0\360\360\360\60\60\60\60\60\60p\340\340\300\0\0\0\377\377\377``````\360\370" "\237\217\3\0\0\377\377\377\200\200\200\200\200\200\300\301\377\177>\0\0\1\1\1\1\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\200\300\340`p\60\60\60p`\340\300\200\0\370\377\377\3\0\0\0\0\0\0\0" "\0\0\1\1\0\7\37\77x\340\300\300\200\200\200\200\300\340` \0\0\0\0\0\0\0\1\1\1\1\1" "\0\0\0\0\0\360\360\360\60\60\60\60\60p\340\340\300\0\0\0\0\377\377\377\0\0\0\0\0\0\0\1" "\377\377\374\0\0\377\377\377\200\200\200\200\200\300\340p\77\37\7\0\0\1\1\1\1\1\1\1\1\1\0\0" "\0\0\0\0\0\360\360\360\60\60\60\60\60\60\60\60\60\60\0\0\0\377\377\377````````" "`\0\0\0\0\377\377\377\200\200\200\200\200\200\200\200\200\200\0\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\0\0\0\0\360\360\360\60\60\60\60\60\60\60\60\60\60\0\0\0\377\377\377\60\60\60\60\60\60\60" "\60\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340`\60\60\60\60p`\340\300\200\0\370\377\377\1\0\0\0\0\0\200\200" "\200\200\201\200\0\7\37\77x\340\300\300\200\200\201\201\301\377\377\177\0\0\0\0\0\0\0\1\1\1\1\1" "\1\0\0\0\0\360\360\360\0\0\0\0\0\0\0\0\360\360\360\0\0\377\377\377````````" "\377\377\377\0\0\377\377\377\0\0\0\0\0\0\0\0\377\377\377\0\0\1\1\1\0\0\0\0\0\0\0\0" "\1\1\1\0\0\0\60\60\60\60\360\360\360\60\60\60\60\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\200\200\200\200\377\377\377\200\200\200\200\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\0\0\0\0\60\60\60\60\360\360\360\60\60\60\0\0\0\0\0\0\0\0\0\0\377\377\377" "\0\0\0\0\0@\340\300\200\200\200\300\340\377\177\17\0\0\0\0\0\0\0\1\1\1\1\1\0\0\0\0" "\0\0\0\0\0\360\360\360\0\0\0\0\0\200\300\340p\60\20\0\0\377\377\377`p\370\336\217\3\1\0" "\0\0\0\0\0\377\377\377\0\0\0\3\7\17x\340\300\0\0" "\377\377\377\0\0\377\377\377\0\0\0\0\1\7\37|\377\377\377\0\0\1\1\1\0\0\0\0\0\0\0\0" "\0\1\1\0\0\0\200\300\340p\60\60\60\60p\340\300\200\0\0\374\377\377\1\0\0\0\0\0\0\0\0" "\3\377\377\360\7\37\77x\340\300\200\200\200\200\300\340x\77\37\1\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\360\360\360\60\60\60\60\60\60p`\340\300\200\0\0\377\377\377\300\300\300\300\300\300\340`" "\177\77\37\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340p\60\60\60pp\340\300\200\0\0\370\377\377\1\0\0\0\0\0\0\0\0" "\3\377\377\360\7\77\177\360\300\200\200\200\200\200\200\300\370\177\37\3\0\0\0\0\1\1\7\37\77\71\61\61" "\60\60\60\0\0\360\360\360\60\60\60\60\60\60p\340\340\300\0\0\0\377\377\377\300\300\300\300\300\300\340p" "\177\37\6\0\0\377\377\377\0\0\0\0\3\17\36|\360\300\0\0\0\1\1\1\0\0\0\0\0\0\0\0" "\1\1\1\0\0\0\200\300\340`\60\60\60\60\60p\340\300\0\0\0\0\7\37\37\70\60p`\340\300\300" "\300\200\0\0\0@p\340\300\300\200\200\200\200\300\301\343\177\77\14\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\60\60\60\60\60\60\360\360\360\60\60\60\60\60\60\0\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0" "\0\0\0\0\0\360\360\360\0\0\0\0\0\0\0\0\360\360\360\0\0\377\377\377\0\0\0\0\0\0\0\0" "\377\377\377\0\0\37\177\377\340\300\200\200\200\200\300\340\377\177\37\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\20\360\360\300\0\0\0\0\0\0\0\0\200\360\360\20\0\0\7\77\376\360\200\0\0\0\340\374" "\77\7\0\0\0\0\0\0\0\7\77\374\370\177\17\1\0\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0" "\0\0\0\0\360\360\300\0\0\0\0\200\300\0\0\0\0\0\360\360\0\77\377\360\0\300\370\77\37\377\360\200" "\0\376\177\1\0\0\17\377\374\37\1\0\0\0\17\377\377\37\0\0\0\0\0\1\1\0\0\0\0\0\0\0" "\1\0\0\0\0\20p\360\300\0\0\0\0\0\0\300\360p\20\0\0\0\0\1\7\17\276\370\370\376\17\3" "\1\0\0\0\0\0\300\360|\37\7\3\3\7\37|\360\340\200\0\0\1\1\1\0\0\0\0\0\0\0\0" "\0\1\1\0\0\60\360\340\200\0\0\0\0\0\0\0\340\360p\0\0\0\0\3\17>\370\360\300\360|\37" "\7\1\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0" "\0\0\0\0\0\0\60\60\60\60\60\60\60\60\60\260\360\360\60\0\0\0\0\0\0\0\200\340\360|\36\7" "\3\0\0\0\0\200\340\360\374\236\217\203\200\200\200\200\200\200\200\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\0\0\0\0\374\374\374\14\14\14\14\14\14\14\0\0\0\0\0\0\377\377\377\0\0\0\0\0" "\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\17\17\17\14\14\14\14\14" "\14\14\0\0\0\0\30\374\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\370\340\200\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\3\17>\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\3\3\0\0\0\0\0\14\14\14\14\14\14\14\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\14\14\14\14\14\14\14\17\17" "\17\0\0\0\0\0\0\0\0\0\300\340\360\300\200\0\0\0\0\0\0\0\0\30\34\17\3\1\0\3\17>" "\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\14\14\14\14\14\14\14\14\14\14\14" "\14\14\14\0\0\0\0\0\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\17>x\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\14\216\206\206\206\206\216\214" "\374\370\340\0\0<\376\377\303\203\201\201\201\301\341q\377\377\377\0\0\0\0\0\1\1\1\1\1\0\0\0" "\1\1\1\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\10\14\6\6\6\16\16\34" "\374\370\340\0\0\377\377\177\340\300\200\200\200\200\300\340\177\77\17\0\0\1\1\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\34\14\16\6\6\6\6\16" "\34<\10\0\0\17\77\177\360\340\300\200\200\200\200\300\300\340@\0\0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\0\0\300\360\374\34\16\6\6\6\6\14\30" "\377\377\377\0\0\17\77\377\340\300\200\200\200\200\300p\377\377\377\0\0\0\0\0\0\1\1\1\1\1\0\0" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\234\216\206\206\206\206\216\214" "\370\360\200\0\0\17\77\177\341\301\301\201\201\201\201\301\301A\1\0\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\200\360\370\70\34\14\14\14\34\30\70\0\0\14\14\14\377\377\377\14\14\14\14\14" "\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\360\374\34\16\6\6\6\16\34\370" "\374\306\6\6\0\0s\177\377\316\314\314\314\316\307\307\303\200\200\0\0\34\77\77qp`````p" "\61\77\37\6\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\30\14\4\6\6\16\36" "\374\370\340\0\0\0\377\377\377\0\0\0\0\0\0\0\377\377\377\0\0\0\1\1\1\0\0\0\0\0\0\0" "\1\1\1\0\0\0\0\0\0\0\30<<\30\0\0\0\0\0\0\0\0\0\6\6\6\6\376\376\376\0\0" "\0\0\0\0\0\0\0\200\200\200\200\377\377\377\200\200\200\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\0\0\0\0\0\0\0\0\30<<\30\0\0\0\0\0\0\6\6\6\6\6\6\376\376\376" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\60\70p```p\60\77\37\7" "\0\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\200\300\300\340p\70\34" "\16\6\2\0\0\0\377\377\377\3\1\3\7\17\376\360\200\0\0\0\0\0\300" "\370>\16\0\0\0\0\0\7\37\376\360\340\374\37\7\1\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\376\376\200\0\0\200\370|\360\200\0" "\0\0\376~\0\0\37\377\360\370\77\3\0\7\77\374\300\377\37\0\0\0\0\1\1\1\0\0\0\0\0\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\6\36\16\0\0\0\0\0\3\17~\370\300\370\77\17\1\0\0\0 p```p\70\37\17\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\6\6\6\6\206\306\346v>" "\36\6\0\0\0\200\300\360\370\274\216\207\203\201\200\200\200\200\200\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\0\0\0\0\0\200\340\340p\60\60\60\60\60\0\0\0\0\0\0\200\377\177\37\0\0\0\0" "\0\0\0\0\0\3\3\3\7\376\374\340\0\0\0\0\0\0\0\0\0\0\0\0\0\17\77\77p```" "``\0\0\0\0\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\0\0" "\0\0\0\0\0\0\0\60\60\60\60pp\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\177\377\377" "\200\0\0\0\0\0\0\0\0\0\0\0\0\370\374\377\7\3\3\3\0\0\0````px\77\37\7" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\34\14\6\6\6\14\34\70\60\60" "\70\34\14\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: -FreeType-Inconsolata LGC-Medium-R-Normal--30-300-72-72-P-138-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 18/658 BBX Build Mode: 3 */ const uint8_t u8x8_font_inr21_2x4_n[1732] U8X8_FONT_SECTION("u8x8_font_inr21_2x4_n") = " :\2\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\60\60\60``@\377\377@``" "\60\60\60\0\0\0\20\70<\16\7\1\1\7\16<\30\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\377\377\377\300\300" "\300\300\300\0\0\0\0\0\0\0\0\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0as\37\17\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300" "\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\60\0\0\0\0\0\0\0\0\0\300\360|\37\7" "\0\0\0\0\0\0\0\300\360|\37\7\1\0\0\0\0\0\0\0\0\0\7\7\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\300\340```\300\300\200\0\0\0\0\360\376\377\3\1\0\200\300p\30\17" "\377\376\370\0\0\17\77\377\374\316\207\1\0\0\200\340\377\77\17\0\0\0\0\0\1\1\3\3\3\3\1\1" "\0\0\0\0\0\0\0\200\200\300\300\340\340\340\0\0\0\0\0\0\0\0\1\1\1\0\0\377\377\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\0\0" "\0\0\0\0\0\0\0\200\300\300````\340\300\300\200\0\0\0\0\1\1\1\0\0\0\0\0\200\341" "\377\77\14\0\0\0\0\300\340p<\16\6\3\3\1\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3" "\3\3\3\0\0\0\0\300\300\340```\340\300\300\200\0\0\0\0\0\0\0\0\300\300\300\300\340\361\277" "\37\6\0\0\0\0\200\300\200\0\0\0\0\201\303\377\377<\0\0\0\0\0\1\1\3\3\3\3\3\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\0\0\0\0\0\0\0\200\340p\34\16\3\377\377\377" "\0\0\0\0\0\14\17\17\14\14\14\14\14\377\377\377\14\14\14\0\0\0\0\0\0\0\0\0\0\3\3\3" "\0\0\0\0\0\0\0\340\340\340````````\0\0\0\0\0\377\377\177\60\60\60\60p\360" "\340\300\0\0\0\0\300\300\300\200\0\0\0\0\200\300\377\377\77\0\0\0\0\0\1\3\3\3\3\3\3\1" "\1\0\0\0\0\0\0\0\200\300\300\340```\340\300\300\0\0\0\0\370\376\377\343`\60\60\60p\360" "\340\300\0\0\0\0\37\177\377\340\200\0\0\0\200\300\377\377\77\0\0\0\0\0\0\1\3\3\3\3\3\1" "\1\0\0\0\0\0`````````\340\340`\0\0\0\0\0\0\0\0\0\0\340\370~\17" "\3\0\0\0\0\0\0\0\0\300\370\177\17\3\0\0\0\0\0\0\0\0\0\0\3\3\3\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340```\340\300\300\200\0\0\0\0\0\17\77\277\360\340@\300\340\361\77" "\37\6\0\0\0x\376\377\301\200\0\0\0\0\201\303\377~\30\0\0\0\0\1\1\3\3\3\3\3\3\1" "\0\0\0\0\0\0\0\200\300\300\340```\340\300\200\0\0\0\0\0>\377\377\300\200\0\0\0\200\201" "\377\377\374\0\0\0\0\200\201\201\3\3\3\203\201\341\377\77\17\0\0\0\0\1\1\3\3\3\3\3\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\60xx\60\0\0" "\0\0\0\0\0\0\0\0\0\0\200\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\1\0\0" "\0\0\0"; /* Fontname: -FreeType-Inconsolata LGC-Medium-R-Normal--44-440-72-72-P-201-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 191/658 BBX Build Mode: 3 */ const uint8_t u8x8_font_inr33_3x6_f[32260] U8X8_FONT_SECTION("u8x8_font_inr33_3x6_f") = " \377\3\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\360" "\360\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\7\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\17\17\17\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\36\77\77\77" "\77\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\340\360\360\340\0\0\0\0\0\340\360\360\340\0\0\0\0\0\0\0\0\0" "\0\0\377\377\377\377\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\0" "\0\0\0\0\300\300\300@\0\0\0\0\0\200\200\200\200\200\200\377\377\377\201\200\200\200\200\300\377\377\377\200" "\200\200\200\0\0\1\1\1\1\1\377\377\377\1\1\1\1\1\301\377\377\177\1\1\1\1\1\0\14\14\14\14" "\14\374\377\377\17\14\14\14\14\214\377\377\177\14\14\14\14\14\0\0\0\0\0\0\34\37\37\3\0\0\0\0" "\0\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370" "\374\376\16\7\7\7\377\377\377\7\7\7\17\36>\34\10\0\0\0\0\0\1\7\17\37\36<\37\7\3\0\0\0\0\0" "\3\17\37<\70\70\70<\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0|" "\376\377\377\3\3\1\1\3\7\377\377\376|\0\0\0\0\0\0\0\0\0\0\200\301\347\357\177~\370\374\336" "\217\7\3\1\0\0\0\200\0\0\0\0\370\376\377\377\7\1\0\0\0\0\3\7\37\77\374\370\360\360\370\177" "\37\16\2\0\1\7\17\37\37<<\70\70\70<\34\36\16\17\7\3\7\37\77\36\30\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360" "\360\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\340\0\0\0\0\0\0\0\0" "\0\0\0\0\200\340\360\370~\77\17\7\3\1\1\0\0\0\0\0\0\0\0\0\0\0\340\376\377\377\17\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\177\377\377\377\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\3\37\177\377\374\360\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\3\7\17\37\36\374x`\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\370\0\0\0\0\0\0" "\0\0\0\0\0ppppppppp\377\377\377\377pppppppp\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0<~\376\376\374x\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0 x<\37\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\36\77\77\77\77\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\200\360\360\340 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\177\17\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\376\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0" "\0\300\360\374\377\77\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\370\376\77\17\3\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\300\360" "\374\376\37\17\7\3\1\1\1\3\3\207\377\376\374\360\300\0\0\0\0\376\377\377\377\0\0\0\0\300\340\360" "x\36\17\7\1\1\377\377\377\374\0\0\0\7\77\377\377\370\374\36\17\7\1\0\0\0\0\0\200\360\377\377" "\77\7\0\0\0\0\0\0\3\7\17\37\36<\70\70\70<\34\36\17\7\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300" "\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\14\16\16\7\7\7\7\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\14" "\36\17\7\3\3\1\1\1\1\3\3\7\37\377\376\374\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\200\300\340\360\374\77\37\17\1\0\0\0\0\0\0\0\0\300\340\360\370<\36\17\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\70>\77\77;\71\70\70\70\70\70\70\70\70\70\70\70\70\70\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300" "\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\2\7\7\3\3\1\1\1\1\3\3\7\17\377\377\374\360" "\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70x||\376\357\347\307\201\0\0\0\0\0\0\0\0\0" "\200\0\0\0\0\0\0\0\0\0\0\201\377\377\377\376\0\0\0\0\0\0\4\16\37\36\34<\70\70\70\70" "<<\36\37\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\200\300\360\370>\17\377\377\377\377\0\0\0\0\0\0\0\0\0\200\340\360|>\17\7\1\0" "\0\0\377\377\377\377\0\0\0\0\0\0\0\34\37\37\37\35\34\34\34\34\34\34\34\34\377\377\377\377\34\34" "\34\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\300\0\0\0\0\0\0\0\377\377\377\377\1\1\1\1\1\1\1\1\1\1\1\1\1" "\0\0\0\0\0\0\0\77\177\77\37\34\16\16\16\16\16\36\36<\374\370\360\340\200\0\0\0\0\0\0\0" "\200\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\177\0\0\0\0\0\3\7\17\37\36<<\70\70\70" "\70<\34\36\17\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\340" "\370\374~\37\7\3\3\1\1\1\1\3\3\7\3\3\0\0\0\0\0\0\377\377\377\377p\70\34\36\16\16" "\16\16\36>|\370\360\340\200\0\0\0\0\0\37\377\377\377\300\0\0\0\0\0\0\0\0\0\0\377\377\377" "\177\0\0\0\0\0\0\0\3\7\17\37\36<\70\70\70\70<\36\37\17\7\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\300\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\301\361\377\377\77\7\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\377\77\7\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\300\360\376\377\77\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\60>\77\77\17\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0\0\0\0\360" "\374\376\377\17\3\3\1\1\1\1\3\3\17\377\377\376x\0\0\0\0\0\0\0\3\207\317\337\376|\70\70" "px\370\374\357\317\207\1\0\0\0\0\0\0\370\376\377\377\3\1\0\0\0\0\0\0\0\0\1\7\377\377" "\376\370\0\0\0\0\0\3\7\17\37\36<<\70\70\70\70<\34\36\37\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300" "\300\300\200\200\0\0\0\0\0\0\0\0\0\0\340\370\376\377\17\7\3\3\1\1\1\3\3\17\37\376\374\360" "\200\0\0\0\0\0\17\77\177\377\360\340\300\300\200\200\200\300\300\340p\377\377\377\377\0\0\0\0\0\0\0" "\0\0\1\1\3\3\3\3\3\1\1\0\340\377\377\177\17\0\0\0\0\0\0\14\36\36\34<\70\70\70\70" "<\34\36\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\36\77\77\77" "\77\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\36\77\77\77\77\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\36\77\77\77\77\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\34>>\376" "\376\376x\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\60\70\36\17\7\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\200\300\300\340\340\360px<<\36\36\0\0p\360\370\374\334\236\216\17\7\7\3\3" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\7\17\16\36<\70xp\360\340\340\300\200" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\17\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200" "\200\200\0\0\0\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\0\0\0\34\34\34" "\34\34\34\34\34\34\34\34\34\34\34\34\34\34\34\34\34\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0<\70xp" "\360\340\340\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7" "\16\16\34<\270\370\360\360\340\340\0\0\0\0\200\200\300\300\340\360\360x\70<\34\36\17\7\7\3\3\1" "\0\0\0\0\17\17\7\3\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\340\360ppp" "p\360\360\340\340\300\200\0\0\0\0\0\0\0\3\7\7\3\1\0\0\0\0\0\0\0\0\1\203\377\377\377" "|\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\370\370<\37\17\7\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\17\17\17\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\36\77\77" "\77\77\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\300\360\370" ">\36\17\7\3\3\1\201\201\301\301\303\303\307\317\376\374\370\300\0\376\377\377\1\0\0\0\370\376\377\377\17" "\3\3\1\1\1\1\201\377\377\377\377\0\7\77\377\374\340\300\0\1\3\7\17\37\36\34\34\34\16\16\7\37" "\37\37\37\0\0\0\0\1\3\7\17\36\36\34<\70\70\70\70\70<\34\34\36\10\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\200" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\77\377\374\340\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\360\376\177\17\1\0\0\7\77\377\374\360\200\0\0\0\0\0\0\0\200\360\374" "\377\77\37\34\34\34\34\34\34\34\34\37\177\377\374\360\200\0\0\0<\77\77\17\1\0\0\0\0\0\0\0" "\0\0\0\0\0\1\17\77\77<\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\377\377\377" "\377\1\1\1\1\1\1\1\1\3\3\7\17\377\377\374\360\0\0\0\0\377\377\377\377\70\70\70\70\70\70\70" "\70x|\376\357\357\307\203\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\1\203\377\377" "\377x\0\0\0\77\77\77\77\70\70\70\70\70\70\70\70\70<\34\36\37\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300" "\300\300\300\300\200\200\0\0\0\0\0\0\0\300\360\374\376\77\17\7\3\3\1\1\1\1\3\3\7\17\37>" "\34\30\0\0\376\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\177\377\377" "\370\300\200\0\0\0\0\0\0\0\0\0\0\0\0\200\0\0\0\0\0\0\0\3\7\17\17\36\36<<\70" "\70\70\70\34\34\36\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0\0\0\0\377\377\377" "\377\1\1\1\1\1\1\1\3\3\7\17\77\376\374\360\300\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\1\377\377\377\374\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377" "\77\3\0\0\0\77\77\77\77\70\70\70\70\70\70<<\34\36\17\17\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\300\300\0\0\0\0\377\377\377\377\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\377\377\377\377ppppppppppppp\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\70\70\70\70\70\70\70" "\70\70\70\70\70\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\0\0\0\377\377" "\377\377\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0\0\0\0\377\377\377\377\70\70\70\70\70\70" "\70\70\70\70\70\70\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300" "\300\300\300\300\200\200\0\0\0\0\0\0\0\300\360\374\376\37\17\7\3\3\1\1\1\1\3\3\7\17\37\37" "\16\0\0\0\376\377\377\377\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\0\0\7\177\377\377" "\360\300\0\0\0\0\0\0\1\1\1\1\1\1\377\377\377\377\0\0\0\0\1\3\7\17\17\36\34<\70\70" "\70\70\70<\34\36\37\17\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\377\377\377\377ppppppp" "ppppp\377\377\377\377\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0\1\1\1\1\1\1\377\377\377\377\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70\70\77\77\77" "\77\70\70\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\0\0\0\0" "\0\0\0\1\1\1\1\1\1\377\377\377\377\1\1\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\177\0\0\0" "\0\0\0\0\0\4\17\36\36<\70\70\70\70<\36\37\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300@\0\0\0\377\377\377\377\0\0\0\0\200\300\340\360\370|>\17\7\3\1" "\0\0\0\0\0\377\377\377\377\360x<\376\377\367\303\201\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\1\7\17\77~\374\360\340\300\0\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0" "\0\0\1\3\17\37\77>\70\60 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\77\77\77\77\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\300\300\0\0\377\377\377\377\376\370\340\200\0\0\0\0\0\0\200\340\370~\377\377" "\377\377\0\0\377\377\377\377\0\3\17\77\376\370\340\360\374~\37\7\1\0\377\377\377\377\0\0\377\377\377\377" "\0\0\0\0\0\3\7\3\0\0\0\0\0\0\377\377\377\377\0\0\77\77\77\77\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\0\0\377\377\377" "\377\77\376\370\340\300\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\377\377\377\377\0\0\3\17\37\177\374" "\360\300\200\0\0\0\377\377\377\377\0\0\0\377\377\377\377\0\0\0\0\0\0\1\7\37\77\376\370\340\377\377" "\377\377\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\3\17\77\77\77\77\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300" "\300\300\300\200\200\0\0\0\0\0\0\0\0\340\370\374\376\37\17\7\3\3\1\1\1\3\3\7\17\37\376\374" "\370\340\0\0\376\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\7\177\377\377" "\370\300\0\0\0\0\0\0\0\0\0\0\0\200\360\377\377\177\7\0\0\0\1\3\7\17\37\36\34<\70\70" "\70\70<\34\36\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\377\377\377" "\377\1\1\1\1\1\1\1\1\3\3\7\17\377\376\374\360\0\0\0\0\377\377\377\377\340\340\340\340\340\340\340" "\340\340\360x|\77\77\17\3\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300" "\300\300\300\200\200\0\0\0\0\0\0\0\0\300\370\374\376\37\17\7\3\3\1\1\1\3\3\7\17\37\376\374" "\370\340\0\0\376\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\376\0\17\177\377\377" "\360\200\0\0\0\0\0\0\0\0\0\0\0\200\360\377\377\177\17\0\0\0\1\7\17\37\37><\70\370\370" "\370\70<<\36\17\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\37\36\34\34\34\34\34" "\34\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\377\377\377" "\377\1\1\1\1\1\1\1\1\3\3\7\17\377\377\374\360\0\0\0\0\377\377\377\377\340\340\340\340\340\340\340" "\340\340\360x|\77\37\17\3\0\0\0\0\377\377\377\377\0\0\0\0\0\0\1\7\37\177\374\360\300\0\0" "\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\1\17\77\77>\70 \0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300" "\300\300\300\200\200\200\0\0\0\0\0\0\0\0\360\374\376\377\7\3\3\1\1\1\1\1\3\3\7\17\37\16" "\0\0\0\0\0\0\1\3\7\17\37\36<\70xxp\360\340\340\300\300\200\0\0\0\0\0\0\0\200\200" "\0\0\0\0\0\0\0\0\0\0\0\1\3\207\377\377\376x\0\0\0\2\7\17\37\36\34<\70\70\70\70" "\70<<\34\36\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\1\1\1\1" "\1\1\1\1\1\377\377\377\377\1\1\1\1\1\1\1\1\1\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\377\377\377" "\377\200\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\177\0\0\0\0\3\7\17\17\36\34<\70\70\70" "\70\70<\36\37\17\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300@\0\0\7\77\377" "\376\360\200\0\0\0\0\0\0\0\0\0\200\360\376\377\37\3\0\0\0\0\0\1\17\177\377\374\340\0\0\0" "\0\0\340\374\377\77\7\0\0\0\0\0\0\0\0\0\0\0\3\37\377\377\370\300\370\377\177\17\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\7\77\77\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\300\300\0\37\377\377\370\0\0\0\0\0\200\370\377\376\340\0\0\0\0\0\360" "\377\377\7\0\0\17\377\377\374\0\0\300\374\377\17\1\37\377\376\360\0\0\370\377\377\3\0\0\0\0\3\377" "\377\377\374\377\17\0\0\0\0\1\37\377\377\370\377\77\0\0\0\0\0\0\0\0\77\77\17\0\0\0\0\0" "\0\0\0\1\37\77\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\0\0\0\0\1\7" "\37\177\374\370\340\200\0\0\0\300\360\374\177\37\17\3\0\0\0\0\0\0\0\0\0\0\1\7\217\377\376\374" "\377\337\7\1\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\77\37\7\3\17\37\177\374\370\340\200\0" "\0\0\0\0\0\60<\77\77\17\3\0\0\0\0\0\0\0\0\1\7\37\77>\70 \0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\300\300\300\300\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\300\300@\0\0\1\7\17\77\377\374\360\300\0\0\0\0\0\0\300\360\376\177\37" "\7\1\0\0\0\0\0\0\0\0\3\17\77\377\374\360\360\374\377\77\17\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\0\0\1\1\1" "\1\1\1\1\1\1\1\1\1\201\341\371\377\77\37\7\1\0\0\0\0\0\0\0\0\0\0\0\200\340\360\374" "\77\37\7\1\0\0\0\0\0\0\0\0\0\0\0\200\300\360\374~\37\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70>\77\77;\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360ppp" "pppppppp\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\0\0\0\0\0\0`\340\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1" "\17\77\377\374\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\370" "\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\177\376\370\300\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\77\377\374p@\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0ppppppppp" "pp\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\200\300\360\374>\37\17\77~\370\360\300\0\0\0\0\0\0\0\0\0\0\0\16\17\7\3\0\0\0\0" "\0\0\1\7\17\17\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200\200\200" "\200\200\200\200\200\200\200\200\200\200\0\0\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\3\0\0\0\0\0\0\0\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\77\377\376\370\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\177\376" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\300\200\0\0" "\0\0\0\0\0\0\0\1\3\7\3\1\201\201\201\201\201\201\201\203\207\377\377\376\370\0\0\0\0\360\370\374" "\376\17\7\7\3\3\3\3\3\3\3\203\303\377\377\377\377\0\0\0\0\1\3\7\17\17\36\34\34\34\34\34" "\16\16\7\7\3\37\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\0\377\377\377\377\34\6\3\3\3\3\3" "\3\3\7\17\77\376\374\370\300\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377" "\77\0\0\0\0\77\77\77\7\7\16\34\34\70\70\70\70<\34\36\17\17\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\300\200\0" "\0\0\0\0\0\300\370\374\376\37\7\3\3\1\1\1\1\1\1\1\3\7\17\17\6\0\0\0\0\37\177\377" "\377\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\17\16\36\36\34" "\34\34\34\36\16\17\7\7\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\0\0\0\0\0\0\0" "\0\0\200\200\200\200\200\200\200\200\0\0\0\377\377\377\377\0\0\0\0\300\370\374\376\77\17\7\3\3\3\3" "\3\3\7\7\36\377\377\377\377\0\0\0\0\77\377\377\377\300\0\0\0\0\0\0\0\0\0\0\200\377\377\377" "\377\0\0\0\0\0\1\7\17\37\37><<\70\70\70\34\34\16\7\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\200\200\0\0" "\0\0\0\0\0\300\370\376\377\317\307\303\301\301\301\301\301\301\301\303\307\377\377\374\360\0\0\0\0\37\377\377" "\377\341\201\1\1\1\1\1\1\1\1\1\1\1\201\1\1\0\0\0\0\0\0\1\3\7\17\17\36\36\34\34" "\34\34\34\16\16\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\340\340\360pppp\360\340\340\300\200\0\0\0\0\0" "\0\0\0\376\377\377\377\3\0\0\0\0\0\0\0\0\1\7\1\0\0\0\7\7\7\7\7\377\377\377\377\7" "\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\200\200\0\200\300\300\300" "\300\300\200\0\0\370\376\377\377\7\3\1\1\1\1\1\3\7\377\377\377\371\1\1\1\1\1\0\0\0\303\347" "\367\77\36\34\34\34\34\34\36\17\17\7\3\0\0\0\0\0\0\0\200\340\363\367\77\37\16\16\16\16\16\16" "\16\16\16\16\36\34\374\374\370\340\0\0\3\17\17\37\36\34<\70\70\70\70\70\70\70\70\34\34\36\17\7" "\3\1\0\0\0\0\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\0\0\0\0\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\0\377\377\377\377\34\16\7\7\3\3" "\3\3\3\7\17\377\377\374\360\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\360" "\360\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\201\201\201\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\3\3\3\3\3\3\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70\70\77\77" "\77\77\70\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\360\360\340\0\0\0\0\0\0\0\0\0\0" "\0\200\200\200\200\200\200\200\200\200\201\201\201\200\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3" "\3\3\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\10\34>" "\37\17\7\0\0\0\0\0\0\0\0\0\360\360\360\360\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\200\200\200" "\200\0\0\0\0\0\377\377\377\377\0\0\200\300\340\360x<>\36\17\7\3\1\0\0\0\0\0\0\377\377" "\377\377\36\17\7\7\17\77~\374\360\340\300\200\0\0\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0" "\0\0\1\7\17\37\77<\70\60 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0ppppppp\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\70\70\70\70\70\70\70\77\77\77\77\70\70\70\70\70\70\70\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\200\300\300\300\300\300\200\0\0\200\300\300\300\300\300" "\300\0\0\0\377\377\377\377\7\1\1\1\1\377\377\377\376\17\3\1\1\1\377\377\377\377\0\0\377\377\377\377" "\0\0\0\0\0\377\377\377\377\0\0\0\0\0\377\377\377\377\0\0\37\37\37\37\0\0\0\0\0\37\37\37" "\37\0\0\0\0\0\37\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300" "\300\300\0\0\200\200\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\377\377\377\377\16\7\3\3\1\1" "\1\1\1\3\7\377\377\376\370\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\0\37\37\37\37\0\0\0\0\0\0\0\0\0\0\0\37\37\37\37\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\200\0\0\0" "\0\0\0\0\300\370\374\376\37\7\3\3\1\1\1\1\1\1\3\7\17\77\377\376\370\300\0\0\37\177\377\377" "\340\200\0\0\0\0\0\0\0\0\0\0\200\340\377\377\177\17\0\0\0\0\1\3\7\7\17\16\36\34\34\34" "\34\36\16\17\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300" "\300\0\0\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\377\377\377\377\16\3\3\1\1\1\1" "\1\1\3\3\17\77\377\376\370\300\0\0\0\377\377\377\377\200\0\0\0\0\0\0\0\0\0\0\200\340\377\377" "\177\17\0\0\0\377\377\377\377\3\7\16\16\34\34\34\34\36\36\17\17\7\3\1\0\0\0\0\0\77\77\77" "\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\200\200\0\300\300" "\300\300\0\0\0\340\370\376\377\37\7\3\1\1\1\1\1\1\1\3\7\16\377\377\377\377\0\0\0\37\377\377" "\377\340\200\0\0\0\0\0\0\0\0\0\0\300\377\377\377\377\0\0\0\0\0\1\3\7\17\17\36\36\34\34" "\34\34\16\16\7\3\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "\300\300\300\0\0\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\377\377\377\377>\17\7\3\3" "\1\1\1\1\1\1\3\7\3\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\37\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\300\200\200\0" "\0\0\0\0\0\0\0<\177\377\377\343\301\301\201\201\201\1\1\3\3\7\37\7\2\0\0\0\0\0\200\300" "\200\0\1\1\1\3\3\3\7\7\7\17\36\376\374\374\360\0\0\0\0\0\3\7\7\17\16\36\36\34\34\34" "\34\34\36\16\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200" "\200\200\200\200\376\377\377\217\200\200\200\200\200\200\200\0\0\0\0\0\0\0\3\3\3\3\3\377\377\377\377\3" "\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\3\17\37\37><\70\70\70\70\34\34\36\16\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\200\200\200" "\200\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377\0\0\0\0\0\0\3\17\37\37><\70\70\70" "\70\34\34\16\7\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\0\0\0\3\17\177\377\374\340\200\0\0\0\0" "\0\0\0\0\300\370\377\77\7\0\0\0\0\0\0\0\1\17\77\377\376\360\300\0\200\360\374\177\37\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\7\77\77>\77\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\200\200\200\0\7\377\377\374\200\0\0\0\0\300\374\376\376\370\300\0\0\0\0\300\377\377\37\0\0\0\37\377" "\377\360\0\300\374\177\17\0\3\37\377\374\340\0\340\377\377\17\0\0\0\0\0\3\77\77>\77\7\0\0\0" "\0\0\1\17\77\77\77\77\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200" "\200\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\1\7\17\37~\374\360\340\200\200" "\340\360\370~\37\17\3\1\0\0\0\0\0\0\0\0\0\200\300\340\373\177\77\77\177\373\360\340\200\0\0\0" "\0\0\0\0\0 \60<>\37\17\3\1\0\0\0\0\0\3\7\37\77<\70\60\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200" "\200\200\0\0\0\1\7\77\377\376\360\300\0\0\0\0\0\0\0\0\340\374\377\77\17\1\0\0\0\0\0\0" "\0\3\37\177\376\370\300\0\0\340\370\377\77\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\377\377" "\377\77\17\1\0\0\0\0\0\0\0\0\70\37\17\7\1\0\0\0\0\0\0" "\0\0\0\0\0\70<\77\77\77;\71\70\70\70\70\70\70\70\70\70\70\70\70\70\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200" "\300\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\370\376\377\377\7\3\1\1\1\1\1\1\1" "\0\0\0\0\0\0\0\0\0\200\300\377\377\177\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7" "\7\17=\375\370\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\37\77~xxpppppp" "\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\37\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\200" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\3\3\17\377\377\376\360\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\177\377\377\300\200\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\360\370\375\37\17\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0ppppppxx>\77\37\17\3\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200" "\200\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\300\200\0\0\0\6\17\17\3\3\1\1\1\3\7\7" "\17\36\36\34\34\36\16\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\360\360" "\360\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\203\203\203\203\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\200\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\77\77\77" "\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300@\0\0\0\0\0\0\0\0\0\0\0" "\200\300\340\340\360ppp\360\377\377\177\360\360\340\300\300\0\0\0\0\360\374\377\377\17\3\1\0\0\0\360" "\377\377\37\0\0\0\1\7\3\0\0\0\0\17\77\377\377\360\300\200\0\0\360\377\377\17\0\0\0\0\200\300" "\200\0\0\0\0\0\0\0\1\3\3\7\7\377\377\377\17\16\16\17\7\7\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\1\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300" "\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\360\374\376\377\17\7\3\1\1\1\1\3\3\7\3\1" "\0\0\0\0\0\0\34\34\37\77\377\377\374\234\34\34\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\300\377\377\377\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\34\34\36\37\17\17\17\16\16\16\36" "\34\34<\70\70\70\70<\34\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\34" "\270\360\360px\70\70\70\70xp\360\370\274\34\10\0\0\0\0\0\0\0\77\377\377\341\300\200\0\0\0" "\0\200\300\341\377\177\36\0\0\0\0\0\0\0\6\17\7\3\1\3\7\7\7\7\7\7\3\1\3\7\16\4" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300@\0\0\0\0\3\7\37\177\374\370\340\200\0\0\0\0\300\360\374\177\37\7" "\1\0\0\0\0\0\0\0\0\0\1\3\17\77\376\370\374\377\37\7\1\0\0\0\0\0\0\0\0\0\0\307" "\307\307\307\307\307\307\377\377\377\377\307\307\307\307\307\307\0\0\0\0\0\0\0\1\1\1\1\1\1\1\77\77" "\77\77\1\1\1\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77" "\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\370\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\37\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\360ppp" "p\360\340\340\300\200\0\0\0\0\0\0\0\0\0>\177\377\377\341\300\200\200\0\0\0\0\3\7\3\1\0" "\0\0\0\0\0\0\360\370\374\376\207\3\3\7\7\7\17\17>\376\374\370\340\0\0\0\0\0\0\0\0\3" "\7\7\17\17\36\36\34<<\30\0\1\7\37\374\360\77\370\340\200" "\3\17\77|x\360\340\340\340\340px\70\20\0\200\340\370\77\17\0\0\1\3\7\6\16\14\34\30\30\30" "\30\30\34\14\14\6\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0" "\3\207\203\201\301\301\300\300\301\301\303\377\377\374\0\0\0\0\0\0\0\0\0<\177\377\343\301\301\201\300\300" "\300\340p\377\377\377\0\0\0\0\0\0\0\0\60\60\60\60\61\61\61\61\61\61\60\60\60\61\61\61\60\60" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\360\370|\70\0\0\0\200\300\340\360x\70\20\0\0\0\0\0\14\36" "\77\177\363\341\300\200\0\14\36\77\177\363\341\300\200\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\2" "\0\0\0\0\1\3\7\7\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0ppppppppp" "pppp\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\37" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300" "\340p\60\60\30\30\30\30\30\30\70\70\60p\340\300\200\0\0\0\374\37\7\1\0\0\377\377\203\203\203\203" "\203\207\306\376|\0\0\1\7\37\374\360\77\374\340\200\0\0\177\177\1\1\1\1\3\17\77x`\0\0\200" "\340\370\77\17\0\0\1\3\7\6\16\14\34\30\30\30\30\30\34\14\14\6\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300" "\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\340\340\340\340\300\200\0\0\0\0\0\0\0\0\0\0\0" "\0~\377\377\303\201\0\0\0\0\201\303\377\377~\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\7" "\7\7\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\16\16\16\16\16\16\16\16\16\377\377\377\377\16\16\16\16\16\16\16\16\0\0\0\0\0\0" "\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\34\34\34\34\34\34\34\34\34\34\34" "\34\34\34\34\34\34\34\34\34\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\300\340`````\340\340\300\200\0\0\0\0\0\0\0\0\0\0" "\0\1\3\1\0\0\0\0\200\300\340\361\177\77\37\0\0\0\0\0\0\0\0\0\0\340\360\370\374\336\317\307" "\303\301\301\300\300\300\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340```" "`\340\340\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0``pp\370\377\337\217\0\0" "\0\0\0\0\0\0\0\0\60\70xp\340\340\340\300\340\340`q\77\77\17\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\374x\60\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\2\7\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\0\0\0\0\0\0\0\0\0\200\200\200\200\0\0" "\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\300\377\377\377\17\37\34<\70\70\70<" "\34\17\7\7\37\37<\70\70<\36\14\177\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\300\340\340\360\360\360\360\360pppp\360\360\360\0\0\0\0\0\374\377" "\377\377\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\0\0\0\0\0\0\3\7\17\17\37\37\37\77\377" "\377\377\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\3\3\3\0\0\0\0\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0x\374\374\374\374x\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\70\70ppcccs\77>\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300" "\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\7\7\3\3\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\360" "\374\376\17\3\1\1\0\1\1\3\17\377\376\370\0\0\0\0\0\0\0\0\0\7\37\177\370\340\300\300\200\300" "\300\340\370\177\37\7\0\0\0\0\0\0\0\0\60\60\60\60\60\60\61\61\61\61\61\60\60\60\60\60\60\60" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\10\34\67\63\61\60\60\377\377\60\60\0\0\0\0\0\0" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\0\0\0\0`pp\370\370\370\0\0\0\0\0\0" "\0\0\0\0\0\340\360\360 \0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\300\360\374\77\17\3\0" "\0\0\0\0\0\0\0\7\7\7\0\0\0\200\340\370~\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\300\360\376\77\17\1\60x\30\34\14\14\14\34\70\370\340\0\0\0@\360\374\177\17\3\0\0\0\0" "\0\200\340`\60\30\34\16\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3" "\3\3\3\0 p\60\30\30\30\70\60\360\340\0\0\0\0\0\0\0\200\360\360`\0\0\0\200\200\0\0" "\14\14\14\36\377\373\340\0\0\0\340\370\376\37\7\1\0\0\0\0\3\3\7\6\6\6\6\7\3\3\300\360" "\374\77\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\177\37\7\0\0\0\300\340p\374\374" "\0\0\0\0\0\0\0\300\370\376\77\17\1\0\0\60\70>\63\61\60\60\377\377\60\60\60\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\0\0\0\0\0\0\0\0\0\0\0\0\340\360\360\360" "\360\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\303\303\303\303\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\300\340\370\177\77\37\7\0\0\0\0\0\0\0\0\0\0\0\0\0\374\376" "\377\377\7\1\0\0\0\0\0\0\0\0\0\0\200\200\0\0\0\0\0\0\0\3\7\17\37\36<<\70\70" "\70\70\34\34\36\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\1\201\363\303\3\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\340\374\377\37\177\376\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\77\7\0\0\0" "\3\37\177\376\370\300\0\0\0\0\0\0\0\300\370\376\377\37\17\16\16\16\16\16\16\16\16\17\77\377\376\370" "\300\0\0\0\36\37\37\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\37\37\36\30\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\203\363\303" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\374\377\37\177\376\360\300\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\370\377\77\7\0\0\0\3\37\177\376\370\300\0\0\0\0\0\0\0\300\370\376" "\377\37\17\16\16\16\16\16\16\16\16\17\77\377\376\370\300\0\0\0\36\37\37\7\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\7\37\37\36\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\14\16\7\7\3\3\301\201\3\7\7\16\14\4\0\0\0\0\0\0\0\0\0\0" "\0\0\0\300\370\377\77\377\374\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\376\177\17\1\0\0" "\7\77\377\374\340\200\0\0\0\0\0\0\0\200\360\374\377\77\37\34\34\34\34\34\34\34\35\37\77\377\374\360" "\200\0\0\0<\77\77\17\1\0\0\0\0\0\0\0\0\0\0\0\0\1\17\77\77<\60\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\7\7\1\0\0\0\301\3" "\7\17\16\16\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\300\370\377\77\377\374\340\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\360\376\177\17\1\0\0\7\77\377\374\340\200\0\0\0\0\0\0\0\200\340\374" "\377\77\37\34\34\34\34\34\34\34\34\37\177\377\374\340\200\0\0\0<\77\77\17\1\0\0\0\0\0\0\0" "\0\0\0\0\0\1\17\77\77<\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\3\7\7\7\3\0\300\200\0\3\7\7\7\3\0\0\0\0\0\0\0\0\0\0" "\0\0\0\200\360\376\177\377\376\360\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\374\377\37\3\0\0" "\3\37\377\376\360\200\0\0\0\0\0\0\0\0\300\370\377\177\37\34\34\34\34\34\34\34\34\37\77\377\376\360" "\200\0\0\0\70\77\77\37\3\0\0\0\0\0\0\0\0\0\0\0\0\1\7\77\77>\60\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\37\77\70\360\260" "\70\37\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\77\377\376\360\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\360\376\177\17\1\0\0\7\77\377\374\360\200\0\0\0\0\0\0\0\200\360\374" "\377\77\37\34\34\34\34\34\34\34\35\37\177\377\374\340\200\0\0\0<\77\77\17\1\0\0\0\0\0\0\0" "\0\0\0\0\0\3\17\77\77< \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\0\0\0" "\0\200\360\376\177\17\1\377\377\377\377\1\1\1\1\1\1\1\1\0\0\0\0\300\374\377\77\3\0\0\0\377" "\377\377\377ppppppp\0\0\200\360\376\377\37\35\34\34\34\34\34\377\377\377\377\0\0\0\0\0" "\0\0\0\0\77\77\7\0\0\0\0\0\0\0\0\77\77\77\77\70\70\70\70\70\70\70\70\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300" "\300\300\300\300\200\200\0\0\0\0\0\0\0\300\360\374\376\77\17\7\3\3\1\1\1\1\3\3\7\17\37>" "\34\30\0\0\376\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\77\377\377" "\370\300\200\0\0\0\0\0\0\0\0\0\0\0\0\200\0\0\0\0\0\0\0\3\7\17\17\36\36<<\270" "\370\370\70<\34\36\17\7\3\0\0\0\0\0\0\0\0\0\0\70\60ppcccw\77>\36\0\0" "\0\0\0\0\0\300\300\300\300\300\301\303\303\303\307\307\317\316\304\300\300\300\300\300\300\0\0\0\0\377\377\377" "\377\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0\0\0\377\377\377\377ppppppp" "pppppp\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\77\77\77\77\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\304\316\316\307\307" "\307\303\303\301\300\300\300\300\300\0\0\0\0\377\377\377\377\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\377\377\377\377ppppppppppppp\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\70\70\70\70\70\70\70" "\70\70\70\70\70\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\304\316\316\307\303\303\301\301\303\307\307\316\314\304\300\300\300\0\0\0\0\377\377\377" "\377\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0\0\0\377\377\377\377ppppppp" "pppppp\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\77\77\77\77\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\303\307\307\307\303\300\300\300" "\300\303\307\307\307\303\300\300\300\0\0\0\0\377\377\377\377\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\377\377\377\377ppppppppppppp\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\70\70\70\70\70\70\70" "\70\70\70\70\70\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\340\340\340\340\341\341\341\343\343\343\347\347\342\340\340\340\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\34\34\34\34\34\34\37\37\37\37\34\34\34\34\34\34\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\316\316\307\307" "\307\303\303\303\301\300\300\0\0\0\0\0\0\0\0\1\1\1\1\1\1\377\377\377\377\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70\70\77\77\77" "\77\70\70\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\304\316\306\307\303\303\301\301\303\303\307\317\316\304\300\0\0\0\0\0\0\0\0\1" "\1\1\1\1\1\377\377\377\377\1\1\1\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\70\70\70\70\70\70\77\77\77\77\70\70\70\70\70\70\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\303\307\307\307\303\300\300\300" "\300\303\307\307\307\303\300\0\0\0\0\0\0\0\0\1\1\1\1\1\1\377\377\377\377\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70\70\77\77\77" "\77\70\70\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\1\1\1\1\1\1\3\3\7\17\37\376\374\370\340\0\0\0pp\377\377\377\377ppppp\0" "\0\0\0\0\0\0\377\377\377\377\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\300\360\377\377" "\77\7\0\0\0\0\77\77\77\77\70\70\70\70\70\70<\34\36\17\17\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\302\303\207\3\1\0\0\1\1" "\3\7\17\16\16\7\307\303\301\300\0\0\0\377\377\377\377\77\376\370\340\300\0\0\0\0\0\0\0\0\377\377" "\377\377\0\0\0\377\377\377\377\0\0\3\17\37\177\374\360\300\200\0\0\0\377\377\377\377\0\0\0\377\377\377" "\377\0\0\0\0\0\0\1\7\37\77\376\370\340\377\377\377\377\0\0\0\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\3\17\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\203\203\203\307\307\307\317\316\314\204\200\0\0\0\0\0\0\0\0\340\370\374" "\376\37\17\7\3\3\1\1\1\3\3\7\17\37\376\374\370\340\0\0\376\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\377\377\377\377\0\7\177\377\377\370\300\0\0\0\0\0\0\0\0\0\0\0\200\360\377" "\377\177\7\0\0\0\1\3\7\17\37\36\34<\70\70\70\70<\34\36\17\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\214\316\316\307" "\307\307\303\203\203\0\0\0\0\0\0\0\0\340\370\374\376\37\17\7\3\3\1\1\1\3\3\7\17\37\376\374" "\370\340\0\0\376\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\7\177\377\377" "\370\300\0\0\0\0\0\0\0\0\0\0\0\200\360\377\377\177\7\0\0\0\1\3\7\17\37\36\34<\70\70" "\70\70<\34\36\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\14\216\207\207\303\301\301\301\303\307\217\216\14\0\0\0\0\0\0\0\340\370\374" "\376\37\17\7\3\3\1\1\1\3\3\7\17\37\376\374\370\340\0\0\376\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\377\377\377\377\0\7\177\377\377\370\300\0\0\0\0\0\0\0\0\0\0\0\200\360\377" "\377\177\7\0\0\0\1\3\7\17\37\36\34<\70\70\70\70<\34\36\17\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\201\200\200\300\300\301" "\303\303\307\207\207\7\3\1\0\0\0\0\0\340\370\374\376\37\17\7\3\3\1\1\1\3\3\7\17\37\376\374" "\370\340\0\0\376\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\7\177\377\377" "\370\300\0\0\0\0\0\0\0\0\0\0\0\200\360\377\377\177\7\0\0\0\1\3\7\17\37\36\34<\70\70" "\70\70<\34\36\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\1\3\203\203\201\300\300\300\300\301\303\203\203\1\0\0\0\0\0\0\0\340\370\374" "\376\37\17\7\3\3\1\1\1\3\3\7\17\37\376\374\370\340\0\0\376\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\377\377\377\377\0\7\177\377\377\370\300\0\0\0\0\0\0\0\0\0\0\0\200\360\377" "\377\177\7\0\0\0\1\3\7\17\37\36\34<\70\70\70\70<\34\36\17\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\340\340\300\200\0\0\0\0\0\0\0\200\300\340\340@" "\0\0\0\0\0\0\0\0\0\1\7\217\337\376\374\370\374\376\337\207\3\1\0\0\0\0\0\0\0\0\0\30" "<>\37\17\7\3\1\0\1\3\7\17\37><\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\0\0\0\200\340\340\340@\0\0\200\360\370" "\374>\37\17\7\7\3\3\3\7\307\357\377~\377\377\363\300\0\0\374\377\377\377\1\0\0\0\0\0\300\360" "\374\177\37\7\1\0\1\377\377\377\376\0\17\377\377\377\360\200\300\360\374\77\17\7\1\0\0\0\0\0\340\377" "\377\377\17\0\0\200\343\377\177\77\77\77\70xppppx\70<\37\17\7\3\0\0\0\0\1\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\340\340\340\0\0\1\1\1\3\3" "\3\7\7\0\0\0\340\340\340\340\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\177\377\377" "\377\300\0\0\0\0\0\0\0\0\0\0\200\300\377\377\377\77\0\0\0\0\1\3\7\7\17\16\36\34\34\34" "\34\34\36\17\17\7\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\340\340\340\340\0\0\0\7\7\3\3\3\1\1\0\0\0\340\340\340\340\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\0\0\0\177\377\377\377\300\0\0\0\0\0\0\0\0\0\0\200\300\377\377" "\377\77\0\0\0\0\1\3\7\7\17\16\36\34\34\34\34\34\36\17\17\7\7\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\16\16\7\3\3\1\1" "\1\3\7\17\16\4\300\300\300\300\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\377\377\377" "\377\200\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\177\0\0\0\0\3\7\17\17\36\34<\70\70\70" "\70\70<\36\37\17\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\301\3\3\3\1\0\0\0\0\0\1\3\3\3\301\300\300\300\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\0\0\0\377\377\377\377\200\0\0\0\0\0\0\0\0\0\0\0\200\377\377" "\377\177\0\0\0\0\3\7\17\17\36\34<\70\70\70\70\70<\36\37\17\17\7\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \340\340\340\340\200\0\0\7\7\3\3" "\3\1\1\1\0\0\300\340\340\340 \0\0\0\3\7\37\177\376\370\340\200\0\0\0\0\200\340\370\377\77\17" "\3\0\0\0\0\0\0\0\0\0\1\7\37\177\376\370\370\376\177\37\7\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37" "\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377ppppppppp\360\340\340\300\300\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\1\3\377\377\377\374\0\0\0\0\377\377\377\377\70\70\70\70\70\70\70\70\70<\34\37\17\17\3" "\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\340\360ppp" "\360\360\340\340\300\200\0\0\0\0\0\0\0\370\376\377\377\7\1\0\0\0\0\0\0\0\1\203\377\377\377|" "\0\0\0\0\0\377\377\377\377\0\0\0\0\34\34\34\34\36\77\77{\363\341\340\200\0\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\1\377\377\377\376\0\0\0\77\77\77\77\0\0\0\30<<\70" "\70\70<<\36\37\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\60p\370\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\200\200\200\201\203\207\207\206\200\200\0\0\0\0\0\0\0\0\0\0\2\6\17\7\3\3\3\3\3" "\3\3\3\7\17\377\376\374\360\0\0\0\0\340\360\370\374\36\16\16\7\7\7\7\7\7\7\7\207\377\377\377" "\377\0\0\0\0\3\7\17\37\36<\70\70\70\70\70\34\34\16\17\7\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300" "\360\370x\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\206\207\207\203\201\200\200\200\0\0\0" "\0\0\0\0\0\0\0\2\6\17\7\3\3\3\3\3\3\3\3\7\17\377\376\374\360\0\0\0\0\340\360\370" "\374\36\16\16\7\7\7\7\7\7\7\7\207\377\377\377\377\0\0\0\0\3\7\17\37\36<\70\70\70\70\70" "\34\34\16\17\7\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360|\370\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\6\217\207\203\200\200\200\201\207\217\207\4\0\0\0\0\0\0\0\0\0\2\6\17\7\3\3\3\3\3" "\3\3\3\7\17\377\376\374\360\0\0\0\0\340\360\370\374\36\16\16\7\7\7\7\7\7\7\7\207\377\377\377" "\377\0\0\0\0\3\7\17\37\36<\70\70\70\70\70\34\34\16\17\7\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360x\70\70\70x" "\360\340\300\200\200\300\340\340@\0\0\0\0\0\0\0\0\1\0\200\200\200\200\200\200\201\203\203\203\3\1\0" "\0\0\0\0\0\0\0\2\6\17\7\3\3\3\3\3\3\3\3\7\17\377\376\374\360\0\0\0\0\340\360\370" "\374\36\16\16\7\7\7\7\7\7\7\7\207\377\377\377\377\0\0\0\0\3\7\17\37\36<\70\70\70\70\70" "\34\34\16\17\7\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\340\360\360\360\340\0\0\0\0\340\360\360\360\340\0\0\0\0\0\0\0\0\0" "\0\0\1\201\201\200\200\200\200\200\200\201\201\1\0\0\0\0\0\0\0\0\0\2\6\17\7\3\3\3\3\3" "\3\3\3\7\17\377\376\374\360\0\0\0\0\340\360\370\374\36\16\16\7\7\7\7\7\7\7\7\207\377\377\377" "\377\0\0\0\0\3\7\17\37\36<\70\70\70\70\70\34\34\16\17\7\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\370\374\34\14" "\14\34\370\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\201\203\207\207\206\206\203\203\200\200\0\0\0" "\0\0\0\0\0\0\0\2\6\17\7\3\3\3\3\3\3\3\3\7\17\377\376\374\360\0\0\0\0\340\360\370" "\374\36\16\16\7\7\7\7\7\7\7\7\207\377\377\377\377\0\0\0\0\3\7\17\37\36<\70\70\70\70\70" "\34\34\16\17\7\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300" "\300\300\300\300\300\200\200\0\0\200\300\300\300\300\300\300\200\0\0\0\0\1\3\201\201\301\301\301\303\377\377\376" "\377\307\303\301\301\301\301\303\377\377\374\0\376\377\377\7\3\3\1\1\1\377\377\377\377\201\1\1\1\1\1\1" "\1\1\1\0\3\17\17\37\36\34\34\36\16\17\7\3\7\17\17\36\34\34\34\36\16\17\6\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\300\200\200" "\0\0\0\0\0\300\370\374\376\37\7\3\3\1\1\1\1\1\1\1\3\3\7\17\7\2\0\0\0\37\177\377" "\377\340\300\0\0\0\0\0\0\0\0\0\0\0\0\200\0\0\0\0\0\0\0\1\3\7\7\17\17\36\36\374" "\374\374\234\236\16\16\17\7\2\0\0\0\0\0\0\0\0\0\0\34\30\70\70\61\61\61;\37\37\17\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\60p\370\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\200\200\200\201\203\207\207\206\200\0\0\0\0\0\0\0\0\0\200\360\374\376\237\217\207\203\203\203\203" "\203\203\203\207\217\377\376\370\340\0\0\0\0\77\377\377\377\303\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\0\0\0\0\0\1\3\7\17\37\36<<\70\70\70\70\70\34\34\36\17\6\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "\360\370\370\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\206\207\217\203\201\200\200\0\0\0\0" "\0\0\0\0\0\200\360\374\376\237\217\207\203\203\203\203\203\203\203\207\217\377\376\370\340\0\0\0\0\77\377\377" "\377\303\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\0\0\0\0\0\1\3\7\17\37\36<<\70\70" "\70\70\70\34\34\36\17\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370|\370\360\300\200\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\6\217\207\201\200\200\200\203\207\217\6\0\0\0\0\0\0\0\0\200\360\374\376\237\217\207\203\203\203\203" "\203\203\203\207\217\377\376\370\340\0\0\0\0\77\377\377\377\303\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\0\0\0\0\0\1\3\7\17\37\36<<\70\70\70\70\70\34\34\36\17\6\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\360\360\340\0\0\0" "\0\340\360\360\360\340\0\0\0\0\0\0\0\0\0\0\0\1\1\201\200\200\200\200\200\200\201\201\1\0\0\0" "\0\0\0\0\0\200\360\374\376\237\207\207\203\203\203\203\203\203\207\207\237\377\376\370\340\0\0\0\0\77\377\377" "\377\303\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\0\0\0\0\0\1\3\7\17\37\36<<\70\70" "\70\70\70\34\34\36\16\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\60p\370\370\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\200\200\200\200\200\203\207\207\207\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\70\70\70\70\70\70\77\77\77\77\70\70\70\70\70\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "\340\370\370p\20\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\207\207\207\203\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\3\3\3\3\3\3\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70\70\77\77" "\77\77\70\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370x\360\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0" "\200\204\216\217\203\201\200\200\201\203\7\17\6\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\70\70\70\70\70\70\77\77\77\77\70\70\70\70\70\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\360\360\340\0\0" "\0\0\340\360\360\360\340\0\0\0\0\0\0\0\0\0\0\200\201\201\201\200\200\200\200\200\0\1\1\1\0\0" "\0\0\0\0\0\0\0\0\0\3\3\3\3\3\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70\70\77\77" "\77\77\70\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\60\60pp\340\340\300\200\200\200\300\300\300\300\0\0\0\0\0\0\0\0" "\0\6\16\216\206\207\207\203\203\207\237\77\375\371\360\300\0\0\0\0\200\340\370\374>\17\7\7\3\3\3\3" "\3\3\7\7\16\77\377\377\376\340\0\0\77\377\377\377\300\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377" "\377\37\0\0\0\0\3\7\17\17\36\34<\70\70\70\70<\34\36\37\17\7\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360p\70\70\70x\360" "\340\300\200\200\200\300\360`\0\0\0\0\0\0\200\200\201\201\0\0\0\0\200\200\201\203\203\203\203\1\1\0" "\0\0\0\0\0\0\377\377\377\377\34\16\7\7\3\3\3\3\3\7\17\377\377\374\360\0\0\0\0\0\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0" "\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0p\370\370\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\200\200\200\201\203\217\207\202\200\0\0\0\0\0\0\0\0\200\360\370\374>\17\7\7\3\3\3\3" "\3\3\7\17\37~\376\374\360\200\0\0\77\377\377\377\300\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377" "\377\37\0\0\0\0\3\7\17\17\36\34<\70\70\70\70<\34\36\37\17\7\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340" "\370\370p\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\207\207\207\203\200\200\200\0\0\0\0" "\0\0\0\0\200\360\370\374>\17\7\7\3\3\3\3\3\3\7\17\37~\376\374\360\200\0\0\77\377\377\377" "\300\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377\37\0\0\0\0\3\7\17\17\36\34<\70\70\70" "\70<\34\36\37\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\340\370||\370\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0" "\0\6\17\207\203\200\200\200\200\203\207\217\6\0\0\0\0\0\0\0\200\360\370\374>\17\7\7\3\3\3\3" "\3\3\7\17\37~\376\374\360\200\0\0\77\377\377\377\300\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377" "\377\37\0\0\0\0\3\7\17\17\36\34<\70\70\70\70<\34\36\37\17\7\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360x\70\70\70x\360" "\340\300\200\200\300\340\360@\0\0\0\0\0\0\0\0\1\0\0\200\200\200\200\200\201\203\203\203\3\1\0\0" "\0\0\0\0\200\360\370\374>\17\7\7\3\3\3\3\3\3\7\17\37~\376\374\360\200\0\0\77\377\377\377" "\300\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377\37\0\0\0\0\3\7\17\17\36\34<\70\70\70" "\70<\34\36\37\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\360\360\360\340\0\0\0\0\340\360\360\360\340\0\0\0\0\0\0\0\0\0\0" "\0\1\1\201\200\200\200\200\200\200\201\201\1\0\0\0\0\0\0\0\200\360\370\374~\37\7\7\3\3\3\3" "\3\3\7\17\37~\376\374\360\200\0\0\77\377\377\377\340\200\0\0\0\0\0\0\0\0\0\0\0\300\377\377" "\377\37\0\0\0\0\3\7\17\17\36\34<\70\70\70\70<\34\36\37\17\7\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0p\370\370\370p\0\0\0\0\0\0" "\0\0\0\0\0\0pppppppppppppppppp\0\0\0\0\0\0\0\0" "\0\0\0\0\0p\370\370\370p\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\340\300@\0\0\0\0\0\340\360\370|\36\16\17\7\7\7\207" "\347\377\177\37\37\177\371\360\340\0\0\0\177\377\377\377\200\0\200\300\360\374>\17\7\1\0\0\0\200\377\377" "\377\77\0\0\0\1\307\377\377~\77\77{ppppx\70<>\37\17\7\1\0\0\0\0\0\1\1" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\20p\370\370" "\340\300\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\0\0\0\0\0\1\7\7\7\0\0\200\200\200" "\200\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377\0\0\0\0\0\0\3\17\37\37><\70\70\70" "\70\34\34\16\7\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\370\370p\0\0\0\0\0\0\0\0\0\0\200\200" "\200\200\0\0\0\0\7\7\7\1\0\0\0\200\200\200\200\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\200\377\377\377" "\377\0\0\0\0\0\0\3\17\37\37><\70\70\70\70\34\34\16\7\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360|" "\370\360\340\200\0\0\0\0\0\0\0\0\0\0\200\200\200\200\6\17\7\3\0\0\0\1\7\17\7\204\200\200" "\200\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377\0\0\0\0\0\0\3\17\37\37><\70\70\70" "\70\34\34\16\7\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\340\360\360\360\340\0\0\0\0\340\360\360\360\340\0\0\0\0\0\0\0\200\200" "\200\200\1\1\1\0\0\0\0\0\0\1\1\201\200\200\200\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\200\377\377\377" "\377\0\0\0\0\0\0\3\17\37\37><\70\70\70\70\34\34\16\7\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300" "\360\370x\60\0\0\0\0\0\0\0\0\0\200\200\200\200\0\0\0\0\6\7\7\3\1\0\0\0\0\200\200" "\200\200\0\0\0\1\7\77\377\376\360\300\0\0\0\0\0\0\0\0\340\374\377\77\17\1\0\0\0\0\0\0" "\0\3\37\177\376\370\300\0\0\340\370\377\77\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\377\377" "\377\77\17\1\0\0\0\0\0\0\0\0\70\37\17\7\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: -FreeType-Inconsolata LGC-Medium-R-Normal--44-440-72-72-P-201-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 95/658 BBX Build Mode: 3 */ const uint8_t u8x8_font_inr33_3x6_r[13684] U8X8_FONT_SECTION("u8x8_font_inr33_3x6_r") = " ~\3\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\360" "\360\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\7\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\17\17\17\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\36\77\77\77" "\77\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\340\360\360\340\0\0\0\0\0\340\360\360\340\0\0\0\0\0\0\0\0\0" "\0\0\377\377\377\377\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\0" "\0\0\0\0\300\300\300@\0\0\0\0\0\200\200\200\200\200\200\377\377\377\201\200\200\200\200\300\377\377\377\200" "\200\200\200\0\0\1\1\1\1\1\377\377\377\1\1\1\1\1\301\377\377\177\1\1\1\1\1\0\14\14\14\14" "\14\374\377\377\17\14\14\14\14\214\377\377\177\14\14\14\14\14\0\0\0\0\0\0\34\37\37\3\0\0\0\0" "\0\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370" "\374\376\16\7\7\7\377\377\377\7\7\7\17\36>\34\10\0\0\0\0\0\1\7\17\37\36<\37\7\3\0\0\0\0\0" "\3\17\37<\70\70\70<\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0|" "\376\377\377\3\3\1\1\3\7\377\377\376|\0\0\0\0\0\0\0\0\0\0\200\301\347\357\177~\370\374\336" "\217\7\3\1\0\0\0\200\0\0\0\0\370\376\377\377\7\1\0\0\0\0\3\7\37\77\374\370\360\360\370\177" "\37\16\2\0\1\7\17\37\37<<\70\70\70<\34\36\16\17\7\3\7\37\77\36\30\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360" "\360\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\340\0\0\0\0\0\0\0\0" "\0\0\0\0\200\340\360\370~\77\17\7\3\1\1\0\0\0\0\0\0\0\0\0\0\0\340\376\377\377\17\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\177\377\377\377\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\3\37\177\377\374\360\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\3\7\17\37\36\374x`\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\370\0\0\0\0\0\0" "\0\0\0\0\0ppppppppp\377\377\377\377pppppppp\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0<~\376\376\374x\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0 x<\37\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\36\77\77\77\77\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\200\360\360\340 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\177\17\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\376\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0" "\0\300\360\374\377\77\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\370\376\77\17\3\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\300\360" "\374\376\37\17\7\3\1\1\1\3\3\207\377\376\374\360\300\0\0\0\0\376\377\377\377\0\0\0\0\300\340\360" "x\36\17\7\1\1\377\377\377\374\0\0\0\7\77\377\377\370\374\36\17\7\1\0\0\0\0\0\200\360\377\377" "\77\7\0\0\0\0\0\0\3\7\17\37\36<\70\70\70<\34\36\17\7\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300" "\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\14\16\16\7\7\7\7\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\14" "\36\17\7\3\3\1\1\1\1\3\3\7\37\377\376\374\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\200\300\340\360\374\77\37\17\1\0\0\0\0\0\0\0\0\300\340\360\370<\36\17\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\70>\77\77;\71\70\70\70\70\70\70\70\70\70\70\70\70\70\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300" "\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\2\7\7\3\3\1\1\1\1\3\3\7\17\377\377\374\360" "\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70x||\376\357\347\307\201\0\0\0\0\0\0\0\0\0" "\200\0\0\0\0\0\0\0\0\0\0\201\377\377\377\376\0\0\0\0\0\0\4\16\37\36\34<\70\70\70\70" "<<\36\37\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\200\300\360\370>\17\377\377\377\377\0\0\0\0\0\0\0\0\0\200\340\360|>\17\7\1\0" "\0\0\377\377\377\377\0\0\0\0\0\0\0\34\37\37\37\35\34\34\34\34\34\34\34\34\377\377\377\377\34\34" "\34\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\300\0\0\0\0\0\0\0\377\377\377\377\1\1\1\1\1\1\1\1\1\1\1\1\1" "\0\0\0\0\0\0\0\77\177\77\37\34\16\16\16\16\16\36\36<\374\370\360\340\200\0\0\0\0\0\0\0" "\200\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\177\0\0\0\0\0\3\7\17\37\36<<\70\70\70" "\70<\34\36\17\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\340" "\370\374~\37\7\3\3\1\1\1\1\3\3\7\3\3\0\0\0\0\0\0\377\377\377\377p\70\34\36\16\16" "\16\16\36>|\370\360\340\200\0\0\0\0\0\37\377\377\377\300\0\0\0\0\0\0\0\0\0\0\377\377\377" "\177\0\0\0\0\0\0\0\3\7\17\37\36<\70\70\70\70<\36\37\17\7\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\300\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\301\361\377\377\77\7\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\377\77\7\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\300\360\376\377\77\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\60>\77\77\17\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0\0\0\0\360" "\374\376\377\17\3\3\1\1\1\1\3\3\17\377\377\376x\0\0\0\0\0\0\0\3\207\317\337\376|\70\70" "px\370\374\357\317\207\1\0\0\0\0\0\0\370\376\377\377\3\1\0\0\0\0\0\0\0\0\1\7\377\377" "\376\370\0\0\0\0\0\3\7\17\37\36<<\70\70\70\70<\34\36\37\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300" "\300\300\200\200\0\0\0\0\0\0\0\0\0\0\340\370\376\377\17\7\3\3\1\1\1\3\3\17\37\376\374\360" "\200\0\0\0\0\0\17\77\177\377\360\340\300\300\200\200\200\300\300\340p\377\377\377\377\0\0\0\0\0\0\0" "\0\0\1\1\3\3\3\3\3\1\1\0\340\377\377\177\17\0\0\0\0\0\0\14\36\36\34<\70\70\70\70" "<\34\36\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\36\77\77\77" "\77\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\36\77\77\77\77\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\36\77\77\77\77\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\34>>\376" "\376\376x\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\60\70\36\17\7\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\200\300\300\340\340\360px<<\36\36\0\0p\360\370\374\334\236\216\17\7\7\3\3" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\7\17\16\36<\70xp\360\340\340\300\200" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\17\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200" "\200\200\0\0\0\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\0\0\0\34\34\34" "\34\34\34\34\34\34\34\34\34\34\34\34\34\34\34\34\34\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0<\70xp" "\360\340\340\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7" "\16\16\34<\270\370\360\360\340\340\0\0\0\0\200\200\300\300\340\360\360x\70<\34\36\17\7\7\3\3\1" "\0\0\0\0\17\17\7\3\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\340\360ppp" "p\360\360\340\340\300\200\0\0\0\0\0\0\0\3\7\7\3\1\0\0\0\0\0\0\0\0\1\203\377\377\377" "|\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\370\370<\37\17\7\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\17\17\17\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\36\77\77" "\77\77\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\300\360\370" ">\36\17\7\3\3\1\201\201\301\301\303\303\307\317\376\374\370\300\0\376\377\377\1\0\0\0\370\376\377\377\17" "\3\3\1\1\1\1\201\377\377\377\377\0\7\77\377\374\340\300\0\1\3\7\17\37\36\34\34\34\16\16\7\37" "\37\37\37\0\0\0\0\1\3\7\17\36\36\34<\70\70\70\70\70<\34\34\36\10\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\200" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\77\377\374\340\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\360\376\177\17\1\0\0\7\77\377\374\360\200\0\0\0\0\0\0\0\200\360\374" "\377\77\37\34\34\34\34\34\34\34\34\37\177\377\374\360\200\0\0\0<\77\77\17\1\0\0\0\0\0\0\0" "\0\0\0\0\0\1\17\77\77<\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\377\377\377" "\377\1\1\1\1\1\1\1\1\3\3\7\17\377\377\374\360\0\0\0\0\377\377\377\377\70\70\70\70\70\70\70" "\70x|\376\357\357\307\203\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\1\203\377\377" "\377x\0\0\0\77\77\77\77\70\70\70\70\70\70\70\70\70<\34\36\37\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300" "\300\300\300\300\200\200\0\0\0\0\0\0\0\300\360\374\376\77\17\7\3\3\1\1\1\1\3\3\7\17\37>" "\34\30\0\0\376\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\177\377\377" "\370\300\200\0\0\0\0\0\0\0\0\0\0\0\0\200\0\0\0\0\0\0\0\3\7\17\17\36\36<<\70" "\70\70\70\34\34\36\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0\0\0\0\377\377\377" "\377\1\1\1\1\1\1\1\3\3\7\17\77\376\374\360\300\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\1\377\377\377\374\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377" "\77\3\0\0\0\77\77\77\77\70\70\70\70\70\70<<\34\36\17\17\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\300\300\0\0\0\0\377\377\377\377\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\377\377\377\377ppppppppppppp\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\70\70\70\70\70\70\70" "\70\70\70\70\70\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\0\0\0\377\377" "\377\377\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0\0\0\0\377\377\377\377\70\70\70\70\70\70" "\70\70\70\70\70\70\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300" "\300\300\300\300\200\200\0\0\0\0\0\0\0\300\360\374\376\37\17\7\3\3\1\1\1\1\3\3\7\17\37\37" "\16\0\0\0\376\377\377\377\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\0\0\7\177\377\377" "\360\300\0\0\0\0\0\0\1\1\1\1\1\1\377\377\377\377\0\0\0\0\1\3\7\17\17\36\34<\70\70" "\70\70\70<\34\36\37\17\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\377\377\377\377ppppppp" "ppppp\377\377\377\377\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0\1\1\1\1\1\1\377\377\377\377\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70\70\77\77\77" "\77\70\70\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\0\0\0\0" "\0\0\0\1\1\1\1\1\1\377\377\377\377\1\1\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\177\0\0\0" "\0\0\0\0\0\4\17\36\36<\70\70\70\70<\36\37\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300@\0\0\0\377\377\377\377\0\0\0\0\200\300\340\360\370|>\17\7\3\1" "\0\0\0\0\0\377\377\377\377\360x<\376\377\367\303\201\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\1\7\17\77~\374\360\340\300\0\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0" "\0\0\1\3\17\37\77>\70\60 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\77\77\77\77\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\300\300\0\0\377\377\377\377\376\370\340\200\0\0\0\0\0\0\200\340\370~\377\377" "\377\377\0\0\377\377\377\377\0\3\17\77\376\370\340\360\374~\37\7\1\0\377\377\377\377\0\0\377\377\377\377" "\0\0\0\0\0\3\7\3\0\0\0\0\0\0\377\377\377\377\0\0\77\77\77\77\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\0\0\377\377\377" "\377\77\376\370\340\300\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\377\377\377\377\0\0\3\17\37\177\374" "\360\300\200\0\0\0\377\377\377\377\0\0\0\377\377\377\377\0\0\0\0\0\0\1\7\37\77\376\370\340\377\377" "\377\377\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\3\17\77\77\77\77\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300" "\300\300\300\200\200\0\0\0\0\0\0\0\0\340\370\374\376\37\17\7\3\3\1\1\1\3\3\7\17\37\376\374" "\370\340\0\0\376\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\7\177\377\377" "\370\300\0\0\0\0\0\0\0\0\0\0\0\200\360\377\377\177\7\0\0\0\1\3\7\17\37\36\34<\70\70" "\70\70<\34\36\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\377\377\377" "\377\1\1\1\1\1\1\1\1\3\3\7\17\377\376\374\360\0\0\0\0\377\377\377\377\340\340\340\340\340\340\340" "\340\340\360x|\77\77\17\3\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300" "\300\300\300\200\200\0\0\0\0\0\0\0\0\300\370\374\376\37\17\7\3\3\1\1\1\3\3\7\17\37\376\374" "\370\340\0\0\376\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\376\0\17\177\377\377" "\360\200\0\0\0\0\0\0\0\0\0\0\0\200\360\377\377\177\17\0\0\0\1\7\17\37\37><\70\370\370" "\370\70<<\36\17\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\37\36\34\34\34\34\34" "\34\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\377\377\377" "\377\1\1\1\1\1\1\1\1\3\3\7\17\377\377\374\360\0\0\0\0\377\377\377\377\340\340\340\340\340\340\340" "\340\340\360x|\77\37\17\3\0\0\0\0\377\377\377\377\0\0\0\0\0\0\1\7\37\177\374\360\300\0\0" "\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\1\17\77\77>\70 \0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300" "\300\300\300\200\200\200\0\0\0\0\0\0\0\0\360\374\376\377\7\3\3\1\1\1\1\1\3\3\7\17\37\16" "\0\0\0\0\0\0\1\3\7\17\37\36<\70xxp\360\340\340\300\300\200\0\0\0\0\0\0\0\200\200" "\0\0\0\0\0\0\0\0\0\0\0\1\3\207\377\377\376x\0\0\0\2\7\17\37\36\34<\70\70\70\70" "\70<<\34\36\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\1\1\1\1" "\1\1\1\1\1\377\377\377\377\1\1\1\1\1\1\1\1\1\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\377\377\377" "\377\200\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\177\0\0\0\0\3\7\17\17\36\34<\70\70\70" "\70\70<\36\37\17\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300@\0\0\7\77\377" "\376\360\200\0\0\0\0\0\0\0\0\0\200\360\376\377\37\3\0\0\0\0\0\1\17\177\377\374\340\0\0\0" "\0\0\340\374\377\77\7\0\0\0\0\0\0\0\0\0\0\0\3\37\377\377\370\300\370\377\177\17\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\7\77\77\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\300\300\0\37\377\377\370\0\0\0\0\0\200\370\377\376\340\0\0\0\0\0\360" "\377\377\7\0\0\17\377\377\374\0\0\300\374\377\17\1\37\377\376\360\0\0\370\377\377\3\0\0\0\0\3\377" "\377\377\374\377\17\0\0\0\0\1\37\377\377\370\377\77\0\0\0\0\0\0\0\0\77\77\17\0\0\0\0\0" "\0\0\0\1\37\77\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\0\0\0\0\1\7" "\37\177\374\370\340\200\0\0\0\300\360\374\177\37\17\3\0\0\0\0\0\0\0\0\0\0\1\7\217\377\376\374" "\377\337\7\1\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\77\37\7\3\17\37\177\374\370\340\200\0" "\0\0\0\0\0\60<\77\77\17\3\0\0\0\0\0\0\0\0\1\7\37\77>\70 \0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\300\300\300\300\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\300\300@\0\0\1\7\17\77\377\374\360\300\0\0\0\0\0\0\300\360\376\177\37" "\7\1\0\0\0\0\0\0\0\0\3\17\77\377\374\360\360\374\377\77\17\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\0\0\1\1\1" "\1\1\1\1\1\1\1\1\1\201\341\371\377\77\37\7\1\0\0\0\0\0\0\0\0\0\0\0\200\340\360\374" "\77\37\7\1\0\0\0\0\0\0\0\0\0\0\0\200\300\360\374~\37\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\70>\77\77;\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\70\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360ppp" "pppppppp\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\0\0\0\0\0\0`\340\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1" "\17\77\377\374\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\370" "\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\177\376\370\300\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\77\377\374p@\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0ppppppppp" "pp\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\200\300\360\374>\37\17\77~\370\360\300\0\0\0\0\0\0\0\0\0\0\0\16\17\7\3\0\0\0\0" "\0\0\1\7\17\17\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200\200\200" "\200\200\200\200\200\200\200\200\200\200\0\0\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\3\0\0\0\0\0\0\0\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\77\377\376\370\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\177\376" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\300\200\0\0" "\0\0\0\0\0\0\0\1\3\7\3\1\201\201\201\201\201\201\201\203\207\377\377\376\370\0\0\0\0\360\370\374" "\376\17\7\7\3\3\3\3\3\3\3\203\303\377\377\377\377\0\0\0\0\1\3\7\17\17\36\34\34\34\34\34" "\16\16\7\7\3\37\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\0\377\377\377\377\34\6\3\3\3\3\3" "\3\3\7\17\77\376\374\370\300\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377" "\77\0\0\0\0\77\77\77\7\7\16\34\34\70\70\70\70<\34\36\17\17\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\300\200\0" "\0\0\0\0\0\300\370\374\376\37\7\3\3\1\1\1\1\1\1\1\3\7\17\17\6\0\0\0\0\37\177\377" "\377\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\17\16\36\36\34" "\34\34\34\36\16\17\7\7\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\0\0\0\0\0\0\0" "\0\0\200\200\200\200\200\200\200\200\0\0\0\377\377\377\377\0\0\0\0\300\370\374\376\77\17\7\3\3\3\3" "\3\3\7\7\36\377\377\377\377\0\0\0\0\77\377\377\377\300\0\0\0\0\0\0\0\0\0\0\200\377\377\377" "\377\0\0\0\0\0\1\7\17\37\37><<\70\70\70\34\34\16\7\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\200\200\0\0" "\0\0\0\0\0\300\370\376\377\317\307\303\301\301\301\301\301\301\301\303\307\377\377\374\360\0\0\0\0\37\377\377" "\377\341\201\1\1\1\1\1\1\1\1\1\1\1\201\1\1\0\0\0\0\0\0\1\3\7\17\17\36\36\34\34" "\34\34\34\16\16\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\340\340\360pppp\360\340\340\300\200\0\0\0\0\0" "\0\0\0\376\377\377\377\3\0\0\0\0\0\0\0\0\1\7\1\0\0\0\7\7\7\7\7\377\377\377\377\7" "\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\200\200\0\200\300\300\300" "\300\300\200\0\0\370\376\377\377\7\3\1\1\1\1\1\3\7\377\377\377\371\1\1\1\1\1\0\0\0\303\347" "\367\77\36\34\34\34\34\34\36\17\17\7\3\0\0\0\0\0\0\0\200\340\363\367\77\37\16\16\16\16\16\16" "\16\16\16\16\36\34\374\374\370\340\0\0\3\17\17\37\36\34<\70\70\70\70\70\70\70\70\34\34\36\17\7" "\3\1\0\0\0\0\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\0\0\0\0\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\0\377\377\377\377\34\16\7\7\3\3" "\3\3\3\7\17\377\377\374\360\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\360" "\360\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\201\201\201\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\3\3\3\3\3\3\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70\70\70\77\77" "\77\77\70\70\70\70\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\360\360\340\0\0\0\0\0\0\0\0\0\0" "\0\200\200\200\200\200\200\200\200\200\201\201\201\200\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3" "\3\3\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\10\34>" "\37\17\7\0\0\0\0\0\0\0\0\0\360\360\360\360\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\200\200\200" "\200\0\0\0\0\0\377\377\377\377\0\0\200\300\340\360x<>\36\17\7\3\1\0\0\0\0\0\0\377\377" "\377\377\36\17\7\7\17\77~\374\360\340\300\200\0\0\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0" "\0\0\1\7\17\37\77<\70\60 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0ppppppp\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\70\70\70\70\70\70\70\77\77\77\77\70\70\70\70\70\70\70\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\200\300\300\300\300\300\200\0\0\200\300\300\300\300\300" "\300\0\0\0\377\377\377\377\7\1\1\1\1\377\377\377\376\17\3\1\1\1\377\377\377\377\0\0\377\377\377\377" "\0\0\0\0\0\377\377\377\377\0\0\0\0\0\377\377\377\377\0\0\37\37\37\37\0\0\0\0\0\37\37\37" "\37\0\0\0\0\0\37\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300" "\300\300\0\0\200\200\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\377\377\377\377\16\7\3\3\1\1" "\1\1\1\3\7\377\377\376\370\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\0\37\37\37\37\0\0\0\0\0\0\0\0\0\0\0\37\37\37\37\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\200\0\0\0" "\0\0\0\0\300\370\374\376\37\7\3\3\1\1\1\1\1\1\3\7\17\77\377\376\370\300\0\0\37\177\377\377" "\340\200\0\0\0\0\0\0\0\0\0\0\200\340\377\377\177\17\0\0\0\0\1\3\7\7\17\16\36\34\34\34" "\34\36\16\17\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300" "\300\0\0\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\377\377\377\377\16\3\3\1\1\1\1" "\1\1\3\3\17\77\377\376\370\300\0\0\0\377\377\377\377\200\0\0\0\0\0\0\0\0\0\0\200\340\377\377" "\177\17\0\0\0\377\377\377\377\3\7\16\16\34\34\34\34\36\36\17\17\7\3\1\0\0\0\0\0\77\77\77" "\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\200\200\0\300\300" "\300\300\0\0\0\340\370\376\377\37\7\3\1\1\1\1\1\1\1\3\7\16\377\377\377\377\0\0\0\37\377\377" "\377\340\200\0\0\0\0\0\0\0\0\0\0\300\377\377\377\377\0\0\0\0\0\1\3\7\17\17\36\36\34\34" "\34\34\16\16\7\3\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "\300\300\300\0\0\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\377\377\377\377>\17\7\3\3" "\1\1\1\1\1\1\3\7\3\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\37\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\300\200\200\0" "\0\0\0\0\0\0\0<\177\377\377\343\301\301\201\201\201\1\1\3\3\7\37\7\2\0\0\0\0\0\200\300" "\200\0\1\1\1\3\3\3\7\7\7\17\36\376\374\374\360\0\0\0\0\0\3\7\7\17\16\36\36\34\34\34" "\34\34\36\16\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200" "\200\200\200\200\376\377\377\217\200\200\200\200\200\200\200\0\0\0\0\0\0\0\3\3\3\3\3\377\377\377\377\3" "\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\3\17\37\37><\70\70\70\70\34\34\36\16\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\200\200\200" "\200\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377\0\0\0\0\0\0\3\17\37\37><\70\70\70" "\70\34\34\16\7\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\0\0\0\3\17\177\377\374\340\200\0\0\0\0" "\0\0\0\0\300\370\377\77\7\0\0\0\0\0\0\0\1\17\77\377\376\360\300\0\200\360\374\177\37\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\7\77\77>\77\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\200\200\200\0\7\377\377\374\200\0\0\0\0\300\374\376\376\370\300\0\0\0\0\300\377\377\37\0\0\0\37\377" "\377\360\0\300\374\177\17\0\3\37\377\374\340\0\340\377\377\17\0\0\0\0\0\3\77\77>\77\7\0\0\0" "\0\0\1\17\77\77\77\77\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200" "\200\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\1\7\17\37~\374\360\340\200\200" "\340\360\370~\37\17\3\1\0\0\0\0\0\0\0\0\0\200\300\340\373\177\77\77\177\373\360\340\200\0\0\0" "\0\0\0\0\0 \60<>\37\17\3\1\0\0\0\0\0\3\7\37\77<\70\60\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200" "\200\200\0\0\0\1\7\77\377\376\360\300\0\0\0\0\0\0\0\0\340\374\377\77\17\1\0\0\0\0\0\0" "\0\3\37\177\376\370\300\0\0\340\370\377\77\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\377\377" "\377\77\17\1\0\0\0\0\0\0\0\0\70\37\17\7\1\0\0\0\0\0\0" "\0\0\0\0\0\70<\77\77\77;\71\70\70\70\70\70\70\70\70\70\70\70\70\70\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200" "\300\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\370\376\377\377\7\3\1\1\1\1\1\1\1" "\0\0\0\0\0\0\0\0\0\200\300\377\377\177\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7" "\7\17=\375\370\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\37\77~xxpppppp" "\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\37\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\200" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\3\3\17\377\377\376\360\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\177\377\377\300\200\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\360\370\375\37\17\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0ppppppxx>\77\37\17\3\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200" "\200\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\300\200\0\0\0\6\17\17\3\3\1\1\1\3\7\7" "\17\36\36\34\34\36\16\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; /* Fontname: -FreeType-Inconsolata LGC-Medium-R-Normal--44-440-72-72-P-201-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 18/658 BBX Build Mode: 3 */ const uint8_t u8x8_font_inr33_3x6_n[3892] U8X8_FONT_SECTION("u8x8_font_inr33_3x6_n") = " :\3\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\30\370\370\370\0\0\0\0\0\0\0\0\0\0\0\0\16\17\16\36\34\34\70\270\360\377\377" "\367\260\70\30\34\34\16\16\17\10\0\0\0\0\0`p\370|\37\17\3\1\0\3\7\37>\374x`\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\370\0\0\0\0\0\0" "\0\0\0\0\0ppppppppp\377\377\377\377pppppppp\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0<~\376\376\374x\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0 x<\37\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\36\77\77\77\77\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\200\360\360\340 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\177\17\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\376\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0" "\0\300\360\374\377\77\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\370\376\77\17\3\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\300\360" "\374\376\37\17\7\3\1\1\1\3\3\207\377\376\374\360\300\0\0\0\0\376\377\377\377\0\0\0\0\300\340\360" "x\36\17\7\1\1\377\377\377\374\0\0\0\7\77\377\377\370\374\36\17\7\1\0\0\0\0\0\200\360\377\377" "\77\7\0\0\0\0\0\0\3\7\17\37\36<\70\70\70<\34\36\17\7\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300" "\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\14\16\16\7\7\7\7\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\14" "\36\17\7\3\3\1\1\1\1\3\3\7\37\377\376\374\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\200\300\340\360\374\77\37\17\1\0\0\0\0\0\0\0\0\300\340\360\370<\36\17\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\70>\77\77;\71\70\70\70\70\70\70\70\70\70\70\70\70\70\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300" "\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\2\7\7\3\3\1\1\1\1\3\3\7\17\377\377\374\360" "\0\0\0\0\0\0\0\0\0\0\0\70\70\70\70x||\376\357\347\307\201\0\0\0\0\0\0\0\0\0" "\200\0\0\0\0\0\0\0\0\0\0\201\377\377\377\376\0\0\0\0\0\0\4\16\37\36\34<\70\70\70\70" "<<\36\37\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\200\300\360\370>\17\377\377\377\377\0\0\0\0\0\0\0\0\0\200\340\360|>\17\7\1\0" "\0\0\377\377\377\377\0\0\0\0\0\0\0\34\37\37\37\35\34\34\34\34\34\34\34\34\377\377\377\377\34\34" "\34\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\300\0\0\0\0\0\0\0\377\377\377\377\1\1\1\1\1\1\1\1\1\1\1\1\1" "\0\0\0\0\0\0\0\77\177\77\37\34\16\16\16\16\16\36\36<\374\370\360\340\200\0\0\0\0\0\0\0" "\200\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\177\0\0\0\0\0\3\7\17\37\36<<\70\70\70" "\70<\34\36\17\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\340" "\370\374~\37\7\3\3\1\1\1\1\3\3\7\3\3\0\0\0\0\0\0\377\377\377\377p\70\34\36\16\16" "\16\16\36>|\370\360\340\200\0\0\0\0\0\37\377\377\377\300\0\0\0\0\0\0\0\0\0\0\377\377\377" "\177\0\0\0\0\0\0\0\3\7\17\37\36<\70\70\70\70<\36\37\17\7\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\300\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\301\361\377\377\77\7\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\377\77\7\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\300\360\376\377\77\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\60>\77\77\17\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0\0\0\0\360" "\374\376\377\17\3\3\1\1\1\1\3\3\17\377\377\376x\0\0\0\0\0\0\0\3\207\317\337\376|\70\70" "px\370\374\357\317\207\1\0\0\0\0\0\0\370\376\377\377\3\1\0\0\0\0\0\0\0\0\1\7\377\377" "\376\370\0\0\0\0\0\3\7\17\37\36<<\70\70\70\70<\34\36\37\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300" "\300\300\200\200\0\0\0\0\0\0\0\0\0\0\340\370\376\377\17\7\3\3\1\1\1\3\3\17\37\376\374\360" "\200\0\0\0\0\0\17\77\177\377\360\340\300\300\200\200\200\300\300\340p\377\377\377\377\0\0\0\0\0\0\0" "\0\0\1\1\3\3\3\3\3\1\1\0\340\377\377\177\17\0\0\0\0\0\0\14\36\36\34<\70\70\70\70" "<\34\36\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\36\77\77\77" "\77\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\36\77\77\77\77\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; /* Fontname: -FreeType-Inconsolata LGC-Medium-R-Normal--62-620-72-72-P-281-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 191/658 BBX Build Mode: 3 */ #ifdef U8G2_USE_LARGE_FONTS const uint8_t u8x8_font_inr46_4x8_f[57348] U8X8_FONT_SECTION("u8x8_font_inr46_4x8_f") = " \377\4\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\370\374\374\374\370\360\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\377\377\377\377\377\177\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\77\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\17\17\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\370\370\360\340\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\7\7\7\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\360\0\0\0\0\0\0\0\0\360\370\370\370\360\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\37\37\0\0\0\0\0\0\0\0\37\37\37\37\37\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\0\0\0\0\0\0\0\0\300\300\300\300\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377\1\0\0\0\0\0\0\0\377\377\377\377\17\0" "\0\0\0\0\0<<<<<<<<\377\377\377\377=<<<<<<<\376\377\377\377\77<<" "<<<<\0\0\0\0\0\0\0\0\377\377\377\377\3\0\0\0\0\0\0\0\374\377\377\377\37\0\0\0" "\0\0\0\0\70\70\70\70\70\70\70\376\377\377\377\77\70\70\70\70\70\70\70\374\377\377\377\37\34\34\34\34" "\34\34\34\0\0\0\0\0\0\0\376\377\377\377\7\0\0\0\0\0\0\0\370\377\377\377\37\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\2\3\3\3\3\0\0\0\0\0\0\0\0\3\3\3\3\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\370\10\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\340\360\370\374\374>\36\37\17\17\377\377\377\377\17\17\37\37\36>~\374\374\370" "p \0\0\0\0\0\37\177\377\377\377\370\340\300\200\0\0\377\377\377\377\0\0\0\0\0\0\0\0\1\0" "\0\0\0\0\0\0\0\0\0\1\3\3\7\17\17\37\37\37\377\377\377\377||\370\370\370\360\360\340\340\300" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\1\3\17\377\377" "\377\377\374\0\0\0\30>\77~\374\370\370\360\360\340\340\340\377\377\377\377\340\340\340\360\360\370\374\177\77\77" "\37\7\1\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\77\77\77\77\1\1\1\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300" "\300\300\0\0\360\374\377\377\17\7\7\3\7\7\37\377\377\377\374\360\0\0\0\0\0\300\360\374\377\177\37\7" "\1\0\0\0\3\17\77\77~\370\370\360\370\370\374\177\177\77\17\3\200\340\370\374\377\77\17\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\370\376\177\37\7\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\360\374\377\77\17\7\1\0\200\340\370\374|>\36\36\36>|" "\374\370\340\200\0\0\0\200\340\370\376\177\37\17\3\0\0\0\0\0\0\77\377\377\377\340\200\200\200\200\200\340" "\377\377\377\77\0\4\6\7\7\7\1\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\7\7\7\7\7" "\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\370\374\376\377\77\37\17\17\17\17\17\17\37\177\377\376\374\370\360\0\0\0\0" "\0\0\0\0\0\0\0\0\17\177\377\377\377\370\340\200\0\0\0\0\200\300\360\377\377\377\177\37\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\343\367\377\177\177\377\376\376\377\357\317\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\300\370\374\377\377\177\17\7\1\0\0\0\0\1\3\17\37\77\177\376\374\360\340\300\200\300\340\370" "\377\377~\34\37\177\377\377\377\374\340\300\200\200\0\0\0\0\0\200\200\300\300\341\363\377\377\177\177\377\377\377" "\343\300\200\0\0\0\0\3\3\7\7\17\17\17\17\17\17\17\17\17\17\7\7\3\3\1\0\0\0\0\3\17" "\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\360\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\37\37\37\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\360\360\370x`" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\374\376\177\77\17\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\377\377\377\37\3\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\370\377\377\377\377\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\77\377\377\377\377\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\7\37\377\377\377\377\370\300\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\37\77\377\377\374\370\360\340\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\17\37\77\77~\374\70" "\10\0\0\0\0\0\0\0\360\370\370\360\360\340\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\1\3\7\7\17\37\177\377\376\374\370\340\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\377\377\377\376\370\300\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\377\377\377\377\376\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\374\377\377\377\77\17\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\374\376\377\77\37\17\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\10\370|~\77\37\37\17\7\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\340\340\340\340 \0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\360\340\340\300\300\200\200\0\0\0\0\17\377\377\377\177\0\0\0\0\200\200\300\300\300\340" "\340\200\0\0\0\1\3\3\3\7\7\7\7\17\17\216\376\374\377\177\377\374\376\316\17\17\7\7\7\7\3\3" "\3\1\0\0\0\0\0\0\200\300\360\370\374\376\77\37\7\3\0\0\0\3\7\37\77\376\374\370\360\300\200\0" "\0\0\0\0\0\0\0\0\0\1\3\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\36\36\36\36\36\36\36\36\36\36\36\36\377\377\377\377\377\36\36\36\36\36\36\36\36\36\36" "\36\36\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\340\340\340\300\300\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\17\37\377\377\377\377\177\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\360\370~\77\17\7\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0xxxxxxxxxxxxxxxxxxxxxxxxx" "x\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\370\370\360\340\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\3\3\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\370\360\360" " \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\177\17\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\377\377\177\37\7\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\376\377\377\77\17\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\177\17\3\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\340\370\377\377\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\10\36\37\77\77\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\360\370\374\376\177\37\17\7\7\7\3\7\7\7\17\37\77\376\374\370\360\300\0" "\0\0\0\0\0\200\370\377\377\377\177\7\0\0\0\0\0\0\0\0\0\200\300\360\370\374~\37\177\377\377\377" "\374\300\0\0\0\377\377\377\377\377\0\0\0\0\0\200\340\360\370\374\177\37\17\7\1\0\0\0\0\377\377\377" "\377\377\0\0\0\7\177\377\377\377\374\360\370\376\77\37\17\7\1\0\0\0\0\0\0\0\0\0\360\377\377\377" "\377\17\0\0\0\0\0\3\17\37\177\377\377\374\360\340\300\300\200\200\200\200\300\300\340\360\374\377\177\77\17\3" "\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\60x\70<<>\36\37\37\17\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\60|\376~\37\17\17\7\7\7\7\7\7\7\7\17\17\37\177\377\376\374\370\340" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\341\377\377\377\377" "\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\376\177\77\37\17\3\1" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374~\77\37\17\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\340\370\374\377\377\237\217\203\201\200\200\200\200\200\200\200\200\200\200\200\200\200\200\300" "\300\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\14\36\77\37\17\17\7\7\7\7\7\7\7\7\17\17\37\177\377\376\374\370\340\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\377\377\377\177\37\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0>>\36>>\77\77\77\177\377\373\373\361\341\340\200\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\377\377\377\377\370" "\0\0\0\0\0\0@\340\360\374\370\340\340\300\300\200\200\200\200\200\200\300\300\340\360\370\377\377\177\77\37\3" "\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\370\374\177\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\376\77\37\7\3\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\200\340\360\374\376\77\37\7\3\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0<\77\77\77\77=<<<<<<<<<<<<\377\377\377\377\377<<<<" "<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\0\0\0\0\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\0\0\0\0\0\0\0\200\377\377\377\377\377\300\300\300\340\340\340\340\340\340\340\340\300\300\200\200\0\0\0" "\0\0\0\0\0\0\0\0\37\37\37\77\17\17\7\3\3\3\3\1\3\3\3\3\7\17\37\77\377\377\376\374" "\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\0\60x\374\374\374\360\340\340\300\300\200\200\200\200\200\200\300\300\340\360\370\377\377\177\77" "\17\3\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\200\200\200\0\0\0" "\0\0\0\0\0\0\0\0\0\200\340\360\370\374\376\77\37\17\17\7\7\7\3\7\7\7\7\17\37\37\17\6" "\0\0\0\0\0\0\0\300\376\377\377\377\377\3\0\0\200\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0" "\0\0\0\0\0\0\0\377\377\377\377\377\370>\37\17\7\7\3\3\3\3\3\7\7\17\37\177\377\376\374\370" "\340\0\0\0\0\0\0\77\377\377\377\377\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\203\377\377\377" "\377\377\0\0\0\0\0\0\3\17\77\177\377\377\370\360\340\300\300\200\200\200\200\200\300\340\360\370\377\377\177\77" "\17\1\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\303\363\377\377\377\177\17\3" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\377\377\77\17\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\377\77\17\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\377\177\17\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\360\376\377\377\377\37\3\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\4\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\360\374\376\377\177\37\17\7\7\7\7\7\7\7\7\17\37\377\377\376\374\370\340" "\0\0\0\0\0\0\0\0\17\77\377\377\377\374\360\300\200\0\0\0\0\0\0\0\200\340\370\377\377\177\77\17" "\0\0\0\0\0\0\0\0\0\0\200\301\343\363\367\177\77\37\37\36>>\177\177\377\367\363\341\300\200\0\0" "\0\0\0\0\0\0\340\374\376\377\377\37\3\1\0\0\0\0\0\0\0\0\0\0\0\1\3\17\377\377\377\376" "\370\0\0\0\0\0\7\37\177\377\377\377\370\360\340\300\300\200\200\200\200\200\200\300\300\340\360\374\377\377\177\77" "\17\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\360\374\376\376\177\37\17\7\7\7\3\7\7\7\17\37\77\177\376\374\370\360\200" "\0\0\0\0\0\0\0\376\377\377\377\377\303\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\377\377\377\377" "\374\0\0\0\0\0\0\1\17\37\177\377\377\374\370\360\340\300\300\300\300\300\340\340\360\360x>\377\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\3\3\3\3\3\3\1\1\0\0\340\377\377\377\377" "\77\0\0\0\0\0\0\0\200\300\340\360\340\300\300\200\200\200\200\200\200\300\300\340\360\370\376\177\77\37\7\1" "\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\360\360\360\340\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\17\17\17\17\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\360\360\360\340\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\7\7\7\3\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\340\340\340\300\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\17\37\37\37\37\37\17\7\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\360\360\340\300\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\237\377\377\377\377\37\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0 p\370~\77\17\7\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\340\360\360\370" "\370||\0\0\0\0\0\0\200\200\300\340\340\360\360\370\370||>>\37\37\17\17\7\7\3\1\1\0" "\0\0\0\0<>~\377\377\377\367\347\343\303\201\201\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\1\1\3\7\7\17\17\37\77>||\370\370\360\360\340\300\300\200\200\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\17\37\37\77" ">|\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360" "\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0xxxxxxxxxxxxxxxxxxxxxxxxxxx" "xxx\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\370\360\360\340\340\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\1\1\3\3\7\7\17\17\37\37>>||\370\360\360\340\340\300\300\200\200\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\203\207\307\317\377\377\376\376" "\374|x\0\0\0\0\0\0\0\200\200\300\300\340\340\360\370\370||>>\37\17\17\7\7\3\1\1\0" "\0\0\0\0\370\374|>>\37\37\17\17\7\3\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\340\340\360\360\360\370\370\370x\370\370\370\370\360\360\340\340\300\200\0\0" "\0\0\0\0\0\0\4\16\37\77\37\7\3\3\1\0\0\0\0\0\0\0\0\1\1\3\17\377\377\377\376\370" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\374\377\377\377\77\17" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\376\377\177\37\17\7\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\360\360\360\360\360\300\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7\7\7\7\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\200\0\0\0\0" "\0\0\0\0\0\0\0\300\340\370\374\374>\37\37\17\7\7\7\7\3\7\7\7\7\17\17\37\77\376\374\370" "\360\300\0\0\200\370\377\377\177\7\1\0\0\0\0\0\0\300\340\360\360\370x|<<<<<<\377\377" "\377\377\376\0\377\377\377\377\0\0\0\0\0\0\0\374\377\377\377\203\1\0\0\0\0\0\0\0\0\300\377\377" "\377\377\377\0\3\77\377\377\376\340\200\0\0\0\0\1\7\17\37\77>|||||<>\37\17\77\77" "\77\77\77\0\0\0\1\7\17\77\177\376\374\370\360\340\340\300\300\200\200\200\200\200\200\200\200\300\300\340\340\200" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\300\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\374\377\377\377\377\370\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\177\17\1\3\37\377\377\376\370\300\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\360\376\377\377\37\3\0\0\0\0\0\0\7\37\377\377\376\370\300\0\0\0" "\0\0\0\0\0\0\0\340\374\377\377\177\77<<<<<<<<<<<<\77\177\377\377\376\370\300" "\0\0\0\0\300\370\377\377\377\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\177\377\377" "\376\370\300\0\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7" "\7\7\7\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\7\7\7\7\7\7\17\37\77\377\377\376\374\370" "\300\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370\377\377\377\77" "\17\0\0\0\0\377\377\377\377\377\36\36\36\36\36\36\36\36\37\37\37\37\77\77\77\177\377\373\363\341\340\300" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\377\377\377" "\377\374\0\0\0\377\377\377\377\377\200\200\200\200\200\200\200\200\200\200\300\300\300\300\300\340\360\370\376\377\177\77" "\37\7\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\200\0\0\0" "\0\0\0\0\0\0\0\0\300\340\370\374\376\376\77\37\17\17\7\7\7\7\3\7\7\7\7\17\37\77\177\376" "\374\370\360\300\0\200\370\377\377\377\377\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3" "\1\1\0\0\0\377\377\377\377\377\203\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\7\177\377\377\377\377\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\3\17\37\77\177\377\376\370\360\340\340\300\300\200\200\200\200\200\200\300\300\340\360\360\374" "\374x\70\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\7\7\7\7\7\7\17\37\77\177\376\376\374\360\340\200" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\77\377\377\377" "\376\360\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\377" "\377\17\0\0\0\377\377\377\377\377\200\200\200\200\200\300\300\300\300\300\300\340\340\360\370\374\376\177\77\37\17\3" "\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\3\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200" "\200\200\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\0\0\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\377\377\377\377\377\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\0\0\0" "\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0" "\0\0\0\0\0\0\0\300\340\370\374\374~\77\37\17\17\7\7\7\7\3\7\7\7\7\17\17\37\77\376\376" "\374x \0\200\370\377\377\377\377\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1" "\0\0\0\0\377\377\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340" "\340\340\340\0\7\177\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\377\377" "\377\377\377\0\0\0\3\17\37\77\177\377\374\370\360\340\340\300\300\200\200\200\200\200\200\200\300\300\340\340\377\377" "\377\377\177\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\7\3\3\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300" "\300\300\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\377\377\377\377\377\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\377\377\377" "\377\377\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0" "\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\377\377\377\377\377\3\3\3\3\3\3\3\3\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\377\377\377\377\377\200\200\200\200\200\200\200\200\200\0\0" "\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\377\377\377\377\377\3\3\3\3" "\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0@\340\360\370\360\340\300\300\200\200\200\200\200\300\300\340\360\377\377\377\177\37\3\0\0\0\0" "\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300" "\300@\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374~\77\37\17\7\3" "\0\0\0\0\0\377\377\377\377\377\0\0\0\200\300\340\360\370\374\177\77\37\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\370~\77\37\37\177\377\377\371\360\340\200\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\3\7\37\77\377\377\374\370\360\300\200\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\1\7\17\77\177\377\376\374\370\340" "\300\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\7" "\7\7\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200" "\200\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300" "\300\300\300\0\0\377\377\377\377\377\377\374\360\300\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\377" "\377\377\377\0\0\377\377\377\377\377\3\17\77\377\377\374\360\300\0\0\0\0\200\340\370\376\377\77\17\3\377\377" "\377\377\377\0\0\377\377\377\377\377\0\0\0\0\3\17\77\377\377\370\370\376\377\77\17\3\0\0\0\0\377\377" "\377\377\377\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\3\7\7\3\0\0\0\0\0\0\0\0\377\377" "\377\377\377\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\377\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300" "\300\300\0\0\0\377\377\377\377\377\377\377\374\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\3\17\37\177\377\376\370\340\200\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\1\7\37\177\377\377\374\360\300\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\374\370\340\200\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\37\177\377\377\377\377" "\377\377\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370\374\376\177\77\37\17\7\7\7\7\7\7\7\7\17\17\37\77\376\376\374\370" "\340\300\0\0\300\374\377\377\377\377\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\377\377" "\377\377\377\360\377\377\377\377\377\201\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377" "\377\377\377\377\7\177\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\370\377" "\377\377\377\37\0\0\3\17\37\77\177\377\374\370\360\340\300\300\200\200\200\200\200\300\300\340\360\370\374\377\177\77" "\37\7\1\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\7\7\7\7\7\17\37\77\377\377\376\374" "\360\300\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377" "\377\177\0\0\0\0\377\377\377\377\377xxxxxxxxxx||||~>\77\37\37\17\7" "\1\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370\374\376\177\77\37\17\7\7\7\7\7\7\7\7\17\37\37\177\376\376\374\370" "\340\300\0\0\200\374\377\377\377\377\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\377\377" "\377\377\376\360\377\377\377\377\377\201\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377" "\377\377\377\377\17\377\377\377\377\377\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\374\377" "\377\377\377\77\0\0\7\17\77\177\377\376\374\360\340\300\200\200\200\200\0\200\200\200\300\300\340\360\374\377\377\177" "\37\7\1\0\0\0\0\0\0\0\0\1\3\7\7\7\17\17\377\377\377\377\217\17\7\7\7\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\17\37\37\37>>><>>>>" ">>\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\7\7\7\7\7\17\37\77\377\377\376\374" "\360\300\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377" "\377\177\0\0\0\0\377\377\377\377\377xxxxxxxxx\370\374\374\374\374~>\77\37\37\17\7" "\1\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\374\360\340\200\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\376\370" "\340\200\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7" "\7\7\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0" "\0\0\0\0\0\0\0\200\360\370\374\376\377\37\17\17\7\7\7\7\3\7\7\7\7\17\17\37\77~\376<" "\30\0\0\0\0\0\0\17\177\377\377\377\374\360\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\1\3\7\7\17\17\37\37\37>>~||\370\370\370\360\360\340\300\300" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\377\377" "\377\376\374\0\0\0p\374\376\374\370\360\340\340\300\300\200\200\200\200\200\200\200\200\300\300\340\360\370\374\377\377" "\177\37\7\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\300\0\3\3\3\3\3\3\3\3\3\3\3\3\3\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3" "\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300" "\300\300\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\1\17\77\177\377\377\374\360\340\340\300\300\200\200\200\200\200\200\300\300\340\360\370\377\377\177\77" "\37\7\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "\300\300\300\300\1\17\177\377\377\377\370\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377" "\377\77\7\0\0\0\0\3\37\377\377\377\376\360\200\0\0\0\0\0\0\0\0\0\0\200\360\376\377\377\77\17" "\1\0\0\0\0\0\0\0\0\0\7\77\377\377\377\374\340\0\0\0\0\0\0\300\370\377\377\177\17\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\1\17\177\377\377\377\370\300\200\360\376\377\377\37\3\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\37\377\377\377\377\377\77\7\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\300\300\300\300\377\377\377\377\360\0\0\0\0\0\0\0\0\0\340\376\376\370\300\0\0\0\0\0\0\0\0\340" "\377\377\377\37\0\177\377\377\377\374\0\0\0\0\0\0\340\376\377\177\377\377\377\374\300\0\0\0\0\0\360\377" "\377\377\17\0\0\0\37\377\377\377\376\200\0\0\360\377\377\77\7\0\0\17\377\377\377\374\340\0\0\360\377\377" "\377\3\0\0\0\0\0\7\377\377\377\377\360\377\377\77\3\0\0\0\0\0\0\7\177\377\377\376\370\377\377\177" "\0\0\0\0\0\0\0\0\1\177\377\377\377\77\3\0\0\0\0\0\0\0\0\0\0\7\177\377\377\377\37\0" "\0\0\0\0\0\0\0\0\0\0\7\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0@\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300" "\300@\0\0\0\0\1\7\37\177\377\377\374\360\300\0\0\0\0\0\0\0\0\0\300\360\374\376\377\77\37\7" "\1\0\0\0\0\0\0\0\0\0\1\3\17\77\377\377\376\370\340\200\340\360\374\377\377\77\17\3\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\203\357\377\377\377\377\377\377\303\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\177\37\7\1\7\37\77\377\377\376\370\340\200\0\0\0" "\0\0\0\0\0\0\200\340\360\374\377\377\77\37\7\1\0\0\0\0\0\0\0\0\3\17\77\177\377\376\374\360" "\300\0\0\0\0\6\7\7\7\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7" "\7\7\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300" "\300\300@\0\0\3\17\77\377\377\376\370\340\200\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\377\77" "\7\1\0\0\0\0\0\0\0\3\17\77\377\377\376\370\340\200\0\0\0\0\300\360\374\377\377\77\17\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\376\370\374\377\377\177\37\3\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\303\343\373\377\377\177\77" "\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\374\377\377\77\17\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\374\377\377\77\17\7\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\340\370\374\377\377\77\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\340\370\374\377\377\377\237\207\203\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200" "\200\300\300\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\374\374\374\374\374<<<<<<<<<<<<<<<<" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1" "\0\0\0\0\0\0 \360\360\370\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\3\17\77\377\377\376\370\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\7\37\177\377\377\374\360\300\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\77\377\377\376\370\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\376\360\300\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\37\177\377\377\374\360\300\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\77\37\36" "\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0<<<<<<<<<<<<<<<<\374\374\374\374\374\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\200\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\376\377\77\177\377\376\370\340\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\340\370\374\377\77\37\7\1\0\0\0\1\7\17\77\377\376\370\340\200\0\0" "\0\0\0\0\0\0\0\0\1\1\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\340\340\340\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\0\0\0\0\0\0\0\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\376\374\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\3\17\77\177\377\377\376\370\200\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\77\177\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0 p\370\370|<>>\36\36\36\36\36\36\36>>~\374\374\370\360\340\300" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\300\300\300\300\300\300\300\300\300\300\303\377\377\377\377" "\377\0\0\0\0\300\360\370\374\376\177\37\17\17\7\7\7\7\7\7\7\7\3\3\3\3\3\203\377\377\377\377" "\377\0\0\0\0\17\77\177\377\377\374\360\340\340\300\300\300\300\300\300\340\340\340\360\370|~\77\377\377\377\377" "\377\0\0\0\0\0\0\0\0\1\1\3\3\3\3\3\3\3\3\3\3\1\1\1\0\0\0\0\3\3\3\3" "\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\370\370\370\370\370\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\200\300\340\360xx<<<<<||\374\374\370\370\360\340\300\200" "\0\0\0\0\0\0\377\377\377\377\377\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\77\377\377\377" "\376\360\0\0\0\0\377\377\377\377\377\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\377\377\377\377\377\177\370\360\340\300\300\200\200\200\200\200\200\300\300\340\360\374\377\377\177\37" "\7\1\0\0\0\0\7\7\7\7\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\3\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374||>>\36\36\36\36\36\36>>>|\374\370\370" "\360\340@\0\0\0\340\374\377\377\377\177\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3" "\1\0\0\0\0\0\77\377\377\377\377\370\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\1\7\17\77\177\177\376\374\370\360\340\340\300\300\300\300\300\300\300\340\340\360\360\370\374" "x \0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\3\3\3\3\3\3\3\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\370" "\370\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\0\0\300\340\360\360\370\370||<<<<<<|x\370\360\340\300\377\377\377\377" "\377\0\0\0\0\340\374\377\377\377\177\7\1\0\0\0\0\0\0\0\0\0\0\0\0\1\3\37\377\377\377\377" "\377\0\0\0\0\377\377\377\377\377\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377" "\377\0\0\0\0\0\7\37\177\377\377\376\370\360\340\300\300\200\200\200\200\200\300\300\340\360|\77\377\377\377\377" "\377\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\340\360\370\370||>>\36\36\36\36\36\36>>|\374\370\370\360\340\200" "\0\0\0\0\0\340\374\377\377\377\337\303\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\301\377\377\377\377" "\376\200\0\0\0\177\377\377\377\377\363\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\1\0\0\0\0\3\17\37\77\177\377\374\370\360\340\340\340\300\300\300\300\300\300\300\340\340\360\360\370x\60" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\3\3\3\3\3\3\3\3\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\360\370\370||||||||\370\370" "\360\360\340\300\0\0\0\0\0\0\0\0\0\370\377\377\377\377\37\3\1\0\0\0\0\0\0\0\0\0\0\0" "\1\7\7\1\0\0\360\360\360\360\360\360\360\377\377\377\377\377\360\360\360\360\360\360\360\360\360\360\360\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\360\370\374\374~>\36\36\36\36\36\36>>|\370\360\370\370\274<\36\36" "\36\36\36\30\0\0>\377\377\377\377\343\200\0\0\0\0\0\0\0\0\0\0\0\301\377\377\377\377~\0\0" "\0\0\0\0\0\0\0\1\203\307\357\377\77\77>><<<<<>>\37\37\17\7\3\1\0\0\0" "\0\0\0\0\0\0\0\17\77\277\377\374\370\370\370\370\370\360\360\360\360\360\360\360\360\360\360\360\360\340\340\300" "\200\0\0\0\360\374\376\377\377\317\203\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\201\303\377\377\377" "\377\177\0\0\0\3\7\17\17\37\37\37\36>>>>><<>>>>\36\37\37\37\17\17\7\3" "\1\0\0\0\0\0\0\370\370\370\370\370\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\377\377\377\377\377\0\200\340\340\360xx<<<<<||\374\374\370\360\340\300" "\0\0\0\0\0\0\0\377\377\377\377\377\77\7\3\1\0\0\0\0\0\0\0\0\0\0\0\3\377\377\377\377" "\377\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0<<<<<<<<\374\374\374\374\374\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\377\377\377\377\377\200\200\200\200\200\200\200\200\0\0" "\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0<<<<<<<<<<<<\374\374\374\374\374\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\300\200\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377\377\177\0\0\0\0" "\0\0\0\0\0\0\16\17\37\77>>|||||||<>\77\37\17\17\7\1\0\0\0\0\0" "\0\0\0\0\0\0\370\370\370\370\370\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374|<\34\14" "\4\0\0\0\0\0\377\377\377\377\377\0\0\200\300\340\360\370\374\376\77\37\17\7\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377>\37\17\7\7\7\37\77\177\377\376\370\360\340\300\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\3\7\17\77\177\377\376\374\370\360\300" "\200\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7\7" "\7\7\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0xxxxxxxxxx\370\370\370\370\370\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200\377\377\377\377\377\200\200\200\200\200\200\200\200\200\200" "\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\376\376\376\376\376\340\370<\34\36\36\36~\376\376\374\370\340\360\370<\36\36\36\36>\376\376" "\376\374\360\0\377\377\377\377\377\7\0\0\0\0\0\0\0\377\377\377\377\377\7\0\0\0\0\0\0\0\377\377" "\377\377\377\0\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377" "\377\377\377\0\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377" "\377\377\377\0\3\3\3\3\3\0\0\0\0\0\0\0\0\3\3\3\3\3\0\0\0\0\0\0\0\0\3\3" "\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\376\376\376\376\376\200\300\360\360x<<\36\36\36\36\36>>~\376\374\370\360\340" "\200\0\0\0\0\0\0\377\377\377\377\377\37\3\1\0\0\0\0\0\0\0\0\0\0\0\0\1\377\377\377\377" "\377\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\0\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3" "\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360\370\374|>>\36\36\36\36\36\36>>~\374\374\370\360\360\300" "\200\0\0\0\0\340\374\377\377\377\177\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\37\377\377" "\377\376\370\0\0\77\377\377\377\377\370\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377" "\377\377\377\0\0\0\1\7\37\77\177\177\376\370\360\360\340\340\300\300\300\300\300\340\340\360\360\374\376\177\77\37" "\17\3\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\3\3\3\3\3\3\3\3\1\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\376\376\376\376\376\300\340\360x<<\36\36\36\36\36\36>>~\376\374\370\370\360\340" "\200\0\0\0\0\0\377\377\377\377\377\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\177\377\377" "\377\376\360\0\0\0\377\377\377\377\377\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\377\377" "\377\377\77\0\0\0\377\377\377\377\377\77|\370\360\340\340\300\300\300\300\300\300\340\340\360\370\374\376\177\77\37" "\17\3\0\0\0\0\377\377\377\377\377\0\0\0\0\1\3\3\3\3\3\3\3\3\3\3\1\1\0\0\0\0" "\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\360\370\374|~>>\36\36\36\36\36\36><|\370\360\340\376\376\376" "\376\376\0\0\0\340\376\377\377\377\77\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\377\377\377\377" "\377\377\0\0\0\77\377\377\377\377\370\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\0\0\0\0\1\17\37\77\177\377\376\370\360\340\340\300\300\300\300\300\300\340\340\360x>\37\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\3\3\3\3\3\3\1\1\0\0\0\0\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\376\376\376\376\376\200\300\360\360\370|<>>\36\36\36\36\36\36>~\374" "\374x\20\0\0\0\0\0\0\377\377\377\377\377\377\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\1\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\340\360\370\370\374|>>\36\36\36\36\36\36\36>>|\374\374\370\360\340" "@\0\0\0\0\0\0\0\17\77\177\377\377\374\360\340\340\300\300\300\300\200\200\200\0\0\0\0\1\3\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\7\7\7\17\17\17\37\37\77~\376\374\370\360" "\340\0\0\0\0\0\60|\177\374\374\370\360\360\340\340\300\300\300\300\300\300\300\340\340\340\360\370\377\377\177\77" "\17\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\3\3\3\3\3\3\3\3\3\3\1\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376\376\377\37\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0<<<<<<<\274\377\377\377\377\377<<<<<<<<<<<\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\7\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\177\377\377\377\376\360\300\300\200\200\200\200\200\300\300\340\340" "\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\3\3\3" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\374\374\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\374" "\374\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377" "\377\0\0\0\0\0\3\37\177\377\377\377\370\360\340\300\200\200\200\200\200\200\300\340\340\360|\77\377\377\377\377" "\377\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\34|\374\374\374\364\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\374\374" "\374<\0\0\0\0\0\3\17\177\377\377\376\370\300\0\0\0\0\0\0\0\0\0\0\200\340\374\377\377\77\17" "\1\0\0\0\0\0\0\0\0\0\1\17\77\377\377\377\370\340\0\0\0\0\300\360\376\377\177\37\7\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\77\377\377\377\374\370\377\377\77\17\3\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7\7\7\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\374\374\374\354\0\0\0\0\0\0\0\0\0\200\340\340\340\200\0\0\0\0\0\0\0\0\0\374" "\374\374\374\14\37\377\377\377\374\200\0\0\0\0\0\200\370\377\377\77\377\377\374\340\0\0\0\0\0\0\370\377" "\377\377\7\0\0\3\177\377\377\377\360\0\0\200\370\377\377\37\1\0\3\37\377\377\376\360\200\0\0\370\377\377" "\177\3\0\0\0\0\0\17\377\377\377\376\370\377\377\17\0\0\0\0\0\0\1\17\377\377\377\370\376\377\377\37" "\0\0\0\0\0\0\0\0\1\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\14\34|\374\374\370\360\300\200\0\0\0\0\0\0\0\0\0\200\340\360\374\374|<\14" "\4\0\0\0\0\0\0\0\0\0\3\7\17\77\177\376\374\370\340\300\340\370\374\377\177\37\17\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\361\377\377\377\77\377\377\377\360\340\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\370\374\377\177\77\17\7\1\0\0\0\1\7\17\37\177\377\376\370\360\300\200" "\0\0\0\0\0\4\6\7\7\7\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\7\7" "\7\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\4<\374\374\374\374\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\374\374\374" "\374<\4\0\0\0\0\0\7\37\377\377\377\374\360\200\0\0\0\0\0\0\0\0\0\200\360\376\377\377\77\17" "\1\0\0\0\0\0\0\0\0\0\0\3\17\177\377\377\376\360\300\0\0\0\200\360\374\377\377\77\17\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\77\377\377\376\370\374\377\377\77\17\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\361\377\377\377\77\7\1\0\0\0\0\0\0\0\0" "\0\0\0\0\34\77>|||x|||>\77\37\17\17\3\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0<<<<<<<<<<<<<<<<<<\274\374\374\374\374\374|<" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\374\376\177\37\17\7\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\374\376\177\77\37\17\3\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300\360\370\374\376\377\237\217\207\203\201\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200" "\300\300\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\300\300\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\376\377\377\37\17\7\7\7\7\3\3\3\3\3\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\300\360\377\377\377\77\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\17\17\37\37\37\77\77\377\371\361\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\300\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\37\77\177\377\376\374\370\360\360\360\360\360\360\360\360\360\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\370\370\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\3\3\3\3\3\7\7\7\7\17\37\77\377\376\374\370\340\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\77\177\377\377\370\300\200\200\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\361\371\373\177\77\37\37\37" "\17\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\377\377\377\377\3\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360\360\370\370\374\377\177\77\77\17\3\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\340\360\370\374|>\36\36\36\36>>|\374\370\360\340\340\300\300\200\300\300\340\360\370" "\376|\70\0\0\0\1\1\1\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\3\3\3\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\360\370\370\370\370\360\340\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\17\17\17\17\7\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\340\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7\7\7\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\360\377\377\377\377\200\200\200\0\0\0" "\0\0\0\0\0\0\0\300\340\370\374\374~\77\37\17\17\7\7\7\367\377\377\377\177\7\17\17\37\77~\376" "|\30\0\0\0\370\377\377\377\377\37\1\0\0\0\0\0\0\0\360\377\377\377\177\0\0\0\0\0\0\0\0" "\0\0\0\0\0\17\177\377\377\377\376\340\200\0\0\0\0\0\360\377\377\377\177\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\1\7\17\37\77\77~\374\370\370\360\377\377\377\377\360\360\360\360\360\370\370|~>" "\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\377\377\377\77\1\1\1\1\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\360\370\374\376\377\77\37\17\7\7\7\7\7\7\7\7\17\37\37\17\6\0" "\0\0\0\0\0\0\200\200\200\277\377\377\377\377\361\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\7\7\7\7\7\377\377\377\377\377\347\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\340\377\377\377\377\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\200\300\300\340\360\370\376\377\377\377\367\361\360\360\360\360\360\340\340\300\300\200\200\200\200\200\200\300" "\340\340\200\0\0\3\7\3\3\1\1\0\0\0\0\0\0\0\1\1\1\3\3\7\7\7\7\7\7\7\7\7" "\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0@\340\360\340\300\200\0\0\200\200\300\300\300\300\300\300\200\200\0\0\200\300\340\360\340" "@\0\0\0\0\0\0\0\0\301\367\377\377\177\37\17\7\7\7\7\7\7\7\7\17\37\177\377\377\363\301\0" "\0\0\0\0\0\0\0\0\0\37\177\377\377\360\300\200\0\0\0\0\0\0\0\0\200\300\360\377\377\177\37\0" "\0\0\0\0\0\0\0\20\70|\77\37\17\7\7\17\17\37\37\37\37\37\37\17\17\7\7\17\37>|\70" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300" "\300\300\300@\0\0\3\7\37\177\377\376\374\360\300\0\0\0\0\0\0\0\0\0\0\200\340\370\374\377\377\77" "\17\3\0\0\0\0\0\0\0\0\1\3\17\77\377\377\374\370\340\200\0\200\340\370\376\377\177\37\7\3\0\0" "\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\203\207\237\377\377\376\377\377\237\207\201\200\200\200\200\200\200" "\200\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\377\377\377\377\377\7\7\7\7\7\7\7\7\7" "\7\0\0\0\0\0\0\0\17\17\17\17\17\17\17\17\17\17\377\377\377\377\377\17\17\17\17\17\17\17\17\17" "\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\340\340\340\340\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\300\340\360\360\370\370|||||||x\370\370\360\360\340\300\0\0" "\0\0\0\0\0\0\0\0\374\377\377\377\377\347\201\0\0\0\0\0\0\0\0\0\0\1\7\17\7\3\1\0" "\0\0\0\0\0\0\0\0\0\203\307\317\377\377\177\77~||\370\370\370\360\360\340\340\300\300\200\0\0\0" "\0\0\0\0\0\0\0|\377\377\377\377\363\300\200\0\0\0\0\0\0\0\1\3\7\17\377\377\377\377\374\0" "\0\0\0\0\0\0\0\0\1\3\7\7\17\17\37\37\37>>>||\374\370\374\376\377\347\307\203\0\0" "\0\0\0\0\0\0\0\200\300\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\1\307\377\377\377\377~\0" "\0\0\0\0\0\0\3\7\17\17\37\37\77><|||x|||<>\77\37\37\17\7\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\340\340\340\340\340\340\340\340\300\300\300\200\0\0\0" "\0\0\0\0\0\300\340\370|\36\17\7\7\203\301\341\341\340\360\360\360\360\360\360\341\341\301\203\7\7\17\36" "|\370\360\300\377\377\17\1\0\0\360\374\377\377\17\3\1\1\0\0\0\0\0\1\1\3\17\17\17\4\0\0" "\0\1\7\377\177\377\370\300\0\0\7\37\177\377\376\370\340\340\300\300\300\300\300\300\340\340\370\360` \0\0" "\0\200\360\377\0\1\7\17\37\37\17\7\7\7\3\3\7\7\7\17\37\377\376\374\360\0\0\0" "\0\0\0\0\0\0\0\0\0\200\340\360\360\370x<\34\34\34\34\34\34\34\34\34\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\17\77\177\377\370\360\340\340\300\300\340\340\340\360x|\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\340\340\340\340\340\340\340\341\341\341\341\341\341\341\340\340\340\340\340\340\340\340\340\340\340" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\0\0\0\0\0\0\0\0\0\0\0\0\200\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360\370\374~\77\37\17\6\0\0\200\300\340\360\370\374~\77\37\17\6" "\0\0\0\0\0\0\16\37\77\177\377\373\361\340\300\200\0\0\0\16\37\77\177\377\373\361\340\300\200\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\77~|\70\20\0\0\0\0\1\3\7\17\77~|\70" "\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0<<<<<<<<<<<<<<<<<<\374\374\374\374\374" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\177\177\177\177\177" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0xxxxxxxxxxxxxxxxxxxxxxxxx" "x\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\340\340\340\340\340\340\340\340\300\300\200\200\0\0\0" "\0\0\0\0\0\300\360\370|\36\17\7\7\343\341\341\341\340\340\340\340\340\340\340\301\301\201\3\7\7\17\36" "|\370\360\300\377\377\17\1\0\0\0\0\0\377\377\377\300\300\300\300\300\300\300\341\343\377\177\36\0\0\0\0" "\0\1\7\377\177\377\370\300\0\0\0\0\0\377\377\377\1\1\1\1\1\3\17\77\376\370\340\200\0\0\0\0" "\0\300\360\377\0\1\7\17\37\17\7\7\3\3\7\7\17\37\77\376\374\370\340\200\0\0" "\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\201\377\377\377\377\0\0" "\0\0\0\0\0\0\0\0\0\3\17\37\77\177\374\370\360\340\340\340\340\340\360\370\374\177\77\37\7\0\0\0" "\0\0\0\0\0\0\0\340\340\340\340\340\340\340\340\340\341\341\341\341\341\341\340\340\340\340\340\340\340\340\340\340" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\200\0\0\0\0\0\0\0\0\0\0\0\0\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\6\17\37\77~\374\370\360\340\300\200\0\0\6\17\37\77~\374\370\360\340\300\200" "\0\0\0\0\0\0\0\0\0\0\0\200\300\340\361\373\377\177\77\37\16\0\0\0\200\300\340\361\373\377\177\77" "\37\16\0\0\0\0\0\20\70|~\77\17\7\3\1\0\0\0\0\20\70|~\77\17\7\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340pxx\374\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\370\360" " \0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\177\17\3\0" "\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\200\340\374\377\177\37\7\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\77\17\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\376\377\77\17\3\0\0\0\0\0\200\340\360x\374\376\376" "\0\0\0\0\0\0\0\0\0\300\360\374\377\177\37\7\0\0\200\300\340\360\374\236\217\207\203\200\200\377\377\377" "\200\200\200\0\0\0\0\10\36\37\37\7\1\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\377\377\377" "\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340pxx\374\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\370\360" " \0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\77\17\3\0" "\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\200\360\374\377\177\37\7\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\77\7\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\376\377\77\17\3\0\340\360\360x\70\34\34\34\34\34<" "x\370\360\300\0\0\0\0\0\300\360\374\377\177\37\7\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340p" "|\77\37\7\0\0\0\10\36\37\37\7\1\0\0\0\0\0\0\0\0\340\360\370\374\376\357\347\343\341\340\340" "\340\340\340\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\70x<\34\16\16\16\16\16\36<\370\360\340\0\0\0\0\0\0\0\0\0\0\300\370\370\370" "\60\0\0\0\0\0\0\0\0\70\70\70\70<~\377\347\343\300\200\0\0\0\0\200\360\374\377\177\37\7\0" "\0\0\0\0<|x\360\340\340\340\340\340\360px\177\77\37\7\200\340\370\376\377\77\17\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\177\17\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\377\377\37\7\1\0\0\0\0\200\300\360x\374\376\376" "\0\0\0\0\0\0\0\0\0\0\300\370\376\377\77\17\3\0\0\200\300\360\370\274\237\207\203\201\200\377\377\377" "\200\200\200\200\0\0\0\0\14\37\77\37\7\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\377\377\377" "\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\370\360\340\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\7\7\3\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376\376\376\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\340\360\370\374\177\77\37\17\7\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\370\376\377\377\377\77\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\3\37\177\377\377\376\370\340\300\300\200\200\200\200\200\200\300\300\340\360\370\374\376|\70\20" "\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\341\301\3\3\3\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\374\377\377\377\377\370\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\177\17\1\3\37\377\377\376\370\300\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\360\376\377\377\37\3\0\0\0\0\0\0\7\37\377\377\376\370\300\0\0\0" "\0\0\0\0\0\0\0\340\374\377\377\177\77<<<<<<<<<<<<\77\177\377\377\376\370\300" "\0\0\0\0\300\370\377\377\377\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\177\377\377" "\376\370\300\0\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7" "\7\7\7\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\3\3\3\341\301\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\374\377\377\377\377\370\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\177\17\1\3\37\377\377\376\370\300\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\360\376\377\377\37\3\0\0\0\0\0\0\7\37\377\377\376\370\300\0\0\0" "\0\0\0\0\0\0\0\340\374\377\377\177\77<<<<<<<<<<<<\77\177\377\377\376\370\300" "\0\0\0\0\300\370\377\377\377\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\177\377\377" "\376\370\300\0\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7" "\7\7\7\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\1\7\7\3\3\1\0\0\0\340\300\0\0\1\1\3\7\7\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\377\376\370\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\377\177\17\1\7\37\377\377\376\370\300\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\360\376\377\377\37\3\0\0\0\0\0\0\7\37\377\377\376\370\300\0\0\0" "\0\0\0\0\0\0\0\340\374\377\377\177\77<<<<<<<<<<<<\77\177\377\377\376\370\300" "\0\0\0\0\300\370\377\377\377\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\177\377\377" "\376\370\300\0\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7" "\7\7\7\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0\0\0\0\340\300\0\1\3\3\3\3\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\377\376\370\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\360\376\377\177\17\1\7\37\377\377\376\370\300\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\360\376\377\377\37\3\0\0\0\0\0\0\7\37\377\377\376\370\300\0\0\0" "\0\0\0\0\0\0\0\340\374\377\377\177\77<<<<<<<<<<<<\77\177\377\377\376\370\300" "\0\0\0\0\300\370\377\377\377\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\177\377\377" "\376\370\300\0\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7" "\7\7\7\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\340\300\0\0\0\0\1\1\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\377\377\370\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\360\376\377\177\17\1\3\37\377\377\377\370\300\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\360\374\377\377\37\3\0\0\0\0\0\0\3\37\377\377\377\370\300\0\0\0" "\0\0\0\0\0\0\0\340\374\377\377\177\77<<<<<<<<<<<<\77\77\377\377\377\370\300" "\0\0\0\0\300\370\377\377\377\77\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\77\377\377" "\377\370\300\0\7\7\7\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7" "\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\3\17\37\37>\370\370\270<\37\37\17\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\376\377\377\377\374\340\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\340\374\377\377\77\7\1\17\77\377\377\374\340\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\370\377\377\177\17\1\0\0\0\0\0\1\17\177\377\377\374\340\200\0\0\0" "\0\0\0\0\0\0\200\360\376\377\377\77\77<<<<<<<<<<<\77\77\377\377\377\374\340\200" "\0\0\0\0\340\374\377\377\177\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\37\377\377\377" "\374\340\200\0\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7" "\7\7\7\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\300\300\0\0\0\0\0\0\0\0\0\200\360\376\377\377\37\3\377\377\377\377\3\3\3\3\3\3\3\3" "\3\3\3\3\0\0\0\0\0\0\0\340\374\377\377\77\7\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\360\376\377\377\37\3\0\0\0\0\0\377\377\377\377\36\36\36\36\36\36\36\36" "\36\36\36\0\0\0\340\374\377\377\377\177xxxxxxxx\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\360\377\377\377\77\7\0\0\0\0\0\0\0\0\0\0\377\377\377\377\200\200\200\200\200\200\200\200" "\200\200\200\200\7\7\7\1\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\200\0\0\0" "\0\0\0\0\0\0\0\0\300\340\370\374\376\376\77\37\17\17\7\7\7\7\7\7\7\7\17\17\37\77\177\376" "\374\370\360@\0\200\370\377\377\377\377\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1" "\1\0\0\0\0\377\377\377\377\377\203\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\7\177\377\377\377\377\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\3\17\37\77\177\377\376\370\360\340\340\300\300\200\200\200\200\200\200\300\300\340\360\370\374" "\374x\30\0\0\0\0\0\0\0\0\0\0\1\3\3\3\7\7\7\7\377\377\377\307\307\307\307\203\3\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\34<\70xppqqqqy\77\77\37\17\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\301\301\303\303\303\307\307\307\301\300\300\300\300\300\300" "\300\300\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\3\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200" "\200\200\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\303\307\307\307\303\303\301\301\301\300\300\300\300\300\300\300\300" "\300\300\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\3\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200" "\200\200\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\307\307\307\303\301\301\300\300\300\300\300\300\301\303\303\307\307\303\300\300\300" "\300\300\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\3\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200" "\200\200\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\301\301\301\300\300\300\300\300\300\300\300\300\301\301\301\300\300\300\300\300" "\300\300\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\3\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200" "\200\200\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\301\301\301\303\303\307\307\307\303\300\300\300\300\300\0\0" "\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\377\377\377\377\377\3\3\3\3\3\3\3\3\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\377\377\377\377\377\200\200\200\200\200\200\200\200\200\0\0" "\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\300\300\300\300\300\303\307\307\303\303\303\301\301\301\300\300\300\300\300\300\300\0\0" "\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\377\377\377\377\377\3\3\3\3\3\3\3\3\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\377\377\377\377\377\200\200\200\200\200\200\200\200\200\0\0" "\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\303\307\307\303\303\301\300\300\300\300\300\300\300\301\303\303\307\307\303\300\300\0\0" "\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\377\377\377\377\377\3\3\3\3\3\3\3\3\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\377\377\377\377\377\200\200\200\200\200\200\200\200\200\0\0" "\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\300\300\301\301\301\300\300\300\300\300\300\300\300\300\300\301\301\301\300\300\300\0\0" "\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\377\377\377\377\377\3\3\3\3\3\3\3\3\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\377\377\377\377\377\200\200\200\200\200\200\200\200\200\0\0" "\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\7\7\7\7\7\17\37\77\177\376\376\374\370\340" "\200\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\177\377\377" "\377\376\360\0\36\36\36\377\377\377\377\377\36\36\36\36\36\36\36\36\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\377\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377" "\377\177\17\0\0\0\0\377\377\377\377\377\200\200\200\200\200\300\300\300\300\300\340\340\360\370\374\377\177\77\37\7" "\3\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\301\1\0\0\0\0\0\0\0\0\0\1\3\3\3\3\3\3\1\301\300\300" "\300\300\0\0\0\377\377\377\377\377\377\377\374\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\3\17\37\177\377\376\370\340\200\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\1\7\37\177\377\377\374\360\300\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\374\370\340\200\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\37\177\377\377\377\377" "\377\377\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\201\201\301\303\303\303\307\307\317\217\202\200\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370\374\376\177\77\37\17\7\7\7\7\7\7\7\7\17\17\37\77\376\376\374\370" "\340\300\0\0\300\374\377\377\377\377\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\377\377" "\377\377\377\360\377\377\377\377\377\201\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377" "\377\377\377\377\7\177\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\370\377" "\377\377\377\37\0\0\3\17\37\77\177\377\374\370\360\340\300\300\200\200\200\200\200\300\300\340\360\370\374\377\177\77" "\37\7\1\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\207\217\307\307\307\303\303\303\301\201\200\200\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370\374\376\177\77\37\17\7\7\7\7\7\7\7\7\17\17\37\77\376\376\374\370" "\340\300\0\0\300\374\377\377\377\377\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\377\377" "\377\377\377\360\377\377\377\377\377\201\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377" "\377\377\377\377\7\177\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\370\377" "\377\377\377\37\0\0\3\17\37\77\177\377\374\370\360\340\300\300\200\200\200\200\200\300\300\340\360\370\374\377\177\77" "\37\7\1\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\7\17\7\203\203\201\300\300\300\300\300\300\301\203\203\207\17\7\2\0\0" "\0\0\0\0\0\0\0\300\360\370\374\376\177\77\37\17\7\7\7\7\7\7\7\7\17\17\37\77\376\376\374\370" "\340\300\0\0\300\374\377\377\377\377\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\377\377" "\377\377\377\360\377\377\377\377\377\201\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377" "\377\377\377\377\7\177\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\370\377" "\377\377\377\37\0\0\3\17\37\77\177\377\374\370\360\340\300\300\200\200\200\200\200\300\300\340\360\370\374\377\177\77" "\37\7\1\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\0\0\200\200\200\300\300\300\300\300\301\303\203\203\203\3\3\1\0\0" "\0\0\0\0\0\0\0\300\360\370\374\376\177\77\37\17\7\7\7\7\7\7\7\7\17\17\37\77\376\376\374\370" "\340\300\0\0\300\374\377\377\377\377\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\377\377" "\377\377\377\360\377\377\377\377\377\201\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377" "\377\377\377\377\7\177\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\370\377" "\377\377\377\37\0\0\3\17\37\77\177\377\374\370\360\340\300\300\200\200\200\200\200\300\300\340\360\370\374\377\177\77" "\37\7\1\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\1\1\201\200\200\300\300\300\300\300\300\300\200\201\201\1\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370\374\376\177\77\37\17\7\7\7\7\7\7\7\7\17\17\37\77\376\376\374\370" "\340\300\0\0\300\374\377\377\377\377\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\377\377" "\377\377\377\360\377\377\377\377\377\201\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377" "\377\377\377\377\7\177\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\370\377" "\377\377\377\37\0\0\3\17\37\77\177\377\374\370\360\340\300\300\200\200\200\200\200\300\300\340\360\370\374\377\177\77" "\37\7\1\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\200\0" "\0\0\0\0\0\0\0\0\3\7\17\37\77\177\376\374\370\360\340\300\300\340\360\370\374\376\177\77\37\17\7\3" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\361\373\377\177\77\77\377\377\373\361\340\300\200\0\0\0\0" "\0\0\0\0\0\0\0\0\30<~\177\77\17\7\3\1\0\0\0\0\0\1\3\7\17\37\77\177~<\30" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\200\0\0\200\340\370" "\370\370p\60\0\0\0\300\360\370\374\376\177\77\37\17\7\7\7\7\7\7\7\7\17\337\377\377\376\377\377\377" "\347\301\0\0\200\374\377\377\377\377\7\1\0\0\0\0\0\0\0\0\0\300\360\374\377\377\77\17\3\3\377\377" "\377\377\376\360\377\377\377\377\377\201\0\0\0\0\0\0\0\300\360\374\377\177\37\7\3\0\0\0\0\0\0\377" "\377\377\377\377\7\177\377\377\377\377\340\0\200\340\370\374\377\177\37\7\1\0\0\0\0\0\0\0\0\200\370\377" "\377\377\377\37\0\0\3\17\237\377\377\377\377\377\377\347\301\300\200\200\200\200\200\300\300\340\360\370\374\377\177\77" "\37\7\1\0\0\60<~\177\77\17\3\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300@\0\0\0\0\0\1\1\1\3\3\3\7\7\3\0\0\0\0\300\300\300" "\300\300\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\1\17\77\177\377\377\374\360\340\340\300\300\200\200\200\200\200\200\300\300\340\360\370\377\377\177\77" "\37\7\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300@\0\0\0\1\7\7\7\3\3\1\1\1\0\0\0\0\0\0\300\300\300" "\300\300\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\1\17\77\177\377\377\374\360\340\340\300\300\200\200\200\200\200\200\300\300\340\360\370\377\377\177\77" "\37\7\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300C\7\7\3\1\1\0\0\0\0\0\0\0\1\3\3\7\7\1\300\300\300" "\300\300\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\1\17\77\177\377\377\374\360\340\340\300\300\200\200\200\200\200\200\300\300\340\360\370\377\377\177\77" "\37\7\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300@\0\1\1\1\0\0\0\0\0\0\0\0\0\0\1\1\1\0\300\300\300" "\300\300\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\1\17\77\177\377\377\374\360\340\340\300\300\200\200\200\200\200\200\300\300\340\360\370\377\377\177\77" "\37\7\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\200\0\0\0\0\3\7\7\3\3\3\1\1\1\0\0\0\0\0\0\300\300\300" "\300\300@\0\0\3\17\77\377\377\376\370\340\200\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\377\77" "\7\1\0\0\0\0\0\0\0\3\17\77\377\377\376\370\340\200\0\0\0\0\300\360\374\377\377\77\17\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\376\370\374\377\377\177\37\3\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\7\7\7\7\7\7\7\7\7\7\7\7\7\17\17\37\77\377\376\374\370" "\360\300\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377" "\377\377\0\0\0\0\377\377\377\377\377xxxxxxxxxxxxx||~\77\77\37\17\7" "\3\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\340\360\370\370\370|||<|||\370\370\360\360\340\300\200\0\0" "\0\0\0\0\0\0\340\374\377\377\377\377\17\3\1\0\0\0\0\0\0\0\0\0\1\3\17\377\377\377\377\374" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\200\200\200\200\300\300\340\360\374\377\177\77\37\7" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\7\7\17\17\17\17\17\37>~\374\374\370\360" "\340\200\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\377\377" "\377\377\376\0\0\0\377\377\377\377\377\0\0\0\0\0\200\340\300\200\200\200\200\200\200\300\340\360\370\377\377\177" "\77\17\3\0\0\0\7\7\7\7\7\0\0\0\0\2\3\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30<\374\376\374\370\340\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\17\37\37\17\14\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0@\340\360\360\370x||<<<<<<<||\374\370\370\360\340\300\200" "\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0\0\0\200\200\200\200\200\200\200\200\200\201\207\377\377\377\377" "\376\0\0\0\0\200\340\360\370\374\376>\37\37\17\17\17\17\17\17\17\17\7\7\7\7\7\7\377\377\377\377" "\377\0\0\0\0\37\177\377\377\377\370\340\300\300\200\200\200\200\200\200\300\300\300\340\360\370\374\177\377\377\377\377" "\377\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\3\3\3\1\0\0\0\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\374\376\376|\70\10\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\16\37\37\17\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0@\340\360\360\370x||<<<<<<<||\374\370\370\360\340\300\200" "\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0\0\0\200\200\200\200\200\200\200\200\200\201\207\377\377\377\377" "\376\0\0\0\0\200\340\360\370\374\376>\37\37\17\17\17\17\17\17\17\17\7\7\7\7\7\7\377\377\377\377" "\377\0\0\0\0\37\177\377\377\377\370\340\300\300\200\200\200\200\200\200\300\300\300\340\360\370\374\177\377\377\377\377" "\377\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\3\3\3\1\0\0\0\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\374~~\376\370\360\300\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\14\36\77\37\7\3\1\0\0\1\3\7\37\77\77\34\10\0\0\0" "\0\0\0\0\0\0\0\0@\340\360\360\370x||<<<<<<<||\374\370\370\360\340\300\200" "\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0\0\0\200\200\200\200\200\200\200\200\200\201\207\377\377\377\377" "\376\0\0\0\0\200\340\360\370\374\376>\37\37\17\17\17\17\17\17\17\17\7\7\7\7\7\7\377\377\377\377" "\377\0\0\0\0\37\177\377\377\377\370\340\300\300\200\200\200\200\200\200\300\300\300\340\360\370\374\177\377\377\377\377" "\377\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\3\3\3\1\0\0\0\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\360\370\370|<<<||\370\370\340\300\300\200\200\200\300\340\370\360" "`\0\0\0\0\0\0\0\0\1\1\3\1\0\0\0\0\0\0\0\0\1\3\7\7\7\7\7\7\3\1\0" "\0\0\0\0\0\0\0\0@\340\360\360\370x||<<<<<<<||\374\370\370\360\340\300\200" "\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0\0\0\200\200\200\200\200\200\200\200\200\201\207\377\377\377\377" "\376\0\0\0\0\200\340\360\370\374\376>\37\37\17\17\17\17\17\17\17\17\7\7\7\7\7\7\377\377\377\377" "\377\0\0\0\0\37\177\377\377\377\370\340\300\300\200\200\200\200\200\200\300\300\300\340\360\370\374\177\377\377\377\377" "\377\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\3\3\3\1\0\0\0\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0\0\0\0\340\360\370\370\370\360\340\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0`\360\360\370\370||<<<<<<<<|\374\370\370\360\360\340\200" "\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\0\0\200\200\200\200\200\200\200\200\200\201\207\377\377\377\377" "\376\0\0\0\0\200\340\360\370\374\376>\37\37\17\17\17\17\17\17\17\17\7\7\7\7\7\7\377\377\377\377" "\377\0\0\0\0\37\177\377\377\377\370\340\300\300\200\200\200\200\200\200\300\300\300\340\360\370\374\177\377\377\377\377" "\377\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\3\3\3\1\0\0\0\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\360\370\374\376\37\7\7\7\17\37\376\376\374\360\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\17\37\36\34\34\34\37\17\7\7\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0@\340\360\360\370x||<<<<<<<||\374\370\370\360\340\300\200" "\0\0\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\201\207\377\377\377\377" "\376\0\0\0\0\200\340\360\370\374\376>\37\37\17\17\17\17\17\17\17\17\7\7\7\7\7\7\377\377\377\377" "\377\0\0\0\0\37\177\377\377\377\370\340\300\300\200\200\200\200\200\200\300\300\300\340\360\370\374\177\377\377\377\377" "\377\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\3\3\3\1\0\0\0\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\20x\374|>\36\36\36\36\36>~\374\370\360\340\360\370|>>\36\36\36\36>~\374" "\370\360\340\0\0\0\0\200\200\200\300\300\300\300\300\300\300\377\377\377\377\341\340\340\340\340\340\340\340\340\340\340" "\377\377\377\377\374\376\377\77\17\7\7\3\3\3\3\3\3\377\377\377\377\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\1\177\377\377\370\360\340\300\300\300\300\340\340\370\377\177\77\177\376\370\360\340\340\300\300\300\300\300\340" "\340\360\360`\0\0\1\3\3\3\3\3\3\3\3\1\1\0\0\0\0\0\1\1\3\3\3\3\3\3\3\3" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\340\360\370\370||>>\36\36\36\36\36\36\36>>~\374\374\370" "\360\360@\0\0\0\340\374\377\377\377\177\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7" "\3\1\0\0\0\0\77\377\377\377\377\370\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\1\7\17\37\77\177\376\374\370\360\340\340\340\300\300\300\300\300\300\340\340\340\360\370\374" "xp \0\0\0\0\0\0\0\0\0\0\0\1\1\1\3\3\3\303\377\377\377\343\343\343\343\301\201\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\10\14\36\36\34<\70\70\70\70\70\70<\37\37\17\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30<\374\376\376\370\340\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\37\37\37\14\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360\360\370\370||<<<<<<||\370\370\360\360\340\300\0" "\0\0\0\0\0\300\370\376\377\377\277\207\201\200\200\200\200\200\200\200\200\200\200\200\200\200\201\203\377\377\377\377" "\374\0\0\0\0\377\377\377\377\377\347\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\3\0\0\0\0\7\37\77\177\377\376\370\360\340\300\300\300\200\200\200\200\200\200\200\300\300\340\340\360\360`" "\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\376\376|\70\30\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\16\37\37\37\7\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360\360\370\370||<<<<<<||\370\370\360\360\340\300\0" "\0\0\0\0\0\300\370\376\377\377\277\207\201\200\200\200\200\200\200\200\200\200\200\200\200\200\201\203\377\377\377\377" "\374\0\0\0\0\377\377\377\377\377\347\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\3\0\0\0\0\7\37\77\177\377\376\370\360\340\300\300\300\200\200\200\200\200\200\200\300\300\340\340\360\360`" "\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370\374~\376\374\370\340\300\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\10\34>\77\17\7\3\0\0\0\1\3\17\37\77>\34\10\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360\360\370\370||<<<<<<||\370\370\360\360\340\300\0" "\0\0\0\0\0\300\370\376\377\377\277\207\201\200\200\200\200\200\200\200\200\200\200\200\200\200\201\203\377\377\377\377" "\374\0\0\0\0\377\377\377\377\377\347\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\3\0\0\0\0\7\37\77\177\377\376\370\360\340\300\300\300\200\200\200\200\200\200\200\300\300\340\340\360\360`" "\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360\360\370\370||<<<<<<||\370\370\360\360\340\300\0" "\0\0\0\0\0\300\370\376\377\377\277\207\201\200\200\200\200\200\200\200\200\200\200\200\200\200\201\203\217\377\377\377" "\374\0\0\0\0\377\377\377\377\377\347\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\3\0\0\0\0\7\37\77\177\377\376\370\360\340\300\300\300\200\200\200\200\200\200\200\300\300\340\340\360\360`" "\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\14\36~\377\377\374\360\340\200\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\17\17\7\6\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\36\36\36\36\36\36\36\36\376\376\376\376\376\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\377\377\377\377\377\300\300\300\300\300\300\300\300\0\0" "\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\374\377\376|<\10\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\16\37\37\17\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0<<<<<<<<\374\374\374\374\374\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\377\377\377\377\377\200\200\200\200\200\200\200\200\0\0" "\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370\374~~\374\370\340\300\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\10\34>\77\17\7\3\0\0\0\1\3\17\37\77\37\34\10\0\0\0\0" "\0\0\0\0\0\0\0\0\0<<<<<<<<\374\374\374\374\374\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\377\377\377\377\377\200\200\200\200\200\200\200\200\0\0" "\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0<<<<<<<\374\374\374\374\374\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\377\377\377\377\377\200\200\200\200\200\200\200\200\0\0" "\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\30\30\70\70x\370\370\360\340\300\300\200\200\300\300\300\300\340\340" "\300\0\0\0\0\0\0\0\0\0\0\0\14<<\36\36\36\16\17\17\17\7\37\77\177\377\377\373\341\301\1" "\0\0\0\0\0\0\0\0\0\200\300\340\360\370\370||<<<<<<||\370\371\367\377\377\377\377" "\374\340\0\0\0\200\370\376\377\377\377\17\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\77\377\377" "\377\377\377\0\0\177\377\377\377\377\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377" "\377\377\377\0\0\0\3\17\37\177\377\377\374\360\340\340\300\300\200\200\200\200\200\300\300\340\340\370\374\377\177\77" "\37\7\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\360\370||<<<|\374\370\360\340\300\200\200\200\300\340\360\360\340" "@\0\0\0\0\0\0\0\0\1\3\3\1\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\3\1\0" "\0\0\0\0\0\0\0\374\374\374\374\374\0\200\340\340\360xx<<<<<||\374\374\370\360\340\300" "\0\0\0\0\0\0\0\377\377\377\377\377\77\7\3\1\0\0\0\0\0\0\0\0\0\0\0\3\377\377\377\377" "\377\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\70|\376\376\374\360\300\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\37\37\16\10\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\340\360\370\370||<<<<<<||\374\370\370\360\340\340\200" "\0\0\0\0\0\300\370\376\377\377\377\17\3\1\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\77\377\377" "\377\374\360\0\0\177\377\377\377\377\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377" "\377\377\377\0\0\0\3\17\77\177\377\377\374\360\340\340\300\300\200\200\200\200\200\300\300\340\340\370\374\377\177\77" "\37\7\1\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\374\376\374|\30\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\17\37\37\17\7\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\340\360\370\370||<<<<<<||\374\370\370\360\340\340\200" "\0\0\0\0\0\300\370\376\377\377\377\17\3\1\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\77\377\377" "\377\374\360\0\0\177\377\377\377\377\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377" "\377\377\377\0\0\0\3\17\77\177\377\377\374\360\340\340\300\300\200\200\200\200\200\300\300\340\340\370\374\377\177\77" "\37\7\1\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\370\376~\376\370\360\340\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\10\36\77\37\7\3\1\0\0\0\3\7\17\77\77\36\10\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\340\360\370\370||<<<<<<||\374\370\370\360\340\340\200" "\0\0\0\0\0\300\370\376\377\377\377\17\3\1\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\77\377\377" "\377\374\360\0\0\177\377\377\377\377\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377" "\377\377\377\0\0\0\3\17\77\177\377\377\374\360\340\340\300\300\200\200\200\200\200\300\300\340\340\370\374\377\177\77" "\37\7\1\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\340\360\370\370|<<<||\370\360\340\300\300\200\200\200\300\360\370\340" "@\0\0\0\0\0\0\0\0\1\1\3\1\0\0\0\0\0\0\0\0\1\3\7\7\7\7\7\7\3\1\0" "\0\0\0\0\0\0\0\0\0\200\300\340\360\370\370||<<<<<<||\374\370\370\360\340\340\200" "\0\0\0\0\0\300\370\376\377\377\377\17\3\1\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\77\377\377" "\377\374\360\0\0\177\377\377\377\377\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377" "\377\377\377\0\0\0\3\17\77\177\377\377\374\360\340\340\300\300\200\200\200\200\200\300\300\340\340\370\374\377\177\77" "\37\7\1\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\340\360\370\370||<<<<<<||\374\370\370\360\340\340\200" "\0\0\0\0\0\300\370\376\377\377\377\17\3\1\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\77\377\377" "\377\374\360\0\0\177\377\377\377\377\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377" "\377\377\377\0\0\0\3\17\77\177\377\377\374\360\340\340\300\300\200\200\200\200\200\300\300\340\340\370\374\377\177\77" "\37\7\1\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\17\17\17\17\7\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0<<<<<<<<<<<<<<<<<<<<<<<<<" "<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\360\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7\3\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\200\200" "\0\0\0\0\0\0\0\0\0\200\300\340\360\370\370||<<<<<<|\374\374\374\377\377\377\317\203" "\0\0\0\0\0\300\370\376\377\377\377\17\3\1\0\0\0\0\0\200\340\370\376\377\77\17\3\1\7\77\377\377" "\377\374\360\0\0\177\377\377\377\377\360\0\0\0\0\300\360\374\376\177\37\17\3\0\0\0\0\0\0\200\377\377" "\377\377\377\0\0\0\3\17\37\177\377\377\374\374\377\377\337\307\201\200\200\200\200\300\300\340\360\370\374\377\177\77" "\37\7\1\0\0\0\0 \70~\177\77\17\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\36>\377\377\374\370\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\17\7\7\0\0\0\0\0\0\0" "\0\0\0\0\0\0\376\376\376\376\376\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376\376" "\376\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\377\377\377\377\377\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377\377" "\377\0\0\0\0\0\1\17\77\177\377\377\374\370\360\340\300\300\300\300\300\300\340\360\360x>\37\377\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\3\3\3\3\3\3\1\1\0\0\0\0\3\3\3\3" "\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\370\376\377\177>\36\4\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\17\7\3\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\376\376\376\376\376\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376\376" "\376\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\377\377\377\377\377\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377\377" "\377\0\0\0\0\0\1\17\77\177\377\377\374\370\360\340\300\300\300\300\300\300\340\360\360x>\37\377\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\3\3\3\3\3\3\1\1\0\0\0\0\3\3\3\3" "\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370\374~~\374\370\340\300\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\10\34>\37\17\7\1\0\0\0\1\3\17\37\77\36\14\10\0\0\0" "\0\0\0\0\0\0\374\374\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\374" "\374\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377" "\377\0\0\0\0\0\3\37\177\377\377\377\370\360\340\300\200\200\200\200\200\200\300\340\340\360|\77\377\377\377\377" "\377\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0" "\0\0\0\0\0\0\374\374\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\374" "\374\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377" "\377\0\0\0\0\0\3\37\177\377\377\377\370\360\340\300\200\200\200\200\200\200\300\340\340\360|\77\377\377\377\377" "\377\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\370\376\377\177>\36\4\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\17\17\7\3\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\2\36~\376\376\376\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\376\376\376" "\376\36\2\0\0\0\0\0\3\17\177\377\377\376\370\300\0\0\0\0\0\0\0\0\0\300\370\377\377\377\37\7" "\0\0\0\0\0\0\0\0\0\0\0\1\7\77\377\377\377\370\340\0\0\0\300\370\376\377\377\37\7\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\37\377\377\377\374\376\377\377\37\7\0\0\0\0\0\0" "\0\0\0\0\0\200\0\0\0\0\0\0\0\0\0\200\340\370\377\377\377\37\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\16\37\37>>><>>>\37\37\17\7\7\1\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\370\370\370\370\370\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\200\300\340\360xx<<<<<<||\374\374\370\360\360\340\300" "\0\0\0\0\0\0\377\377\377\377\377\37\3\1\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\377\377\377" "\377\374\340\0\0\0\377\377\377\377\377\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377" "\377\377\177\0\0\0\377\377\377\377\377\177\370\360\340\300\300\200\200\200\200\200\200\300\300\340\360\370\374\377\177\77" "\37\7\0\0\0\0\377\377\377\377\377\0\0\1\1\3\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\177\177\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0" "\0\0\0\0\0\4\34|\374\374\374\364\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\374\374" "\374|\14\0\0\0\0\0\3\17\177\377\377\376\360\300\0\0\0\0\0\0\0\0\0\0\340\374\377\377\177\37" "\3\0\0\0\0\0\0\0\0\0\0\1\17\77\377\377\377\370\340\0\0\0\0\340\370\377\377\177\17\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\77\377\377\377\374\370\377\377\177\17\3\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\377\377\377\177\17\3\0\0\0\0\0\0\0\0" "\0\0\0\0\34>\77~||x|||>\77\37\37\17\7\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0"; #endif /* U8G2_USE_LARGE_FONTS */ /* Fontname: -FreeType-Inconsolata LGC-Medium-R-Normal--62-620-72-72-P-281-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 95/658 BBX Build Mode: 3 */ const uint8_t u8x8_font_inr46_4x8_r[24324] U8X8_FONT_SECTION("u8x8_font_inr46_4x8_r") = " ~\4\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\370\374\374\374\370\360\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\377\377\377\377\377\177\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\77\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\17\17\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\370\370\360\340\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\7\7\7\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\360\0\0\0\0\0\0\0\0\360\370\370\370\360\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\37\37\0\0\0\0\0\0\0\0\37\37\37\37\37\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\0\0\0\0\0\0\0\0\300\300\300\300\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377\1\0\0\0\0\0\0\0\377\377\377\377\17\0" "\0\0\0\0\0<<<<<<<<\377\377\377\377=<<<<<<<\376\377\377\377\77<<" "<<<<\0\0\0\0\0\0\0\0\377\377\377\377\3\0\0\0\0\0\0\0\374\377\377\377\37\0\0\0" "\0\0\0\0\70\70\70\70\70\70\70\376\377\377\377\77\70\70\70\70\70\70\70\374\377\377\377\37\34\34\34\34" "\34\34\34\0\0\0\0\0\0\0\376\377\377\377\7\0\0\0\0\0\0\0\370\377\377\377\37\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\2\3\3\3\3\0\0\0\0\0\0\0\0\3\3\3\3\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\370\10\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\340\360\370\374\374>\36\37\17\17\377\377\377\377\17\17\37\37\36>~\374\374\370" "p \0\0\0\0\0\37\177\377\377\377\370\340\300\200\0\0\377\377\377\377\0\0\0\0\0\0\0\0\1\0" "\0\0\0\0\0\0\0\0\0\1\3\3\7\17\17\37\37\37\377\377\377\377||\370\370\370\360\360\340\340\300" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\1\3\17\377\377" "\377\377\374\0\0\0\30>\77~\374\370\370\360\360\340\340\340\377\377\377\377\340\340\340\360\360\370\374\177\77\77" "\37\7\1\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\77\77\77\77\1\1\1\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300" "\300\300\0\0\360\374\377\377\17\7\7\3\7\7\37\377\377\377\374\360\0\0\0\0\0\300\360\374\377\177\37\7" "\1\0\0\0\3\17\77\77~\370\370\360\370\370\374\177\177\77\17\3\200\340\370\374\377\77\17\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\370\376\177\37\7\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\360\374\377\77\17\7\1\0\200\340\370\374|>\36\36\36>|" "\374\370\340\200\0\0\0\200\340\370\376\177\37\17\3\0\0\0\0\0\0\77\377\377\377\340\200\200\200\200\200\340" "\377\377\377\77\0\4\6\7\7\7\1\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\7\7\7\7\7" "\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\370\374\376\377\77\37\17\17\17\17\17\17\37\177\377\376\374\370\360\0\0\0\0" "\0\0\0\0\0\0\0\0\17\177\377\377\377\370\340\200\0\0\0\0\200\300\360\377\377\377\177\37\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\343\367\377\177\177\377\376\376\377\357\317\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\300\370\374\377\377\177\17\7\1\0\0\0\0\1\3\17\37\77\177\376\374\360\340\300\200\300\340\370" "\377\377~\34\37\177\377\377\377\374\340\300\200\200\0\0\0\0\0\200\200\300\300\341\363\377\377\177\177\377\377\377" "\343\300\200\0\0\0\0\3\3\7\7\17\17\17\17\17\17\17\17\17\17\7\7\3\3\1\0\0\0\0\3\17" "\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\360\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\37\37\37\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\360\360\370x`" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\374\376\177\77\17\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\377\377\377\37\3\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\370\377\377\377\377\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\77\377\377\377\377\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\7\37\377\377\377\377\370\300\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\37\77\377\377\374\370\360\340\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\17\37\77\77~\374\70" "\10\0\0\0\0\0\0\0\360\370\370\360\360\340\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\1\3\7\7\17\37\177\377\376\374\370\340\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\377\377\377\376\370\300\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\377\377\377\377\376\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\374\377\377\377\77\17\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\374\376\377\77\37\17\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\10\370|~\77\37\37\17\7\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\340\340\340\340 \0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\360\340\340\300\300\200\200\0\0\0\0\17\377\377\377\177\0\0\0\0\200\200\300\300\300\340" "\340\200\0\0\0\1\3\3\3\7\7\7\7\17\17\216\376\374\377\177\377\374\376\316\17\17\7\7\7\7\3\3" "\3\1\0\0\0\0\0\0\200\300\360\370\374\376\77\37\7\3\0\0\0\3\7\37\77\376\374\370\360\300\200\0" "\0\0\0\0\0\0\0\0\0\1\3\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\36\36\36\36\36\36\36\36\36\36\36\36\377\377\377\377\377\36\36\36\36\36\36\36\36\36\36" "\36\36\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\340\340\340\300\300\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\17\37\377\377\377\377\177\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\360\370~\77\17\7\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0xxxxxxxxxxxxxxxxxxxxxxxxx" "x\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\370\370\360\340\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\3\3\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\370\360\360" " \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\177\17\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\377\377\177\37\7\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\376\377\377\77\17\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\177\17\3\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\340\370\377\377\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\10\36\37\77\77\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\360\370\374\376\177\37\17\7\7\7\3\7\7\7\17\37\77\376\374\370\360\300\0" "\0\0\0\0\0\200\370\377\377\377\177\7\0\0\0\0\0\0\0\0\0\200\300\360\370\374~\37\177\377\377\377" "\374\300\0\0\0\377\377\377\377\377\0\0\0\0\0\200\340\360\370\374\177\37\17\7\1\0\0\0\0\377\377\377" "\377\377\0\0\0\7\177\377\377\377\374\360\370\376\77\37\17\7\1\0\0\0\0\0\0\0\0\0\360\377\377\377" "\377\17\0\0\0\0\0\3\17\37\177\377\377\374\360\340\300\300\200\200\200\200\300\300\340\360\374\377\177\77\17\3" "\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\60x\70<<>\36\37\37\17\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\60|\376~\37\17\17\7\7\7\7\7\7\7\7\17\17\37\177\377\376\374\370\340" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\341\377\377\377\377" "\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\376\177\77\37\17\3\1" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374~\77\37\17\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\340\370\374\377\377\237\217\203\201\200\200\200\200\200\200\200\200\200\200\200\200\200\200\300" "\300\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\14\36\77\37\17\17\7\7\7\7\7\7\7\7\17\17\37\177\377\376\374\370\340\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\377\377\377\177\37\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0>>\36>>\77\77\77\177\377\373\373\361\341\340\200\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\377\377\377\377\370" "\0\0\0\0\0\0@\340\360\374\370\340\340\300\300\200\200\200\200\200\200\300\300\340\360\370\377\377\177\77\37\3" "\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\370\374\177\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\376\77\37\7\3\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\200\340\360\374\376\77\37\7\3\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0<\77\77\77\77=<<<<<<<<<<<<\377\377\377\377\377<<<<" "<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\0\0\0\0\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\0\0\0\0\0\0\0\200\377\377\377\377\377\300\300\300\340\340\340\340\340\340\340\340\300\300\200\200\0\0\0" "\0\0\0\0\0\0\0\0\37\37\37\77\17\17\7\3\3\3\3\1\3\3\3\3\7\17\37\77\377\377\376\374" "\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\0\60x\374\374\374\360\340\340\300\300\200\200\200\200\200\200\300\300\340\360\370\377\377\177\77" "\17\3\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\200\200\200\0\0\0" "\0\0\0\0\0\0\0\0\0\200\340\360\370\374\376\77\37\17\17\7\7\7\3\7\7\7\7\17\37\37\17\6" "\0\0\0\0\0\0\0\300\376\377\377\377\377\3\0\0\200\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0" "\0\0\0\0\0\0\0\377\377\377\377\377\370>\37\17\7\7\3\3\3\3\3\7\7\17\37\177\377\376\374\370" "\340\0\0\0\0\0\0\77\377\377\377\377\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\203\377\377\377" "\377\377\0\0\0\0\0\0\3\17\77\177\377\377\370\360\340\300\300\200\200\200\200\200\300\340\360\370\377\377\177\77" "\17\1\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\303\363\377\377\377\177\17\3" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\377\377\77\17\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\377\77\17\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\377\177\17\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\360\376\377\377\377\37\3\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\4\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\360\374\376\377\177\37\17\7\7\7\7\7\7\7\7\17\37\377\377\376\374\370\340" "\0\0\0\0\0\0\0\0\17\77\377\377\377\374\360\300\200\0\0\0\0\0\0\0\200\340\370\377\377\177\77\17" "\0\0\0\0\0\0\0\0\0\0\200\301\343\363\367\177\77\37\37\36>>\177\177\377\367\363\341\300\200\0\0" "\0\0\0\0\0\0\340\374\376\377\377\37\3\1\0\0\0\0\0\0\0\0\0\0\0\1\3\17\377\377\377\376" "\370\0\0\0\0\0\7\37\177\377\377\377\370\360\340\300\300\200\200\200\200\200\200\300\300\340\360\374\377\377\177\77" "\17\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\360\374\376\376\177\37\17\7\7\7\3\7\7\7\17\37\77\177\376\374\370\360\200" "\0\0\0\0\0\0\0\376\377\377\377\377\303\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\377\377\377\377" "\374\0\0\0\0\0\0\1\17\37\177\377\377\374\370\360\340\300\300\300\300\300\340\340\360\360x>\377\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\3\3\3\3\3\3\1\1\0\0\340\377\377\377\377" "\77\0\0\0\0\0\0\0\200\300\340\360\340\300\300\200\200\200\200\200\200\300\300\340\360\370\376\177\77\37\7\1" "\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\360\360\360\340\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\17\17\17\17\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\360\360\360\340\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\7\7\7\3\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\340\340\340\300\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\17\37\37\37\37\37\17\7\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\360\360\340\300\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\237\377\377\377\377\37\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0 p\370~\77\17\7\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\340\340\360\360\370" "\370||\0\0\0\0\0\0\200\200\300\340\340\360\360\370\370||>>\37\37\17\17\7\7\3\1\1\0" "\0\0\0\0<>~\377\377\377\367\347\343\303\201\201\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\1\1\3\7\7\17\17\37\77>||\370\370\360\360\340\300\300\200\200\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\17\37\37\77" ">|\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360" "\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0xxxxxxxxxxxxxxxxxxxxxxxxxxx" "xxx\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\370\360\360\340\340\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\1\1\3\3\7\7\17\17\37\37>>||\370\360\360\340\340\300\300\200\200\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\203\207\307\317\377\377\376\376" "\374|x\0\0\0\0\0\0\0\200\200\300\300\340\340\360\370\370||>>\37\17\17\7\7\3\1\1\0" "\0\0\0\0\370\374|>>\37\37\17\17\7\3\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\340\340\360\360\360\370\370\370x\370\370\370\370\360\360\340\340\300\200\0\0" "\0\0\0\0\0\0\4\16\37\77\37\7\3\3\1\0\0\0\0\0\0\0\0\1\1\3\17\377\377\377\376\370" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\374\377\377\377\77\17" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\376\377\177\37\17\7\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\360\360\360\360\360\300\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7\7\7\7\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\200\0\0\0\0" "\0\0\0\0\0\0\0\300\340\370\374\374>\37\37\17\7\7\7\7\3\7\7\7\7\17\17\37\77\376\374\370" "\360\300\0\0\200\370\377\377\177\7\1\0\0\0\0\0\0\300\340\360\360\370x|<<<<<<\377\377" "\377\377\376\0\377\377\377\377\0\0\0\0\0\0\0\374\377\377\377\203\1\0\0\0\0\0\0\0\0\300\377\377" "\377\377\377\0\3\77\377\377\376\340\200\0\0\0\0\1\7\17\37\77>|||||<>\37\17\77\77" "\77\77\77\0\0\0\1\7\17\77\177\376\374\370\360\340\340\300\300\200\200\200\200\200\200\200\200\300\300\340\340\200" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\300\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\374\377\377\377\377\370\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\177\17\1\3\37\377\377\376\370\300\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\360\376\377\377\37\3\0\0\0\0\0\0\7\37\377\377\376\370\300\0\0\0" "\0\0\0\0\0\0\0\340\374\377\377\177\77<<<<<<<<<<<<\77\177\377\377\376\370\300" "\0\0\0\0\300\370\377\377\377\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\177\377\377" "\376\370\300\0\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7" "\7\7\7\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\7\7\7\7\7\7\17\37\77\377\377\376\374\370" "\300\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370\377\377\377\77" "\17\0\0\0\0\377\377\377\377\377\36\36\36\36\36\36\36\36\37\37\37\37\77\77\77\177\377\373\363\341\340\300" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\377\377\377" "\377\374\0\0\0\377\377\377\377\377\200\200\200\200\200\200\200\200\200\200\300\300\300\300\300\340\360\370\376\377\177\77" "\37\7\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\200\0\0\0" "\0\0\0\0\0\0\0\0\300\340\370\374\376\376\77\37\17\17\7\7\7\7\3\7\7\7\7\17\37\77\177\376" "\374\370\360\300\0\200\370\377\377\377\377\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3" "\1\1\0\0\0\377\377\377\377\377\203\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\7\177\377\377\377\377\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\3\17\37\77\177\377\376\370\360\340\340\300\300\200\200\200\200\200\200\300\300\340\360\360\374" "\374x\70\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\7\7\7\7\7\7\17\37\77\177\376\376\374\360\340\200" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\77\377\377\377" "\376\360\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\377" "\377\17\0\0\0\377\377\377\377\377\200\200\200\200\200\300\300\300\300\300\300\340\340\360\370\374\376\177\77\37\17\3" "\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\3\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200" "\200\200\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\0\0\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\377\377\377\377\377\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\0\0\0" "\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0" "\0\0\0\0\0\0\0\300\340\370\374\374~\77\37\17\17\7\7\7\7\3\7\7\7\7\17\17\37\77\376\376" "\374x \0\200\370\377\377\377\377\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1" "\0\0\0\0\377\377\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340" "\340\340\340\0\7\177\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\377\377" "\377\377\377\0\0\0\3\17\37\77\177\377\374\370\360\340\340\300\300\200\200\200\200\200\200\200\300\300\340\340\377\377" "\377\377\177\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\7\3\3\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300" "\300\300\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\377\377\377\377\377\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\377\377\377" "\377\377\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0" "\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\377\377\377\377\377\3\3\3\3\3\3\3\3\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\377\377\377\377\377\200\200\200\200\200\200\200\200\200\0\0" "\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\377\377\377\377\377\3\3\3\3" "\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0@\340\360\370\360\340\300\300\200\200\200\200\200\300\300\340\360\377\377\377\177\37\3\0\0\0\0" "\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300" "\300@\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374~\77\37\17\7\3" "\0\0\0\0\0\377\377\377\377\377\0\0\0\200\300\340\360\370\374\177\77\37\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\370~\77\37\37\177\377\377\371\360\340\200\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\3\7\37\77\377\377\374\370\360\300\200\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\1\7\17\77\177\377\376\374\370\340" "\300\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\7" "\7\7\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200" "\200\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300" "\300\300\300\0\0\377\377\377\377\377\377\374\360\300\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\377" "\377\377\377\0\0\377\377\377\377\377\3\17\77\377\377\374\360\300\0\0\0\0\200\340\370\376\377\77\17\3\377\377" "\377\377\377\0\0\377\377\377\377\377\0\0\0\0\3\17\77\377\377\370\370\376\377\77\17\3\0\0\0\0\377\377" "\377\377\377\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\3\7\7\3\0\0\0\0\0\0\0\0\377\377" "\377\377\377\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\377\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300" "\300\300\0\0\0\377\377\377\377\377\377\377\374\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\3\17\37\177\377\376\370\340\200\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\1\7\37\177\377\377\374\360\300\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\374\370\340\200\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\37\177\377\377\377\377" "\377\377\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370\374\376\177\77\37\17\7\7\7\7\7\7\7\7\17\17\37\77\376\376\374\370" "\340\300\0\0\300\374\377\377\377\377\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\377\377" "\377\377\377\360\377\377\377\377\377\201\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377" "\377\377\377\377\7\177\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\370\377" "\377\377\377\37\0\0\3\17\37\77\177\377\374\370\360\340\300\300\200\200\200\200\200\300\300\340\360\370\374\377\177\77" "\37\7\1\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\7\7\7\7\7\17\37\77\377\377\376\374" "\360\300\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377" "\377\177\0\0\0\0\377\377\377\377\377xxxxxxxxxx||||~>\77\37\37\17\7" "\1\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370\374\376\177\77\37\17\7\7\7\7\7\7\7\7\17\37\37\177\376\376\374\370" "\340\300\0\0\200\374\377\377\377\377\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\377\377" "\377\377\376\360\377\377\377\377\377\201\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377" "\377\377\377\377\17\377\377\377\377\377\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\374\377" "\377\377\377\77\0\0\7\17\77\177\377\376\374\360\340\300\200\200\200\200\0\200\200\200\300\300\340\360\374\377\377\177" "\37\7\1\0\0\0\0\0\0\0\0\1\3\7\7\7\17\17\377\377\377\377\217\17\7\7\7\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\17\37\37\37>>><>>>>" ">>\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\7\7\7\7\7\17\37\77\377\377\376\374" "\360\300\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377" "\377\177\0\0\0\0\377\377\377\377\377xxxxxxxxx\370\374\374\374\374~>\77\37\37\17\7" "\1\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\374\360\340\200\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\376\370" "\340\200\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7" "\7\7\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0" "\0\0\0\0\0\0\0\200\360\370\374\376\377\37\17\17\7\7\7\7\3\7\7\7\7\17\17\37\77~\376<" "\30\0\0\0\0\0\0\17\177\377\377\377\374\360\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\1\3\7\7\17\17\37\37\37>>~||\370\370\370\360\360\340\300\300" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\377\377" "\377\376\374\0\0\0p\374\376\374\370\360\340\340\300\300\200\200\200\200\200\200\200\200\300\300\340\360\370\374\377\377" "\177\37\7\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\300\0\3\3\3\3\3\3\3\3\3\3\3\3\3\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3" "\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300" "\300\300\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\377\377\377\377\377\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\1\17\77\177\377\377\374\360\340\340\300\300\200\200\200\200\200\200\300\300\340\360\370\377\377\177\77" "\37\7\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "\300\300\300\300\1\17\177\377\377\377\370\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377" "\377\77\7\0\0\0\0\3\37\377\377\377\376\360\200\0\0\0\0\0\0\0\0\0\0\200\360\376\377\377\77\17" "\1\0\0\0\0\0\0\0\0\0\7\77\377\377\377\374\340\0\0\0\0\0\0\300\370\377\377\177\17\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\1\17\177\377\377\377\370\300\200\360\376\377\377\37\3\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\37\377\377\377\377\377\77\7\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\300\300\300\300\377\377\377\377\360\0\0\0\0\0\0\0\0\0\340\376\376\370\300\0\0\0\0\0\0\0\0\340" "\377\377\377\37\0\177\377\377\377\374\0\0\0\0\0\0\340\376\377\177\377\377\377\374\300\0\0\0\0\0\360\377" "\377\377\17\0\0\0\37\377\377\377\376\200\0\0\360\377\377\77\7\0\0\17\377\377\377\374\340\0\0\360\377\377" "\377\3\0\0\0\0\0\7\377\377\377\377\360\377\377\77\3\0\0\0\0\0\0\7\177\377\377\376\370\377\377\177" "\0\0\0\0\0\0\0\0\1\177\377\377\377\77\3\0\0\0\0\0\0\0\0\0\0\7\177\377\377\377\37\0" "\0\0\0\0\0\0\0\0\0\0\7\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0@\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300" "\300@\0\0\0\0\1\7\37\177\377\377\374\360\300\0\0\0\0\0\0\0\0\0\300\360\374\376\377\77\37\7" "\1\0\0\0\0\0\0\0\0\0\1\3\17\77\377\377\376\370\340\200\340\360\374\377\377\77\17\3\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\203\357\377\377\377\377\377\377\303\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\177\37\7\1\7\37\77\377\377\376\370\340\200\0\0\0" "\0\0\0\0\0\0\200\340\360\374\377\377\77\37\7\1\0\0\0\0\0\0\0\0\3\17\77\177\377\376\374\360" "\300\0\0\0\0\6\7\7\7\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7" "\7\7\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300" "\300\300@\0\0\3\17\77\377\377\376\370\340\200\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\377\77" "\7\1\0\0\0\0\0\0\0\3\17\77\377\377\376\370\340\200\0\0\0\0\300\360\374\377\377\77\17\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\376\370\374\377\377\177\37\3\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\303\343\373\377\377\177\77" "\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\374\377\377\77\17\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\374\377\377\77\17\7\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\340\370\374\377\377\77\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\340\370\374\377\377\377\237\207\203\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200" "\200\300\300\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\374\374\374\374\374<<<<<<<<<<<<<<<<" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1" "\0\0\0\0\0\0 \360\360\370\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\3\17\77\377\377\376\370\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\7\37\177\377\377\374\360\300\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\77\377\377\376\370\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\376\360\300\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\37\177\377\377\374\360\300\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\77\37\36" "\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0<<<<<<<<<<<<<<<<\374\374\374\374\374\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\200\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\376\377\77\177\377\376\370\340\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\340\370\374\377\77\37\7\1\0\0\0\1\7\17\77\377\376\370\340\200\0\0" "\0\0\0\0\0\0\0\0\1\1\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\340\340\340\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\0\0\0\0\0\0\0\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\376\374\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\1\3\17\77\177\377\377\376\370\200\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\77\177\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0 p\370\370|<>>\36\36\36\36\36\36\36>>~\374\374\370\360\340\300" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\300\300\300\300\300\300\300\300\300\300\303\377\377\377\377" "\377\0\0\0\0\300\360\370\374\376\177\37\17\17\7\7\7\7\7\7\7\7\3\3\3\3\3\203\377\377\377\377" "\377\0\0\0\0\17\77\177\377\377\374\360\340\340\300\300\300\300\300\300\340\340\340\360\370|~\77\377\377\377\377" "\377\0\0\0\0\0\0\0\0\1\1\3\3\3\3\3\3\3\3\3\3\1\1\1\0\0\0\0\3\3\3\3" "\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\370\370\370\370\370\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\200\300\340\360xx<<<<<||\374\374\370\370\360\340\300\200" "\0\0\0\0\0\0\377\377\377\377\377\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\77\377\377\377" "\376\360\0\0\0\0\377\377\377\377\377\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\377\377\377\377\377\177\370\360\340\300\300\200\200\200\200\200\200\300\300\340\360\374\377\377\177\37" "\7\1\0\0\0\0\7\7\7\7\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\3\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374||>>\36\36\36\36\36\36>>>|\374\370\370" "\360\340@\0\0\0\340\374\377\377\377\177\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3" "\1\0\0\0\0\0\77\377\377\377\377\370\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\1\7\17\77\177\177\376\374\370\360\340\340\300\300\300\300\300\300\300\340\340\360\360\370\374" "x \0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\3\3\3\3\3\3\3\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\370" "\370\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\0\0\300\340\360\360\370\370||<<<<<<|x\370\360\340\300\377\377\377\377" "\377\0\0\0\0\340\374\377\377\377\177\7\1\0\0\0\0\0\0\0\0\0\0\0\0\1\3\37\377\377\377\377" "\377\0\0\0\0\377\377\377\377\377\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377" "\377\0\0\0\0\0\7\37\177\377\377\376\370\360\340\300\300\200\200\200\200\200\300\300\340\360|\77\377\377\377\377" "\377\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\340\360\370\370||>>\36\36\36\36\36\36>>|\374\370\370\360\340\200" "\0\0\0\0\0\340\374\377\377\377\337\303\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\301\377\377\377\377" "\376\200\0\0\0\177\377\377\377\377\363\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\1\0\0\0\0\3\17\37\77\177\377\374\370\360\340\340\340\300\300\300\300\300\300\300\340\340\360\360\370x\60" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\3\3\3\3\3\3\3\3\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\360\370\370||||||||\370\370" "\360\360\340\300\0\0\0\0\0\0\0\0\0\370\377\377\377\377\37\3\1\0\0\0\0\0\0\0\0\0\0\0" "\1\7\7\1\0\0\360\360\360\360\360\360\360\377\377\377\377\377\360\360\360\360\360\360\360\360\360\360\360\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\360\370\374\374~>\36\36\36\36\36\36>>|\370\360\370\370\274<\36\36" "\36\36\36\30\0\0>\377\377\377\377\343\200\0\0\0\0\0\0\0\0\0\0\0\301\377\377\377\377~\0\0" "\0\0\0\0\0\0\0\1\203\307\357\377\77\77>><<<<<>>\37\37\17\7\3\1\0\0\0" "\0\0\0\0\0\0\0\17\77\277\377\374\370\370\370\370\370\360\360\360\360\360\360\360\360\360\360\360\360\340\340\300" "\200\0\0\0\360\374\376\377\377\317\203\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\201\303\377\377\377" "\377\177\0\0\0\3\7\17\17\37\37\37\36>>>>><<>>>>\36\37\37\37\17\17\7\3" "\1\0\0\0\0\0\0\370\370\370\370\370\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\377\377\377\377\377\0\200\340\340\360xx<<<<<||\374\374\370\360\340\300" "\0\0\0\0\0\0\0\377\377\377\377\377\77\7\3\1\0\0\0\0\0\0\0\0\0\0\0\3\377\377\377\377" "\377\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0<<<<<<<<\374\374\374\374\374\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\377\377\377\377\377\200\200\200\200\200\200\200\200\0\0" "\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0<<<<<<<<<<<<\374\374\374\374\374\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\300\200\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377\377\177\0\0\0\0" "\0\0\0\0\0\0\16\17\37\77>>|||||||<>\77\37\17\17\7\1\0\0\0\0\0" "\0\0\0\0\0\0\370\370\370\370\370\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374|<\34\14" "\4\0\0\0\0\0\377\377\377\377\377\0\0\200\300\340\360\370\374\376\77\37\17\7\7\3\1\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377>\37\17\7\7\7\37\77\177\377\376\370\360\340\300\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\3\7\17\77\177\377\376\374\370\360\300" "\200\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7\7" "\7\7\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0xxxxxxxxxx\370\370\370\370\370\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200\377\377\377\377\377\200\200\200\200\200\200\200\200\200\200" "\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\376\376\376\376\376\340\370<\34\36\36\36~\376\376\374\370\340\360\370<\36\36\36\36>\376\376" "\376\374\360\0\377\377\377\377\377\7\0\0\0\0\0\0\0\377\377\377\377\377\7\0\0\0\0\0\0\0\377\377" "\377\377\377\0\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377" "\377\377\377\0\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377" "\377\377\377\0\3\3\3\3\3\0\0\0\0\0\0\0\0\3\3\3\3\3\0\0\0\0\0\0\0\0\3\3" "\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\376\376\376\376\376\200\300\360\360x<<\36\36\36\36\36>>~\376\374\370\360\340" "\200\0\0\0\0\0\0\377\377\377\377\377\37\3\1\0\0\0\0\0\0\0\0\0\0\0\0\1\377\377\377\377" "\377\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\0\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3" "\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360\370\374|>>\36\36\36\36\36\36>>~\374\374\370\360\360\300" "\200\0\0\0\0\340\374\377\377\377\177\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\37\377\377" "\377\376\370\0\0\77\377\377\377\377\370\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377" "\377\377\377\0\0\0\1\7\37\77\177\177\376\370\360\360\340\340\300\300\300\300\300\340\340\360\360\374\376\177\77\37" "\17\3\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\3\3\3\3\3\3\3\3\1\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\376\376\376\376\376\300\340\360x<<\36\36\36\36\36\36>>~\376\374\370\370\360\340" "\200\0\0\0\0\0\377\377\377\377\377\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\177\377\377" "\377\376\360\0\0\0\377\377\377\377\377\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\377\377" "\377\377\77\0\0\0\377\377\377\377\377\77|\370\360\340\340\300\300\300\300\300\300\340\340\360\370\374\376\177\77\37" "\17\3\0\0\0\0\377\377\377\377\377\0\0\0\0\1\3\3\3\3\3\3\3\3\3\3\1\1\0\0\0\0" "\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\360\370\374|~>>\36\36\36\36\36\36><|\370\360\340\376\376\376" "\376\376\0\0\0\340\376\377\377\377\77\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\377\377\377\377" "\377\377\0\0\0\77\377\377\377\377\370\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\0\0\0\0\1\17\37\77\177\377\376\370\360\340\340\300\300\300\300\300\300\340\340\360x>\37\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\3\3\3\3\3\3\1\1\0\0\0\0\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\376\376\376\376\376\200\300\360\360\370|<>>\36\36\36\36\36\36>~\374" "\374x\20\0\0\0\0\0\0\377\377\377\377\377\377\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\1\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\340\360\370\370\374|>>\36\36\36\36\36\36\36>>|\374\374\370\360\340" "@\0\0\0\0\0\0\0\17\77\177\377\377\374\360\340\340\300\300\300\300\200\200\200\0\0\0\0\1\3\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\7\7\7\17\17\17\37\37\77~\376\374\370\360" "\340\0\0\0\0\0\60|\177\374\374\370\360\360\340\340\300\300\300\300\300\300\300\340\340\340\360\370\377\377\177\77" "\17\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\3\3\3\3\3\3\3\3\3\3\1\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376\376\377\37\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0<<<<<<<\274\377\377\377\377\377<<<<<<<<<<<\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\7\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\177\377\377\377\376\360\300\300\200\200\200\200\200\300\300\340\340" "\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\3\3\3" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\374\374\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\374" "\374\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377" "\377\0\0\0\0\0\3\37\177\377\377\377\370\360\340\300\200\200\200\200\200\200\300\340\340\360|\77\377\377\377\377" "\377\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\34|\374\374\374\364\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\374\374" "\374<\0\0\0\0\0\3\17\177\377\377\376\370\300\0\0\0\0\0\0\0\0\0\0\200\340\374\377\377\77\17" "\1\0\0\0\0\0\0\0\0\0\1\17\77\377\377\377\370\340\0\0\0\0\300\360\376\377\177\37\7\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\77\377\377\377\374\370\377\377\77\17\3\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7\7\7\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\374\374\374\354\0\0\0\0\0\0\0\0\0\200\340\340\340\200\0\0\0\0\0\0\0\0\0\374" "\374\374\374\14\37\377\377\377\374\200\0\0\0\0\0\200\370\377\377\77\377\377\374\340\0\0\0\0\0\0\370\377" "\377\377\7\0\0\3\177\377\377\377\360\0\0\200\370\377\377\37\1\0\3\37\377\377\376\360\200\0\0\370\377\377" "\177\3\0\0\0\0\0\17\377\377\377\376\370\377\377\17\0\0\0\0\0\0\1\17\377\377\377\370\376\377\377\37" "\0\0\0\0\0\0\0\0\1\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\14\34|\374\374\370\360\300\200\0\0\0\0\0\0\0\0\0\200\340\360\374\374|<\14" "\4\0\0\0\0\0\0\0\0\0\3\7\17\77\177\376\374\370\340\300\340\370\374\377\177\37\17\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\361\377\377\377\77\377\377\377\360\340\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\370\374\377\177\77\17\7\1\0\0\0\1\7\17\37\177\377\376\370\360\300\200" "\0\0\0\0\0\4\6\7\7\7\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\7\7" "\7\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\4<\374\374\374\374\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\374\374\374" "\374<\4\0\0\0\0\0\7\37\377\377\377\374\360\200\0\0\0\0\0\0\0\0\0\200\360\376\377\377\77\17" "\1\0\0\0\0\0\0\0\0\0\0\3\17\177\377\377\376\360\300\0\0\0\200\360\374\377\377\77\17\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\77\377\377\376\370\374\377\377\77\17\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\361\377\377\377\77\7\1\0\0\0\0\0\0\0\0" "\0\0\0\0\34\77>|||x|||>\77\37\17\17\3\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0<<<<<<<<<<<<<<<<<<\274\374\374\374\374\374|<" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\374\376\177\37\17\7\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\374\376\177\77\37\17\3\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300\360\370\374\376\377\237\217\207\203\201\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200" "\300\300\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\300\300\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\376\377\377\37\17\7\7\7\7\3\3\3\3\3\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\300\360\377\377\377\77\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\17\17\37\37\37\77\77\377\371\361\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\300\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\37\77\177\377\376\374\370\360\360\360\360\360\360\360\360\360\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\370\370\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\3\3\3\3\3\7\7\7\7\17\37\77\377\376\374\370\340\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\77\177\377\377\370\300\200\200\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\361\371\373\177\77\37\37\37" "\17\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\377\377\377\377\3\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360\360\370\370\374\377\177\77\77\17\3\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\340\360\370\374|>\36\36\36\36>>|\374\370\360\340\340\300\300\200\300\300\340\360\370" "\376|\70\0\0\0\1\1\1\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\3\3\3\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: -FreeType-Inconsolata LGC-Medium-R-Normal--62-620-72-72-P-281-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 18/658 BBX Build Mode: 3 */ const uint8_t u8x8_font_inr46_4x8_n[6916] U8X8_FONT_SECTION("u8x8_font_inr46_4x8_n") = " :\4\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\340\340\340\340 \0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\360\340\340\300\300\200\200\0\0\0\0\17\377\377\377\177\0\0\0\0\200\200\300\300\300\340" "\340\200\0\0\0\1\3\3\3\7\7\7\7\17\17\216\376\374\377\177\377\374\376\316\17\17\7\7\7\7\3\3" "\3\1\0\0\0\0\0\0\200\300\360\370\374\376\77\37\7\3\0\0\0\3\7\37\77\376\374\370\360\300\200\0" "\0\0\0\0\0\0\0\0\0\1\3\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\36\36\36\36\36\36\36\36\36\36\36\36\377\377\377\377\377\36\36\36\36\36\36\36\36\36\36" "\36\36\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\340\340\340\300\300\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\17\37\377\377\377\377\177\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\360\370~\77\17\7\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0xxxxxxxxxxxxxxxxxxxxxxxxx" "x\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\370\370\360\340\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\3\3\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\370\360\360" " \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\177\17\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\377\377\177\37\7\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\376\377\377\77\17\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\177\17\3\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\340\370\377\377\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\10\36\37\77\77\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\360\370\374\376\177\37\17\7\7\7\3\7\7\7\17\37\77\376\374\370\360\300\0" "\0\0\0\0\0\200\370\377\377\377\177\7\0\0\0\0\0\0\0\0\0\200\300\360\370\374~\37\177\377\377\377" "\374\300\0\0\0\377\377\377\377\377\0\0\0\0\0\200\340\360\370\374\177\37\17\7\1\0\0\0\0\377\377\377" "\377\377\0\0\0\7\177\377\377\377\374\360\370\376\77\37\17\7\1\0\0\0\0\0\0\0\0\0\360\377\377\377" "\377\17\0\0\0\0\0\3\17\37\177\377\377\374\360\340\300\300\200\200\200\200\300\300\340\360\374\377\177\77\17\3" "\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\60x\70<<>\36\37\37\17\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\60|\376~\37\17\17\7\7\7\7\7\7\7\7\17\17\37\177\377\376\374\370\340" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\341\377\377\377\377" "\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\376\177\77\37\17\3\1" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374~\77\37\17\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\340\370\374\377\377\237\217\203\201\200\200\200\200\200\200\200\200\200\200\200\200\200\200\300" "\300\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\14\36\77\37\17\17\7\7\7\7\7\7\7\7\17\17\37\177\377\376\374\370\340\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\377\377\377\177\37\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0>>\36>>\77\77\77\177\377\373\373\361\341\340\200\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\377\377\377\377\370" "\0\0\0\0\0\0@\340\360\374\370\340\340\300\300\200\200\200\200\200\200\300\300\340\360\370\377\377\177\77\37\3" "\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\370\374\177\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\376\77\37\7\3\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\200\340\360\374\376\77\37\7\3\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0<\77\77\77\77=<<<<<<<<<<<<\377\377\377\377\377<<<<" "<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\0\0\0\0\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\0\0\0\0\0\0\0\200\377\377\377\377\377\300\300\300\340\340\340\340\340\340\340\340\300\300\200\200\0\0\0" "\0\0\0\0\0\0\0\0\37\37\37\77\17\17\7\3\3\3\3\1\3\3\3\3\7\17\37\77\377\377\376\374" "\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\0\60x\374\374\374\360\340\340\300\300\200\200\200\200\200\200\300\300\340\360\370\377\377\177\77" "\17\3\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\200\200\200\0\0\0" "\0\0\0\0\0\0\0\0\0\200\340\360\370\374\376\77\37\17\17\7\7\7\3\7\7\7\7\17\37\37\17\6" "\0\0\0\0\0\0\0\300\376\377\377\377\377\3\0\0\200\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0" "\0\0\0\0\0\0\0\377\377\377\377\377\370>\37\17\7\7\3\3\3\3\3\7\7\17\37\177\377\376\374\370" "\340\0\0\0\0\0\0\77\377\377\377\377\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\203\377\377\377" "\377\377\0\0\0\0\0\0\3\17\77\177\377\377\370\360\340\300\300\200\200\200\200\200\300\340\360\370\377\377\177\77" "\17\1\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\303\363\377\377\377\177\17\3" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\377\377\77\17\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\377\77\17\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\377\177\17\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\360\376\377\377\377\37\3\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\4\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\360\374\376\377\177\37\17\7\7\7\7\7\7\7\7\17\37\377\377\376\374\370\340" "\0\0\0\0\0\0\0\0\17\77\377\377\377\374\360\300\200\0\0\0\0\0\0\0\200\340\370\377\377\177\77\17" "\0\0\0\0\0\0\0\0\0\0\200\301\343\363\367\177\77\37\37\36>>\177\177\377\367\363\341\300\200\0\0" "\0\0\0\0\0\0\340\374\376\377\377\37\3\1\0\0\0\0\0\0\0\0\0\0\0\1\3\17\377\377\377\376" "\370\0\0\0\0\0\7\37\177\377\377\377\370\360\340\300\300\200\200\200\200\200\200\300\300\340\360\374\377\377\177\77" "\17\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\360\374\376\376\177\37\17\7\7\7\3\7\7\7\17\37\77\177\376\374\370\360\200" "\0\0\0\0\0\0\0\376\377\377\377\377\303\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\377\377\377\377" "\374\0\0\0\0\0\0\1\17\37\177\377\377\374\370\360\340\300\300\300\300\300\340\340\360\360x>\377\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\3\3\3\3\3\3\1\1\0\0\340\377\377\377\377" "\77\0\0\0\0\0\0\0\200\300\340\360\340\300\300\200\200\200\200\200\200\300\300\340\360\370\376\177\77\37\7\1" "\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\360\360\360\340\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\17\17\17\17\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\360\360\360\340\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\7\7\7\3\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: -FreeType-Inconsolata LGC-Bold-R-Normal--30-300-72-72-P-147-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Emboldened by MihailJP. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 191/658 BBX Build Mode: 3 */ const uint8_t u8x8_font_inb21_2x4_f[14340] U8X8_FONT_SECTION("u8x8_font_inb21_2x4_f") = " \377\2\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0x\374\374\374\370\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\0\0" "\0\0\0\0\0\0\0\0\0\340\363\363\363\340\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\370\374\374\0\0\0\370\374\374\0\0\0\0\0\0\0\7\7\7\0\0\0\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\360\360\20\0\0\360\360\360\20\0\0\16\16\16\356\377\377\17\6\6\366\377\377" "\37\16\16\16\7\7\347\377\377\37\7\7\367\377\377\17\7\7\7\0\0\0\1\1\1\0\0\0\1\1\1\0" "\0\0\0\0\0\0\200\300\340\340p\374\374\374tp\340\340\300@\0\0\7\37\37\77\70\377\377\377\360\340" "\340\301\301\200\0\0\70|p\340\340\377\377\377\340\340q\177\77\37\0\0\0\0\0\0\0\3\3\3\0\0" "\0\0\0\0\300\340\360\360p\360\360\340\300\0\0\300\360\360p\20\7\17\37\37\34\37\317\357\377\376\77\17" "\7\1\0\0\0\200\340\360\374\77\37\7}\376\377\307\307\377\376\376\0\1\1\1\0\0\0\0\0\0\1\1" "\1\1\0\0\0\0\200\340\340\360pp\360\360\340\300\0\0\0\0\0\0\207\337\377\377\370\360\370\277\37\17" "\0\200\200\0>\177\377\377\341\300\300\301\343\357\377~|\377\357\307\0\0\0\1\1\1\1\1\1\0\0\0" "\0\1\1\0\0\0\0\0\0\0\0\370\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360x<\34\20\0\0\0\0\0\360\376\377\377\7\1\0\0" "\0\0\0\0\0\0\0\0\17\177\377\377\340\200\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37<" "\70x\20\0\0\0<\70x\360\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\377\376\370" "\0\0\0\0\0\0\0\0\0\0\0\300\360\377\377\77\0\0\0\0\0\20p\70<\36\37\17\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\200\200\0\0\0\0\0\0\20<\70\70\60\360\343\377\377\347\360\60" "\70\70<\0\0\0\10\36\37\17\3\1\1\3\17\37\36\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0\340\340\340\340\340\340\377\377\377\340\340\340" "\340\340\340\0\0\0\0\0\0\0\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0\0\0\0\0\0\0\0\0\61;\37\17\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0ppppppppppp" "pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\360\60\0\0\0\0\0\0\0\200\340\370\376\77\17" "\3\0\0\0\0\0\200\340\370\376\77\17\3\0\0\0\0\0\0\0\0\2\7\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\360ppp\360\340\340\300\0\0\0\370\377\377\377\3\0\300\340x<\17" "\77\377\377\374\0\3\37\77\177\376\347\303\300\300\340\360\377\177\37\7\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\200\300\300\340\340\360\360\360\0\0\0\0\0\0\0\0\0\1\0\0\0\377\377\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0" "\0\0\0\0\0\200\300\340\340pppp\360\340\340\300\200\0\0\0\0\1\3\0\0\0\200\200\300\361\377" "\177\37\0\0\0\300\340\370\374\336\317\307\303\301\301\300\300\300\0\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\0\0\0\0@\300\340\360pppp\360\340\340\300\0\0\0\0\0\0\0ppppx\370\377" "\337\217\0\0\0\0`\360\360\340\300\300\300\300\340\373\377\177\37\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\360\360\0\0\0\0\0\200\300\360\370<\17\7\1\377\377" "\377\0\0\0\0\16\17\17\17\16\16\16\16\16\377\377\377\16\16\16\0\0\0\0\0\0\0\0\0\0\1\1" "\1\0\0\0\0\0\360\360\360ppppppppp\0\0\0\0\77\177\177\70\34\34\34\34<\370" "\370\360\300\0\0 p\370\360\340\300\300\300\300\340\375\177\77\37\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\200\300\340\360pppp\360\340`\0\0\0\374\377\377\377\71<\34\34\34<\370" "\370\360\300\0\0\17\77\177\377\360\340\300\300\300\340\375\177\77\17\0\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0ppppppppp\360\360\360p\0\0\0\0\0\0\0\0\200\340\374\377\77" "\7\1\0\0\0\0\0\0\200\360\374\377\77\7\0\0\0\0\0\0\0\0\0\0\1\1\1\1\0\0\0\0" "\0\0\0\0\0\0\200\300\340\340pppp\360\340\340\300\0\0\0\0\7\237\377\377xp`\360\370\377" "\237\217\0\0\0\36\177\377\377\340\300\300\300\300\341\377\377\177\36\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\300\340\340\360pppp\340\340\300\200\0\0\0\37\177\377\373\340\300\300\300\300\340\367" "\377\377\376\0\0@\340\360\340\301\301\301\301\341\360\177\77\37\7\0\0\0\0\0\1\1\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70|||\70\0\0" "\0\0\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70|||\70\0\0" "\0\0\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0\0\0\0\0\0\0\0\0\61;\37\17\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\340`\360\360\370\370\234\234\16\16\17\7\7" "\3\3\1\1\0\0\1\1\3\3\7\7\17\16\34<\70xp\360\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\16\16\16\16\16\16\16\16\16\16\16" "\16\16\16\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\17\16\36\234\274\370" "\370\360\360`px\70<\34\36\16\17\7\3\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 p\360x\70\34\34\34\34<\370\370\360\300\0\0\0\0\0\0\0\0\300\360\360x>" "\37\17\7\0\0\0\0\0\0\0\340\361\361\361\340\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0" "\0\0\0\0\0\0\200\300\340\340\360pppp\360\340\340\300\0\370\377\377\377\3\360\370\374\374\36\16\16" "\317\377\377\377\3\37\77\177\370\360\343\303\307\307\307\307\343\347\7\7\0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\0\0\0\0\0\300\360\340\200\0\0\0\0\0\0\0\0\0\300\370\377\37\7\37\177\374\360" "\200\0\0\0\300\370\377\77\7\7\7\7\7\7\7\37\177\376\360\300\1\1\1\0\0\0\0\0\0\0\0\0" "\0\1\1\1\0\360\360\360ppppppp\360\340\340\300\0\0\377\377\377ppppppp\370" "\377\337\217\0\0\377\377\377\300\300\300\300\300\300\300\340\377\377\177\37\0\1\1\1\1\1\1\1\1\1\1\1" "\0\0\0\0\0\0\200\300\340\340\360pppp\360\340\340\300\0\370\377\377\377\3\0\0\0\0\0\0\0" "\1\3\3\1\3\37\77\177\370\360\340\300\300\300\300\340\360\360p \0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\360\360\360ppppp\360\360\340\300\300\0\0\0\377\377\377\0\0\0\0\0\0\0\3" "\77\377\377\374\0\377\377\377\300\300\300\300\300\340\340\370\177\77\37\3\0\1\1\1\1\1\1\1\1\1\0\0" "\0\0\0\0\0\360\360\360ppppppppppp\0\0\377\377\377pppppppp" "pp\0\0\0\377\377\377\300\300\300\300\300\300\300\300\300\300\300\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\0\0\360\360\360ppppppppppp\0\0\377\377\377ppppppp" "pp\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\340\360pppp\360\340\340\300\200\370\377\377\377\3\0\0\0\0\300\300\300" "\301\303\301\300\7\37\77\177\370\340\340\300\300\301\301\301\341\377\377\177\0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\360\360\360\20\0\0\0\0\0\0\0\360\360\360\20\0\377\377\377pppppppp" "\377\377\377\0\0\377\377\377\0\0\0\0\0\0\0\0\377\377\377\0\0\1\1\1\0\0\0\0\0\0\0\0" "\1\1\1\0\0\0pppp\360\360\360ppppp\0\0\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\300\300\300\300\377\377\377\300\300\300\300\300\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\1\0\0\0\0\0\0\0pppp\360\360\360pppp\0\0\0\0\0\0\0\0\0\377\377\377" "\0\0\0\0\0`\360\340\300\300\300\300\340\377\177\77\0\0\0\0\0\0\0\0\1\1\1\1\1\0\0\0" "\0\0\0\0\360\360\360\20\0\0\0\0\0\300\340\360p\60\20\0\377\377\377\340p\370\374\336\217\7\3\1" "\0\0\0\0\377\377\377\0\0\0\1\7\17\77~\370\360\340\200\0\1\1\1\0\0\0\0\0\0\0\0\0" "\1\1\1\1\0\360\360\360\20\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\300\300\300\300\300\300\300\300\300\300\300\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\360\360\360\340\200\0\0\0\0\0\0\300\360\360\360\0\377\377\377\7\37~\370\340\360|\37\7" "\377\377\377\0\377\377\377\0\0\0\1\3\1\0\0\0\377\377\377\0\1\1\1\0\0\0\0\0\0\0\0\0" "\1\1\1\0\0\360\360\360\360\300\0\0\0\0\0\0\0\360\360\360\0\377\377\377\3\17\37|\370\340\200\0" "\0\377\377\377\0\377\377\377\0\0\0\0\1\7\17>\374\377\377\377\0\1\1\1\0\0\0\0\0\0\0\0" "\0\1\1\1\0\0\200\300\340\340pppp\360\340\340\300\200\0\370\377\377\377\1\0\0\0\0\0\0\1" "\3\377\377\377\3\37\77\177\370\340\340\300\300\300\340\340\370\177\77\37\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\360\360\360ppppppp\360\340\300\200\0\0\377\377\377\340\340\340\340\340\340\340\360" "\177\77\37\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\340pppp\360\340\340\300\200\0\370\377\377\377\1\0\0\0\0\0\0\1" "\3\377\377\377\7\37\177\377\360\340\300\300\200\300\300\340\370\177\77\17\0\0\0\0\1\1\1\17\37\77\71\71" "\70\70\70\0\0\360\360\360pppppp\360\360\340\300\200\0\0\377\377\377\340\340\340\340\340\340\340\360" "\177\77\37\0\0\377\377\377\0\0\0\0\1\7\37\177\374\360\300\200\0\1\1\1\0\0\0\0\0\0\0\0" "\1\1\1\1\0\200\300\340\340\360pppp\360\340\340\300\200\0\0\7\37\77\77xpp\340\340\340\300" "\301\201\0\0 p\370\340\340\300\300\300\300\300\341\361\377\177\77\0\0\0\0\0\1\1\1\1\1\1\1\0" "\0\0\0\0pppppp\360\360\360ppppppp\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0" "\0\0\0\0\0\360\360\360\20\0\0\0\0\0\0\0\0\360\360\360\0\377\377\377\0\0\0\0\0\0\0\0" "\0\377\377\377\0\37\177\377\376\340\300\300\300\300\300\340\374\177\177\37\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0p\360\360\340\0\0\0\0\0\0\0\0\300\360\360p\0\1\17\177\377\370\300\0\0\200\360\376" "\177\17\3\0\0\0\0\0\3\17\177\376\374\377\37\3\0\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0" "\0\0\0\0\360\360\360\0\0\0\0\300\300\200\0\0\0\300\360\360\7\377\377\374\0\340\374\177\77\377\370\300" "\300\377\377\7\0\0\77\377\377\77\7\0\0\3\37\377\377\177\1\0\0\0\0\1\1\0\0\0\0\0\0\1" "\1\0\0\0\20\60\360\360\340\200\0\0\0\0\200\340\360\360\60\0\0\0\0\3\17\237\376\370\370\376\237\7" "\3\0\0\0\0\300\340\370~\77\17\3\3\17\37~\370\360\300\0\1\1\1\1\0\0\0\0\0\0\0\0" "\1\1\1\1p\360\360\340\200\0\0\0\0\0\0\300\360\360p\20\0\1\3\17\77\376\370\340\360\374\177\37" "\7\1\0\0\0\0\0\0\0\0\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0" "\0\0\0\0\0\0pppppppppp\360\360\360p\0\0\0\0\0\0\200\300\360\370~\37" "\17\3\0\0\0\300\340\370\374\377\337\307\303\300\300\300\300\300\300\300\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\1\0\0\0\374\374\374\34\34\34\34\34\34\34\34\0\0\0\0\0\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\17\17\17\16\16\16\16\16\16" "\16\16\0\0\0\60\360\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\376\370\340\200\0\0" "\0\0\0\0\0\0\0\0\0\0\0\3\17\77\376\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\3" "\7\7\2\0\0\0\34\34\34\34\34\34\34\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\16\16\16\16\16\16\16\17\17\17" "\0\0\0\0\0\0\0\0\0\200\300\360\360\340\200\0\0\0\0\0\0\0\20\34>\17\3\1\1\7\17\77" "\34\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\34\34\34\34\34\34\34\34\34\34\34\34" "\34\34\34\34\0\0\0\0\370\360\300\200\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\77~`\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\34\34\216\216\216\216\216\236" "\374\374\370\0\0<\376\377\377\307\303\303\303\303\343\363\377\377\377\0\0\0\0\0\1\1\1\1\1\1\0\0" "\1\1\1\0\0\374\374\374\4\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\370\34\14\16\16\16\36<" "\374\370\360\0\0\377\377\377\376\340\300\300\300\300\340\360\377\177\37\0\0\1\1\1\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\374<\36\16\16\16\16\36" "\34|\70\20\0\17\77\177\377\360\340\300\300\300\300\300\340\360`\0\0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\4\0\300\360\370\374\36\16\16\16\16\34<\377" "\377\377\0\0\17\77\177\376\360\340\300\300\300\340\360\377\377\377\200\0\0\0\0\0\1\1\1\1\1\0\0\1" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\374\234\236\216\216\216\216\236" "\374\374\370\340\0\17\77\177\377\363\343\303\303\303\303\303\343\363c\3\0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\0\0\0\0\340\360\370\70\34\34\34\34\77{qqqqqqq\71" "\77\37\37\0\0\374\374\374\4\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\370\34\34\16\16\16\36\376" "\374\370\0\0\0\377\377\377\0\0\0\0\0\0\0\377\377\377\0\0\0\1\1\1\0\0\0\0\0\0\0\1" "\1\1\0\0\0\0\0\0\0\0\30<<\30\0\0\0\0\0\0\0\0\16\16\16\16\376\376\376\0\0\0" "\0\0\0\0\0\0\300\300\300\300\377\377\377\300\300\300\300\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\0\0\0\0\0\0\0\0\30<<\30\0\0\0\0\0\0\16\16\16\16\16\16\16\376\376" "\376\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\30<\77\37" "\7\0\0\0\0\374\374\374\4\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\200\300\340\360x<\36" "\16\6\2\0\0\377\377\377\7\3\3\7\17\37|\370\360\340\300\200\0\1\1\1\0\0\0\0\0\0\0\0" "\1\1\1\1\0\0\34\34\34\34\34\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0" "\0\0\0\0\0\0\300\300\300\300\300\377\377\377\300\300\300\300\300\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376~\16\16\376\376\374<\16\16" "\376\376\374\0\377\377\377\0\0\0\377\377\377\0\0\0\377\377\377\0\1\1\1\0\0\0\1\1\1\0\0\0" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376\370\34\34\16\16\16\36\376" "\374\370\0\0\0\377\377\377\0\0\0\0\0\0\0\377\377\377\0\0\0\1\1\1\0\0\0\0\0\0\0\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\374<\36\16\16\16\16\36|" "\374\370\340\0\17\77\177\377\360\340\300\300\300\300\340\360\177\177\37\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376\370\34\14\16\16\16\36>" "\374\370\360\300\0\377\377\377\177\340\300\300\300\300\340\340\375\177\77\17\0\177\177\177\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\374\34\16\16\16\16\16\34\374" "\376\376\376\0\17\77\177\376\360\340\300\300\300\300\340|\377\377\377\0\0\0\0\0\0\1\1\1\1\0\0\0" "\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376\370<\34\16\16\16\16" "\36<\34\0\0\0\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0p\370\374\376\216\216\216\16\36\34" "<\70\10\0\0`p\360\341\341\303\303\303\303\347\377\376~<\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\340\340\340p\0\0\0\0\0\0\0\0\16\16\16\16\377\377\377\16\16\16\16" "\16\0\0\0\0\0\0\0\0\177\377\377\340\300\300\300\340\360\0\0\0\0\0\0\0\0\0\1\1\1\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376\0\0\0\0\0\0\0\0" "\376\376\376\0\0\37\177\377\374\340\300\300\300\300\340|\377\377\377\0\0\0\0\0\0\1\1\1\1\1\0\0" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\36~\376\370\300\0\0\0\0\0\340" "\376\376\36\2\0\0\0\1\17\77\377\370\360\374\77\17\3\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\36\376\376\340\0\0\300\374\374\370\300\0" "\0\376\376\376\0\3\177\377\374\374\177\7\0\17\177\376\370\377\177\3\0\0\0\1\1\1\0\0\0\0\0\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\16>|\370\360\300\300\360\370>" "\36\16\2\0\0\200\300\360\370|\37\17\17\37|\370\360\300\200\0\1\1\1\1\0\0\0\0\0\0\0\0" "\1\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\36~\376\360\300\0\0\0\0\300\370" "\376~\16\0\0\0\0\3\17\77\376\370\360\376\77\17\1\0\0\0\70xppp<\77\37\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\16\16\16\16\216\316\356\376~" ">\36\16\0\0\300\340\360\370\374\336\317\307\303\301\300\300\300\300\300\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\1\0\0\0\0\0\200\300\340\360pppppp\0\0\200\200\200\300\377\377\177\3\0\0\0" "\0\0\0\0\0\3\3\3\7\377\376\374\0\0\0\0\0\0\0\0\0\0\0\0\0\17\77\77~xpp" "ppp\0\0\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\177\177\177\0\0\0" "\0\0\0\0\0\0ppppp\360\340\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\77\377\377\360" "\200\200\200\0\0\0\0\0\0\0\0\0\370\376\376\37\3\3\3\0\0\0pppppx\177\77\37\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\34\34\36\16\16\16\36\34<\70\70" "\70\34\36\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\70|||\70\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376\0\0\0" "\0\0\0\0\0\0\0\0\0\374\377\377\377\360\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\360\360\360\20\0\0\0\0\340\370\374\376\17\7\3\377\377\377\7" "\7\17\36\4\0\7\37\77\177xp\374\377\377\343\340\360px \0\0\0\0\0\0\4\17\17\1\0\0" "\0\0\0\0\0\0\0\200\300\340\340pppp\360\340\340\0\0\0\70\70\377\377\377\370\70\70\70\0\0" "\0\0\0\0\300\300\340\375\377\377\357\340\340\340\300\300\300\300\340\300\0\1\0\0\0\0\0\0\0\1\1\1" "\1\1\1\0\0\0\200\0\0\0\0\0\0\0\0\0\200\200\0\0\0\1\373\377\376\216\7\7\7\7\216\377" "\377s\1\0\0\4\16\7\3\3\7\7\7\7\3\7\17\16\4\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\20\60\360\360\340\200\0\0\0\0\0\200\340\360\360\60\0\0\200\203\207\237\277\374\360\370\376\237" "\207\203\200\0\0\0;;;;;\377\377\377;;;;;\0\0\0\0\0\0\0\0\1\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\177\177\177\0\0\0" "\0\0\0\0\0\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\177\177\177\0\0\0" "\0\0\0\0\0\0\0\360\370\370<\34\34\34y\367\357\316\334\334\334\334\316\356\366x<\0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\0\0\60p\70\70\70\70x\360\360\300\0\0\0\0\0<~\376\347\347\347\347w\377\377" "\377\0\0\0\0\16\16\16\16\16\16\16\16\16\16\16\16\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360x\60\200\300\340\340" "px\60\0\0\3\7\17\37x\360\357\317\300\300\301\307\337\354\360p<\0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\0\0pppppppppp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\360x\70\70\70\370\360\340\0\0\0\0\0\0\1\7\7\17\16\16\16\17\7" "\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\340\340\340\0\0\0\0\0\0\0\70\70\70\70\70\70\377\377\377\70\70\70" "\70\70\70\0\300\300\300\300\300\300\317\317\317\300\300\300\300\300\300\0\1\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\0\0\0`\360p\70\70\70\70\370\360\340\0\0\0\0\0\0\340\360\370\370\374\356\347\347\343" "\341\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0 p\60\270\270\270\270\370\360\340\0\0\0\0\0 px\360\343\343\343\343\347\177" "~\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0`\360\374~\34\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376\0\0\0\0\0\0\376\376" "\376\0\0\0\360\377\377\377\340\300\300\300\340\370\177\377\377\300\300\340\177\177\177\0\0\1\1\1\1\0\0\0" "\1\1\1\0\0\300\360\360\370\370\374\374\374\374\34\34\374\374\374\0\0\3\17\37\37\77\77\377\377\377\0\0" "\377\377\377\0\0\0\0\0\0\0\0\377\377\377\0\0\377\377\377\0\0\0\0\0\0\0\0\7\7\7\0\0" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\360\360\340\0\0" "\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\60p`nnl\70" "\70\0\0\0\0\0\0 `p\60\370\370\370\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\340\360x\70\70\70x\360\340\300\0\0\0\0\0\17\77\177\360\340\340\340\360\177\77" "\17\0\0\0\0\16\16\16\16\16\16\16\16\16\16\16\16\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\60x\360\340\300\200\60x\360\340" "\300\300\200\0\0 px<\37\17\7\63x<\36\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\30\30\374\374\374\0\0\0\0\0\300\360\374\70\10\0\0\0\17\17\17\0\300\360\374\77\17\3" "\0\0\0\0\0\0\300\360\374\77\17\303\340\360\334\316\377\377\300\300\0\1\1\3\0\0\0\0\0\0\0\0" "\7\7\0\0\30\30\374\374\374\0\0\0\0\200\340\370x\30\0\0\0\0\17\17\17\0\300\370\376\37\7\1" "\0\0\0\0\0\0\300\360\374\77\17\3\14\14\206\306\346~>\34\0\1\3\3\0\0\0\0\6\7\7\6" "\6\6\6\6\14\14fff~\374\330\0\0\200\340\370~\34\0\7\17\16\14\14\16\207\343\370~\37\7" "\1\0\0\0\0\0\200\340\370~\37\307\341\360\370\334\316\377\377\300\0\0\1\3\1\0\0\0\0\0\0\0" "\0\7\7\0\0\0\0\0\0\70|||\70\0\0\0\0\0\0\0\0\300\340\340\360~>\36\0\0\0" "\0\0\0\0\0\37\177\377\377\340\300\300\300\300\340\360\370p \0\0\0\0\0\0\1\1\1\1\1\0\0" "\0\0\0\0\0\0\0\0\0\201\341\371\363\303\3\0\0\0\0\0\0\0\200\340\374\377\217\203\217\277\376\370" "\300\0\0\0\340\374\377\37\3\3\3\3\3\3\3\17\77\377\370\340\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\1\203\343\371\361\301\0\0\0\0\0\0\0\0\200\340\374\377\217\203\217\277\376\370" "\300\0\0\0\340\374\377\37\3\3\3\3\3\3\3\17\77\377\370\340\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\4\16\17\7\303\363\343\207\17\16\4\0\0\0\0\0\0\300\370\377\37\7\37\177\374\360" "\200\0\0\0\300\370\377\77\7\7\7\7\7\7\7\37\177\376\360\300\1\1\1\0\0\0\0\0\0\0\0\0" "\0\1\1\1\0\0\0\1\1\0\300\361\341\203\3\3\1\0\0\0\0\0\0\300\370\377\37\7\37\177\374\360" "\200\0\0\0\300\370\377\77\7\7\7\7\7\7\7\37\177\376\360\300\1\1\1\0\0\0\0\0\0\0\0\0" "\0\1\1\1\0\0\1\3\3\1\340\360\340\1\3\3\1\0\0\0\0\0\0\340\374\177\37\3\37\177\374\340" "\200\0\0\0\340\370\377\77\7\7\7\7\7\7\7\37\377\376\360\300\1\1\1\0\0\0\0\0\0\0\0\0" "\0\1\1\1\0\0\0\0\3\7\354\374\354\7\3\0\0\0\0\0\0\0\0\340\374\177\17\3\17\177\374\360" "\200\0\0\0\340\374\377\37\7\7\7\7\7\7\7\37\177\376\360\300\1\1\0\0\0\0\0\0\0\0\0\0" "\0\1\1\1\0\0\0\0\0\300\360\360\360\360\360ppppp\0\0\200\360\376\377\17\1\377\377\377p" "pppp\340\374\377\77\17\16\16\16\377\377\377\300\300\300\300\300\1\1\1\0\0\0\0\0\1\1\1\1" "\1\1\1\1\0\0\200\300\340\340\360pppp\340\340\300\200\0\370\377\377\377\3\0\0\0\0\0\0\0" "\3\3\3\1\3\37\77\177\370\360\340\300\300\300\300\340\360p\60\0\0\0\0\0 \60aaoo}\70" "\0\0\0\0\0\360\360\360qqqssswpppp\0\0\377\377\377pppppppp" "pp\0\0\0\377\377\377\300\300\300\300\300\300\300\300\300\300\300\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\0\360\360\360prwsssqqqpp\0\0\377\377\377pppppppp" "pp\0\0\0\377\377\377\300\300\300\300\300\300\300\300\300\300\300\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\0\360\360\366~wssqsw\177vpp\0\0\377\377\377pppppppp" "pp\0\0\0\377\377\377\300\300\300\300\300\300\300\300\300\300\300\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\0\360\360\361ssqppqssqpp\0\0\377\377\377pppppppp" "p\0\0\0\0\377\377\377\300\300\300\300\300\300\300\300\300\300\300\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\0\0ppqq\361\363\363swppp\0\0\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\300\300\300\300\377\377\377\300\300\300\300\300\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\1\0\0\0\0ppps\367\363\363sqqqp\0\0\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\300\300\300\300\377\377\377\300\300\300\300\300\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\1\0\0\0\0pvww\363\363\363sw\177vp\0\0\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\300\300\300\300\377\377\377\300\300\300\300\300\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\1\0\0\0\0pqss\361\360\360qssqp\0\0\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\300\300\300\300\377\377\377\300\300\300\300\300\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\1\0\0\0\0\360\360\360ppppp\360\340\300\200\0\0pp\377\377\377ppp\0\0\0\3" "\77\377\377\374\0\0\377\377\377\300\300\300\300\340\340\370\177\77\37\3\0\0\1\1\1\1\1\1\1\1\0\0" "\0\0\0\0\0\360\360\361\361\301\0\0\1\3\3\3\3\361\360\360\0\377\377\377\3\17\37|\370\340\200\0" "\0\377\377\377\0\377\377\377\0\0\0\0\1\7\17>\374\377\377\377\0\1\1\1\0\0\0\0\0\0\0\0" "\0\1\1\1\0\200\300\340\360p\71\71\71;{\360\360\340\300\200\374\377\377\377\0\0\0\0\0\0\0\0" "\1\377\377\377\1\17\37\77|p\360\340\340\340\360p|\77\37\17\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300\340\360q;;\71\71y\360\360\340\300\200\374\377\377\377\0\0\0\0\0\0\0\0" "\1\377\377\377\1\17\37\77|p\360\340\340\340\360p|\77\37\17\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\306\356\347ssqs\367\357\356\300\200\0\370\377\377\377\1\0\0\0\0\0\0\1" "\3\377\377\377\3\37\77\177\370\340\340\300\300\300\340\340\370\177\77\37\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\200\301\343\340ppqs\363\343\343\301\200\0\370\377\377\377\1\0\0\0\0\0\0\1" "\3\377\377\377\3\37\77\177\370\340\340\300\300\300\340\340\370\177\77\37\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\200\301\343\343qppq\363\343\341\300\200\0\370\377\377\377\1\0\0\0\0\0\0\1" "\3\377\377\377\3\37\77\177\370\340\340\300\300\300\340\340\370\177\77\37\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\200\200\0\0\0\0\0\0\0\200\200\0\0\0\0\3\207\307\357\376\374\370\374\376\317" "\207\3\1\0\0\0\3\7\7\3\1\0\0\1\3\7\17\7\2\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300\340\360p\70\70\70\70\370\360\360\374\374\214\374\377\377\337\1\0\300\340\370>\17\7" "\1\377\377\377\3\317\377\377|\177\377\343\340\340\360p|\77\37\17\1\1\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\360\360\360\21\1\1\3\3\3\7\0\0\360\360\360\0\377\377\377\0\0\0\0\0\0\0\0" "\0\377\377\377\0\37\177\377\376\340\300\300\300\300\300\340\374\177\177\37\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\360\360\360\20\0\7\3\3\3\1\1\1\360\360\360\0\377\377\377\0\0\0\0\0\0\0\0" "\0\377\377\377\0\37\177\377\376\340\300\300\300\300\300\340\374\177\177\37\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\360\360\362\26\7\3\3\1\3\7\17\6\362\360\360\0\377\377\377\0\0\0\0\0\0\0\0" "\0\377\377\377\0\37\177\377\376\340\300\300\300\300\300\340\374\177\177\37\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\360\360\361\23\3\1\0\0\0\1\3\3\361\360\360\0\377\377\377\0\0\0\0\0\0\0\0" "\0\377\377\377\0\37\177\377\376\340\300\300\300\300\300\340\374\177\177\37\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0p\360\360\340\200\7\3\3\3\1\1\301\360\360p\20\0\1\3\17\77\376\370\340\360\374\177\37" "\7\1\0\0\0\0\0\0\0\0\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0" "\0\0\0\0\0\360\360\360\20\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\7\7\7\7\7\7\7\17" "\376\374\370\0\0\377\377\377\16\16\16\16\16\16\16\17\7\7\1\0\0\1\1\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\340\360\370<\34\34\34\34\70\370\360\340\0\0\0\377\377\377\3\0\0\70\70\70<\177" "\377\347\300\200\0\377\377\377\0\200\300\340\300\300\300\340\360\377\177\77\0\1\1\1\0\0\0\1\1\1\1\1" "\0\0\0\0\0\0\0\0\0\0\14>~\370\360@\0\0\0\0\0\0\0\30\34\34\216\216\216\216\216\236" "\374\374\370\0\0<\376\377\377\307\303\303\303\303\343\363\377\377\377\0\0\0\0\0\1\1\1\1\1\1\0\0" "\1\1\1\0\0\0\0\0\0\0@`\370~>\14\0\0\0\0\0\0\0\30\34\34\216\216\216\216\216\236" "\374\374\370\0\0<\376\377\377\307\303\303\303\303\343\363\377\377\377\0\0\0\0\0\1\1\1\1\1\1\0\0" "\1\1\1\0\0\0\0\0@\340\370|\36>|\360\340@\0\0\0\0\0\30\34\34\216\216\216\216\216\236" "\374\374\370\0\0<\376\377\377\307\303\303\303\303\343\363\377\377\377\0\0\0\0\0\1\1\1\1\1\1\0\0" "\1\1\1\0\0\0\0\30<\36\16\16\36<\0\0\0\0\0\0\0\30\34\34\216\216\216\216\216\236" "\374\374\370\0\0<\376\377\377\307\303\303\303\303\343\363\377\377\377\0\0\0\0\0\1\1\1\1\1\1\0\0" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\34\36\216\216\236\374\374\374\374\216" "\216\236\376\374<\376\377\377\303\303\303\377\177\177\373\343\303\303\303\343\0\0\0\1\1\1\1\0\0\0\0\1" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\374<\36\16\16\16\16\36" "\34|\70\20\0\17\77\177\377\360\340\300\300\300\300\300\340\360`\0\0\0\0\0\0\60qaoom=" "\70\0\0\0\0\0\0\0\0\0\14\34~\374\360@\0\0\0\0\0\300\360\370\374\234\236\216\216\216\216\236" "\374\374\370\340\0\17\77\177\377\363\343\303\303\303\303\303\343\363c\3\0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\0\0\0\0\0\0`\370|>\34\10\0\0\0\0\300\360\370\374\234\236\216\216\216\216\236" "\374\374\370\340\0\17\77\177\377\363\343\303\303\303\303\303\343\363c\3\0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\0\0\0@\340\370<\36>|\360\340@\0\0\0\300\360\370\374\234\236\216\216\216\216\237" "\374\374\370\340\0\17\77\177\377\363\343\303\303\303\303\303\343\363c\3\0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\0\0\30<<\30\0\0\0\30<<\30\0\0\0\300\360\370\374\234\216\216\216\216\216\236" "\374\374\370\340\0\17\77\177\373\343\343\303\303\303\303\303\343\363c\3\0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\0\0\4\14>~\370p\0\0\0\0\0\0\0\0\0\16\16\16\16\376\376\376\0\0\0" "\0\0\0\0\0\0\300\300\300\300\377\377\377\300\300\300\300\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\0\0\0\0\0`\370~>\14\4\0\0\0\0\0\0\16\16\16\16\376\376\376\0\0\0" "\0\0\0\0\0\0\300\300\300\300\377\377\377\300\300\300\300\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\0\0@\360x<\36|\370\340@\0\0\0\0\0\0\16\16\16\16\376\376\376\0\0\0" "\0\0\0\0\0\0\300\300\300\300\377\377\377\300\300\300\300\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\0\30<<\30\0\0\0\30<<\30\0\0\0\0\0\16\16\16\16\376\376\376\0\0\0" "\0\0\0\0\0\0\300\300\300\300\377\377\377\300\300\300\300\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\0\0H\354\354\374|x\360\360\360\270\70\0\0\300\360\370\374<\36\16\16\16\16\37\77" "\377\377\374\0\17\77\177\377\360\340\300\300\300\300\340\360\177\177\37\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\60\70<\34\34\34\0\0\0\0\0\300\360\370\374<\36\16\16\16\16\36|" "\374\370\340\0\17\77\177\377\360\340\300\300\300\300\340\360\177\177\37\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0@\340\370|\36>|\360\340@\0\0\0\300\360\370\374<\36\16\16\16\16\36|" "\374\370\340\0\17\77\177\377\360\340\300\300\300\300\340\360\177\177\37\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\30<\36\16\16\36\77" "\377\373\340\0\17\77\377\377\360\374\337\317\303\300\340\360\177\177\37\0\0\3\3\7\1\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\4\36>~\370`\0\0\0\0\0\0\376\376\376\0\0\0\0\0\0\0\0" "\376\376\376\0\0\37\177\377\374\340\300\300\300\300\340|\377\377\377\0\0\0\0\0\0\1\1\1\1\1\0\0" "\1\1\1\0\0\0\0\0\0\0`p\374>\36\14\0\0\0\0\0\376\376\376\0\0\0\0\0\0\0\0" "\376\376\376\0\0\37\177\377\374\340\300\300\300\300\340|\377\377\377\0\0\0\0\0\0\1\1\1\1\1\0\0" "\1\1\1\0\0\0\0@`\360|>\36|\370\360@\0\0\0\0\376\376\376\0\0\0\0\0\0\0\0" "\376\376\376\0\0\37\177\377\374\340\300\300\300\300\340|\377\377\377\0\0\0\0\0\0\1\1\1\1\1\0\0" "\1\1\1\0\0\0\0\30<<\30\0\0\30<<\30\0\0\0\0\376\376\376\0\0\0\0\0\0\0\0" "\376\376\376\0\0\37\177\377\374\340\300\300\300\300\340|\377\377\377\0\0\0\0\0\0\1\1\1\1\1\0\0" "\1\1\1\0\0\0\0\0\0\0p\370~>\14\4\0\0\0\0\6\36~\376\360\300\0\0\0\0\300\370" "\376~\16\0\0\0\0\3\17\77\376\370\360\376\77\17\1\0\0\0\70xppp<\77\37\7\1\0\0" "\0\0\0\0\0\374\374\374\14\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\370\34\14\16\16\16\36>" "\374\370\360\300\0\377\377\377\177\340\300\300\300\300\340\340\375\177\77\17\0\177\177\177\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\30<<\30\0\0\0\30<<\30\0\0\0\6\36~\376\360\200\0\0\0\0\300\370" "\376>\16\0\0\0\0\3\17\77\376\370\360\376\77\7\1\0\0\0\70xppp\70\77\37\7\1\0\0" "\0\0\0"; /* Fontname: -FreeType-Inconsolata LGC-Bold-R-Normal--30-300-72-72-P-147-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Emboldened by MihailJP. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 95/658 BBX Build Mode: 3 */ const uint8_t u8x8_font_inb21_2x4_r[6084] U8X8_FONT_SECTION("u8x8_font_inb21_2x4_r") = " ~\2\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0x\374\374\374\370\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\1\0\0" "\0\0\0\0\0\0\0\0\0\340\363\363\363\340\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\370\374\374\0\0\0\370\374\374\0\0\0\0\0\0\0\7\7\7\0\0\0\7\7" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\360\360\20\0\0\360\360\360\20\0\0\16\16\16\356\377\377\17\6\6\366\377\377" "\37\16\16\16\7\7\347\377\377\37\7\7\367\377\377\17\7\7\7\0\0\0\1\1\1\0\0\0\1\1\1\0" "\0\0\0\0\0\0\200\300\340\340p\374\374\374tp\340\340\300@\0\0\7\37\37\77\70\377\377\377\360\340" "\340\301\301\200\0\0\70|p\340\340\377\377\377\340\340q\177\77\37\0\0\0\0\0\0\0\3\3\3\0\0" "\0\0\0\0\300\340\360\360p\360\360\340\300\0\0\300\360\360p\20\7\17\37\37\34\37\317\357\377\376\77\17" "\7\1\0\0\0\200\340\360\374\77\37\7}\376\377\307\307\377\376\376\0\1\1\1\0\0\0\0\0\0\1\1" "\1\1\0\0\0\0\200\340\340\360pp\360\360\340\300\0\0\0\0\0\0\207\337\377\377\370\360\370\277\37\17" "\0\200\200\0>\177\377\377\341\300\300\301\343\357\377~|\377\357\307\0\0\0\1\1\1\1\1\1\0\0\0" "\0\1\1\0\0\0\0\0\0\0\0\370\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360x<\34\20\0\0\0\0\0\360\376\377\377\7\1\0\0" "\0\0\0\0\0\0\0\0\17\177\377\377\340\200\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37<" "\70x\20\0\0\0<\70x\360\360\340\300\200\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\377\376\370" "\0\0\0\0\0\0\0\0\0\0\0\300\360\377\377\77\0\0\0\0\0\20p\70<\36\37\17\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\200\200\0\0\0\0\0\0\20<\70\70\60\360\343\377\377\347\360\60" "\70\70<\0\0\0\10\36\37\17\3\1\1\3\17\37\36\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0\340\340\340\340\340\340\377\377\377\340\340\340" "\340\340\340\0\0\0\0\0\0\0\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0\0\0\0\0\0\0\0\0\61;\37\17\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0ppppppppppp" "pp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\360\60\0\0\0\0\0\0\0\200\340\370\376\77\17" "\3\0\0\0\0\0\200\340\370\376\77\17\3\0\0\0\0\0\0\0\0\2\7\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\360ppp\360\340\340\300\0\0\0\370\377\377\377\3\0\300\340x<\17" "\77\377\377\374\0\3\37\77\177\376\347\303\300\300\340\360\377\177\37\7\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\200\300\300\340\340\360\360\360\0\0\0\0\0\0\0\0\0\1\0\0\0\377\377\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0" "\0\0\0\0\0\200\300\340\340pppp\360\340\340\300\200\0\0\0\0\1\3\0\0\0\200\200\300\361\377" "\177\37\0\0\0\300\340\370\374\336\317\307\303\301\301\300\300\300\0\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\0\0\0\0@\300\340\360pppp\360\340\340\300\0\0\0\0\0\0\0ppppx\370\377" "\337\217\0\0\0\0`\360\360\340\300\300\300\300\340\373\377\177\37\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\360\360\0\0\0\0\0\200\300\360\370<\17\7\1\377\377" "\377\0\0\0\0\16\17\17\17\16\16\16\16\16\377\377\377\16\16\16\0\0\0\0\0\0\0\0\0\0\1\1" "\1\0\0\0\0\0\360\360\360ppppppppp\0\0\0\0\77\177\177\70\34\34\34\34<\370" "\370\360\300\0\0 p\370\360\340\300\300\300\300\340\375\177\77\37\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\200\300\340\360pppp\360\340`\0\0\0\374\377\377\377\71<\34\34\34<\370" "\370\360\300\0\0\17\77\177\377\360\340\300\300\300\340\375\177\77\17\0\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0ppppppppp\360\360\360p\0\0\0\0\0\0\0\0\200\340\374\377\77" "\7\1\0\0\0\0\0\0\200\360\374\377\77\7\0\0\0\0\0\0\0\0\0\0\1\1\1\1\0\0\0\0" "\0\0\0\0\0\0\200\300\340\340pppp\360\340\340\300\0\0\0\0\7\237\377\377xp`\360\370\377" "\237\217\0\0\0\36\177\377\377\340\300\300\300\300\341\377\377\177\36\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\300\340\340\360pppp\340\340\300\200\0\0\0\37\177\377\373\340\300\300\300\300\340\367" "\377\377\376\0\0@\340\360\340\301\301\301\301\341\360\177\77\37\7\0\0\0\0\0\1\1\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70|||\70\0\0" "\0\0\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0\0\0\0\0\0\0\0\0\1\3\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70|||\70\0\0" "\0\0\0\0\0\0\0\0\0\300\340\340\340\300\0\0\0\0\0\0\0\0\0\0\0\61;\37\17\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\340`\360\360\370\370\234\234\16\16\17\7\7" "\3\3\1\1\0\0\1\1\3\3\7\7\17\16\34<\70xp\360\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\16\16\16\16\16\16\16\16\16\16\16" "\16\16\16\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\17\16\36\234\274\370" "\370\360\360`px\70<\34\36\16\17\7\3\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 p\360x\70\34\34\34\34<\370\370\360\300\0\0\0\0\0\0\0\0\300\360\360x>" "\37\17\7\0\0\0\0\0\0\0\340\361\361\361\340\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0" "\0\0\0\0\0\0\200\300\340\340\360pppp\360\340\340\300\0\370\377\377\377\3\360\370\374\374\36\16\16" "\317\377\377\377\3\37\77\177\370\360\343\303\307\307\307\307\343\347\7\7\0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\0\0\0\0\0\300\360\340\200\0\0\0\0\0\0\0\0\0\300\370\377\37\7\37\177\374\360" "\200\0\0\0\300\370\377\77\7\7\7\7\7\7\7\37\177\376\360\300\1\1\1\0\0\0\0\0\0\0\0\0" "\0\1\1\1\0\360\360\360ppppppp\360\340\340\300\0\0\377\377\377ppppppp\370" "\377\337\217\0\0\377\377\377\300\300\300\300\300\300\300\340\377\377\177\37\0\1\1\1\1\1\1\1\1\1\1\1" "\0\0\0\0\0\0\200\300\340\340\360pppp\360\340\340\300\0\370\377\377\377\3\0\0\0\0\0\0\0" "\1\3\3\1\3\37\77\177\370\360\340\300\300\300\300\340\360\360p \0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\360\360\360ppppp\360\360\340\300\300\0\0\0\377\377\377\0\0\0\0\0\0\0\3" "\77\377\377\374\0\377\377\377\300\300\300\300\300\340\340\370\177\77\37\3\0\1\1\1\1\1\1\1\1\1\0\0" "\0\0\0\0\0\360\360\360ppppppppppp\0\0\377\377\377pppppppp" "pp\0\0\0\377\377\377\300\300\300\300\300\300\300\300\300\300\300\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\0\0\360\360\360ppppppppppp\0\0\377\377\377ppppppp" "pp\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\340\360pppp\360\340\340\300\200\370\377\377\377\3\0\0\0\0\300\300\300" "\301\303\301\300\7\37\77\177\370\340\340\300\300\301\301\301\341\377\377\177\0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\360\360\360\20\0\0\0\0\0\0\0\360\360\360\20\0\377\377\377pppppppp" "\377\377\377\0\0\377\377\377\0\0\0\0\0\0\0\0\377\377\377\0\0\1\1\1\0\0\0\0\0\0\0\0" "\1\1\1\0\0\0pppp\360\360\360ppppp\0\0\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\300\300\300\300\377\377\377\300\300\300\300\300\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\1\0\0\0\0\0\0\0pppp\360\360\360pppp\0\0\0\0\0\0\0\0\0\377\377\377" "\0\0\0\0\0`\360\340\300\300\300\300\340\377\177\77\0\0\0\0\0\0\0\0\1\1\1\1\1\0\0\0" "\0\0\0\0\360\360\360\20\0\0\0\0\0\300\340\360p\60\20\0\377\377\377\340p\370\374\336\217\7\3\1" "\0\0\0\0\377\377\377\0\0\0\1\7\17\77~\370\360\340\200\0\1\1\1\0\0\0\0\0\0\0\0\0" "\1\1\1\1\0\360\360\360\20\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\300\300\300\300\300\300\300\300\300\300\300\0\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\360\360\360\340\200\0\0\0\0\0\0\300\360\360\360\0\377\377\377\7\37~\370\340\360|\37\7" "\377\377\377\0\377\377\377\0\0\0\1\3\1\0\0\0\377\377\377\0\1\1\1\0\0\0\0\0\0\0\0\0" "\1\1\1\0\0\360\360\360\360\300\0\0\0\0\0\0\0\360\360\360\0\377\377\377\3\17\37|\370\340\200\0" "\0\377\377\377\0\377\377\377\0\0\0\0\1\7\17>\374\377\377\377\0\1\1\1\0\0\0\0\0\0\0\0" "\0\1\1\1\0\0\200\300\340\340pppp\360\340\340\300\200\0\370\377\377\377\1\0\0\0\0\0\0\1" "\3\377\377\377\3\37\77\177\370\340\340\300\300\300\340\340\370\177\77\37\0\0\0\0\0\0\1\1\1\1\1\0" "\0\0\0\0\0\360\360\360ppppppp\360\340\300\200\0\0\377\377\377\340\340\340\340\340\340\340\360" "\177\77\37\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\340pppp\360\340\340\300\200\0\370\377\377\377\1\0\0\0\0\0\0\1" "\3\377\377\377\7\37\177\377\360\340\300\300\200\300\300\340\370\177\77\17\0\0\0\0\1\1\1\17\37\77\71\71" "\70\70\70\0\0\360\360\360pppppp\360\360\340\300\200\0\0\377\377\377\340\340\340\340\340\340\340\360" "\177\77\37\0\0\377\377\377\0\0\0\0\1\7\37\177\374\360\300\200\0\1\1\1\0\0\0\0\0\0\0\0" "\1\1\1\1\0\200\300\340\340\360pppp\360\340\340\300\200\0\0\7\37\77\77xpp\340\340\340\300" "\301\201\0\0 p\370\340\340\300\300\300\300\300\341\361\377\177\77\0\0\0\0\0\1\1\1\1\1\1\1\0" "\0\0\0\0pppppp\360\360\360ppppppp\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0" "\0\0\0\0\0\360\360\360\20\0\0\0\0\0\0\0\0\360\360\360\0\377\377\377\0\0\0\0\0\0\0\0" "\0\377\377\377\0\37\177\377\376\340\300\300\300\300\300\340\374\177\177\37\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0p\360\360\340\0\0\0\0\0\0\0\0\300\360\360p\0\1\17\177\377\370\300\0\0\200\360\376" "\177\17\3\0\0\0\0\0\3\17\177\376\374\377\37\3\0\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0" "\0\0\0\0\360\360\360\0\0\0\0\300\300\200\0\0\0\300\360\360\7\377\377\374\0\340\374\177\77\377\370\300" "\300\377\377\7\0\0\77\377\377\77\7\0\0\3\37\377\377\177\1\0\0\0\0\1\1\0\0\0\0\0\0\1" "\1\0\0\0\20\60\360\360\340\200\0\0\0\0\200\340\360\360\60\0\0\0\0\3\17\237\376\370\370\376\237\7" "\3\0\0\0\0\300\340\370~\77\17\3\3\17\37~\370\360\300\0\1\1\1\1\0\0\0\0\0\0\0\0" "\1\1\1\1p\360\360\340\200\0\0\0\0\0\0\300\360\360p\20\0\1\3\17\77\376\370\340\360\374\177\37" "\7\1\0\0\0\0\0\0\0\0\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0" "\0\0\0\0\0\0pppppppppp\360\360\360p\0\0\0\0\0\0\200\300\360\370~\37" "\17\3\0\0\0\300\340\370\374\377\337\307\303\300\300\300\300\300\300\300\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\1\0\0\0\374\374\374\34\34\34\34\34\34\34\34\0\0\0\0\0\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\17\17\17\16\16\16\16\16\16" "\16\16\0\0\0\60\360\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\376\370\340\200\0\0" "\0\0\0\0\0\0\0\0\0\0\0\3\17\77\376\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\3" "\7\7\2\0\0\0\34\34\34\34\34\34\34\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\16\16\16\16\16\16\16\17\17\17" "\0\0\0\0\0\0\0\0\0\200\300\360\360\340\200\0\0\0\0\0\0\0\20\34>\17\3\1\1\7\17\77" "\34\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\34\34\34\34\34\34\34\34\34\34\34\34" "\34\34\34\34\0\0\0\0\370\360\300\200\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\77~`\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\34\34\216\216\216\216\216\236" "\374\374\370\0\0<\376\377\377\307\303\303\303\303\343\363\377\377\377\0\0\0\0\0\1\1\1\1\1\1\0\0" "\1\1\1\0\0\374\374\374\4\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\370\34\14\16\16\16\36<" "\374\370\360\0\0\377\377\377\376\340\300\300\300\300\340\360\377\177\37\0\0\1\1\1\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\374<\36\16\16\16\16\36" "\34|\70\20\0\17\77\177\377\360\340\300\300\300\300\300\340\360`\0\0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\4\0\300\360\370\374\36\16\16\16\16\34<\377" "\377\377\0\0\17\77\177\376\360\340\300\300\300\340\360\377\377\377\200\0\0\0\0\0\1\1\1\1\1\0\0\1" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\374\234\236\216\216\216\216\236" "\374\374\370\340\0\17\77\177\377\363\343\303\303\303\303\303\343\363c\3\0\0\0\0\0\0\1\1\1\1\1\1" "\0\0\0\0\0\0\0\0\0\340\360\370\70\34\34\34\34\77{qqqqqqq\71" "\77\37\37\0\0\374\374\374\4\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\370\34\34\16\16\16\36\376" "\374\370\0\0\0\377\377\377\0\0\0\0\0\0\0\377\377\377\0\0\0\1\1\1\0\0\0\0\0\0\0\1" "\1\1\0\0\0\0\0\0\0\0\30<<\30\0\0\0\0\0\0\0\0\16\16\16\16\376\376\376\0\0\0" "\0\0\0\0\0\0\300\300\300\300\377\377\377\300\300\300\300\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\0\0\0\0\0\0\0\0\30<<\30\0\0\0\0\0\0\16\16\16\16\16\16\16\376\376" "\376\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\30<\77\37" "\7\0\0\0\0\374\374\374\4\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\200\300\340\360x<\36" "\16\6\2\0\0\377\377\377\7\3\3\7\17\37|\370\360\340\300\200\0\1\1\1\0\0\0\0\0\0\0\0" "\1\1\1\1\0\0\34\34\34\34\34\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0" "\0\0\0\0\0\0\300\300\300\300\300\377\377\377\300\300\300\300\300\0\0\0\1\1\1\1\1\1\1\1\1\1" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376~\16\16\376\376\374<\16\16" "\376\376\374\0\377\377\377\0\0\0\377\377\377\0\0\0\377\377\377\0\1\1\1\0\0\0\1\1\1\0\0\0" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376\370\34\34\16\16\16\36\376" "\374\370\0\0\0\377\377\377\0\0\0\0\0\0\0\377\377\377\0\0\0\1\1\1\0\0\0\0\0\0\0\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\374<\36\16\16\16\16\36|" "\374\370\340\0\17\77\177\377\360\340\300\300\300\300\340\360\177\177\37\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376\370\34\14\16\16\16\36>" "\374\370\360\300\0\377\377\377\177\340\300\300\300\300\340\340\375\177\77\17\0\177\177\177\0\0\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\374\34\16\16\16\16\16\34\374" "\376\376\376\0\17\77\177\376\360\340\300\300\300\300\340|\377\377\377\0\0\0\0\0\0\1\1\1\1\0\0\0" "\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376\370<\34\16\16\16\16" "\36<\34\0\0\0\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0p\370\374\376\216\216\216\16\36\34" "<\70\10\0\0`p\360\341\341\303\303\303\303\347\377\376~<\0\0\0\0\0\0\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\340\340\340p\0\0\0\0\0\0\0\0\16\16\16\16\377\377\377\16\16\16\16" "\16\0\0\0\0\0\0\0\0\177\377\377\340\300\300\300\340\360\0\0\0\0\0\0\0\0\0\1\1\1\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376\0\0\0\0\0\0\0\0" "\376\376\376\0\0\37\177\377\374\340\300\300\300\300\340|\377\377\377\0\0\0\0\0\0\1\1\1\1\1\0\0" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\36~\376\370\300\0\0\0\0\0\340" "\376\376\36\2\0\0\0\1\17\77\377\370\360\374\77\17\3\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\36\376\376\340\0\0\300\374\374\370\300\0" "\0\376\376\376\0\3\177\377\374\374\177\7\0\17\177\376\370\377\177\3\0\0\0\1\1\1\0\0\0\0\0\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\16>|\370\360\300\300\360\370>" "\36\16\2\0\0\200\300\360\370|\37\17\17\37|\370\360\300\200\0\1\1\1\1\0\0\0\0\0\0\0\0" "\1\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\36~\376\360\300\0\0\0\0\300\370" "\376~\16\0\0\0\0\3\17\77\376\370\360\376\77\17\1\0\0\0\70xppp<\77\37\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\16\16\16\16\216\316\356\376~" ">\36\16\0\0\300\340\360\370\374\336\317\307\303\301\300\300\300\300\300\0\1\1\1\1\1\1\1\1\1\1\1" "\1\1\1\1\0\0\0\0\0\200\300\340\360pppppp\0\0\200\200\200\300\377\377\177\3\0\0\0" "\0\0\0\0\0\3\3\3\7\377\376\374\0\0\0\0\0\0\0\0\0\0\0\0\0\17\77\77~xpp" "ppp\0\0\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\177\177\177\0\0\0" "\0\0\0\0\0\0ppppp\360\340\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\77\377\377\360" "\200\200\200\0\0\0\0\0\0\0\0\0\370\376\376\37\3\3\3\0\0\0pppppx\177\77\37\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\34\34\36\16\16\16\36\34<\70\70" "\70\34\36\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: -FreeType-Inconsolata LGC-Bold-R-Normal--30-300-72-72-P-147-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Emboldened by MihailJP. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 18/658 BBX Build Mode: 3 */ const uint8_t u8x8_font_inb21_2x4_n[1732] U8X8_FONT_SECTION("u8x8_font_inb21_2x4_n") = " :\2\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 xpp`\340\307\377\377\317\340`" "ppx\0\0\0\20<>\37\7\3\3\7\37><\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\377\377\377\300\300\300" "\300\300\300\0\1\1\1\1\1\1\177\177\177\1\1\1\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0cw\77\37\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340" "\340\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\3\7\7\7\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\340`\0\0\0\0\0\0\0\0\300\360\374\177\37" "\7\1\0\0\0\0\0\300\360\374\177\37\7\1\0\0\0\0\0\0\0\4\17\17\7\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\340\340\340\340\300\300\200\0\0\0\360\376\377\377\7\1\200\300\360y\37" "\177\377\376\370\0\7\77\177\377\374\316\207\201\200\300\340\376\377\77\17\0\0\0\0\0\1\3\3\3\3\3\1" "\1\0\0\0\0\0\0\200\200\300\300\340\340\340\0\0\0\0\0\0\0\0\1\3\1\1\1\377\377\377\0\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\0\0" "\0\0\0\0\0\0\200\300\300\340\340\340\340\340\300\300\200\0\0\0\0\1\3\7\1\0\0\0\0\201\343\377" "\377\77\0\0\0\200\300\360\370\274\236\217\207\203\203\201\200\200\0\0\0\3\3\3\3\3\3\3\3\3\3\3" "\3\3\0\0\0\0\200\200\300\340\340\340\340\340\340\300\300\200\0\0\0\0\0\1\1\341\340\340\340\360\361\377" "\277\37\0\0\0\0\300\340\340\300\200\200\200\200\301\367\377\377>\0\0\0\0\1\1\3\3\3\3\3\3\1" "\1\0\0\0\0\0\0\0\0\0\0\0\0\300\340\340\340\0\0\0\0\0\0\200\340\360x\36\17\3\377\377" "\377\0\0\0\0\34\37\37\37\35\34\34\34\34\377\377\377\34\34\34\0\0\0\0\0\0\0\0\0\0\3\3" "\3\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\340\0\0\0\0\177\377\377p\70\70\70\70x\360" "\360\340\200\0\0@\340\360\340\300\200\200\200\200\300\373\377\177\77\0\0\0\0\1\1\3\3\3\3\3\3\1" "\0\0\0\0\0\0\0\0\200\300\340\340\340\340\340\340\300\300\0\0\0\370\376\377\377sy\70\70\70x\361" "\361\340\200\0\0\37\177\377\377\340\300\200\200\200\300\373\377\177\37\0\0\0\0\0\1\1\3\3\3\3\3\1" "\0\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\340\340\0\0\0\0\0\0\0\0\0\300\370\376\177" "\17\3\0\0\0\0\0\0\0\340\370\377\177\17\1\0\0\0\0\0\0\0\0\0\3\3\3\3\0\0\0\0" "\0\0\0\0\0\0\0\200\300\300\340\340\340\340\340\300\300\200\0\0\0\0\17\77\377\377\360\340\300\340\361\377" "\77\37\0\0\0<\376\377\377\301\200\200\200\201\303\377\377\377<\0\0\0\0\1\1\3\3\3\3\3\3\1" "\1\0\0\0\0\0\200\300\300\340\340\340\340\340\300\300\200\0\0\0\0>\377\377\367\301\200\200\200\200\301\357" "\377\377\374\0\0\200\300\341\301\203\203\203\203\303\341\377\177\77\17\0\0\0\1\1\3\3\3\3\3\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0p\370\370\370p\0\0" "\0\0\0\0\0\0\0\0\0\200\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\3\7\7\7\3\0\0" "\0\0\0"; /* Fontname: -FreeType-Inconsolata LGC-Bold-R-Normal--44-440-72-72-P-214-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Emboldened by MihailJP. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 191/658 BBX Build Mode: 3 */ const uint8_t u8x8_font_inb33_3x6_f[32260] U8X8_FONT_SECTION("u8x8_font_inb33_3x6_f") = " \377\3\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360" "\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\17\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\17\217\217\217\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\37\77\77\77" "\37\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\340\360\360\360\340\0\0\0\0\340\360\360\360\340\0\0\0\0\0\0\0\0\0" "\0\377\377\377\377\377\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\0\0" "\0\0\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0" "\0\0\0\300\300\300\300\300\0\0\0\0\200\200\200\200\200\200\376\377\377\377\217\200\200\200\200\377\377\377\377\203" "\200\200\200\200\7\7\7\7\7\377\377\377\377\17\3\3\3\203\377\377\377\377\7\7\7\7\7\0<<<<" "\374\377\377\377\77<<<<\377\377\377\377\77<<<<\14\0\0\0\0x\177\177\177\37\0\0\0\0" "\177\177\177\177\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\360\360\360\360\200\200\0\0\0\0\0\0\0\0\0\0\360\370" "\374\376\377\37\17\7\377\377\377\377\7\17\17\37\177>\34\10\0\0\0\0\1\7\17\37\77\77>|\377\377" "\377\377\360\360\340\340\340\300\200\0\0\0\0\0\300\340\340\300\200\0\0\0\377\377\377\377\1\1\3\307\377\377" "\377\377~\0\0\1\3\7\7\17\17\17\37\36\377\377\377\377\36\17\17\17\7\7\3\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\200\200\0\0" "\0\0\0\0\0\300\300\300\300@\0\0\377\377\377\307\307\307\307\377\377\377\377|\200\340\360\374\377\77\37\7" "\1\0\0\0\1\3\3\7\7\7\7\7\303\363\371\376\177\37\7\3\0\0\0\0\0\0\0\0\0\0\0\200" "\340\370\374\377\77\17\3\361\374\376\376\37\37\37\37\376\376\374\360\0\60<>\77\37\7\1\0\0\0\0\3" "\17\37\37>>>>\37\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\374" "\376\377\377\377\17\7\3\7\17\377\377\377\376\374\0\0\0\0\0\0\0\0\0\300\303\357\377\377\177\376\370\374" "\377\337\17\7\3\0\0\200\200\200\0\0\370\376\377\377\377\207\1\0\0\0\1\7\17\77\377\376\374\370\374\377" "\377\77\17\6\1\7\17\37\37\37>>>>>>\37\37\17\17\7\7\17\77\77\37\34\10\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360" "\360\360\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\360\360\370xx`\0\0\0\0\0\0\0" "\0\0\200\340\370\374\376\377\77\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\370\377\377\377\377\7\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\377\377\377\377\370\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\3\17\77\177\377\376\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\1\3\7\17\17\37\77\36\14\0\0\0\0\0\300\360\360\340\340\300\200\200\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\17\37\77\377\376\374\370\340\200\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\37\377\377\377\376\360\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\377\377\377\377\77\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\376" "\377\177\37\17\3\0\0\0\0\0\0\0\0\0\70|>>\37\37\17\7\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\360\360\360\360\360\0\0\0\0\0\0\0\0\0\0\70>><|xxp\360\377\377\377" "\377\361pxx|<<>\70 \0\0\0@\340\360\370\376\177\37\17\7\3\17\37\177\376\374\370\340\300" "\0\0\0\0\0\0\0\0\1\1\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\370\370\0\0\0\0\0\0" "\0\0\0\0xxxxxxxxx\377\377\377\377\377xxxxxxxx\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\70|\376\376\376\376\374\370\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0 \60x~\77\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\70|\376\376\376|\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340\360\360\340\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\77\17\3" "\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\177\37\3\0\0\0\0\0\0\0\0\0\0\0\0" "\200\340\374\377\377\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0`x\376\377\177\37\7\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\300\360\374" "\376\377\177\37\17\7\7\7\7\17\337\377\377\376\374\360\300\0\0\0\376\377\377\377\377\3\0\0\200\340\360\370" "~\37\17\7\1\377\377\377\377\376\0\0\7\77\377\377\377\370\374\237\17\7\1\0\0\0\0\300\370\377\377\377" "\177\17\0\0\0\0\0\3\7\17\37\37\77>><>>\37\37\17\7\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300" "\300\300\0\0\0\0\0\0\0\0\0\0\0\0\34\34\36\36\17\17\17\377\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0\0\0\10\34" ">\177\37\17\7\7\7\3\7\7\7\17\77\377\377\376\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\200" "\200\300\340\360\374\377\177\77\17\3\0\0\0\0\0\0\200\300\360\370\374\376\77\37\17\7\7\3\1\0\0\0" "\0\0\0\0\0\0<\77\77\77\77\77=<<<<<<<<<<<>>\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300" "\300\300\200\200\0\0\0\0\0\0\0\0\0\0\6\17\37\17\7\7\7\7\7\7\7\7\17\377\377\377\376\370" "\0\0\0\0\0\0\0\0\0\0xx||||\374\376\377\377\377\347\303\201\0\0\0\0\0\0\0\300" "\300\0\0\0\0\0\0\0\0\0\1\303\377\377\377\377\376\0\0\0\0\6\17\17\37\37\77>>>>>" ">>\37\37\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300\0\0\0\0\0\0\0\0\0\0" "\0\0\0\200\300\340\370\374\177\377\377\377\377\377\0\0\0\0\0\0\0\0\200\340\360\374\376\77\37\7\3\0" "\0\377\377\377\377\377\0\0\0\0\0\0<\77\77\77\77=<<<<<<<\377\377\377\377\377<<" "<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\300\300\0\0\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3" "\3\0\0\0\0\0\60\177\177\377\77\77\36\37\37\37\37\37\37>\376\374\374\370\340\200\0\0\0\0\200\300" "\300\300\200\0\0\0\0\0\0\0\0\0\300\377\377\377\377\177\0\0\0\1\3\7\17\37\37\37>>><" ">>>\37\37\17\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\340\370" "\374\376\377\77\17\7\7\7\3\7\7\7\17\17\7\2\2\0\0\0\0\377\377\377\377\377\374>\36\37\37\17" "\37\37\77\376\376\374\370\360\200\0\0\0\0\37\377\377\377\377\360\200\0\0\0\0\0\0\0\300\377\377\377\377" "\177\0\0\0\0\0\0\3\7\17\37\37\77>><>>\37\37\17\17\7\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\300\300\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\303\363\377\377\377\77\17" "\3\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\377\377\77\7\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\300\370\377\377\377\77\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70>\77\77\77\17\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\370\374" "\376\377\377\17\7\7\7\3\7\7\17\37\377\377\377\376\370\0\0\0\0\0\1\3\217\317\377\377\376|xx" "x\370\374\377\377\317\307\203\0\0\0\0\0\370\376\377\377\377\307\1\0\0\0\0\0\0\1\1\207\377\377\377" "\376\374\0\0\0\0\3\7\17\37\37\37>>><>>>\37\37\17\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300" "\300\300\200\200\0\0\0\0\0\0\0\0\0\340\370\376\377\377\77\17\7\7\7\7\7\7\37\77\377\376\374\360" "\200\0\0\0\0\17\77\177\377\377\370\360\340\300\300\300\300\340\340\360\377\377\377\377\377\0\0\0\0\0\0\0" "\200\201\3\3\3\3\3\3\3\3\201\361\377\377\377\177\17\0\0\0\0\4\16\17\37\37>>><>>" "\36\37\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\34>\177\177\177" ">\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\70|\376\376\376|\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\70|\376\376\376|\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70|\376\376\376" "\376\374\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \60x\77\37\37\7\3\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\200\200\300\300\340\340\360\360\370\370||>>\37\37\0\70|\374\376\376\377\357\357\307\207\207\3" "\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\17\17\37\37>>||\370\370\360" "\360\340\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200" "\200\200\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0<<<<" "<<<<<<<<<<<<<<<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37>>" "||\370\370\360\360\340\340\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3" "\203\207\307\357\357\377\376\376\374|\70\0\340\340\360\360\370\370||>>\37\37\17\17\7\3\3\1\1\0" "\0\0\0\0\7\3\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\340\360\360\360\360" "\360\360\360\340\340\300\200\0\0\0\0\0\0\6\7\17\37\17\3\3\1\1\1\1\1\1\3\207\377\377\377\377" "\374\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\370\374\376\177\77\37\17\7\1\0\0\0\0\0\0\0" "\0\0\0\0\0\7\207\207\207\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\37\77\77" "\77\37\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\300\360\370\376" "~\77\17\17\7\7\7\3\7\207\207\217\217\277\377\376\370\340\0\0\377\377\377\3\0\0\0\360\374\376\376\37" "\17\17\17\17\17\207\377\377\377\377\0\0\77\377\377\374\360\300\200\1\7\17\37\37\36\36\36\36\37\17\37\37" "\37\37\0\0\0\0\1\3\7\17\17\37\37>>>><>>\36\36\37\17\14\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\300" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\374\377\377\377\376\370\300\0\0\0\0\0" "\0\0\0\0\0\0\0\200\340\374\377\377\77\7\0\3\37\177\377\377\370\340\0\0\0\0\0\0\0\340\374\377" "\377\377\37\37\36\36\36\36\36\36\37\77\377\377\377\374\340\200\0\0\77\77\77\37\3\0\0\0\0\0\0\0" "\0\0\0\0\0\7\37\77\77\77< \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\377\377\377\377" "\377\3\3\3\3\3\7\7\7\7\17\37\377\377\377\374\370\0\0\0\377\377\377\377\377xxxxxx|" "|\374\376\377\377\357\317\207\1\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\1\203\377\377\377" "\377\374\0\0\77\77\77\77\77<<<<<<<>>>\37\37\17\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300" "\300\300\300\300\200\200\0\0\0\0\0\0\0\300\360\374\376\376\177\37\17\7\7\7\3\7\7\7\17\37\177\177" "~<\60\0\376\377\377\377\377\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\77\377\377" "\377\374\340\300\0\0\0\0\0\0\0\0\0\0\300\300\300\200\0\0\0\0\0\3\7\17\17\37\37\77>>" ">>>>\37\37\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0\0\0\377\377\377\377" "\377\3\3\3\3\7\7\7\7\17\37\77\377\376\374\370\340\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\1\377\377\377\377\377\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\200\300\370\377\377\377" "\77\17\0\0\77\77\77\77\77<<<>>>>>\37\37\17\17\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\300\300\300\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\3\0\0\0\377\377\377\377\377xxxxxxxxxxxxx\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77<<<<<<" "<<<<<<<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\0\0\377\377" "\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\0\0\0\0\377\377\377\377\377xxxxx" "xxxxxxx\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300" "\300\300\300\300\300\200\200\0\0\0\0\0\0\300\360\370\376\376\77\37\17\7\7\7\7\7\7\7\17\17\77\177" ">\34\30\0\376\377\377\377\377\1\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\0\7\77\377\377" "\377\374\340\200\0\0\0\0\3\3\3\3\3\3\377\377\377\377\377\0\0\0\0\3\7\17\17\37\37\77>>" ">>>>>\37\37\37\17\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\0\0\0\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\377\377\377\377\377xxxxxx" "xxxxx\377\377\377\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\0\0\0\0\0\0\0\3\3\3\3\3\3\377\377\377\377\377\3\3\3\3\3\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0<<<<<<\77\77\77\77" "\77<<<<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\0\0\0" "\0\0\0\3\3\3\3\3\3\377\377\377\377\377\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\300\200\0\0\0\0\0\0\0\200\377\377\377\377\377\0\0" "\0\0\0\0\0\6\17\37\37\37>>>>>>\37\37\17\7\3\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300@\0\0\0\0\0\0" "\0\0\0\0\200\300\300\300\300\300@\0\377\377\377\377\377\0\0\0\0\200\300\360\370\374\376\77\37\17\7\3" "\1\0\0\0\377\377\377\377\377\370|~\377\377\377\347\203\1\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\1\3\17\37\177\377\376\370\360\340\200\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0" "\0\0\3\7\37\77\77\77<\70\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\77\77\77\77\77<<<<<<<<<<<<<<<<\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\300\300\300\0\377\377\377\377\377\376\370\340\200\0\0\0\0\0\200\340\370\376\377\377" "\377\377\377\0\377\377\377\377\377\1\7\37\177\376\370\340\370\376\77\37\7\1\377\377\377\377\377\0\377\377\377\377" "\377\0\0\0\0\1\7\7\3\0\0\0\0\0\377\377\377\377\377\0\77\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\0\0\377\377\377\377" "\377\177\376\370\340\300\0\0\0\0\0\0\0\377\377\377\377\377\0\0\377\377\377\377\377\0\1\7\37\177\377\374" "\360\300\200\0\0\377\377\377\377\377\0\0\377\377\377\377\377\0\0\0\0\0\1\3\17\77\377\376\370\377\377\377" "\377\377\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\3\17\37\77\77\77\77\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300" "\300\300\300\200\200\0\0\0\0\0\0\0\300\360\374\376\377\77\37\17\7\7\7\7\7\7\17\37\77\377\376\374" "\370\340\200\0\377\377\377\377\3\0\0\0\0\0\0\0\0\0\0\0\0\1\377\377\377\377\377\0\77\377\377\377" "\374\340\200\0\0\0\0\0\0\0\0\0\300\360\377\377\377\177\17\0\0\0\3\7\17\17\37\37>>><" ">>>\37\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\377\377\377" "\377\377\3\3\3\3\3\3\3\7\7\7\17\37\377\377\376\374\360\0\0\377\377\377\377\377\360\360\360\360\360\360" "\360\360\360\370\370\376\177\177\77\17\3\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300" "\300\300\200\200\200\0\0\0\0\0\0\0\300\360\374\376\377\77\37\17\7\7\7\7\7\7\17\37\77\377\376\374" "\370\340\0\0\377\377\377\377\3\0\0\0\0\0\0\0\0\0\0\0\0\1\377\377\377\377\377\0\177\377\377\377" "\374\340\200\0\0\0\0\0\0\0\0\0\300\370\377\377\377\177\17\0\0\1\3\7\17\37\77\77>\374\374\374" "\374>>\37\37\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\17\37\37\36\36\36\36\36\36" "\36\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\377\377\377" "\377\377\3\3\3\3\3\3\7\7\7\17\37\377\377\376\374\360\0\0\0\377\377\377\377\377\360\360\360\360\360\360" "\360\360\360\370\374\177\77\77\17\3\0\0\0\377\377\377\377\377\0\0\0\0\0\1\7\37\177\377\376\370\340\200" "\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\1\7\37\77\77><\60\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300" "\300\300\300\200\200\0\0\0\0\0\0\0\0\360\374\376\377\377\37\17\7\7\7\7\7\7\7\17\37\77\77\36" "\4\0\0\0\0\1\7\17\37\37\77>||x\370\370\360\360\340\340\300\300\200\0\0\0\0\0\200\340\300" "\200\0\0\0\0\0\0\0\0\1\1\3\307\377\377\377\377\374\0\0\3\7\17\17\37\37\36>>><>" ">>>\37\37\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\3\3\3\3" "\3\3\3\3\377\377\377\377\377\3\3\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300@\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\177\377\377\377" "\377\300\200\0\0\0\0\0\0\0\0\0\300\377\377\377\377\177\0\0\0\1\7\17\17\37\37\77>>>>" ">>\77\37\37\17\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300@\7\77\377\377" "\377\370\300\0\0\0\0\0\0\0\0\0\340\374\377\377\177\17\3\0\0\0\1\7\77\377\377\376\360\200\0\0" "\0\200\360\377\377\377\37\3\0\0\0\0\0\0\0\0\0\1\17\177\377\377\374\340\374\377\377\77\7\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\77\77\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\300\300\300\377\377\377\377\300\0\0\0\0\340\376\377\377\370\200\0\0\0\200\377" "\377\377\377\3\3\377\377\377\377\360\0\360\377\377\77\7\177\377\377\374\300\200\377\377\377\77\0\0\0\0\77\377" "\377\377\377\377\77\3\0\0\0\7\177\377\377\377\377\377\17\0\0\0\0\0\0\17\77\77\77\3\0\0\0\0" "\0\0\0\7\77\77\77\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\0\0\0\1\7\37" "\177\377\376\370\360\300\0\0\200\340\370\376\377\177\37\7\3\0\0\0\0\0\0\0\0\1\3\217\377\377\377\376" "\377\377\337\7\1\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\177\37\7\7\17\77\377\377\374\360\340\200" "\0\0\0\0\60<\77\77\77\37\7\1\0\0\0\0\0\0\0\3\17\37\77\77>\70\60\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\0\1\7\37\177\377\377\374\360\300\0\0\0\0\0\300\360\374\377\377\77" "\17\3\0\0\0\0\0\0\1\7\37\177\377\377\374\360\370\376\377\177\17\3\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\0\3\3\3" "\3\3\3\3\3\3\3\3\3\303\343\373\377\377\177\37\17\3\0\0\0\0\0\0\0\0\0\200\300\360\370\376" "\377\177\37\17\3\0\0\0\0\0\0\0\0\0\200\340\360\374\376\377\177\37\7\3\0\0\0\0\0\0\0\0" "\0\0\0\0<>\77\77\77\77\77<<<<<<<<<<<<<>>\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360\360" "\360\360\360\360\360\360\360\360\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\200\200\200" "\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\0\0\0\0\0`\340\360\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7" "\37\377\377\376\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\376" "\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\376\360\300\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\37\177\377\377|p\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360\360\360" "\360\360\360\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200" "\200\200\377\377\377\377\377\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\200\340\360\374\376\77\37\177\376\374\360\300\0\0\0\0\0\0\0\0\0\10\14\37\37\37\7\3\0\0\0" "\0\1\7\37\37\37\16\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200\200\200" "\200\200\200\200\200\200\200\200\200\200\200\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\7\0\0\0\0\0\0\370\360\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\37\77\377\377\376\370\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\37\77" "\177\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\300\200\200\0\0" "\0\0\0\0\0\0\2\7\17\217\207\207\303\303\303\303\303\303\307\307\377\377\377\376\374\0\0\0\360\374\376\377" "\377\217\17\7\7\7\7\7\3\203\203\343\377\377\377\377\377\0\0\0\0\3\7\17\17\37\37\37\37\36\37\37" "\17\17\17\7\37\37\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\360\360\360\360\360\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\377\377\377\377\377>\17\17\7\7\7" "\7\7\17\17\37\377\377\376\374\360\300\0\0\377\377\377\377\377\300\0\0\0\0\0\0\0\0\0\200\300\377\377" "\377\377\77\0\0\77\77\77\77\7\17\37\36>><>>>\77\37\37\17\7\3\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\300\200\200" "\0\0\0\0\0\300\370\374\376\377\177\37\17\7\3\3\3\3\3\3\7\7\17\77\37\16\4\0\0\37\177\377" "\377\377\370\300\200\200\0\0\0\0\0\0\0\200\200\300\300\0\0\0\0\0\0\1\3\7\7\17\17\37\37\37" "\37\36\37\37\37\17\17\7\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\20\0\0\0\0\0\0" "\0\0\200\200\200\200\200\200\200\200\0\0\377\377\377\377\377\0\0\0\300\360\374\376\377\177\37\17\7\7\7\7" "\7\17\37>\377\377\377\377\377\0\0\0\77\377\377\377\377\340\200\0\0\0\0\0\0\0\0\300\377\377\377\377" "\377\0\0\0\0\1\7\17\17\37\37\77>><>>\36\37\17\77\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\300\200\0\0" "\0\0\0\0\300\370\374\376\377\337\317\307\303\303\303\303\303\303\307\307\317\377\377\376\374\360\0\0\37\377\377\377" "\377\363\303\203\3\3\3\3\3\3\3\3\3\203\303\203\3\3\0\0\0\0\1\3\7\7\17\17\37\37\37\37" "\36\37\37\37\17\17\7\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\360\360\360\360\360\360\360\360\360\340\340\300\0\0\0\0\0" "\0\0\376\377\377\377\377\3\1\0\0\0\0\0\1\3\7\7\1\0\0\17\17\17\17\17\377\377\377\377\377\17" "\17\17\17\17\17\17\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\200\200\200\300\300" "\300\300\300\300\0\370\376\377\377\377\207\3\1\1\1\1\1\3\207\377\377\377\377\363\3\3\3\3\0\0\303\347" "\377\377\77\77>><>>\77\37\37\17\7\3\1\0\0\0\0\300\340\363\377\377\77\37\17\17\17\17\17" "\17\17\17\37\37\37\376\376\376\374\360\0\3\7\17\37\37\37>>>><<>>>>\36\37\37\17" "\7\3\1\0\0\360\360\360\360\360\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\377\377\377\377\377~\36\17\17\7\7" "\7\7\17\37\377\377\377\374\360\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360" "\360\340\300\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\201\203\207\207\207\203\1\0\0\0\0\0" "\0\0\0\0\0\0\0\7\7\7\7\7\7\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0<<<<<<\77\77\77" "\77\77<<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\360\340\300\0\0\0\0\0\0\0\0\0" "\200\200\200\200\200\200\200\200\201\203\207\207\207\203\1\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7" "\7\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0" "\0\0\0\0\0\0\0\200\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\14\36\77\77" ">|||x||>\77\77\37\17\7\1\0\0\0\0\0\0\0\360\360\360\360\360\20\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\200\200\200\200" "\200\200\0\0\0\377\377\377\377\377\0\200\300\300\340\360\370|>\37\37\17\7\3\1\0\0\0\0\377\377\377" "\377\377\37\17\7\17\37\177\376\374\370\360\340\300\200\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0" "\0\1\3\7\37\77\77><\70\60 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0<<<<<<<\77\77\77\77\77<<<<<<<\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\200\300\300\300\300\300\300\200\0\200\300\300\300\300\300" "\300\200\0\0\377\377\377\377\377\17\3\3\3\377\377\377\377\377\17\3\3\3\377\377\377\377\377\0\377\377\377\377" "\377\0\0\0\0\377\377\377\377\377\0\0\0\0\377\377\377\377\377\0\37\37\37\37\37\0\0\0\0\37\37\37" "\37\37\0\0\0\0\37\37\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300" "\300\300\0\0\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\377\377\377\377\377\77\17\7\7\3\3" "\3\3\7\17\377\377\377\376\370\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\37\37\37\37\37\0\0\0\0\0\0\0\0\0\0\37\37\37\37\37\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\300\200\0\0" "\0\0\0\0\300\360\374\376\377\177\17\7\7\3\3\3\3\3\7\7\37\177\377\377\376\370\340\0\37\177\377\377" "\377\360\300\200\0\0\0\0\0\0\0\200\300\360\377\377\377\177\37\0\0\0\1\3\7\7\17\17\37\37\37\36" "\37\37\37\17\17\7\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300" "\300\300\0\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\377\377\377\377\377\37\7\7\3\3\3" "\3\3\7\7\17\177\377\377\376\374\340\0\0\377\377\377\377\377\300\200\0\0\0\0\0\0\0\200\300\340\377\377" "\377\377\37\0\0\377\377\377\377\377\7\17\17\17\37\36\37\37\37\37\17\17\7\3\1\0\0\0\0\77\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300\300\300\300\300\300\200\0\300\300\300" "\300\300\0\0\300\370\376\377\377\77\17\7\7\3\3\3\3\3\7\17\37\377\377\377\377\377\0\0\37\177\377\377" "\377\360\300\200\0\0\0\0\0\0\0\200\340\377\377\377\377\377\0\0\0\0\1\3\7\17\17\37\37\37\37\36" "\37\17\17\7\7\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "\300\300\300\300\0\0\200\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\377\377\377\377\377\177\37\17\7" "\7\3\3\3\3\3\7\17\37\7\1\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\37\37\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300\300\300\300\300\300\300\300\200\0\0" "\0\0\0\0\0\0<\177\377\377\377\347\307\303\203\203\203\203\7\7\17\77\37\17\2\0\0\0\0\200\340\340" "\300\201\201\3\3\3\7\7\7\7\17\237\377\376\376\374\360\0\0\0\1\3\7\7\17\17\17\37\37\37\36\37" "\37\37\37\17\17\7\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200" "\200\200\200\376\376\377\377\377\200\200\200\200\200\200\200\0\0\0\0\0\0\7\7\7\7\7\377\377\377\377\377\7" "\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\200" "\0\0\0\0\0\0\0\0\0\0\3\17\37\37\77\77>><>>\36\37\17\16\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\0\0\0\0\0\0\0\0\0\0\200\200\200\200" "\200\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\377\377\377" "\377\377\300\0\0\0\0\0\0\0\0\300\377\377\377\377\377\0\0\0\0\0\3\17\17\37\37\77>><>" ">\36\37\17\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200" "\200\200\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\0\0\1\17\77\377\377\376\370\300\0\0\0\0" "\0\0\0\200\360\376\377\377\77\7\0\0\0\0\0\0\7\37\377\377\377\370\340\0\300\370\376\377\77\17\3\0" "\0\0\0\0\0\0\0\0\0\0\0\3\17\77\77\77\77\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200" "\200\200\200\0\377\377\377\360\0\0\0\0\340\376\376\376\376\360\200\0\0\0\377\377\377\377\37\0\7\177\377\377" "\377\340\340\376\377\77\7\7\77\377\377\370\300\370\377\377\377\7\0\0\0\0\17\77\77\77\77\37\3\0\0\0" "\0\3\37\77\77\77\77\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200" "\200\200\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\0\0\0\1\7\17\37\177\376\374\370\340\300\200" "\340\360\374\376\177\37\17\3\1\0\0\0\0\0\0\0\200\300\340\371\377\377\77\77\377\377\371\360\300\200\0\0" "\0\0\0\0 \70<>\77\77\17\7\1\0\0\0\0\1\3\17\37\77\77>\70\60 \0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\200\200" "\200\200\200\0\1\7\37\377\377\377\370\340\0\0\0\0\0\0\0\200\360\377\377\377\77\7\0\0\0\0\0\0" "\3\17\77\377\377\374\340\200\200\360\376\377\377\37\7\0\0\0\0\0\0\0\0\0\0\0\0\1\7\377\377\377" "\377\177\37\3\0\0\0\0\0\0\0\0>\77||x||~\77\77\37\17\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200" "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\0\0\0\0\0\7\7\7\7\7\7\7\7\7\207\307" "\367\377\377\177\77\37\17\7\0\0\0\0\0\0\0\200\300\360\370\374\376\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0<>\77\77\77\77\77=<<<<<<<<<<<<>>\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300" "\300\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\370\376\377\377\377\17\7\3\3\3\3\3\3\3" "\0\0\0\0\0\200\200\200\200\340\377\377\377\177\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\17" "\17\37\377\377\374\370\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\37\77\77\177~|||xxxx" "\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\177\177\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\7\17\377\377\377\376\370\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\177\377\377\377\340\300\200\200\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\370\374\377\377\77\17\17\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0xxxxx|||\177\77\77\37\17\3\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200" "\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\200\300\200\200\0\6\7\17\17\7\7\7\3\7\7\17\17" "\37\37\37\37\37\37\17\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\360" "\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\207\207\207\203\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\340\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\37\77\77" "\37\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\200\200\200\0\0\0\0\0\0\0\0\0\0\0" "\200\300\340\340\340\360\360\360\377\377\377\377\341\340\340\300\200\0\0\0\340\374\376\377\377\37\7\3\1\0\360\377" "\377\377\377\1\1\3\17\17\7\3\0\0\17\177\377\377\377\370\340\200\0\360\377\377\377\177\0\0\0\200\300\300" "\200\0\0\0\0\0\0\1\3\7\17\17\377\377\377\377\177\37\37\37\17\17\17\7\3\1\0\0\0\0\0\0" "\0\0\0\0\3\3\3\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300" "\300\300\300\300\200\200\200\0\0\0\0\0\0\0\0\360\374\376\377\377\37\17\7\7\7\7\7\7\17\37\17\7" "\2\0\0\0\0\36\36\37\77\377\377\377\376\336\36\36\36\36\0\0\0\0\0\0\0\0\0\0\0\0\0\200" "\340\377\377\377\377\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\34>\37\37\37\17\17\17\17\17\17\37" "\37\36>>><>>\36\37\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\60x" "\370\360\340\340\340\360\360\360\360\360\340\340\340\360\370x\60\0\0\0\0\0\0|\377\377\377\307\201\1\1\0" "\1\1\3\307\377\377\377|\0\0\0\0\0\0\30<\77\37\17\17\17\37\37\36\37\37\17\17\17\37\77<" "\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\0\0\0\0\0\0\0" "\0\0\0\0\0\200\300\300\300\300\300\0\0\3\17\77\177\377\376\370\340\200\0\0\0\200\340\370\376\377\177\37" "\7\3\0\0\0\0\200\200\200\201\207\217\277\377\376\374\376\377\277\217\207\201\200\200\200\0\0\0\0\0\307\307" "\307\307\307\307\307\377\377\377\377\377\307\307\307\307\307\307\307\0\0\0\0\0\3\3\3\3\3\3\3\77\77\77" "\77\77\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\177\177\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\360\360\360\360" "\360\360\360\360\340\340\300\200\0\0\0\0\0\0\0>\377\377\377\377\343\301\300\200\200\200\1\3\17\17\7\3" "\1\0\0\0\0\0\360\374\374\377\377\317\7\7\7\7\17\17\37\77\376\376\374\370\360\0\0\0\0\0\0\3" "\7\7\17\17\37\37\36>>|\374\376\377\377\367\303\1\0\0\0\0\20\70~\177\376\370\360\360\360\360\360" "\360\360\370\377\177\177\77\17\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\340\360\370\370\370\360\340\0\0\0\340\360\370\370\370\360\340\0\0\0\0\0\0\0\0" "\1\3\3\3\1\0\0\0\0\0\1\3\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\340\360\370\370x|\274\274\274\274\274|x\370\360\360" "\340\300\0\0\374\377\377\37\347\371\376\376\37\17\17\17\7\17\17\77\77><\21\7\37\377\376\177\377\377\370" "\347\237\77\177~\370\370\360\360\360\370\370||\70\210\340\370\377\177\0\0\3\7\7\17\37\37\36><<" "<<<\36\36\36\17\7\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0" "\0\207\217\317\307\303\343\343\343\343\347\377\377\377\376\0\0\0\0\0\0\0\0\0\77\177\377\377\363\341\341\341" "\341\361\361\377\377\377\377\0\0\0\0\0\0\0<<<<<=======<====<" "<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\300\340\360\370\374~<\30\200\300\340\360\370\374~<\30\0\0\0\0\7\17\37" "\77\177\375\371\360\340\306\217\37\77\177\377\371\360\340\300\200\0\0\0\0\0\0\0\0\0\0\1\3\7\7\3" "\1\0\0\0\1\3\7\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360\360\360\360" "\360\360\360\360\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340" "\340\360\370xx<<<<<<|x\370\360\360\340\300\0\0\374\377\377\17\3\0\377\377\377\377\307\307" "\307\307\347\377\376\374x\1\7\37\377\376\177\377\377\370\340\300\377\177\177\177\1\1\1\7\37\177}p\340\200" "\300\370\377\177\0\0\3\7\7\17\37\37>>>><>>\36\36\37\17\7\7\3\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\3\3\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\300\300\340\340\340\340\340\300\300\200\0\0\0\0\0\0\0\0\0\0\0" "<\377\377\377\347\303\303\201\303\303\347\377\377\377~\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7" "\7\7\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376\376\376\0\0\0\0\0\0" "\0\0\0\0\36\36\36\36\36\36\36\36\36\377\377\377\377\377\36\36\36\36\36\36\36\36\0\0\0\0\0\0" "\0\0\0\0\0\177\177\177\177\177\0\0\0\0\0\0\0\0\0\0<<<<<<<<<<<<" "<<<<<<<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\200\300\300\340\340\340\340\340\340\300\300\200\0\0\0\0\0\0\0\0\0\0" "\7\17\17\7\3\1\1\201\301\341\367\377\377\177\36\0\0\0\0\0\0\0\0\0\340\360\370\374\376\376\377\357" "\347\343\341\341\340\340\340\340\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\340\340\340" "\340\340\340\300\300\200\0\0\0\0\0\0\0\0\0\0\1\3\7\7\3\361\361\361\361\361\363\377\377\377\237\0" "\0\0\0\0\0\0\0\0\60x\374\374\360\340\340\340\340\340\361\373\377\177\77\37\0\0\0\0\0\0\0\0" "\0\0\0\0\1\1\1\1\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\370\374\370x\60\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\4\7\17\37\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\0\0\0\0\0\0\0\0\200\200\200\200\200\0\0" "\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\377\377\377\377" "\377\200\0\0\0\0\0\0\200\377\377\377\377\377\0\0\0\0\200\0\377\377\377\17\37\37>>>>>\37" "\37\17\7\17\37\77><>\37\37\16\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\300\340\340\340\360\360\360\360\360\360\360\360\360\360\360\360\360\0\0\0\374\377\377" "\377\377\377\377\377\377\377\377\377\377\0\0\0\0\377\377\377\377\0\0\0\0\3\7\17\37\77\77\77\77\377\377" "\377\377\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\3\3\3\3\0\0\0\0\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0p\370\374\374\374\370p\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\20<\70xpssww\77>\36\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\340\340" "\340\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\7\3\3\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\1\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\340" "\374\376\377\177\17\3\3\3\3\3\17\77\377\377\374\360\0\0\0\0\0\0\0\7\37\177\177\377\370\340\340\340" "\340\340\360\376\177\77\37\7\0\0\0\0\0\0<<<<<<<=====<<<<<<" "<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\30<~\374\370\360\340\340\300\230<>|\370\360\360\340\300\200\0\0\0\0\0\200\300" "\340\360\370\375\177\77\37\217\307\340\360\370\375\177\77\37\17\7\0\0\0\1\3\7\7\3\1\0\0\0\0\1" "\3\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340pp\370\370\370\370\0\0\0\0\0\0\0\0\0\0\300\360\360\340 \0\0\0\0\0\377" "\377\377\377\0\0\0\0\0\0\300\360\374\377\77\17\3\0\0\0\0\0\0\0\7\7\7\7\0\0\200\340\374" "\377\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\77\7\1\0\200\300\340\360\374\374" "\374\0\0\0\0\0`\370\376\377\77\17\3\0\70<>\77\77;\71\70\377\377\377\70\70\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\0\0\0\340pp\370\370\370\370\0\0\0\0\0" "\0\0\0\0\200\360\360\360\340 \0\0\0\0\0\377\377\377\377\0\0\0\0\0\200\340\370\376\377\77\17\3" "\0\0\0\0\0\0\0\7\7\7\7\0\0\300\360\374\377\177\37\7\0\0\0\0\0\0\0\0\0\0\0\0" "\0\200\340\374\377\377\77\7a\360x<\34\34\34<\374\370\370\340\0\0`\370\376\377\77\17\3\0\0\0" "\200\300\340\360\370\274\236\217\217\207\203\201\0\0\0\0\1\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3" "\3\3\3\3\360\360x\70\70\70x\360\360\300\0\0\0\0\0\0\200\360\360\340`\0\0\0\340\300\200\16" "\16\16\236\377\377\373\360\0\200\340\370\376\377\77\17\3\0\0\0\0\3\3\7\7\7\7\7\3\3\301\360\374" "\377\177\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\374\377\177\37\7\1\200\300\340\360\374\374\374" "\0\0\0\0\0\0`\370\376\377\77\17\3\0\70<>\77;\71\70\377\377\377\70\70\70\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\360" "\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\203\207\207\207\203\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\340\360\374\377\177\77\37\7\0\0\0\0\0\0\0\0\0\0\0\0\374\377\377" "\377\377\207\1\0\0\0\0\0\0\0\0\200\340\300\200\200\0\0\0\0\0\3\7\17\37\37\77>>>>" ">>\37\37\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\1\1\3\3\203\347\307\17\17\17\6\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\200\360\374\377\377\377\376\370\300\0\0\0\0\0\0\0\0\0\0\0\0\200\340\374\377\377\77\7\0\3" "\37\177\377\377\370\340\0\0\0\0\0\0\0\340\374\377\377\377\37\37\36\36\36\36\36\36\37\77\377\377\377\374" "\340\200\0\0\77\77\77\37\3\0\0\0\0\0\0\0\0\0\0\0\0\7\37\77\77\77< \0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\6\17\17\217\347\307" "\3\3\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\374\377\377\377\376\370\300\0\0\0\0\0" "\0\0\0\0\0\0\0\200\340\374\377\377\77\7\0\3\37\177\377\377\370\340\0\0\0\0\0\0\0\340\374\377" "\377\377\37\37\36\36\36\36\36\36\37\77\377\377\377\374\340\200\0\0\77\77\77\37\3\0\0\0\0\0\0\0" "\0\0\0\0\0\7\37\77\77\77< \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\10\34>\37\17\17\207\343\307\7\17\37>>\14\0\0\0\0\0\0\0\0\0\0" "\0\0\200\360\374\377\377\377\376\370\300\0\0\0\0\0\0\0\0\0\0\0\0\200\340\374\377\377\77\7\0\3" "\37\177\377\377\370\340\0\0\0\0\0\0\0\340\374\377\377\377\37\37\36\36\36\36\36\36\37\77\377\377\377\374" "\340\200\0\0\77\77\77\37\3\0\0\0\0\0\0\0\0\0\0\0\0\7\37\77\77\77< \0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\3\1\1\201\343\307" "\7\7\7\7\7\7\3\1\0\0\0\0\0\0\0\0\0\0\200\360\376\377\377\377\377\370\340\0\0\0\0\0" "\0\0\0\0\0\0\0\200\340\374\377\377\77\7\0\3\37\177\377\377\370\340\0\0\0\0\0\0\0\340\374\377" "\377\377\37\37\36\36\36\36\36\36\37\77\377\377\377\374\340\200\0\0\77\77\77\37\3\0\0\0\0\0\0\0" "\0\0\0\0\0\7\37\77\77\77< \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\3\7\17\17\17\7\3\300\340\300\3\7\17\17\17\7\3\0\0\0\0\0\0\0\0\0" "\0\0\300\360\376\377\377\377\376\370\300\0\0\0\0\0\0\0\0\0\0\0\0\200\360\376\377\377\77\7\0\3" "\37\377\377\377\370\340\0\0\0\0\0\0\200\360\376\377\377\177\37\37\36\36\36\36\36\36\37\77\377\377\377\374" "\340\200\0\0\77\77\77\17\3\0\0\0\0\0\0\0\0\0\0\0\0\7\37\77\77\77<\60\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\37\77y\360\360" "y\77\37\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\374\377\377\377\377\374\340\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\370\377\377\77\17\1\1\17\77\377\377\374\340\200\0\0\0\0\0\0\300\370\377" "\377\377\37\37\36\36\36\36\36\36\37\37\177\377\377\374\360\200\0\0\77\77\77\77\7\0\0\0\0\0\0\0" "\0\0\0\0\0\3\17\77\77\77>\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\0\0" "\0\200\360\376\377\377\37\377\377\377\377\3\3\3\3\3\3\3\3\3\0\0\0\340\374\377\377\177\17\0\0\377" "\377\377\377xxxxxxxx\0\200\360\376\377\377\77\77<<<<\377\377\377\377\0\0\0\0\0" "\0\0\0\0\77\77\77\17\1\0\0\0\0\0\0\77\77\77\77<<<<<<<<<\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300" "\300\300\300\300\200\200\0\0\0\0\0\0\0\300\360\374\376\376\177\37\17\7\7\7\3\7\7\7\17\37\177\177" "~<\70\0\376\377\377\377\377\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\77\377\377" "\377\374\340\300\0\0\0\0\0\0\0\0\0\0\200\300\300\200\0\0\0\0\0\3\7\17\17\37\37\77>>" "\376\376>>\36\37\17\17\7\3\1\0\0\0\0\0\0\0\0\70\70\70pwwww\177\77\36\0\0" "\0\0\0\0\0\300\300\300\300\301\301\301\303\303\307\307\307\317\317\306\300\300\300\300\300\300\0\0\0\377\377\377" "\377\377\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\0\0\0\377\377\377\377\377xxxxxx" "xxxxxxx\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\77\77\77\77\77<<<<<<<<<<<<<<<<\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\302\317\317\317\307" "\307\303\303\303\301\301\300\300\300\300\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\3\0\0\0\377\377\377\377\377xxxxxxxxxxxxx\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77<<<<<<" "<<<<<<<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\314\334\336\337\317\317\307\303\307\317\317\337\376\334\314\300\300\300\0\0\0\377\377\377" "\377\377\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\0\0\0\377\377\377\377\377xxxxxx" "xxxxxxx\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\77\77\77\77\77<<<<<<<<<<<<<<<<\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\303\307\317\317\317\307\303\300\300" "\300\303\307\317\317\317\307\303\300\300\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\3\0\0\0\377\377\377\377\377xxxxxxxxxxxxx\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77<<<<<<" "<<<<<<<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\301\301\303\303\303\307\307\317\317\317\302\300\300\300\0\0\0\0\0\0\0\3\3" "\3\3\3\3\377\377\377\377\377\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0<<<<<<\77\77\77\77\77<<<<<<<\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\302\307\317\317\307\307" "\307\303\303\301\301\301\300\0\0\0\0\0\0\0\3\3\3\3\3\3\377\377\377\377\377\3\3\3\3\3\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0<<<<<<\77\77\77\77" "\77<<<<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\314\374\336\337\317\317\307\303\307\307\317\337\376\336\314\300\0\0\0\0\0\0\0\3\3" "\3\3\3\3\377\377\377\377\377\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0<<<<<<\77\77\77\77\77<<<<<<<\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\303\307\317\317\317\307\303\300\300\300" "\303\307\317\317\317\307\303\0\0\0\0\0\0\0\3\3\3\3\3\3\377\377\377\377\377\3\3\3\3\3\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0<<<<<<\77\77\77\77" "\77<<<<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\3\3\3\7\7\7\7\7\17\37\177\377\376\374\360\300\0\0x\377\377\377\377\377xxxxx\0" "\0\0\0\0\0\3\377\377\377\377\376\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\200\340\374\377\377" "\377\77\7\0\0\77\77\77\77\77<<<>>>>\77\37\37\17\7\7\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\301\303\303\207\3\1\1\1\3\3" "\7\7\7\7\7\307\303\301\300\300\0\0\377\377\377\377\377\177\376\370\340\300\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\377\377\377\377\377\0\1\7\37\177\377\374\360\300\200\0\0\377\377\377\377\377\0\0\377\377\377\377" "\377\0\0\0\0\0\1\3\17\77\377\376\370\377\377\377\377\377\0\0\77\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\3\17\37\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\1\203\203\303\307\307\317\317\317\316\206\200\0\0\0\0\0\0\0\300\360\374\376" "\377\77\37\17\7\7\7\7\7\7\17\37\77\377\376\374\370\340\200\0\377\377\377\377\3\0\0\0\0\0\0\0" "\0\0\0\0\0\1\377\377\377\377\377\0\77\377\377\377\374\340\200\0\0\0\0\0\0\0\0\0\300\360\377\377" "\377\177\17\0\0\0\3\7\17\17\37\37>>><>>>\37\37\17\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\202\216\317\317\317\307" "\307\307\303\203\201\0\0\0\0\0\0\0\300\360\374\376\377\77\37\17\7\7\7\7\7\7\17\37\77\377\376\374" "\370\340\200\0\377\377\377\377\3\0\0\0\0\0\0\0\0\0\0\0\0\1\377\377\377\377\377\0\77\377\377\377" "\374\340\200\0\0\0\0\0\0\0\0\0\300\360\377\377\377\177\17\0\0\0\3\7\17\17\37\37>>><" ">>>\37\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\10\34>\237\237\317\307\307\303\307\317\337\277\276\34\10\0\0\0\0\0\300\360\374\376" "\377\77\37\17\7\7\7\7\7\7\17\37\77\377\376\374\370\340\200\0\377\377\377\377\3\0\0\0\0\0\0\0" "\0\0\0\0\0\1\377\377\377\377\377\0\77\377\377\377\374\340\200\0\0\0\0\0\0\0\0\0\300\360\377\377" "\377\177\17\0\0\0\3\7\17\17\37\37>>><>>>\37\37\17\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\201\201\300\301\301\303" "\303\307\307\207\207\3\3\0\0\0\0\0\300\360\374\376\377\77\37\17\7\7\7\7\7\7\17\37\77\377\376\374" "\370\340\200\0\377\377\377\377\3\0\0\0\0\0\0\0\0\0\0\0\0\1\377\377\377\377\377\0\77\377\377\377" "\374\340\200\0\0\0\0\0\0\0\0\0\300\360\377\377\377\177\17\0\0\0\3\7\17\17\37\37>>><" ">>>\37\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\3\7\17\17\217\207\303\300\300\300\303\307\317\217\217\7\3\0\0\0\0\0\300\360\374\376" "\377\77\37\17\7\7\7\7\7\7\17\37\77\377\376\374\370\340\200\0\377\377\377\377\3\0\0\0\0\0\0\0" "\0\0\0\0\0\1\377\377\377\377\377\0\77\377\377\377\374\340\200\0\0\0\0\0\0\0\0\0\300\360\377\377" "\377\177\17\0\0\0\3\7\17\17\37\37>>><>>>\37\37\17\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\300\200\0\0\0\0\0\0\0\200\300\340\340\300" "\200\0\0\0\0\0\1\3\7\17\37\277\377\376\374\370\374\376\377\277\37\17\7\3\1\0\0\0\0\0\60x" "\374\376\177\77\37\17\7\3\7\17\37\77\177\376\374x \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\200\300\300\340\340\340\340\340\340\300\300\300\340\360\370\370p\60\0\340\370\376\377" "\377\77\17\7\3\3\3\3\203\343\377\377\177\177\377\377\375\360\300\0\377\377\377\377\1\0\0\0\300\340\370\376" "\177\37\7\1\0\0\377\377\377\377\377\0\37\177\377\377\374\360\374\377\77\17\3\1\0\0\200\200\340\374\377\377" "\377\77\7\0p|\377\177\77\17\17\17\37\37\37\36\37\37\37\17\17\7\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300A\1\3\3\7\7\7" "\17\17\7\2\0\300\300\300\300\300\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\177\377\377\377" "\377\300\200\0\0\0\0\0\0\0\0\0\300\377\377\377\377\177\0\0\0\1\7\17\17\37\37\77>>>>" ">>\77\37\37\17\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300@\2\17\17\17\7\7\7\3\3\1\1\300\300\300\300\300\0\0\377\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\377\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\177\377\377\377\377\300\200\0\0\0\0\0\0\0\0\0\300\377\377\377" "\377\177\0\0\0\1\7\17\17\37\37\77>>>>>>\77\37\37\17\17\7\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\334^\37\17\17\7\3\3" "\7\17\37\37\36\314\300\300\300\300\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\177\377\377\377" "\377\300\200\0\0\0\0\0\0\0\0\0\300\377\377\377\377\177\0\0\0\1\7\17\17\37\37\77>>>>" ">>\77\37\37\17\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\303\307O\17\17\7\3\0\0\0\3\7\17\17\317\307\303\300\300\0\0\377\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\377\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\177\377\377\377\377\300\200\0\0\0\0\0\0\0\0\0\300\377\377\377" "\377\177\0\0\0\1\7\17\17\37\37\77>>>>>>\77\37\37\17\17\7\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\0\0\6\17\17\7\7" "\7\3\3\3\1\1\300\300\300\300\300\0\1\7\37\177\377\377\374\360\300\0\0\0\0\0\300\360\374\377\377\77" "\17\3\0\0\0\0\0\0\1\7\37\177\377\377\374\360\370\376\377\177\17\3\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\360\360\360\360\360\360\360\360\360\360\360\340\340\300\200\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0" "\0\1\1\1\3\207\377\377\377\377\374\0\0\377\377\377\377\377<<<<<<<<<>>\77\37\37" "\17\3\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\360\360\360\360" "\360\360\340\340\340\300\200\0\0\0\0\0\0\360\376\377\377\377\37\3\1\1\1\1\1\1\3\207\377\377\377\377" "\374\0\0\0\0\377\377\377\377\377\0\0\0<<<>>~\177\377\377\363\341\340\200\0\0\0\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\203\377\377\377\377\376\0\0\77\77\77\77\77\0\20\34\37>>" ">>>>\37\37\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0p\360\370\374\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\200\200\200\201\207\217\237\217\216\204\0\0\0\0\0\0\0\0\0\0\4\16\37\37\17\17\207\207\207\207" "\207\207\217\217\377\377\376\374\370\0\0\0\340\370\374\376\376\37\37\17\17\17\17\17\7\7\7\307\377\377\377\377" "\377\0\0\0\1\7\17\37\37\77>>><>>\36\37\37\17\77\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370" "\374\374\374\70\20\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\307\307\317\317\303\301\300\300\200\200\0\0" "\0\0\0\0\0\0\2\7\17\217\207\207\303\303\303\303\303\303\307\307\377\377\377\376\374\0\0\0\360\374\376\377" "\377\217\17\7\7\7\7\7\3\203\203\343\377\377\377\377\377\0\0\0\0\3\7\17\17\37\37\37\37\36\37\37" "\17\17\17\7\37\37\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\340\360\370\374\370\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0" "\0\14\237\277\217\207\201\201\203\217\237\277\37\16\0\0\0\0\0\0\0\0\4\16\37\37\17\17\207\207\207\207" "\207\207\217\217\377\377\376\374\370\0\0\0\340\370\374\376\376\37\37\17\17\17\17\17\7\7\7\307\377\377\377\377" "\377\0\0\0\1\7\17\37\37\77>>><>>\36\37\37\17\77\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\360\370\370xx\370\370" "\360\340\340\300\300\340\360\360`\0\0\0\0\0\0\0\1\3\201\200\200\200\200\201\201\203\203\203\3\3\1\0" "\0\0\0\0\0\0\4\16\37\37\17\17\207\207\207\207\207\207\217\217\377\377\376\374\370\0\0\0\340\370\374\376" "\376\37\37\17\17\17\17\17\7\7\7\307\377\377\377\377\377\0\0\0\1\7\17\37\37\77>>><>>" "\36\37\37\17\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\360\360\360\340\300\0\0\0\300\340\360\360\360\340\300\0\0\0\0\0\0\0\1" "\3\7\207\207\203\201\200\200\200\201\203\207\7\7\3\1\0\0\0\0\0\0\4\16\37\17\17\17\207\207\207\207" "\207\207\217\237\377\377\376\374\370\0\0\0\340\370\374\376\376\37\37\17\17\17\17\17\7\7\7\307\377\377\377\377" "\377\0\0\0\1\7\17\37\37\77>>><>>\36\37\37\17\77\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\370\34\34\34" "\34\370\370\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\203\203\207\207\207\207\203\203\200\0\0\0\0" "\0\0\0\0\0\0\4\16\37\37\17\17\207\207\207\207\207\207\217\217\377\377\376\374\370\0\0\0\340\370\374\376" "\376\37\37\17\17\17\17\17\7\7\7\307\377\377\377\377\377\0\0\0\1\7\17\37\37\77>>><>>" "\36\37\37\17\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300" "\300\300\300\300\300\300\200\200\0\200\300\300\300\300\300\300\300\300\200\0\2\7\207\207\307\303\303\303\303\307\377\377" "\377\377\317\307\303\303\303\303\307\377\377\377\376\377\377\377\217\7\3\3\3\3\377\377\377\377\301\201\1\1\1\1" "\1\1\201\201\3\7\17\17\37\37\36\36\36\17\17\7\3\7\17\17\37\37\37\37\37\17\17\7\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\300\200\200" "\0\0\0\0\0\300\370\374\376\377\177\37\17\7\3\3\3\3\3\3\7\17\37\77\37\16\4\0\0\37\177\377" "\377\377\370\300\200\200\0\0\0\0\0\0\0\200\200\300\200\0\0\0\0\0\0\1\3\7\7\17\17\37\37\237" "\377\376\237\237\237\17\17\7\7\3\0\0\0\0\0\0\0\0\0\34\34\34\70;;;;\77\37\17\0\0" "\0\0\0\0\0\0\0\0\0\0\0\20x\374\374\374\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\200\200\300\300\300\301\307\317\317\307\306\300\200\0\0\0\0\0\0\300\370\374\376\377\337\317\307\303\303\303\303" "\303\303\307\307\317\377\377\376\374\360\0\0\37\377\377\377\377\363\303\203\3\3\3\3\3\3\3\3\3\203\303\203" "\3\3\0\0\0\0\1\3\7\7\17\17\37\37\37\37\36\37\37\37\17\17\7\7\3\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360" "\374\374\374x\60\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\302\307\317\317\307\303\300\300\300\200\0\0" "\0\0\0\0\300\370\374\376\377\337\317\307\303\303\303\303\303\303\307\307\317\377\377\376\374\360\0\0\37\377\377\377" "\377\363\303\203\3\3\3\3\3\3\3\3\3\203\303\203\3\3\0\0\0\0\1\3\7\7\17\17\37\37\37\37" "\36\37\37\37\17\17\7\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\340\360\370\374\370\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0" "\0\16\37\237\217\207\201\201\203\217\237\277\237\16\0\0\0\0\0\0\200\360\370\374\376\277\237\217\207\207\207\207" "\207\207\217\217\237\377\376\374\370\340\0\0\77\377\377\377\377\347\207\7\7\7\7\7\7\7\7\7\7\7\207\7" "\7\7\0\0\0\1\3\7\17\17\37\37>>>><>>>\36\37\17\17\6\2\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\360\340\300\0\0" "\0\300\340\360\360\360\340\300\0\0\0\0\0\0\0\1\3\7\7\207\203\201\200\200\200\201\203\207\207\7\3\1" "\0\0\0\0\200\360\370\374\376\377\237\217\217\207\207\207\207\207\217\217\237\377\376\374\370\340\0\0\77\377\377\377" "\377\367\207\7\7\7\7\7\7\7\7\7\7\7\207\207\7\7\0\0\0\1\3\7\17\17\37\37\77>>>" "<>>>\36\37\17\17\7\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\60x\374\374\374\360\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "\300\300\300\300\303\307\317\317\307\302\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\36\36\36\36\36\36\37\37\37\37\37\36\36\36\36\36\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360" "\370\374\374x\20\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\302\307\317\317\307\303\0\0\0\0\0\0" "\0\0\0\0\0\0\0\3\3\3\3\3\3\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\36\36\36\36\36\36\37\37\37" "\37\37\36\36\36\36\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\340\360\370\370\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\200" "\214\236\277\237\217\203\201\203\207\217\77\37\16\10\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0<<<<<<\77\77\77\77\77<<<<<\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\360\340\300\0\0" "\0\300\340\360\360\360\300\0\0\0\0\0\0\0\0\201\203\207\207\207\203\201\200\200\200\201\7\7\7\7\1\0" "\0\0\0\0\0\0\0\7\7\7\7\7\7\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0<<<<<<\77\77\77" "\77\77<<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0 `p\360\360\360\340\340\300\200\200\200\300\300\300\300\0\0\0\0\0\0\0" "\0\14\36\236\236\217\217\217\217\217\277\377\377\377\373\343\301\1\0\0\200\340\370\374\376\177\37\17\17\7\7\7" "\7\7\17\17\37\177\377\377\377\377\360\0\77\377\377\377\377\340\200\0\0\0\0\0\0\0\0\0\200\340\377\377" "\377\377\77\0\0\0\3\7\17\17\37\37>>><>>>\37\37\37\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\370\370\370\370\370\360" "\360\340\300\300\340\340\360\340\0\0\0\0\0\200\200\201\203\201\0\0\0\200\201\201\203\203\203\203\203\3\1\0" "\0\0\0\0\0\377\377\377\377\377~\36\17\17\7\7\7\7\17\37\377\377\377\374\360\0\0\0\0\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0" "\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\20\70\374\374\374\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\200\200\300\300\300\301\303\317\317\307\307\300\200\0\0\0\0\0\0\300\360\374\376\377\177\17\7\7\3\3\3" "\3\3\7\7\37\177\377\377\376\370\340\0\37\177\377\377\377\360\300\200\0\0\0\0\0\0\0\200\300\360\377\377" "\377\177\37\0\0\0\1\3\7\7\17\17\37\37\37\36\37\37\37\17\17\7\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340" "\360\374\370\360p \0\0\0\0\0\0\0\0\0\0\0\0\0\200\204\216\217\237\217\207\203\200\200\0\0\0" "\0\0\0\0\200\340\370\374\376\377\37\17\17\7\7\7\7\7\17\17\77\377\376\376\374\360\300\0\77\377\377\377" "\377\340\200\0\0\0\0\0\0\0\0\0\200\340\377\377\377\377\77\0\0\0\3\7\17\17\37\37>>><" ">>>\37\37\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\340\360\374\374\374\370\340\300\200\0\0\0\0\0\0\0\0\0\0\0" "\0\16\37\237\217\207\201\200\203\207\237\277\237\16\4\0\0\0\0\0\200\340\370\374\376\377\37\17\17\7\7\7" "\7\7\17\17\77\377\376\376\374\360\300\0\77\377\377\377\377\340\200\0\0\0\0\0\0\0\0\0\200\340\377\377" "\377\377\77\0\0\0\3\7\17\17\37\37>>><>>>\37\37\17\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@\340\360\360\370xxx\370\370" "\360\340\340\300\300\340\360\360`\0\0\0\0\0\0\0\1\3\0\200\200\200\200\201\203\203\203\203\203\3\1\0" "\0\0\0\0\200\340\370\374\376\377\37\17\17\7\7\7\7\7\17\17\77\377\376\376\374\360\300\0\77\377\377\377" "\377\340\200\0\0\0\0\0\0\0\0\0\200\340\377\377\377\377\77\0\0\0\3\7\17\17\37\37>>><" ">>>\37\37\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\360\360\360\340\300\0\0\0\300\340\360\360\360\340\300\0\0\0\0\0\0\0\1" "\3\7\7\207\203\201\200\200\200\201\203\207\207\7\3\1\0\0\0\0\200\340\370\374\376\377\37\17\17\7\7\7" "\7\7\17\17\77\377\376\376\374\360\300\0\77\377\377\377\377\340\200\0\0\0\0\0\0\0\0\0\200\340\377\377" "\377\377\77\0\0\0\3\7\17\17\37\37>>><>>>\37\37\17\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\360\360\360\340\0\0\0\0\0\0" "\0\0\0\0\0\360\360\360\360\360\360\360\361\363\363\363\363\361\360\360\360\360\360\360\360\0\0\0\0\0\0\0" "\0\0\0\0\360\370\370\370\370\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\200\200\200\200\200\200\200\200\200\340\360\360\340`\0\0\0\200\340\370\374\376\377\77\17\17\7\7\307" "\367\377\377\177\37\177\377\377\374\360\300\0\77\377\377\377\377\340\200\340\370\376\177\37\17\3\0\0\200\340\377\377" "\377\377\77\0\0@\343\377\377\377\77\37\77\77><>>>\37\37\17\17\7\3\0\0\0\0\0\0\0" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\20x\374\374\374" "\360\300\200\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\0\0\0\0\3\7\17\17\7\2\300\300\300\300" "\300\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\177\377\377" "\377\377\340\200\0\0\0\0\0\0\200\340\377\377\377\377\377\0\0\0\0\0\1\7\7\17\17\37\37\37\36\37" "\37\17\17\7\37\37\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\374\374\374x\20\0\0\0\0\0\0\0\0\300\300\300" "\300\300\0\0\2\7\17\17\7\1\0\0\300\300\300\300\300\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\0\0\0\0\177\377\377\377\377\340\200\0\0\0\0\0\0\200\340\377\377\377\377" "\377\0\0\0\0\0\1\7\7\17\17\37\37\37\36\37\37\17\17\7\37\37\37\37\37\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\370\374" "\370\360\300\200\0\0\0\0\0\0\0\0\0\200\200\200\200\214\37\37\17\7\1\1\3\17\37\37\237\214\200\200" "\200\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\377\377\377" "\377\377\300\0\0\0\0\0\0\0\0\300\377\377\377\377\377\0\0\0\0\0\3\17\17\37\37\77>><>" ">\36\37\17\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\360\360\360\340\300\0\0\0\300\340\360\360\360\340\300\0\0\0\0\0\200\200\201" "\203\207\7\7\3\1\0\0\0\1\3\7\207\207\203\201\200\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\0\0\0\0\377\377\377\377\377\300\0\0\0\0\0\0\0\0\300\377\377\377\377" "\377\0\0\0\0\0\3\17\17\37\37\77>><>>\36\37\17\77\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360" "\374\374\374x\60\0\0\0\0\0\0\0\300\300\300\300\300\300\0\0\2\7\17\17\7\3\0\0\0\200\300\300" "\300\300@\0\0\3\17\177\377\377\374\360\200\0\0\0\0\0\0\300\370\377\377\177\37\3\0\0\0\0\0\0" "\1\7\37\377\377\376\360\300\300\370\377\377\177\17\3\0\0\0\0\0\0\200\0\0\0\0\0\0\203\377\377\377" "\377\77\17\1\0\0\0\0\0\0\0\0\37\37>><>>\77\37\37\17\7\1\0\0\0\0\0\0\0" "\0\0\0\0\0\360\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\377\377\377\377\377>\17\17\7\7\7" "\7\7\17\17\37\377\377\376\374\370\300\0\0\377\377\377\377\377\200\0\0\0\0\0\0\0\0\0\200\300\377\377" "\377\377\77\0\0\377\377\377\377\377\17\37\36\36><>>>\77\37\37\17\7\3\1\0\0\0\177\177\177" "\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\360\340\300\0\0" "\0\300\340\360\360\360\340\300\0\0\0\0\200\200\200\201\203\207\7\7\3\1\0\0\0\1\3\7\7\7\203\201" "\200\200\200\0\0\7\37\177\377\377\374\360\200\0\0\0\0\0\0\0\340\374\377\377\177\37\3\0\0\0\0\0" "\3\17\77\377\377\376\360\300\0\340\374\377\377\77\17\3\0\0\0\0\0\0\0\0\0\0\0\1\7\337\377\377" "\377\377\77\7\1\0\0\0\0\0\0\0>\77~||||~\77\77\37\17\7\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: -FreeType-Inconsolata LGC-Bold-R-Normal--44-440-72-72-P-214-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Emboldened by MihailJP. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 95/658 BBX Build Mode: 3 */ const uint8_t u8x8_font_inb33_3x6_r[13684] U8X8_FONT_SECTION("u8x8_font_inb33_3x6_r") = " ~\3\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360" "\340\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\17\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\17\217\217\217\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\37\77\77\77" "\37\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\340\360\360\360\340\0\0\0\0\340\360\360\360\340\0\0\0\0\0\0\0\0\0" "\0\377\377\377\377\377\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\0\0" "\0\0\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0" "\0\0\0\300\300\300\300\300\0\0\0\0\200\200\200\200\200\200\376\377\377\377\217\200\200\200\200\377\377\377\377\203" "\200\200\200\200\7\7\7\7\7\377\377\377\377\17\3\3\3\203\377\377\377\377\7\7\7\7\7\0<<<<" "\374\377\377\377\77<<<<\377\377\377\377\77<<<<\14\0\0\0\0x\177\177\177\37\0\0\0\0" "\177\177\177\177\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\360\360\360\360\200\200\0\0\0\0\0\0\0\0\0\0\360\370" "\374\376\377\37\17\7\377\377\377\377\7\17\17\37\177>\34\10\0\0\0\0\1\7\17\37\77\77>|\377\377" "\377\377\360\360\340\340\340\300\200\0\0\0\0\0\300\340\340\300\200\0\0\0\377\377\377\377\1\1\3\307\377\377" "\377\377~\0\0\1\3\7\7\17\17\17\37\36\377\377\377\377\36\17\17\17\7\7\3\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\200\200\0\0" "\0\0\0\0\0\300\300\300\300@\0\0\377\377\377\307\307\307\307\377\377\377\377|\200\340\360\374\377\77\37\7" "\1\0\0\0\1\3\3\7\7\7\7\7\303\363\371\376\177\37\7\3\0\0\0\0\0\0\0\0\0\0\0\200" "\340\370\374\377\77\17\3\361\374\376\376\37\37\37\37\376\376\374\360\0\60<>\77\37\7\1\0\0\0\0\3" "\17\37\37>>>>\37\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\374" "\376\377\377\377\17\7\3\7\17\377\377\377\376\374\0\0\0\0\0\0\0\0\0\300\303\357\377\377\177\376\370\374" "\377\337\17\7\3\0\0\200\200\200\0\0\370\376\377\377\377\207\1\0\0\0\1\7\17\77\377\376\374\370\374\377" "\377\77\17\6\1\7\17\37\37\37>>>>>>\37\37\17\17\7\7\17\77\77\37\34\10\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360" "\360\360\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\360\360\370xx`\0\0\0\0\0\0\0" "\0\0\200\340\370\374\376\377\77\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\370\377\377\377\377\7\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\377\377\377\377\370\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\3\17\77\177\377\376\370\360\340\300\200\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\1\3\7\17\17\37\77\36\14\0\0\0\0\0\300\360\360\340\340\300\200\200\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\17\37\77\377\376\374\370\340\200\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\37\377\377\377\376\360\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\377\377\377\377\77\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\376" "\377\177\37\17\3\0\0\0\0\0\0\0\0\0\70|>>\37\37\17\7\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\360\360\360\360\360\0\0\0\0\0\0\0\0\0\0\70>><|xxp\360\377\377\377" "\377\361pxx|<<>\70 \0\0\0@\340\360\370\376\177\37\17\7\3\17\37\177\376\374\370\340\300" "\0\0\0\0\0\0\0\0\1\1\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\370\370\0\0\0\0\0\0" "\0\0\0\0xxxxxxxxx\377\377\377\377\377xxxxxxxx\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\70|\376\376\376\376\374\370\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0 \60x~\77\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\70|\376\376\376|\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340\360\360\340\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\77\17\3" "\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\177\37\3\0\0\0\0\0\0\0\0\0\0\0\0" "\200\340\374\377\377\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0`x\376\377\177\37\7\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\300\360\374" "\376\377\177\37\17\7\7\7\7\17\337\377\377\376\374\360\300\0\0\0\376\377\377\377\377\3\0\0\200\340\360\370" "~\37\17\7\1\377\377\377\377\376\0\0\7\77\377\377\377\370\374\237\17\7\1\0\0\0\0\300\370\377\377\377" "\177\17\0\0\0\0\0\3\7\17\37\37\77>><>>\37\37\17\7\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300" "\300\300\0\0\0\0\0\0\0\0\0\0\0\0\34\34\36\36\17\17\17\377\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0\0\0\10\34" ">\177\37\17\7\7\7\3\7\7\7\17\77\377\377\376\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\200" "\200\300\340\360\374\377\177\77\17\3\0\0\0\0\0\0\200\300\360\370\374\376\77\37\17\7\7\3\1\0\0\0" "\0\0\0\0\0\0<\77\77\77\77\77=<<<<<<<<<<<>>\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300" "\300\300\200\200\0\0\0\0\0\0\0\0\0\0\6\17\37\17\7\7\7\7\7\7\7\7\17\377\377\377\376\370" "\0\0\0\0\0\0\0\0\0\0xx||||\374\376\377\377\377\347\303\201\0\0\0\0\0\0\0\300" "\300\0\0\0\0\0\0\0\0\0\1\303\377\377\377\377\376\0\0\0\0\6\17\17\37\37\77>>>>>" ">>\37\37\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300\0\0\0\0\0\0\0\0\0\0" "\0\0\0\200\300\340\370\374\177\377\377\377\377\377\0\0\0\0\0\0\0\0\200\340\360\374\376\77\37\7\3\0" "\0\377\377\377\377\377\0\0\0\0\0\0<\77\77\77\77=<<<<<<<\377\377\377\377\377<<" "<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\300\300\0\0\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3" "\3\0\0\0\0\0\60\177\177\377\77\77\36\37\37\37\37\37\37>\376\374\374\370\340\200\0\0\0\0\200\300" "\300\300\200\0\0\0\0\0\0\0\0\0\300\377\377\377\377\177\0\0\0\1\3\7\17\37\37\37>>><" ">>>\37\37\17\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\340\370" "\374\376\377\77\17\7\7\7\3\7\7\7\17\17\7\2\2\0\0\0\0\377\377\377\377\377\374>\36\37\37\17" "\37\37\77\376\376\374\370\360\200\0\0\0\0\37\377\377\377\377\360\200\0\0\0\0\0\0\0\300\377\377\377\377" "\177\0\0\0\0\0\0\3\7\17\37\37\77>><>>\37\37\17\17\7\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\300\300\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\303\363\377\377\377\77\17" "\3\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\377\377\77\7\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\300\370\377\377\377\77\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70>\77\77\77\17\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\370\374" "\376\377\377\17\7\7\7\3\7\7\17\37\377\377\377\376\370\0\0\0\0\0\1\3\217\317\377\377\376|xx" "x\370\374\377\377\317\307\203\0\0\0\0\0\370\376\377\377\377\307\1\0\0\0\0\0\0\1\1\207\377\377\377" "\376\374\0\0\0\0\3\7\17\37\37\37>>><>>>\37\37\17\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300" "\300\300\200\200\0\0\0\0\0\0\0\0\0\340\370\376\377\377\77\17\7\7\7\7\7\7\37\77\377\376\374\360" "\200\0\0\0\0\17\77\177\377\377\370\360\340\300\300\300\300\340\340\360\377\377\377\377\377\0\0\0\0\0\0\0" "\200\201\3\3\3\3\3\3\3\3\201\361\377\377\377\177\17\0\0\0\0\4\16\17\37\37>>><>>" "\36\37\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\34>\177\177\177" ">\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\70|\376\376\376|\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\70|\376\376\376|\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70|\376\376\376" "\376\374\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \60x\77\37\37\7\3\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\200\200\300\300\340\340\360\360\370\370||>>\37\37\0\70|\374\376\376\377\357\357\307\207\207\3" "\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\17\17\37\37>>||\370\370\360" "\360\340\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\7\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200" "\200\200\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0\0<<<<" "<<<<<<<<<<<<<<<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37>>" "||\370\370\360\360\340\340\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3" "\203\207\307\357\357\377\376\376\374|\70\0\340\340\360\360\370\370||>>\37\37\17\17\7\3\3\1\1\0" "\0\0\0\0\7\3\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\340\360\360\360\360" "\360\360\360\340\340\300\200\0\0\0\0\0\0\6\7\17\37\17\3\3\1\1\1\1\1\1\3\207\377\377\377\377" "\374\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\370\374\376\177\77\37\17\7\1\0\0\0\0\0\0\0" "\0\0\0\0\0\7\207\207\207\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\16\37\77\77" "\77\37\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\300\360\370\376" "~\77\17\17\7\7\7\3\7\207\207\217\217\277\377\376\370\340\0\0\377\377\377\3\0\0\0\360\374\376\376\37" "\17\17\17\17\17\207\377\377\377\377\0\0\77\377\377\374\360\300\200\1\7\17\37\37\36\36\36\36\37\17\37\37" "\37\37\0\0\0\0\1\3\7\17\17\37\37>>>><>>\36\36\37\17\14\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\300" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\374\377\377\377\376\370\300\0\0\0\0\0" "\0\0\0\0\0\0\0\200\340\374\377\377\77\7\0\3\37\177\377\377\370\340\0\0\0\0\0\0\0\340\374\377" "\377\377\37\37\36\36\36\36\36\36\37\77\377\377\377\374\340\200\0\0\77\77\77\37\3\0\0\0\0\0\0\0" "\0\0\0\0\0\7\37\77\77\77< \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\377\377\377\377" "\377\3\3\3\3\3\7\7\7\7\17\37\377\377\377\374\370\0\0\0\377\377\377\377\377xxxxxx|" "|\374\376\377\377\357\317\207\1\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\1\203\377\377\377" "\377\374\0\0\77\77\77\77\77<<<<<<<>>>\37\37\17\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300" "\300\300\300\300\200\200\0\0\0\0\0\0\0\300\360\374\376\376\177\37\17\7\7\7\3\7\7\7\17\37\177\177" "~<\60\0\376\377\377\377\377\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\77\377\377" "\377\374\340\300\0\0\0\0\0\0\0\0\0\0\300\300\300\200\0\0\0\0\0\3\7\17\17\37\37\77>>" ">>>>\37\37\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0\0\0\377\377\377\377" "\377\3\3\3\3\7\7\7\7\17\37\77\377\376\374\370\340\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\1\377\377\377\377\377\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\200\300\370\377\377\377" "\77\17\0\0\77\77\77\77\77<<<>>>>>\37\37\17\17\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\300\300\300\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\3\0\0\0\377\377\377\377\377xxxxxxxxxxxxx\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77<<<<<<" "<<<<<<<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\0\0\377\377" "\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\0\0\0\0\377\377\377\377\377xxxxx" "xxxxxxx\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300" "\300\300\300\300\300\200\200\0\0\0\0\0\0\300\360\370\376\376\77\37\17\7\7\7\7\7\7\7\17\17\77\177" ">\34\30\0\376\377\377\377\377\1\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\0\7\77\377\377" "\377\374\340\200\0\0\0\0\3\3\3\3\3\3\377\377\377\377\377\0\0\0\0\3\7\17\17\37\37\77>>" ">>>>>\37\37\37\17\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\0\0\0\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\377\377\377\377\377xxxxxx" "xxxxx\377\377\377\377\377\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\0\0\0\0\0\0\0\3\3\3\3\3\3\377\377\377\377\377\3\3\3\3\3\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0<<<<<<\77\77\77\77" "\77<<<<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\0\0\0" "\0\0\0\3\3\3\3\3\3\377\377\377\377\377\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\300\200\0\0\0\0\0\0\0\200\377\377\377\377\377\0\0" "\0\0\0\0\0\6\17\37\37\37>>>>>>\37\37\17\7\3\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300@\0\0\0\0\0\0" "\0\0\0\0\200\300\300\300\300\300@\0\377\377\377\377\377\0\0\0\0\200\300\360\370\374\376\77\37\17\7\3" "\1\0\0\0\377\377\377\377\377\370|~\377\377\377\347\203\1\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\1\3\17\37\177\377\376\370\360\340\200\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0" "\0\0\3\7\37\77\77\77<\70\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\77\77\77\77\77<<<<<<<<<<<<<<<<\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\300\300\300\0\377\377\377\377\377\376\370\340\200\0\0\0\0\0\200\340\370\376\377\377" "\377\377\377\0\377\377\377\377\377\1\7\37\177\376\370\340\370\376\77\37\7\1\377\377\377\377\377\0\377\377\377\377" "\377\0\0\0\0\1\7\7\3\0\0\0\0\0\377\377\377\377\377\0\77\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\0\0\377\377\377\377" "\377\177\376\370\340\300\0\0\0\0\0\0\0\377\377\377\377\377\0\0\377\377\377\377\377\0\1\7\37\177\377\374" "\360\300\200\0\0\377\377\377\377\377\0\0\377\377\377\377\377\0\0\0\0\0\1\3\17\77\377\376\370\377\377\377" "\377\377\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\3\17\37\77\77\77\77\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300" "\300\300\300\200\200\0\0\0\0\0\0\0\300\360\374\376\377\77\37\17\7\7\7\7\7\7\17\37\77\377\376\374" "\370\340\200\0\377\377\377\377\3\0\0\0\0\0\0\0\0\0\0\0\0\1\377\377\377\377\377\0\77\377\377\377" "\374\340\200\0\0\0\0\0\0\0\0\0\300\360\377\377\377\177\17\0\0\0\3\7\17\17\37\37>>><" ">>>\37\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\377\377\377" "\377\377\3\3\3\3\3\3\3\7\7\7\17\37\377\377\376\374\360\0\0\377\377\377\377\377\360\360\360\360\360\360" "\360\360\360\370\370\376\177\177\77\17\3\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300" "\300\300\200\200\200\0\0\0\0\0\0\0\300\360\374\376\377\77\37\17\7\7\7\7\7\7\17\37\77\377\376\374" "\370\340\0\0\377\377\377\377\3\0\0\0\0\0\0\0\0\0\0\0\0\1\377\377\377\377\377\0\177\377\377\377" "\374\340\200\0\0\0\0\0\0\0\0\0\300\370\377\377\377\177\17\0\0\1\3\7\17\37\77\77>\374\374\374" "\374>>\37\37\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\17\37\37\36\36\36\36\36\36" "\36\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\377\377\377" "\377\377\3\3\3\3\3\3\7\7\7\17\37\377\377\376\374\360\0\0\0\377\377\377\377\377\360\360\360\360\360\360" "\360\360\360\370\374\177\77\77\17\3\0\0\0\377\377\377\377\377\0\0\0\0\0\1\7\37\177\377\376\370\340\200" "\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\1\7\37\77\77><\60\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300" "\300\300\300\200\200\0\0\0\0\0\0\0\0\360\374\376\377\377\37\17\7\7\7\7\7\7\7\17\37\77\77\36" "\4\0\0\0\0\1\7\17\37\37\77>||x\370\370\360\360\340\340\300\300\200\0\0\0\0\0\200\340\300" "\200\0\0\0\0\0\0\0\0\1\1\3\307\377\377\377\377\374\0\0\3\7\17\17\37\37\36>>><>" ">>>\37\37\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\3\3\3\3" "\3\3\3\3\377\377\377\377\377\3\3\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300@\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\177\377\377\377" "\377\300\200\0\0\0\0\0\0\0\0\0\300\377\377\377\377\177\0\0\0\1\7\17\17\37\37\77>>>>" ">>\77\37\37\17\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300@\7\77\377\377" "\377\370\300\0\0\0\0\0\0\0\0\0\340\374\377\377\177\17\3\0\0\0\1\7\77\377\377\376\360\200\0\0" "\0\200\360\377\377\377\37\3\0\0\0\0\0\0\0\0\0\1\17\177\377\377\374\340\374\377\377\77\7\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\77\77\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\300\300\300\377\377\377\377\300\0\0\0\0\340\376\377\377\370\200\0\0\0\200\377" "\377\377\377\3\3\377\377\377\377\360\0\360\377\377\77\7\177\377\377\374\300\200\377\377\377\77\0\0\0\0\77\377" "\377\377\377\377\77\3\0\0\0\7\177\377\377\377\377\377\17\0\0\0\0\0\0\17\77\77\77\3\0\0\0\0" "\0\0\0\7\77\77\77\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\0\0\0\1\7\37" "\177\377\376\370\360\300\0\0\200\340\370\376\377\177\37\7\3\0\0\0\0\0\0\0\0\1\3\217\377\377\377\376" "\377\377\337\7\1\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\177\37\7\7\17\77\377\377\374\360\340\200" "\0\0\0\0\60<\77\77\77\37\7\1\0\0\0\0\0\0\0\3\17\37\77\77>\70\60\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\0\1\7\37\177\377\377\374\360\300\0\0\0\0\0\300\360\374\377\377\77" "\17\3\0\0\0\0\0\0\1\7\37\177\377\377\374\360\370\376\377\177\17\3\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0\0\3\3\3" "\3\3\3\3\3\3\3\3\3\303\343\373\377\377\177\37\17\3\0\0\0\0\0\0\0\0\0\200\300\360\370\376" "\377\177\37\17\3\0\0\0\0\0\0\0\0\0\200\340\360\374\376\377\177\37\7\3\0\0\0\0\0\0\0\0" "\0\0\0\0<>\77\77\77\77\77<<<<<<<<<<<<<>>\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360\360" "\360\360\360\360\360\360\360\360\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\200\200\200" "\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\0\0\0\0\0`\340\360\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7" "\37\377\377\376\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\376" "\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\376\360\300\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\37\177\377\377|p\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360\360\360" "\360\360\360\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200" "\200\200\377\377\377\377\377\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\200\340\360\374\376\77\37\177\376\374\360\300\0\0\0\0\0\0\0\0\0\10\14\37\37\37\7\3\0\0\0" "\0\1\7\37\37\37\16\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200\200\200" "\200\200\200\200\200\200\200\200\200\200\200\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\7\0\0\0\0\0\0\370\360\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\37\77\377\377\376\370\360\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\37\77" "\177\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\300\200\200\0\0" "\0\0\0\0\0\0\2\7\17\217\207\207\303\303\303\303\303\303\307\307\377\377\377\376\374\0\0\0\360\374\376\377" "\377\217\17\7\7\7\7\7\3\203\203\343\377\377\377\377\377\0\0\0\0\3\7\17\17\37\37\37\37\36\37\37" "\17\17\17\7\37\37\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\360\360\360\360\360\60\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\377\377\377\377\377>\17\17\7\7\7" "\7\7\17\17\37\377\377\376\374\360\300\0\0\377\377\377\377\377\300\0\0\0\0\0\0\0\0\0\200\300\377\377" "\377\377\77\0\0\77\77\77\77\7\17\37\36>><>>>\77\37\37\17\7\3\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\300\200\200" "\0\0\0\0\0\300\370\374\376\377\177\37\17\7\3\3\3\3\3\3\7\7\17\77\37\16\4\0\0\37\177\377" "\377\377\370\300\200\200\0\0\0\0\0\0\0\200\200\300\300\0\0\0\0\0\0\1\3\7\7\17\17\37\37\37" "\37\36\37\37\37\17\17\7\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\20\0\0\0\0\0\0" "\0\0\200\200\200\200\200\200\200\200\0\0\377\377\377\377\377\0\0\0\300\360\374\376\377\177\37\17\7\7\7\7" "\7\17\37>\377\377\377\377\377\0\0\0\77\377\377\377\377\340\200\0\0\0\0\0\0\0\0\300\377\377\377\377" "\377\0\0\0\0\1\7\17\17\37\37\77>><>>\36\37\17\77\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\300\200\0\0" "\0\0\0\0\300\370\374\376\377\337\317\307\303\303\303\303\303\303\307\307\317\377\377\376\374\360\0\0\37\377\377\377" "\377\363\303\203\3\3\3\3\3\3\3\3\3\203\303\203\3\3\0\0\0\0\1\3\7\7\17\17\37\37\37\37" "\36\37\37\37\17\17\7\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\360\360\360\360\360\360\360\360\360\340\340\300\0\0\0\0\0" "\0\0\376\377\377\377\377\3\1\0\0\0\0\0\1\3\7\7\1\0\0\17\17\17\17\17\377\377\377\377\377\17" "\17\17\17\17\17\17\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\200\200\200\300\300" "\300\300\300\300\0\370\376\377\377\377\207\3\1\1\1\1\1\3\207\377\377\377\377\363\3\3\3\3\0\0\303\347" "\377\377\77\77>><>>\77\37\37\17\7\3\1\0\0\0\0\300\340\363\377\377\77\37\17\17\17\17\17" "\17\17\17\37\37\37\376\376\376\374\360\0\3\7\17\37\37\37>>>><<>>>>\36\37\37\17" "\7\3\1\0\0\360\360\360\360\360\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\377\377\377\377\377~\36\17\17\7\7" "\7\7\17\37\377\377\377\374\360\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360" "\360\340\300\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\201\203\207\207\207\203\1\0\0\0\0\0" "\0\0\0\0\0\0\0\7\7\7\7\7\7\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0<<<<<<\77\77\77" "\77\77<<<<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\360\340\300\0\0\0\0\0\0\0\0\0" "\200\200\200\200\200\200\200\200\201\203\207\207\207\203\1\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7" "\7\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0" "\0\0\0\0\0\0\0\200\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\14\36\77\77" ">|||x||>\77\77\37\17\7\1\0\0\0\0\0\0\0\360\360\360\360\360\20\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\200\200\200\200" "\200\200\0\0\0\377\377\377\377\377\0\200\300\300\340\360\370|>\37\37\17\7\3\1\0\0\0\0\377\377\377" "\377\377\37\17\7\17\37\177\376\374\370\360\340\300\200\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0" "\0\1\3\7\37\77\77><\70\60 \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0<<<<<<<\77\77\77\77\77<<<<<<<\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\200\300\300\300\300\300\300\200\0\200\300\300\300\300\300" "\300\200\0\0\377\377\377\377\377\17\3\3\3\377\377\377\377\377\17\3\3\3\377\377\377\377\377\0\377\377\377\377" "\377\0\0\0\0\377\377\377\377\377\0\0\0\0\377\377\377\377\377\0\37\37\37\37\37\0\0\0\0\37\37\37" "\37\37\0\0\0\0\37\37\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300" "\300\300\0\0\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\377\377\377\377\377\77\17\7\7\3\3" "\3\3\7\17\377\377\377\376\370\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\0\0\0\0\37\37\37\37\37\0\0\0\0\0\0\0\0\0\0\37\37\37\37\37\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\300\300\200\0\0" "\0\0\0\0\300\360\374\376\377\177\17\7\7\3\3\3\3\3\7\7\37\177\377\377\376\370\340\0\37\177\377\377" "\377\360\300\200\0\0\0\0\0\0\0\200\300\360\377\377\377\177\37\0\0\0\1\3\7\7\17\17\37\37\37\36" "\37\37\37\17\17\7\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300" "\300\300\0\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\377\377\377\377\377\37\7\7\3\3\3" "\3\3\7\7\17\177\377\377\376\374\340\0\0\377\377\377\377\377\300\200\0\0\0\0\0\0\0\200\300\340\377\377" "\377\377\37\0\0\377\377\377\377\377\7\17\17\17\37\36\37\37\37\37\17\17\7\3\1\0\0\0\0\77\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300\300\300\300\300\300\200\0\300\300\300" "\300\300\0\0\300\370\376\377\377\77\17\7\7\3\3\3\3\3\7\17\37\377\377\377\377\377\0\0\37\177\377\377" "\377\360\300\200\0\0\0\0\0\0\0\200\340\377\377\377\377\377\0\0\0\0\1\3\7\17\17\37\37\37\37\36" "\37\17\17\7\7\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300" "\300\300\300\300\0\0\200\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\377\377\377\377\377\177\37\17\7" "\7\3\3\3\3\3\7\17\37\7\1\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\37\37\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300\300\300\300\300\300\300\300\200\0\0" "\0\0\0\0\0\0<\177\377\377\377\347\307\303\203\203\203\203\7\7\17\77\37\17\2\0\0\0\0\200\340\340" "\300\201\201\3\3\3\7\7\7\7\17\237\377\376\376\374\360\0\0\0\1\3\7\7\17\17\17\37\37\37\36\37" "\37\37\37\17\17\7\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200" "\200\200\200\376\376\377\377\377\200\200\200\200\200\200\200\0\0\0\0\0\0\7\7\7\7\7\377\377\377\377\377\7" "\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\200" "\0\0\0\0\0\0\0\0\0\0\3\17\37\37\77\77>><>>\36\37\17\16\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\0\0\0\0\0\0\0\0\0\0\200\200\200\200" "\200\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\377\377\377" "\377\377\300\0\0\0\0\0\0\0\0\300\377\377\377\377\377\0\0\0\0\0\3\17\17\37\37\77>><>" ">\36\37\17\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200" "\200\200\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\0\0\1\17\77\377\377\376\370\300\0\0\0\0" "\0\0\0\200\360\376\377\377\77\7\0\0\0\0\0\0\7\37\377\377\377\370\340\0\300\370\376\377\77\17\3\0" "\0\0\0\0\0\0\0\0\0\0\0\3\17\77\77\77\77\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200" "\200\200\200\0\377\377\377\360\0\0\0\0\340\376\376\376\376\360\200\0\0\0\377\377\377\377\37\0\7\177\377\377" "\377\340\340\376\377\77\7\7\77\377\377\370\300\370\377\377\377\7\0\0\0\0\17\77\77\77\77\37\3\0\0\0" "\0\3\37\77\77\77\77\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200" "\200\200\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\0\0\0\1\7\17\37\177\376\374\370\340\300\200" "\340\360\374\376\177\37\17\3\1\0\0\0\0\0\0\0\200\300\340\371\377\377\77\77\377\377\371\360\300\200\0\0" "\0\0\0\0 \70<>\77\77\17\7\1\0\0\0\0\1\3\17\37\77\77>\70\60 \0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\200\200" "\200\200\200\0\1\7\37\377\377\377\370\340\0\0\0\0\0\0\0\200\360\377\377\377\77\7\0\0\0\0\0\0" "\3\17\77\377\377\374\340\200\200\360\376\377\377\37\7\0\0\0\0\0\0\0\0\0\0\0\0\1\7\377\377\377" "\377\177\37\3\0\0\0\0\0\0\0\0>\77||x||~\77\77\37\17\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200" "\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\0\0\0\0\0\7\7\7\7\7\7\7\7\7\207\307" "\367\377\377\177\77\37\17\7\0\0\0\0\0\0\0\200\300\360\370\374\376\77\37\17\7\3\1\0\0\0\0\0" "\0\0\0\0<>\77\77\77\77\77=<<<<<<<<<<<<>>\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300" "\300\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\370\376\377\377\377\17\7\3\3\3\3\3\3\3" "\0\0\0\0\0\200\200\200\200\340\377\377\377\177\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\17" "\17\37\377\377\374\370\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\37\77\77\177~|||xxxx" "\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\177\177\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\7\17\377\377\377\376\370\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\37\177\377\377\377\340\300\200\200\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\370\374\377\377\77\17\17\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\377" "\377\377\377\377\0\0\0\0\0\0\0\0\0\0xxxxx|||\177\77\77\37\17\3\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200" "\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\200\300\200\200\0\6\7\17\17\7\7\7\3\7\7\17\17" "\37\37\37\37\37\37\17\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; /* Fontname: -FreeType-Inconsolata LGC-Bold-R-Normal--44-440-72-72-P-214-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Emboldened by MihailJP. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 18/658 BBX Build Mode: 3 */ const uint8_t u8x8_font_inb33_3x6_n[3892] U8X8_FONT_SECTION("u8x8_font_inb33_3x6_n") = " :\3\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\360\360\360\360\360\0\0\0\0\0\0\0\0\0\0\70>><|xxp\360\377\377\377" "\377\361pxx|<<>\70 \0\0\0@\340\360\370\376\177\37\17\7\3\17\37\177\376\374\370\340\300" "\0\0\0\0\0\0\0\0\1\1\0\0\0\0\0\0\0\0\0\0\1\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\370\370\0\0\0\0\0\0" "\0\0\0\0xxxxxxxxx\377\377\377\377\377xxxxxxxx\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\70|\376\376\376\376\374\370\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0 \60x~\77\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\70|\376\376\376|\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340\360\360\340\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\77\17\3" "\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\177\37\3\0\0\0\0\0\0\0\0\0\0\0\0" "\200\340\374\377\377\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0`x\376\377\177\37\7\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\300\360\374" "\376\377\177\37\17\7\7\7\7\17\337\377\377\376\374\360\300\0\0\0\376\377\377\377\377\3\0\0\200\340\360\370" "~\37\17\7\1\377\377\377\377\376\0\0\7\77\377\377\377\370\374\237\17\7\1\0\0\0\0\300\370\377\377\377" "\177\17\0\0\0\0\0\3\7\17\37\37\77>><>>\37\37\17\7\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300" "\300\300\0\0\0\0\0\0\0\0\0\0\0\0\34\34\36\36\17\17\17\377\377\377\377\377\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77" "\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0\0\0\10\34" ">\177\37\17\7\7\7\3\7\7\7\17\77\377\377\376\374\360\0\0\0\0\0\0\0\0\0\0\0\0\0\200" "\200\300\340\360\374\377\177\77\17\3\0\0\0\0\0\0\200\300\360\370\374\376\77\37\17\7\7\3\1\0\0\0" "\0\0\0\0\0\0<\77\77\77\77\77=<<<<<<<<<<<>>\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300" "\300\300\200\200\0\0\0\0\0\0\0\0\0\0\6\17\37\17\7\7\7\7\7\7\7\7\17\377\377\377\376\370" "\0\0\0\0\0\0\0\0\0\0xx||||\374\376\377\377\377\347\303\201\0\0\0\0\0\0\0\300" "\300\0\0\0\0\0\0\0\0\0\1\303\377\377\377\377\376\0\0\0\0\6\17\17\37\37\77>>>>>" ">>\37\37\17\17\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300\0\0\0\0\0\0\0\0\0\0" "\0\0\0\200\300\340\370\374\177\377\377\377\377\377\0\0\0\0\0\0\0\0\200\340\360\374\376\77\37\7\3\0" "\0\377\377\377\377\377\0\0\0\0\0\0<\77\77\77\77=<<<<<<<\377\377\377\377\377<<" "<<\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\300\300\0\0\0\0\0\0\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\3" "\3\0\0\0\0\0\60\177\177\377\77\77\36\37\37\37\37\37\37>\376\374\374\370\340\200\0\0\0\0\200\300" "\300\300\200\0\0\0\0\0\0\0\0\0\300\377\377\377\377\177\0\0\0\1\3\7\17\37\37\37>>><" ">>>\37\37\17\17\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\340\370" "\374\376\377\77\17\7\7\7\3\7\7\7\17\17\7\2\2\0\0\0\0\377\377\377\377\377\374>\36\37\37\17" "\37\37\77\376\376\374\370\360\200\0\0\0\0\37\377\377\377\377\360\200\0\0\0\0\0\0\0\300\377\377\377\377" "\177\0\0\0\0\0\0\3\7\17\37\37\77>><>>\37\37\17\17\7\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300" "\300\300\300\300\300\300\300\300\300\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\303\363\377\377\377\77\17" "\3\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\377\377\77\7\1\0\0\0\0\0\0\0\0\0\0" "\0\0\0\300\370\377\377\377\77\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\70>\77\77\77\17\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\370\374" "\376\377\377\17\7\7\7\3\7\7\17\37\377\377\377\376\370\0\0\0\0\0\1\3\217\317\377\377\376|xx" "x\370\374\377\377\317\307\203\0\0\0\0\0\370\376\377\377\377\307\1\0\0\0\0\0\0\1\1\207\377\377\377" "\376\374\0\0\0\0\3\7\17\37\37\37>>><>>>\37\37\17\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300" "\300\300\200\200\0\0\0\0\0\0\0\0\0\340\370\376\377\377\77\17\7\7\7\7\7\7\37\77\377\376\374\360" "\200\0\0\0\0\17\77\177\377\377\370\360\340\300\300\300\300\340\340\360\377\377\377\377\377\0\0\0\0\0\0\0" "\200\201\3\3\3\3\3\3\3\3\201\361\377\377\377\177\17\0\0\0\0\4\16\17\37\37>>><>>" "\36\37\37\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\34>\177\177\177" ">\34\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\70|\376\376\376|\70\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"; /* Fontname: -FreeType-Inconsolata LGC-Bold-R-Normal--62-620-72-72-P-301-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Emboldened by MihailJP. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 191/658 BBX Build Mode: 3 */ #ifdef U8G2_USE_LARGE_FONTS const uint8_t u8x8_font_inb46_4x8_f[57348] U8X8_FONT_SECTION("u8x8_font_inb46_4x8_f") = " \377\4\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\370\374\374\374\370\370\340\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\177\377\377\377\377\377\37\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\370\374\374\374\374\374\374\370\360\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\7\7\7\7\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\370\360\0\0\0\0\0\0\340\360\370\370\370\360\340\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\377\377\377\377\377\377\377\0" "\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\77\77\0\0\0\0\0\0\77\77\77\77\77\77\77\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300\300\300\0\0\0\0\0\0\300\300\300\300\300\300" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\1\0\0\0\0\0\376\377\377\377\377\377\7" "\0\0\0\0|||||||\374\377\377\377\377\377\377=<<<<<\376\377\377\377\377\377\177|" "||||\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\377\377\377\377\377\377\7\0\0" "\0\0\0\0||||||\376\377\377\377\377\377~~~~~~\376\377\377\377\377\377\77>>>" ">>>\36\0\0\0\0\0\376\377\377\377\377\377\3\0\0\0\0\0\374\377\377\377\377\377\17\0\0\0\0" "\0\0\0\0\0\0\0\0\6\7\7\7\7\7\3\0\0\0\0\0\4\7\7\7\7\7\7\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\370\370\370\370\370\370\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\340\360\370\374\376\376\377\77\37\37\377\377\377\377\377\377\77\77\77\177\376\376\374\374\370" "p \0\0\0\0\37\177\377\377\377\377\377\370\340\300\300\377\377\377\377\377\377\0\0\0\0\0\3\3\1\0" "\0\0\0\0\0\0\0\0\1\3\7\7\17\17\37\37\77\377\377\377\377\377\377\376\374\374\374\370\370\360\360\340" "\300\0\0\0\0\0\0\200\300\300\0\0\0\0\0\0\0\377\377\377\377\377\377\0\1\1\3\7\377\377\377\377" "\377\377\374\0\0\14\37\77\177\177\377\376\374\374\370\370\360\377\377\377\377\377\377\360\370\370\374\377\377\177\77\37" "\17\7\0\0\0\0\0\0\0\0\0\0\1\1\1\1\3\77\77\77\77\77\77\1\1\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300" "\300\300\300@\374\376\377\377\377\37\37\17\17\37\77\377\377\377\376\374\360\0\0\0\300\340\370\376\377\377\377\77" "\17\3\1\0\37\77\177\377\377\376\374\370\370\374\374\377\377\177\77\237\347\360\374\377\377\377\177\37\7\1\0\0" "\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\300\360\370\376\377\377\177\77\17\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\340\370\374\377\377\377\77\37\7\201\360\370\374\376\376\177\77\77\77\177\376" "\376\374\370\360\0\0\300\360\374\376\377\377\177\37\17\3\0\0\0\0\37\177\377\377\377\377\360\340\340\340\360\377" "\377\377\377\177\6\7\7\7\7\7\7\1\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7" "\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\340\370\374\376\377\377\377\77\37\37\17\17\37\37\177\377\377\377\377\376\374\360\0\0\0" "\0\0\0\0\0\0\0\17\77\377\377\377\377\377\370\340\200\0\0\200\300\360\377\377\377\377\177\77\17\0\0\0" "\0\0\0\0\0\0\200\300\340\360\371\373\377\377\177\77\377\377\377\377\377\377\347\203\3\1\0\0\0\0\300\300" "\300\200\0\0\374\377\377\377\377\377\37\7\1\0\0\0\0\1\3\7\37\77\177\377\377\376\374\370\340\370\377\377" "\377\177\77\17\77\177\377\377\377\377\376\370\360\340\340\340\340\340\340\360\360\370\374\375\377\377\177\77\177\377\377\377" "\371\360\340\300\0\0\0\1\3\3\7\7\7\7\7\17\7\7\7\7\7\3\3\1\1\0\0\0\0\1\7\17" "\7\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\370\360\340\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\360\360\370\370\374\374\370" "\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\374\376\377\377\377\177\77\17\7\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\340\370\377\377\377\377\377\177\17\3\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\374\377\377\377\377\377\377\7\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\37\377\377\377\377\377\377\370\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\3\17\177\377\377\377\377\377\370\340\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\37\77\177\377\377\377\374\370\360\340\300\200\200\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\37\77\77\177\77" "\16\6\0\0\0\0\0\340\374\370\370\360\360\340\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\1\3\3\7\17\37\37\77\377\377\377\376\374\370\360\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\77\377\377\377\377\377\374\360\300\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\377\377\377\377\377\377\374\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\377\377\377\77\7\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\300\340\360\370\376\377\377\377\177\77\37\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\14~\376\177\177\77\77\37\17\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\340\340\340\340\340\340 \0\0\0\0\0\0\0\0" "\0\0\0\0\0\340\360\360\340\340\300\300\200\200\0\0\17\377\377\377\377\377\177\0\0\0\200\200\300\300\340\340" "\360\340\200\0\7\7\7\7\17\17\17\17\37\237\337\377\376\377\377\377\377\377\376\377\337\237\37\17\17\17\17\7" "\7\7\7\4\0\0\0\300\340\360\370\374\376\377\377\77\37\7\3\1\3\7\37\77\377\377\377\374\370\360\340\300" "\0\0\0\0\0\0\0\1\1\3\7\7\3\1\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7\3\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\340\340\340\340\340\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\77\77\77\77\77\77\77\77\77\77\77\77\77\377\377\377\377\377\377\77\77\77\77\77\77\77\77\77" "\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\17\17\17\17\17\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\340\360\360\360\360\340\340\300\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\17\37\77\377\377\377\377\377\377\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\60x|\376\177\77\37\17\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0~~~~~~~~~~~~~~~~~~~~~~~~~~" "~~\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\340\360\360\360\360\340\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\37\37\77\77\77\77\37\37\7\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\370\370\360" "\360`\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\374\377\377\377\377\177\37\7" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\377\377\377\77\7\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\377\377\377\77\17\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\360\376\377\377\377\377\77\17\3\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\374\377\377\377\377\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\14\17\37\37\77\77\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370\374\376\377\377\377\177\77\37\37\17\17\37\37\77\377\377\376\374\370\360\300\0" "\0\0\0\0\200\370\377\377\377\377\377\377\17\3\0\0\0\0\0\0\0\300\340\360\374\377\377\77\377\377\377\377" "\374\200\0\0\377\377\377\377\377\377\377\1\0\0\0\200\340\360\374\376\177\77\37\7\3\1\0\0\377\377\377\377" "\377\377\0\0\7\177\377\377\377\377\377\374\370\376\177\77\37\7\3\1\0\0\0\0\0\0\200\370\377\377\377\377" "\377\17\0\0\0\0\3\17\37\77\377\377\377\377\376\370\360\360\340\340\340\340\360\360\370\376\377\377\177\77\17\3" "\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0p\370\370\374\374~~\177\177\77\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\0`\360\370\374\376\377\377\77\77\37\37\37\17\17\17\37\37\77\77\177\377\377\376\376\374\370" "\340\200\0\0\0\0\0\0\0\1\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\301\377\377\377\377\377" "\377\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\360\370\376\377\377\177\77\37\17\7" "\1\0\0\0\0\0\0\0\0\0\0\300\340\360\370\374\376\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0" "\0\0\0\0\0\0\300\360\370\376\377\377\377\377\357\347\343\341\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\360\360\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\10\34<~\377\177\77\37\37\37\17\17\17\37\37\37\77\77\377\377\377\376\374\370\360" "\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\377\377\377\377\377\177" "\37\0\0\0\0\0\0\0\0\0\0\0\0\0>>>>>>\77\177\177\377\377\377\377\377\363\361\340\200" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\377\377\377\377\377" "\377\374\0\0\0\0 x\374\376\377\377\370\370\360\360\340\340\340\340\340\340\360\360\370\374\377\377\377\377\177\77" "\17\3\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300\300\300\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\374\376\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370\374\377\377\77\37\7\3\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\200\340\360\374\376\377\377\77\37\7\1\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0|\177\177\177\177\177\177\177~~~~~~~~~~\377\377\377\377\377\377\377~~~" "~~~\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\0\0\0\0\0\0\0\370\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\0\0\0\0\0\0\0\377\377\377\377\377\377\377\340\340\360\360\360\360\360\360\360\360\340\340\300\300\200\0\0" "\0\0\0\0\0\0\0\36\37\77\77\177\77\37\17\7\7\7\3\3\3\7\7\7\17\37\77\377\377\377\377\376" "\374\360\300\0\0\0\0\0\0\0\0\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377" "\377\377\377\0\0\10\30<~\377\377\377\377\374\370\360\360\340\340\340\340\340\340\360\360\370\374\377\377\377\377\177" "\37\17\1\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0" "\0\0\0\0\0\0\0\0\200\300\360\370\374\376\376\377\177\77\77\37\37\37\17\17\17\37\37\77\177\377\177>" "\36\14\0\0\0\0\300\374\377\377\377\377\377\77\207\301\300\340\340\340\340\340\340\340\340\340\300\300\200\200\0\0" "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\77\37\37\17\17\7\7\7\7\7\17\37\77\377\377\377\377\376" "\374\360\200\0\0\0\37\377\377\377\377\377\377\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\0\0\0\1\17\37\177\377\377\377\377\374\370\360\360\340\340\340\340\340\360\370\374\377\377\377\377\177" "\37\17\1\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\0\0\0\0\0\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\217\357\377\377\377\377\377\377\37" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\376\377\377\377\377\177\17\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\377\377\377\377\77\17\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\377\377\377\177\17\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\377\377\377\177\17\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\6\7\7\7\7\7\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370\374\376\377\377\177\77\37\37\37\17\17\37\37\77\77\377\377\377\377\376\374\360" "\300\0\0\0\0\0\0\37\177\377\377\377\377\377\360\340\200\200\0\0\0\0\0\200\300\360\377\377\377\377\377\77" "\17\0\0\0\0\0\0\0\200\300\341\363\367\377\377\377\177\77\77>>~\177\377\377\377\377\367\343\341\300\200" "\0\0\0\0\0\360\374\377\377\377\377\377\17\3\1\0\0\0\0\0\0\0\0\0\1\3\17\377\377\377\377\377" "\376\370\0\0\0\7\37\77\177\377\377\377\377\374\370\360\360\340\340\340\340\340\340\360\360\370\376\377\377\377\177\77" "\37\7\0\0\0\0\0\0\0\0\1\3\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370\374\376\377\377\177\77\37\37\17\17\17\37\37\77\177\377\377\376\376\374\360\340" "\0\0\0\0\0\0\376\377\377\377\377\377\377\203\0\0\0\0\0\0\0\0\0\0\0\0\7\377\377\377\377\377" "\377\370\0\0\0\0\1\17\77\177\377\377\377\377\374\370\360\340\340\340\340\340\360\360\370\374\376\377\377\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\1\3\3\3\7\7\7\7\7\7\7\7\3\3\1\341\377\377\377\377\377" "\377\37\0\0\0\0\0\300\360\370\374\374\374\360\360\340\340\340\340\340\340\360\360\370\374\377\377\377\177\77\17\7" "\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\340\340\340\340\300\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\77\77\177\177\177\177\77\77\17\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\340\360\360\360\360\340\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\37\37\77\77\77\77\37\37\7\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\340\360\360\360\360\340\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\37\37\77\77\77\77\37\37\7\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\360\370\370\370\370\360\360\340\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\377\377\377\377\377\377\177\37\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\30<>\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\340\340\360\360\370" "\370\374\374\376\0\0\0\200\200\300\300\340\340\360\360\370\370\374\374\376\376\177\177\77\77\37\37\17\17\7\7\3" "\3\1\1\0~\177\377\377\377\377\377\377\367\347\343\303\201\201\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\1\1\3\3\7\7\17\37\37\77\77\177\177\376\376\374\374\370\370\360\360\340\340\300\200" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\17\17\37\77\77" "\177\177\377\376\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374" "\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0~~~~~~~~~~~~~~~~~~~~~~~~~~~~" "~~~\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\376\374\374\370\370\360\360\340\340\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\1\1\3\3\3\7\7\17\17\37\37\77\77\177\177\376\376\374\374\370\370\360\360\340\340\300\300\200" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\201\201\303\303\347\347\377\377\377\377\377" "\377\377\177~\0\0\200\200\300\300\340\340\360\360\370\370\374\376\376\377\177\177\77\37\37\17\17\7\7\3\1\1" "\0\0\0\0\377\377\177\77\77\37\37\17\17\7\3\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\300\340\340\360\360\360\370\370\370\370\370\370\370\370\360\360\340\340\300\200\0\0" "\0\0\0\0\0\14\36\77\177\377\177\77\37\17\7\3\3\3\1\1\1\3\3\7\17\37\377\377\377\377\377\374" "\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370\377\377\377\377\377\177" "\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\370\376\377\377\377\377\77\37\17\7\3\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\17\17\17\17\17\17\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\370\374\374\374\374\374\374\370\360\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\7\7\7\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0" "\0\0\0\0\0\0\200\340\360\370\374\376\376\377\177\77\37\37\37\17\17\17\37\37\37\37\77\77\177\377\376\374" "\370\340\300\0\370\376\377\377\377\177\17\3\1\0\0\0\200\300\340\360\360\370\370\370\374\374\374\374\374\375\377\377" "\377\377\377\376\377\377\377\377\377\0\0\0\0\0\374\377\377\377\377\377\217\3\1\1\0\0\0\0\0\300\377\377" "\377\377\377\377\77\377\377\377\377\376\340\300\0\0\1\7\37\77\77\177\177\377\376\376\374\374\376~\177\77\177\177" "\177\177\177\177\0\1\3\17\37\77\177\377\377\376\374\370\370\360\360\340\340\340\340\340\340\340\340\340\360\360\370\370" "\340\300\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\7\7\7\7\7\7\7\7\7\7\7\7\3\3\3" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\340\200\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\376\377\377\377\377\374\360\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\360\376\377\377\377\177\17\37\377\377\377\377\376\360\300\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\360\376\377\377\377\377\37\3\0\0\0\0\7\37\377\377\377\377\376\370\300\0\0" "\0\0\0\0\0\200\340\374\377\377\377\377\177\177~~~~~~~~~~\177\177\377\377\377\377\376\370" "\300\0\0\0\374\377\377\377\377\377\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\77\377\377\377" "\377\377\370\340\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7" "\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17\17\37\37\37\77\177\377\377\377\376\376\374" "\360\300\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\200\200\200\300\340\360\377\377\377\377\377" "\177\37\0\0\377\377\377\377\377\377\377\77\77\77\77\77\77\77\77\77\77\77\177\177\177\377\377\377\377\363\361\340" "\300\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\377\377\377\377" "\377\377\374\0\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\340\340\340\360\360\360\370\374\377\377\377\377\177" "\77\17\3\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0" "\0\0\0\0\0\0\0\300\340\360\370\374\376\377\377\177\77\77\37\37\17\17\17\37\37\37\77\177\377\377\376\376" "\374\370\360\300\200\370\377\377\377\377\377\377\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7" "\7\3\3\1\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\7\177\377\377\377\377\377\377\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\1\7\37\77\177\377\377\377\376\374\370\360\360\340\340\340\340\340\340\340\360\370\370\374\377\377" "\177~\34\14\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\17\17\17\17\17\17\17\37\37\37\37\77\177\377\377\377\376\374\370\360" "\340\200\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\177\377\377\377" "\377\377\376\340\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\377" "\377\377\177\7\0\377\377\377\377\377\377\377\340\340\340\340\340\340\340\360\360\360\360\370\374\376\377\377\377\177\77\17" "\7\1\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\0\0\0\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\17\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\340\340\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\0\0\0\0\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\17\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\377\377\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\0\0" "\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0" "\0\0\0\0\0\0\300\340\360\370\374\376\377\377\177\77\77\37\37\37\17\17\17\37\37\37\77\177\377\377\376\374" "\370\360`\0\370\377\377\377\377\377\377\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\3" "\1\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360" "\360\360\360\0\177\377\377\377\377\377\377\340\200\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\377\377\377" "\377\377\377\0\0\3\7\37\77\177\377\377\377\376\374\370\360\360\340\340\340\340\340\340\340\340\360\360\370\377\377\377" "\377\377\177\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300" "\300\300\300\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\0\377\377\377\377\377\377\377\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\377\377\377\377" "\377\377\377\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\0\0\0\0\0\0\0\0\17\17\17\17\17\17\17\17\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\340\340\340\340\340\340\340\340\340\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\340" "\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\300\0\0\0\0\0\0\0\0\0\0\17\17\17\17\17\17\17\17\377\377\377\377\377\377\377\17\17\17\17" "\17\17\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0 p\370\376\377\374\370\360\360\340\340\340\340\340\360\370\376\377\377\377\377\77\37\3\0\0\0\0" "\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300" "\300\300\300@\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\200\300\360\370\374\376\377\377\177\77\37\17" "\7\1\0\0\377\377\377\377\377\377\377\0\0\200\300\360\370\374\376\377\377\177\77\17\7\3\1\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377~\77\37\77\377\377\377\377\371\360\340\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\1\7\17\77\177\377\377\377\376\370\360\340\200\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\1\3\17\37\77\377\377\377\377\376\370" "\360\300\200\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7\7" "\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\340\340\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300" "\300\300\300\300\377\377\377\377\377\377\377\376\370\340\200\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\37\177\377\377\376\370\340\0\0\0\0\300\360\374\377\377\177\37\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\0\0\1\7\37\177\377\377\374\374\377\377\177\37\7\1\0\0\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\1\7\7\7\7\1\0\0\0\0\0\0\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\377\377\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7" "\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300" "\300\300\300\300\377\377\377\377\377\377\377\377\376\370\340\300\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\7\37\77\377\377\377\374\360\340\200\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\3\17\77\177\377\377\376\370\340\300\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\1\7\37\177\377\377\377\374\360\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\377\377\377" "\377\377\377\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\0\300\340\370\374\374\376\377\377\177\77\37\37\37\17\17\17\37\37\77\77\177\377\377\376\374\374" "\370\340\300\0\370\377\377\377\377\377\377\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\77\377\377" "\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\377\377\177\377\377\377\377\377\376\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\377\377" "\377\377\377\377\0\1\7\37\77\177\377\377\377\376\374\370\360\340\340\340\340\340\340\340\360\370\370\376\377\377\377\177" "\77\37\7\1\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17\17\37\37\37\77\177\377\377\377\376\374" "\370\360\300\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\301\377\377\377\377" "\377\377\177\0\0\377\377\377\377\377\377\377\374\374\374\374\374\374\374\374\374\374\374\376\376\377\177\177\177\77\37\17" "\7\3\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\0\300\340\360\374\374\376\377\377\177\77\37\37\17\17\17\37\37\37\77\77\177\377\377\376\374\374" "\360\340\300\0\370\377\377\377\377\377\377\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\77\377\377" "\377\377\377\376\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\377\377\377\377\377\377\377\377\376\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\377\377" "\377\377\377\377\0\3\17\77\177\377\377\377\377\374\370\360\340\340\340\300\300\300\340\340\340\360\370\376\377\377\177\77" "\37\7\3\0\0\0\0\0\0\0\1\3\3\7\7\17\17\377\377\377\377\377\377\317\207\207\7\3\1\0\200\200" "\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\37\37\77\77\77\77\77\77\77\77\77" "\77\77\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17\17\37\37\37\77\177\377\377\377\376\374" "\370\340\200\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\341\377\377\377\377" "\377\377\77\0\0\377\377\377\377\377\377\377\374\374\374\374\374\374\374\374\374\374\374\376\376\377\177\177\77\37\37\17" "\3\1\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\1\7\17\77\377\377\377\377\374\360\340\200\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\377\377\376" "\370\340\200\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\7" "\7\7\7\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0" "\0\0\0\0\0\0\200\340\370\374\376\377\377\377\77\77\37\37\37\17\17\17\37\37\37\77\177\377\377\376\376\374" "\70\20\0\0\0\0\37\177\377\377\377\377\377\370\340\300\200\200\0\0\0\0\0\0\0\0\0\0\3\3\1\0" "\0\0\0\0\0\0\0\0\1\3\3\7\17\17\37\37\77\77\177\177~\376\376\374\374\370\370\360\360\340\340\300" "\200\0\0\0\0\0\0\0\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\17\377\377\377\377" "\377\377\374\0\0\70~\377\377\377\376\374\370\360\360\340\340\340\340\340\340\340\340\360\360\370\374\376\377\377\377\177" "\77\37\7\0\0\0\0\0\1\1\3\3\3\7\7\7\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\300\300\17\17\17\17\17\17\17\17\17\17\17\17\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17" "\17\17\17\17\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300" "\300\300\300\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377" "\377\377\377\0\1\17\77\177\377\377\377\377\376\370\360\360\340\340\340\340\340\340\340\360\360\370\376\377\377\377\377\177" "\37\17\1\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300" "\300\300\300\300\37\377\377\377\377\377\376\360\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\376\377\377" "\377\377\77\7\0\0\3\37\377\377\377\377\377\374\340\0\0\0\0\0\0\0\0\0\0\340\374\377\377\377\377\177" "\17\1\0\0\0\0\0\0\0\7\77\377\377\377\377\377\370\300\0\0\0\0\200\360\377\377\377\377\177\17\1\0" "\0\0\0\0\0\0\0\0\0\0\0\1\7\77\377\377\377\377\376\360\340\374\377\377\377\377\37\3\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\177\377\377\377\377\377\377\77\7\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\7\7\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200" "\300\300\300\300\377\377\377\377\377\340\0\0\0\0\0\0\0\300\374\376\376\376\360\200\0\0\0\0\0\0\300\377" "\377\377\377\377\177\377\377\377\377\377\360\0\0\0\0\300\374\377\377\377\377\377\377\377\370\200\0\0\0\300\377\377" "\377\377\377\17\0\37\377\377\377\377\377\374\0\340\376\377\377\377\37\3\7\77\377\377\377\377\370\300\340\377\377\377" "\377\377\3\0\0\0\7\377\377\377\377\377\377\377\377\377\37\1\0\0\0\0\3\77\377\377\377\377\377\377\377\377" "\77\0\0\0\0\0\0\1\177\377\377\377\377\377\37\1\0\0\0\0\0\0\0\0\3\77\377\377\377\377\377\17" "\0\0\0\0\0\0\0\0\0\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\7\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300" "\300\300\300\0\0\3\17\77\177\377\377\377\376\370\340\200\0\0\0\0\0\0\0\200\340\370\376\377\377\377\177\37" "\7\3\0\0\0\0\0\0\0\1\7\37\77\377\377\377\377\374\360\300\360\370\376\377\377\377\177\37\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\303\377\377\377\377\377\377\377\377\377\303\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\340\360\374\377\377\377\377\77\17\3\17\77\177\377\377\377\376\370\340\300\0\0" "\0\0\0\0\0\300\340\370\376\377\377\377\177\77\17\3\0\0\0\0\0\0\0\1\7\37\77\377\377\377\377\374" "\370\340\200\0\7\7\7\7\7\7\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\7" "\7\7\7\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300" "\300\300\300\300\7\37\177\377\377\377\377\374\360\300\0\0\0\0\0\0\0\0\0\0\0\300\360\376\377\377\377\377" "\77\17\3\0\0\0\0\1\7\37\177\377\377\377\377\374\360\300\0\0\0\200\360\374\377\377\377\377\77\17\3\0" "\0\0\0\0\0\0\0\0\0\0\0\1\7\37\77\377\377\377\377\374\376\377\377\377\177\17\3\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\0\0\0\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\317\357\377\377\377\377\377\77" "\37\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\376\377\377\377\177\37\7\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\376\377\377\377\177\37\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\360\370\376\377\377\377\177\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\360\370\376\377\377\377\377\377\357\343\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\340\360\360\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374" "\374\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\370\370\370\370\370\370\370\370\370\370\370\370\370\370\370\370" "\370\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\20p\370\370\374\374\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\3\17\77\377\377\377\377\376\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\377\377\376\370\340\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\37\177\377\377\377\377\374\360\300\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\177\377\377\377\377\374\360\300\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\377\377\377\377\377\370\340" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\37\37\17\17" "\7\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\370\370\370\370\370\370\370\370\370\370\370\370\370\370\370\370\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\370\376\377\377\177\377\377\377\374\370\340\200\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\360\370\376\377\377\177\37\17\3\1\0\0\3\17\77\177\377\377\377\374\360\300\200" "\0\0\0\0\0\0\0\0\1\1\3\3\3\1\0\0\0\0\0\0\0\0\0\0\0\1\7\3\3\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\340\340\340\340\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\7\7\0\0\0\0\0\0\374\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\374\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\3\17\37\177\377\377\377\377\377\374\300\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\77\177\177\77\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0`\340\360\370\374\374\374\376~~~~~~~~~\376\376\374\374\374\370\360\340" "\300\0\0\0\0\0\0\0\0\1\203\203\301\300\300\300\340\340\340\340\340\340\340\340\340\340\343\377\377\377\377\377" "\377\376\0\0\300\360\374\376\377\377\377\177\37\37\17\17\17\17\17\7\7\7\7\7\7\7\207\377\377\377\377\377" "\377\377\0\0\7\37\177\377\377\377\377\376\370\370\360\360\360\360\360\360\360\370\370\374\376\377\177\377\377\377\377\377" "\377\377\0\0\0\0\0\0\0\1\1\3\3\3\3\3\3\3\3\3\3\3\1\1\0\0\0\3\3\3\3\3" "\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\370\370\370\370\370\370\370\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\340\360\360\370\374\374\374\374\374\374\374\374\374\374\370\370\360\360\340\300" "\0\0\0\0\0\377\377\377\377\377\377\377\37\7\3\1\0\0\0\0\0\0\0\1\3\7\17\177\377\377\377\377" "\377\376\360\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377" "\377\377\377\0\0\377\377\377\377\377\377\377\377\374\370\360\340\340\340\340\340\340\340\360\360\370\376\377\377\377\177\77" "\37\7\0\0\0\7\7\7\7\7\3\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360\370\370\374\374\376\376~~~~~~~~\376\376\374\374\374\370" "\360\340\300\200\0\340\374\377\377\377\377\377\177\17\3\1\0\0\0\0\0\0\0\0\0\0\0\0\1\3\37\37" "\17\3\1\0\0\77\377\377\377\377\377\377\360\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\1\7\17\37\77\177\377\377\377\376\374\370\370\360\360\360\360\360\360\360\370\370\374\374\376\377" "~<\70\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\3\3\3\3\3\3\3\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\370\370" "\370\370\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\0\0\200\300\340\360\370\370\374\374\374\374\374\374\374\374\374\374\370\370\360\340\377\377\377\377\377" "\377\377\0\0\300\374\377\377\377\377\377\177\17\3\1\1\0\0\0\0\0\0\1\1\3\7\37\377\377\377\377\377" "\377\377\0\0\177\377\377\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377\377" "\377\377\0\0\0\7\37\77\177\377\377\377\376\374\370\360\340\340\340\340\340\340\360\360\370\374\377\377\377\377\377\377" "\377\377\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\3\1\1\0\7\7\7\7\7" "\7\7\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\360\370\370\374\374\376\376~~~~~~~\376\376\374\374\374\370\360\340\300" "\0\0\0\0\340\374\377\377\377\377\377\357\343\341\340\340\340\340\340\340\340\340\340\340\340\341\343\377\377\377\377\377" "\377\370\0\0\77\377\377\377\377\377\377\307\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\1\7\37\77\177\377\377\377\376\374\370\370\360\360\360\360\360\360\360\360\370\370\374\376\377~<" "\30\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\3\3\3\3\3\3\3\3\3\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\340\360\360\370\370\374\374\374\374\374\374\374\374\370\370" "\370\360\360\340\0\0\0\0\0\0\0\0\360\376\377\377\377\377\377\37\7\3\1\1\0\0\0\1\1\1\3\3" "\17\37\77\17\0\360\360\360\360\360\360\360\377\377\377\377\377\377\377\360\360\360\360\360\360\360\360\360\360\360\0\0" "\0\0\0\0\0\3\3\3\3\3\3\3\377\377\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\340\360\360\370\374\374\376~>>>>>>>~\376\374\374\370\370\374\374~~~" "~~~~~\377\377\377\377\377\377\341\200\0\0\0\0\0\0\0\0\0\200\341\377\377\377\377\377~\0\0" "\0\0\0\0\0\1\3\307\357\377\377\377\377\177\177~~~~~\177\177\77\77\37\37\17\7\3\0\0\0" "\0\0\0\0\0\0\217\337\377\377\377\377\376\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\370\370\370\360" "\340\300\0\0\376\377\377\377\377\377\347\301\200\200\200\200\0\0\0\0\0\0\200\200\200\300\301\341\377\377\377\377" "\377\377\77\0\1\3\7\17\17\37\37\37\37\77\77\77\77\77\77\77\77\77\77\77\37\37\37\37\17\17\7\3" "\1\0\0\0\0\0\370\370\370\370\370\370\370\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\377\377\300\340\360\360\370\374\374\374\374\374\374\374\374\374\374\370\370\360\340" "\200\0\0\0\0\0\377\377\377\377\377\377\377\77\17\7\3\1\1\0\0\0\0\0\1\3\17\377\377\377\377\377" "\377\376\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\360\370\370\370\370\360\340\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\17\17\17\7\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\340\340\340\340\340\340\340\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\0" "\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\360\370\370\370\370\360\340\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\17\17\17\7\7\3\0\0" "\0\0\0\0\0\0\0\0\0\0\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\300\340\360\340\300\200\0\0\0\0\0\0\0\200\300\340\377\377\377\377\377\377\77\0\0\0" "\0\0\0\0\2\7\17\37\37\77\77\77\177\177\177~~\177\177\77\77\77\37\37\17\7\3\0\0\0\0\0" "\0\0\0\0\0\370\370\370\370\370\370\370\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\374\374\374|<" "\34\14\4\0\0\377\377\377\377\377\377\377\0\200\300\340\360\370\374\376\377\177\77\37\17\7\3\1\1\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\77\37\17\7\17\37\177\377\377\377\376\374\360\340\300\200\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\1\3\17\37\77\177\377\377\377\376\370\360" "\340\300\200\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\7\7" "\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\370\370\370\370\370\370\370\370\370\370\370\370\370\370\370\370\370\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\340" "\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\376\376\376\376\376\376\374\374~~~\376\376\376\376\374\370\360\370\374\374~~~\376\376\376\376" "\374\374\360\300\377\377\377\377\377\377\3\0\0\0\0\0\377\377\377\377\377\377\377\1\0\0\0\0\0\377\377\377" "\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\377\377\377" "\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\377\377\377" "\377\377\377\377\3\3\3\3\3\3\0\0\0\0\0\0\3\3\3\3\3\3\3\0\0\0\0\0\0\3\3\3" "\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\376\376\376\376\376\376\376\340\360\370\370\374\376~~~~~\376\376\376\376\374\374\370\360" "\300\0\0\0\0\0\377\377\377\377\377\377\377\37\7\3\1\0\0\0\0\0\0\0\0\1\7\377\377\377\377\377" "\377\377\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\0\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3" "\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\360\370\370\374\374\376\376~~~~~~\376\376\376\374\374\370\370\360\340" "\300\0\0\0\340\374\376\377\377\377\377\177\17\3\1\0\0\0\0\0\0\0\0\0\0\1\3\17\177\377\377\377" "\377\377\374\340\77\377\377\377\377\377\377\360\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\377\377\377" "\377\377\377\77\0\1\7\17\37\77\177\377\377\376\374\370\370\360\360\360\360\360\360\360\370\374\376\377\377\377\177\77" "\37\7\1\0\0\0\0\0\0\0\0\0\1\1\1\3\3\3\3\3\3\3\3\3\3\3\1\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\376\376\376\376\376\376\376\360\370\370\374|~~~~~~\376\376\376\376\374\374\370\360\340" "\300\200\0\0\0\377\377\377\377\377\377\377\17\3\1\0\0\0\0\0\0\0\0\0\0\1\3\7\177\377\377\377" "\377\377\376\360\0\377\377\377\377\377\377\377\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\377\377\377" "\377\377\377\77\0\377\377\377\377\377\377\377\177\376\374\370\360\360\360\360\360\360\360\360\370\374\376\377\377\377\177\77" "\37\7\1\0\0\377\377\377\377\377\377\377\0\0\1\1\3\3\3\3\3\3\3\3\3\3\1\1\0\0\0\0" "\0\0\0\0\0\77\77\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\360\370\370\374\374\376\376~~~~~~~\376\374\374\370\370\376\376\376\376" "\376\376\376\0\340\374\377\377\377\377\377\77\7\1\1\0\0\0\0\0\0\0\0\0\0\1\3\77\377\377\377\377" "\377\377\377\0\77\377\377\377\377\377\377\360\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\377\377\377\377" "\377\377\377\0\0\1\7\37\77\177\377\377\377\376\374\370\370\360\360\360\360\360\360\370\370\374\377\177\377\377\377\377" "\377\377\377\0\0\0\0\0\0\0\0\0\1\3\3\3\3\3\3\3\3\3\3\3\1\0\0\0\377\377\377\377" "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77" "\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\376\376\376\376\376\376\376\340\360\370\370\374\374\376~~~~~~~\376\376\374" "\374\370\370\60\0\0\0\0\377\377\377\377\377\377\377\177\37\7\3\1\0\0\0\0\0\0\0\0\0\0\1\3" "\7\3\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\340\360\360\370\370\374\374\374\374\374\374\376\374\374\374\374\374\374\370\370\360\360\340" "\300\200\0\0\0\0\0\37\177\377\377\377\377\377\363\341\300\300\300\200\200\200\0\0\1\1\3\7\17\37\37\7" "\3\0\0\0\0\0\0\0\200\0\1\3\3\7\7\7\17\17\17\37\37\37\77\77\77\177\376\376\374\374\370\360" "\340\300\0\0\0\60|\376\377\377\374\374\370\360\360\360\340\340\340\340\340\340\340\340\360\360\370\377\377\377\377\177" "\77\37\0\0\0\0\0\0\0\1\3\3\3\7\7\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376\376\377\377\17\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\374\374\374\374\374\374\374\374\374\377\377\377\377\377\377\374\374\374\374\374\374\374\374\374\374\374" "\0\0\0\0\0\0\0\0\0\0\0\0\0\370\377\377\377\377\377\377\3\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\17\177\377\377\377\377\377\376\360\360\340\340\340\340\340\360\360\370\370" "\374\374\340\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\3\3\3" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\374\374\374\374\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\374\374" "\374\374\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377\377" "\377\377\0\0\0\3\37\177\377\377\377\377\377\374\370\360\340\340\340\340\340\340\360\360\370\376\377\377\377\377\377\377" "\377\377\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\3\1\1\0\7\7\7\7\7" "\7\7\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\34\374\374\374\374\374\374\354\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\374\374\374" "\374\374<\0\0\0\3\37\177\377\377\377\377\374\360\200\0\0\0\0\0\0\0\0\0\300\370\377\377\377\377\77" "\17\1\0\0\0\0\0\0\0\1\17\77\377\377\377\377\376\360\300\0\0\200\340\374\377\377\377\177\37\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\377\377\377\377\376\376\377\377\377\77\17\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\7\7\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\374\374\374\374\374\0\0\0\0\0\0\0\0\200\340\340\340\340\340\0\0\0\0\0\0\0\0\374" "\374\374\374\374\77\377\377\377\377\377\340\0\0\0\0\200\370\377\377\377\377\377\377\377\370\200\0\0\0\0\360\377" "\377\377\377\377\0\7\177\377\377\377\377\376\300\200\370\377\377\377\177\7\1\17\377\377\377\377\374\340\0\370\377\377" "\377\377\177\1\0\0\0\17\377\377\377\377\377\377\377\377\77\7\0\0\0\0\0\7\177\377\377\377\376\377\377\377" "\377\17\0\0\0\0\0\0\1\7\7\7\7\7\7\3\0\0\0\0\0\0\0\0\0\3\7\7\7\7\7\7" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\4\34<\374\374\374\374\374\360\340\300\0\0\0\0\0\0\0\0\0\300\340\370\374\374\374\374|" "\34\14\0\0\0\0\0\0\1\3\17\37\77\377\377\377\376\370\360\300\360\370\376\377\377\177\77\17\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\340\361\377\377\377\377\177\377\377\377\377\370\340\300\200\0\0\0\0" "\0\0\0\0\0\0\200\340\360\374\376\377\377\377\77\37\7\3\0\0\0\3\7\37\77\177\377\377\376\374\370\340" "\300\200\0\0\6\7\7\7\7\7\7\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\7\7" "\7\7\6\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\34|\374\374\374\374\374\374\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\374\374\374\374" "\374\374<\4\0\0\1\17\77\377\377\377\377\376\360\300\0\0\0\0\0\0\0\0\200\360\374\377\377\377\377\77" "\17\1\0\0\0\0\0\0\0\0\7\37\177\377\377\377\376\370\340\0\0\200\340\374\377\377\377\377\37\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\377\377\374\377\377\377\177\37\3\0\0\0\0\0" "\0\0\0\0\200\340\300\0\0\0\0\0\0\200\300\340\374\377\377\377\377\177\17\3\0\0\0\0\0\0\0\0" "\0\0\0\0\77\77\77\177\177~~\177\177\77\77\77\37\37\17\7\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374" "|\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\377\377\177\77\37\17\7\1\0" "\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\376\377\377\377\77\37\17\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\300\340\360\370\376\377\377\377\377\377\357\347\343\341\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\340\360\360\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\340\340\360\360\360\360\360\360\360\360\360\360\360" "\0\0\0\0\0\0\0\0\0\0\0\0\340\374\377\377\377\377\377\77\17\7\7\3\3\3\3\3\3\3\3\3" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340\340\340\340\340\360\370\374\377\377\377\177\77\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\7\7\7\7\7\17\17\77\377\377\377\376\374\370\300\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\177\377\377\377\377\377\377\360\300\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\37\77\77\77\177\177\177\177~~~~~~~~" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360\340\340\300\300\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\7\7\17\37\377\377\377\377\377\376\360\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\37\177\177\377\377\376\370\360\360\340" "\340\340\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\374\376\377\377\377\177\37\17\7\7" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\377\377\377\377\377\377\377\0\0\0\0\0" "\0\0\0\0\0\0\0\0~~~~~~~~\177\177\177\77\77\77\37\17\7\3\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0`\360\370\370\374\374\376\376~~~~\376\376\376\374\374\370\370\360\360\340\340\340\360\360\370\374" "\376\374|\70\0\0\1\1\3\1\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\3\3\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\360\370\370\370\370\360\360\300\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\17\37\37\37\37\17\17\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\374\374\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377\377\377\377\377\300\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\7\7\7\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\360\377\377\377\377\377\377\301\200\200\0\0" "\0\0\0\0\0\0\300\360\370\374\376\376\377\177\77\37\17\17\7\367\377\377\377\377\377\177\37\37\77\177\377\377" "\376|\30\0\370\377\377\377\377\377\377\17\0\0\0\0\0\0\360\377\377\377\377\377\77\0\0\0\0\0\1\1" "\0\0\0\0\17\177\377\377\377\377\377\374\340\200\0\0\0\360\377\377\377\377\377\37\0\0\0\0\0\0\200\200" "\0\0\0\0\0\0\1\3\7\17\37\77\177\177\377\376\374\377\377\377\377\377\377\370\374\374\374\376\376\177\177\77" "\37\36\14\0\0\0\0\0\0\0\0\0\0\0\0\370\377\377\377\377\377\17\1\1\1\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0" "\0\0\0\0\0\0\0\0\0\200\340\370\374\376\377\377\377\177\77\37\37\37\17\17\37\37\37\77\177\377\77\36" "\14\0\0\0\0\0\300\300\300\377\377\377\377\377\377\377\341\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\17\17\17\17\17\77\377\377\377\377\377\377\357\17\17\17\17\17\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377\377\377\377\177\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\340\340\360\360\374\376\377\377\377\377\377\377\375\374\374\374\370\370\370\360\360\340\340\340\340\340\340" "\360\370\374\360\0\3\7\7\3\3\1\1\1\1\0\0\0\0\1\1\1\3\3\3\7\7\7\7\7\7\7\7" "\7\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\300\340\360\340\300\200\0\0\200\200\300\300\300\300\300\300\200\200\0\0\300\340\360\360\340" "\300\200\0\0\0\0\1\3\207\367\377\377\377\377\377\77\37\37\37\17\17\37\37\37\77\377\377\377\377\377\347\203" "\1\0\0\0\0\0\0\0\37\177\377\377\377\377\360\300\200\200\200\0\0\200\200\200\300\360\377\377\377\377\177\37" "\0\0\0\0\0\0\30<~\377\177\77\37\17\17\37\37\77\77\77\77\77\77\37\37\17\37\77\177\377\376|" "\70\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300" "\300\300\300\300\1\3\17\77\377\377\377\377\376\370\340\200\0\0\0\0\0\0\0\0\0\300\360\374\377\377\377\177" "\77\17\3\0\0\0\0\0\0\1\7\37\177\377\377\377\376\374\360\300\0\300\360\374\377\377\377\177\37\7\1\0" "\0\0\0\0\0\0\0\300\300\300\300\300\300\300\303\317\377\377\377\377\377\377\377\377\337\307\301\300\300\300\300\300" "\300\0\0\0\0\0\0\217\217\217\217\217\217\217\217\217\217\377\377\377\377\377\377\377\217\217\217\217\217\217\217\217" "\217\0\0\0\0\0\0\37\37\37\37\37\37\37\37\37\37\377\377\377\377\377\377\377\37\37\37\37\37\37\37\37" "\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\177\177\177\177\177\177\177\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\340\340\360\370\370\370\374\374\374\374\374\374\374\370\370\370\360\360\340\300\200\0" "\0\0\0\0\0\0\0\374\377\377\377\377\377\377\307\3\1\1\1\0\0\1\1\3\7\37\77\77\37\17\7\2" "\0\0\0\0\0\0\0\0\203\307\357\377\377\377\377\177\376\376\374\374\374\370\370\360\360\360\340\300\300\200\0\0" "\0\0\0\0\0\0|\377\377\377\377\377\377\361\300\200\200\0\0\1\1\1\3\7\17\377\377\377\377\377\377\374" "\0\0\0\0\0\0\0\1\3\7\7\17\37\37\37\77\77\77\177\177~\376\376\376\377\377\377\377\347\307\3\0" "\0\0\0\0\0\200\300\340\360\370\370\340\300\200\0\0\0\0\0\0\0\0\201\303\377\377\377\377\377\377\377\0" "\0\0\0\0\0\1\3\7\17\37\37\77\77\77\177\177\177~~\177\177\177\77\77\77\37\37\17\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\360\360\370\370\370\370\360\340\0\0\0\0\0\300\360\360\370\370\370\370\360\340\0" "\0\0\0\0\0\0\0\0\3\7\17\17\17\17\7\7\3\0\0\0\0\0\3\7\17\17\17\17\17\7\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\300\340\340\340\340\360\360\360\360\360\360\360\360\340\340\340\300\300\200\0" "\0\0\0\0\300\360\370\374\376\177\77\37\317\307\347\363\363\371\371\371\371\371\371\371\363\363\347\347\317\237\77\177" "\376\374\370\360\377\377\377\17\1\360\376\377\377\377\377\17\7\3\1\1\1\1\1\3\7\37\37\37\37\17\16\0" "\1\17\377\377\377\377\377\370\300\3\37\77\377\377\377\376\370\360\360\340\340\340\340\360\360\370\374\374\370p\20\0" "\300\360\377\377\1\7\17\37\77\177\376\374\370\360\361\343\343\307\307\307\307\307\307\307\343\343\341\361\370\374\376\177" "\77\37\17\7\0\0\0\0\0\0\0\1\1\3\3\3\7\7\7\7\7\7\7\7\7\3\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\4\16>\177\77\37\17\17\17\7\7\7\17\17\77\377\377\377\376\374\370\0\0" "\0\0\0\0\0\0\0\0\200\340\360\370\374\374\374~~>>>>>>>\377\377\377\377\377\377\0\0" "\0\0\0\0\0\0\0\0\17\77\177\177\377\377\374\370\370\360\360\370\370\370\374\376\377\377\377\377\377\377\0\0" "\0\0\0\0\0\0\370\370\370\370\370\370\370\370\371\371\371\371\371\371\371\370\370\370\371\371\371\371\371\371\370\370" "\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\340\300\200\0\0\0\0\0\0\200\300\340\340\340" "\300\200\0\0\0\0\200\300\340\360\370\374\376\377\177\77\77\37\17\207\303\341\360\370\374\376\377\177\77\77\37\17" "\7\3\1\0\0\0\3\7\17\37\77\177\377\376\374\370\360\340\300\203\7\17\37\77\177\377\376\374\370\360\340\300" "\200\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\37\77\77\37\17\6\0\0\0\0\1\3\7\17\77\77" "\37\17\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0~~~~~~~~~~~~~~~~~~\376\376\376\376\376\376" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0~~~~~~~~~~~~~~~~~~~~~~~~~~" "~~\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\300\340\340\340\360\360\360\360\360\360\360\360\360\340\340\340\300\300\200\0" "\0\0\0\0\300\360\370\374\376\77\37\17\377\367\367\363\363\361\361\361\361\361\361\361\343\343\307\207\17\37\77\177" "\376\374\370\360\377\377\377\7\0\0\0\0\377\377\377\377\377\360\360\360\360\360\360\371\377\377\377\177\77\0\0\0" "\1\7\377\377\377\377\377\374\340\200\0\0\377\377\377\377\377\1\1\1\3\17\77\177\377\377\370\340\200\0\0\200" "\300\370\377\377\1\7\17\37\77\177\377\376\377\373\373\363\363\360\340\340\340\340\360\360\361\373\373\375\377\376\377\177" "\77\37\17\7\0\0\0\0\0\0\0\1\1\3\3\3\7\7\7\7\7\7\7\7\7\3\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\0\0" "\0\0\0\0\0\0\0\0\0\0\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\360\360\360\360\360\360\360\340\340\300\300\200\0\0\0\0" "\0\0\0\0\0\0\0\0\0\370\376\377\377\377\377\17\7\3\3\3\3\3\7\17\377\377\377\377\376\370\0\0" "\0\0\0\0\0\0\0\0\0\1\7\17\37\77\177\177\376\376\374\374\374\376\376\177\177\77\37\37\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\374\374\374\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\340\340\377\377\377\377\377\377\340\340\340\340\340\340\340\340\340" "\340\340\340\0\7\7\7\7\7\7\7\7\7\7\7\7\7\377\377\377\377\377\377\7\7\7\7\7\7\7\7\7" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\340\340\341\341\341\341\341\341\340\340\340\340\340\340\340\340\340" "\340\340\340\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\340\340\340\340\340\340\340\300\300\300\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\30\34>\177\177\77\37\17\7\7\3\3\3\7\7\217\377\377\377\377\376\374\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\340\360\370\374\374~\177\77\37\17\7\3\0\0\0" "\0\0\0\0\0\0\0\0\0\360\370\374\376\377\377\377\377\367\367\363\361\360\360\360\360\360\360\360\360\370\370\0" "\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\340\340\340\340\340\340\340\340\300\300\200\200\0\0\0\0" "\0\0\0\0\0\0\0\0\0\4\16\37\77\77\37\17\207\207\203\203\203\207\207\317\377\377\377\377\377|\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\0\0\37\17\17\17\17\37\37\37\77\377\377\377\375\370\360\0" "\0\0\0\0\0\0\0\0\10\34>\177\177\377\374\374\370\370\360\360\360\370\370\374\376\377\177\77\77\37\7\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\376\377\376\376\374x\30\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10\34\77\77\177\177\37\17\7\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\374\374\374\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\374\374\374\0\0\0" "\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0" "\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\374\360\360\340\340\340\340\340\360\360\374\376\377\177\377\377\377\377\360\340\340" "\340\370\376\374\377\377\377\377\1\1\3\7\7\7\7\7\7\7\7\7\3\3\1\0\0\1\3\7\7\7\7\7" "\7\7\3\1\177\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\300\340\340\360\360\360\360\370\370\370\370\370\370\370\370\370\370\370\370\370\370\370" "\370\370\370\0\0\340\374\376\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\1\1\1\1\1\377\377\377" "\377\377\377\0\0\7\77\177\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\377\377\377" "\377\377\377\0\0\0\0\0\1\3\3\7\17\17\17\37\37\37\377\377\377\377\377\377\0\0\0\0\0\377\377\377" "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\377\377\377" "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\377\377\377" "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\377\377\377" "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\0\0\0\0\0\1\1\1" "\1\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0<\377\377\377\377\377\377\377\377<\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\370\300\300\200\200\200\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\20<||x\370\360\363\363\363\363\363\177\177\177\77\17\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\34|<>>\37\37\37\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\340\360\374\376\376\377\77\37\17\17\17\17\37\37\177\377\377\376\374\370\340\200\0" "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\200\0\0\0\0\0\0\0\0\0\301\377\377\377\377\377\377\0" "\0\0\0\0\0\0\0\0\1\7\37\77\177\177\377\376\374\370\370\370\370\370\374\376\377\177\77\37\17\7\0\0" "\0\0\0\0\0\0\360\360\360\360\360\360\360\360\360\360\361\361\361\361\361\361\361\360\360\360\360\360\360\360\360\360" "\360\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\340\340\300\200\0\0\0\0\0\0\200\300\340\340\340\300\200\0\0\0\0\0" "\0\0\0\0\0\0\1\3\7\17\37\77\177\177\377\376\374\370\360\341\303\207\17\37\77\77\177\377\376\374\370\360" "\340\300\200\0\0\0\0\0\200\300\340\360\370\374\376\377\177\77\37\17\7\203\300\340\360\370\374\376\377\177\77\37" "\17\7\3\0\0\0\6\17\37\77\77\17\7\3\1\0\0\0\0\6\17\37\77\77\37\7\3\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\360\360\370\370\370\374\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\370\360" "\360`\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\377\377\77\7" "\1\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\200\340\370\376\377\377\377\77\17\3\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\376\377\377\377\77\17\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\377\177\37\7\1\0\0\200\300\340\370\374\376\376\376" "\376\0\0\0\0\0\0\0\200\340\374\377\377\377\177\37\7\1\200\340\360\370\374\377\337\317\303\301\377\377\377\377" "\377\300\300\300\0\0\0\16\37\37\77\77\17\1\0\0\0\0\3\3\3\3\3\3\3\3\3\3\377\377\377\377" "\377\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\360\360\370\370\370\374\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\370\370" "\360\340 \0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\377\377\77\17" "\3\0\0\0\0\0\0\0\377\377\377\377\377\0\0\0\0\0\0\0\300\370\376\377\377\377\177\37\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\377\177\37\7\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\377\177\237\307\341\360\370\370x|<<<<<" "|\370\370\360\0\0\0\0\300\360\374\377\377\377\177\37\7\1\0\0\0\1\1\3\0\200\300\300\340\360\360\370" "|\77\77\37\0\0\0\16\17\37\37\77\7\1\0\0\0\0\0\0\370\374\374\376\377\377\377\377\373\371\370\370" "\370\370\370\370\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\370\370||>>>>>~\374\374\370\370\340\0\0\0\0\0\0\0\0\300\360\374\370\370" "\360\360 \0\200\200\0\0\36\36\36\36\36\77\77\377\377\373\361\340\0\0\0\200\340\374\377\377\377\377\77\17" "\3\0\0\0\77\177~\374\370\370\370\370\370\374~\177\77\37\17\207\340\370\376\377\377\377\77\17\3\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\376\377\377\377\177\37\7\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\377\177\37\7\1\0\0\200\300\340\370\374\376\376\376" "\376\0\0\0\0\0\0\0\300\360\374\377\377\377\177\37\7\1\200\340\360\370\374\377\337\317\303\301\377\377\377\377" "\377\300\300\300\0\0\10\17\37\37\77\77\7\1\0\0\0\0\3\3\3\3\3\3\3\3\3\3\377\377\377\377" "\377\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\360\370\370\370\370\360\360\300\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\17\37\37\37\37\17\17\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\374\374\374\374\374\374\374\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\340\360\370\374\374\376\377\377\177\77\37\17\3\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\374\377\377\377\377\377\377\37\3\1\0\0\0\0\0\0\0\0\0\0\0\0\200\200\0\0" "\0\0\0\0\0\0\3\17\77\177\377\377\377\377\374\360\360\340\340\340\340\340\340\360\360\370\374\376\377\377\177~" "\34\10\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\301\341\343\203\3\7\7\7\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\376\377\377\377\377\374\360\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\360\376\377\377\377\177\17\37\377\377\377\377\376\360\300\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\360\376\377\377\377\377\37\3\0\0\0\0\7\37\377\377\377\377\376\370\300\0\0" "\0\0\0\0\0\200\340\374\377\377\377\377\177\177~~~~~~~~~~\177\177\377\377\377\377\376\370" "\300\0\0\0\374\377\377\377\377\377\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\77\377\377\377" "\377\377\370\340\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7" "\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\1\341\361\360\300\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\377\377\377\377\377\376\370\300\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\377\377\77\7\17\177\377\377\377\377\370\340\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\370\377\377\377\377\177\17\1\0\0\0\0\3\17\177\377\377\377\377\374\340\0\0" "\0\0\0\0\0\300\360\376\377\377\377\377\77\77\77\77\77\77\77\77\77\77\77\77\77\77\377\377\377\377\377\374" "\340\200\0\0\376\377\377\377\377\177\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\37\377\377\377" "\377\377\374\360\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3" "\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\6\17\37\37\17\17\7\7\3\301\341\341\201\3\7\17\17\37\77\37\7\2\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\376\377\377\377\377\374\360\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\360\376\377\377\377\177\17\37\377\377\377\377\376\360\300\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\360\376\377\377\377\377\37\3\0\0\0\0\7\37\377\377\377\377\376\370\300\0\0" "\0\0\0\0\0\200\340\374\377\377\377\377\177\177~~~~~~~~~~\177\177\377\377\377\377\376\370" "\300\0\0\0\374\377\377\377\377\377\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\77\377\377\377" "\377\377\370\340\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7" "\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\1\1\1\0\0\0\0\0\300\340\341\201\3\3\3\3\3\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\377\377\377\377\376\360\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\360\376\377\377\377\177\17\37\377\377\377\377\376\360\300\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\360\376\377\377\377\377\37\3\0\0\0\0\7\37\377\377\377\377\376\370\300\0\0" "\0\0\0\0\0\200\340\374\377\377\377\377\177\177~~~~~~~~~~\177\177\377\377\377\377\376\370" "\300\0\0\0\374\377\377\377\377\377\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\77\377\377\377" "\377\377\370\340\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7" "\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\1\3\7\7\7\7\3\3\1\0\340\340\340\0\1\3\7\7\7\7\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\374\377\377\377\377\377\374\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\377\377\77\7\77\377\377\377\377\374\360\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\370\376\377\377\377\177\17\1\0\0\0\1\17\77\377\377\377\377\374\360\200\0\0" "\0\0\0\0\0\200\360\376\377\377\377\377\177\177~~~~~~~~~\177\177\377\377\377\377\377\376\360" "\200\0\0\0\374\377\377\377\377\177\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\37\177\377\377\377" "\377\376\360\300\7\7\7\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7" "\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\7\17\37\77|\370\370\370\370|\77\37\17\7\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\376\377\377\377\377\376\360\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\360\376\377\377\377\177\37\37\377\377\377\377\376\360\300\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\360\374\377\377\377\377\37\3\0\0\0\0\3\37\177\377\377\377\376\370\300\0\0" "\0\0\0\0\0\0\340\374\377\377\377\377\177\177~~~~~~~~~~\177\177\377\377\377\377\377\370" "\340\0\0\0\374\377\377\377\377\377\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\77\377\377\377" "\377\377\374\340\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7" "\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\300\300\0\0\0\0\0\0\0\0\200\360\376\377\377\377\377\377\377\377\377\377\377\17\17\17\17\17\17\17" "\17\17\17\17\0\0\0\0\0\0\340\374\377\377\377\377\77\7\0\377\377\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\360\376\377\377\377\377\37\1\0\0\0\377\377\377\377\377\377\77\77\77\77\77\77\77" "\77\77\77\77\0\340\374\377\377\377\377\377\377\374\374\374\374\374\374\377\377\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\37\3\0\0\0\0\0\0\0\0\377\377\377\377\377\377\340\340\340\340\340\340\340" "\340\340\340\340\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0" "\0\0\0\0\0\0\0\300\340\360\370\374\376\377\377\177\77\77\37\37\17\17\17\37\37\37\77\177\377\377\377\376" "\374\370\360\300\200\370\377\377\377\377\377\377\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7" "\7\3\3\1\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\7\177\377\377\377\377\377\377\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\1\7\37\77\177\377\377\377\376\374\370\360\360\340\340\340\340\340\340\340\360\360\370\374\377\377" "\377~<\14\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\367\377\377\377\307\307\307\303\203\3\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\10\34\36><|xyyyyy\177\77\77\37\17\0\0" "\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\340\340\340\341\341\341\343\343\343\341\340\340\340\340\340\340" "\340\340\0\0\0\377\377\377\377\377\377\377\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\377\377\377\377\377\377\377\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\0" "\0\0\0\0\0\377\377\377\377\377\377\377\37\37\37\37\37\37\37\37\37\37\37\37\37\37\37\37\37\37\37\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360" "\360\360\0\0\0\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340\343\343\343\343\341\341\340\340\340\340\340\340\340\340\340\340\340" "\340\340\0\0\0\377\377\377\377\377\377\377\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\377\377\377\377\377\377\377\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\200\0" "\0\0\0\0\0\377\377\377\377\377\377\377\37\37\37\37\37\37\37\37\37\37\37\37\37\37\37\37\37\37\37\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360\360" "\360\360\0\0\0\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\306\317\337\337\317\317\307\307\303\301\301\301\303\303\307\317\317\337\377\337\307\302\300" "\300\300\0\0\0\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\17\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\340\340\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\301\303\307\307\307\307\303\303\301\300\300\300\300\300\301\303\307\307\307\307\303\303\301\300" "\300\300\0\0\0\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\17\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\340\340\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\340\341\341\343\343\343\343\340\340\340\340\340\340" "\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\377\377\377\377\377\377\377\7\7\7\7\7\7\7\7\7" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\360\360\360\360\360\360\360\360\360\377\377\377\377\377\377\377\360\360\360\360\360\360\360\360\360" "\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\340\340\340\340\340\340\343\343\343\343\341\341\340\340\340\340\340\340\340\340\340\340\340" "\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\377\377\377\377\377\377\377\7\7\7\7\7\7\7\7\7" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\360\360\360\360\360\360\360\360\360\377\377\377\377\377\377\377\360\360\360\360\360\360\360\360\360" "\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\306\317\337\337\317\317\307\303\303\301\300\301\303\303\307\317\337\337\377\337\307\302\300" "\0\0\0\0\0\0\0\0\17\17\17\17\17\17\17\17\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\340\340\340\340\340\340\340\340\340\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\340" "\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\301\303\307\307\307\307\303\303\301\300\300\300\300\300\301\303\307\307\307\307\303\303\301\300" "\0\0\0\0\0\0\0\0\17\17\17\17\17\17\17\17\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\340\340\340\340\340\340\340\340\340\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\340" "\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\377\377\17\17\17\17\17\17\37\37\37\37\77\177\377\377\377\376\374\370\360" "\300\200\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\177\377\377\377" "\377\377\374\340\77\77\377\377\377\377\377\377\377\77\77\77\77\77\77\77\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\377\377\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\374\377\377\377" "\377\377\177\7\0\0\377\377\377\377\377\377\377\340\340\340\340\340\340\340\360\360\360\370\374\376\377\377\377\177\77\17" "\7\1\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\301\203\1\0\0\0\0\0\0\0\1\1\3\3\3\3\3\3\303\301\300\300" "\300\300\300\300\377\377\377\377\377\377\377\377\376\370\340\300\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\7\37\77\377\377\377\374\360\340\200\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\3\17\77\177\377\377\376\370\340\300\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\1\7\37\177\377\377\377\374\360\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\377\377\377" "\377\377\377\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\201\201\301\303\303\303\307\307\317\217\207\201\0\0\0\0\0" "\0\0\0\0\0\0\300\340\370\374\374\376\377\377\177\77\37\37\37\17\17\17\37\37\77\77\177\377\377\376\374\374" "\370\340\300\0\370\377\377\377\377\377\377\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\77\377\377" "\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\377\377\177\377\377\377\377\377\376\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\377\377" "\377\377\377\377\0\1\7\37\77\177\377\377\377\376\374\370\360\340\340\340\340\340\340\340\360\370\370\376\377\377\377\177" "\77\37\7\1\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\203\207\217\307\307\307\303\303\303\301\201\201\200\0\0\0\0\0" "\0\0\0\0\0\0\300\340\370\374\374\376\377\377\177\77\37\37\37\17\17\17\37\37\77\77\177\377\377\376\374\374" "\370\340\300\0\370\377\377\377\377\377\377\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\77\377\377" "\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\377\377\177\377\377\377\377\377\376\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\377\377" "\377\377\377\377\0\1\7\37\77\177\377\377\377\376\374\370\360\340\340\340\340\340\340\340\360\370\370\376\377\377\377\177" "\77\37\7\1\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\4\16\37\77\37\217\217\207\307\303\301\301\303\303\307\217\237\237\77\77\37\6\0" "\0\0\0\0\0\0\300\340\370\374\374\376\377\377\177\77\37\37\37\17\17\17\37\37\77\77\177\377\377\376\374\374" "\370\340\300\0\370\377\377\377\377\377\377\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\77\377\377" "\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\377\377\177\377\377\377\377\377\376\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\377\377" "\377\377\377\377\0\1\7\37\77\177\377\377\377\376\374\370\360\340\340\340\340\340\340\340\360\370\370\376\377\377\377\177" "\77\37\7\1\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\1\1\1\0\200\200\200\300\300\300\301\301\303\303\203\203\203\3\3\1\1\0" "\0\0\0\0\0\0\300\340\370\374\374\376\377\377\177\77\37\37\37\17\17\17\37\37\77\77\177\377\377\376\374\374" "\370\340\300\0\370\377\377\377\377\377\377\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\77\377\377" "\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\377\377\177\377\377\377\377\377\376\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\377\377" "\377\377\377\377\0\1\7\37\77\177\377\377\377\376\374\370\360\340\340\340\340\340\340\340\360\370\370\376\377\377\377\177" "\77\37\7\1\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\1\3\7\7\7\7\203\203\201\300\300\300\300\300\301\303\207\207\207\7\3\3\1\0" "\0\0\0\0\0\0\300\340\370\374\374\376\377\377\177\77\37\37\37\17\17\17\37\37\77\77\177\377\377\376\374\374" "\370\340\300\0\370\377\377\377\377\377\377\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\77\377\377" "\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\377\377\177\377\377\377\377\377\376\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\377\377" "\377\377\377\377\0\1\7\37\77\177\377\377\377\376\374\370\360\340\340\340\340\340\340\340\360\370\370\376\377\377\377\177" "\77\37\7\1\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\0\0" "\0\0\0\0\0\0\10\34>\177\377\377\377\376\374\370\360\300\200\0\0\200\300\340\360\370\376\377\377\377\177>" "\34\10\0\0\0\0\0\0\0\0\0\1\1\303\347\377\377\377\377\377\377\377\377\377\377\347\303\1\0\0\0\0" "\0\0\0\0\0\0\0`\360\370\374\376\377\377\177\77\37\17\7\3\3\7\17\37\77\177\377\377\376\374\370\360" "`\0\0\0\0\0\0\0\0\1\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\340\340\340\340\340\340\340\300\300\300\200\200\340\360\374" "\374\374\370\370\0\200\340\360\374\376\376\377\377\177\77\37\17\17\17\7\7\17\17\17\237\377\377\377\377\377\377\377" "\377\367\341\200\374\377\377\377\377\377\177\7\1\0\0\0\0\0\0\0\300\360\374\377\377\377\77\17\3\17\377\377" "\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\300\360\374\377\377\377\77\17\3\0\0\0\0\0\377\377" "\377\377\377\377\77\377\377\377\377\377\377\340\340\370\374\377\377\177\37\7\1\0\0\0\0\0\0\0\300\370\377\377" "\377\377\377\377\0\1\307\357\377\377\377\377\377\377\377\377\371\370\360\360\360\360\360\360\370\374\376\377\377\377\177\77" "\37\17\3\0\34\37\77\77\177\77\17\3\0\1\1\3\3\3\3\3\3\3\3\3\3\3\1\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340\340\340\340\340\340\340`\0\0\0\0\0\0\0\1\1\3\3\3\1\0\0\0\340\340\340\340" "\340\340\340\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377\377" "\377\377\377\0\0\7\37\77\177\377\377\377\377\374\370\370\360\360\360\360\360\360\360\370\370\374\377\377\377\177\177\77" "\17\7\0\0\0\0\0\0\0\0\0\1\1\3\3\3\3\3\3\3\3\3\3\3\3\3\1\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340\340\340\340\340\340\340`\0\0\1\3\3\3\1\1\0\0\0\0\0\0\0\0\340\340\340\340" "\340\340\340\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377\377" "\377\377\377\0\0\7\37\77\177\377\377\377\377\374\370\370\360\360\360\360\360\360\360\370\370\374\377\377\377\177\177\77" "\17\7\0\0\0\0\0\0\0\0\0\1\1\3\3\3\3\3\3\3\3\3\3\3\3\3\1\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\302\306\317\337\37\17\7\7\3\1\1\0\1\3\7\7\17\37\77\37\317\306\300\300" "\300\300\300\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377" "\377\377\377\0\1\17\77\177\377\377\377\377\376\370\360\360\340\340\340\340\340\340\340\360\360\370\376\377\377\377\377\177" "\37\17\1\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\301\303\307\307\7\7\3\3\1\0\0\0\0\0\1\3\7\7\7\7\303\303\301\300" "\300\300\300\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377" "\377\377\377\0\1\17\77\177\377\377\377\377\376\370\360\360\340\340\340\340\340\340\340\360\360\370\376\377\377\377\377\177" "\37\17\1\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340\340\340\340\340\340\200\0\0\0\3\3\3\1\1\1\0\0\0\0\0\0\0\0\300\340\340\340" "\340\340\340`\3\17\77\377\377\377\377\376\370\340\200\0\0\0\0\0\0\0\0\0\200\340\370\377\377\377\377\177" "\37\7\1\0\0\0\0\0\3\17\77\377\377\377\377\376\370\340\200\0\0\300\370\376\377\377\377\177\37\7\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\3\17\37\177\377\377\377\376\377\377\377\377\77\7\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17\17\37\37\37\77\177\377\377\377\376\374" "\370\360\200\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\301\377\377\377\377" "\377\377\377\0\0\377\377\377\377\377\377\377\374\374\374\374\374\374\374\374\374\374\374\374\376\376\377\177\177\77\77\37" "\17\3\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360\360\370\370\370\374\374\374\374\374\374\374\370\370\370\360\340\300\200\0\0" "\0\0\0\0\0\300\370\376\377\377\377\377\377\17\7\3\1\1\0\0\0\1\1\3\7\37\377\377\377\377\377\376" "\360\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\200\200\200\200\200\300\300\340\370\377\377\377\377\177\77" "\17\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\37\37\37\37\37\37\77\77\177\377\377\375\374\370\360" "\340\300\200\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\377\377\377" "\377\377\377\374\0\377\377\377\377\377\377\377\0\0\200\300\360\370\360\340\340\340\340\340\340\360\370\374\377\377\377\377" "\177\77\17\1\0\7\7\7\7\7\7\7\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\10\34|\376\377\377\377\376\370\340\300\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\17\37\177\77\37\37\14\10\0\0\0\0\0" "\0\0\0\0\0\0\0`\340\360\370\374\374\374\376~~~~~~~~~\376\376\374\374\374\370\360\340" "\300\0\0\0\0\0\0\0\0\1\203\203\301\300\300\300\340\340\340\340\340\340\340\340\340\340\343\377\377\377\377\377" "\377\376\0\0\300\360\374\376\377\377\377\177\37\37\17\17\17\17\17\7\7\7\7\7\7\7\207\377\377\377\377\377" "\377\377\0\0\7\37\177\377\377\377\377\376\370\370\360\360\360\360\360\360\360\370\370\374\376\377\177\377\377\377\377\377" "\377\377\0\0\0\0\0\0\0\1\1\3\3\3\3\3\3\3\3\3\3\3\1\1\0\0\0\3\3\3\3\3" "\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\370\376\377\376\374\374x\60\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30<\77\177\177\177\77\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\300\340\360\370\370\370\374\374\374\374\374\374\374\374\374\374\374\374\370\370\370\360\340\300" "\200\0\0\0\0\0\0\0\1\3\7\7\203\201\201\200\300\300\300\300\300\300\300\300\301\301\307\377\377\377\377\377" "\377\374\0\0\200\340\370\374\376\376\377\377\77\77\37\37\37\37\37\17\17\17\17\17\17\17\17\377\377\377\377\377" "\377\377\0\0\17\77\377\377\377\377\377\374\360\360\340\340\340\340\340\340\340\360\360\370\374\376\377\377\377\377\377\377" "\377\377\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370\374\376\376\376\374\360\340\300\200\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\20\70|\376\377\177\77\37\7\3\3\7\37\77\177\377\377~<\70\0\0" "\0\0\0\0\0\0\0\300\300\340\360\370\370\370\374\374\374\374\374\374\374\374\374\374\374\375\370\370\370\360\340\300" "\200\0\0\0\0\0\0\0\1\3\7\7\203\201\201\200\300\300\300\300\300\300\300\300\301\301\307\377\377\377\377\377" "\377\374\0\0\200\340\370\374\376\376\377\377\77\77\37\37\37\37\37\17\17\17\17\17\17\17\17\377\377\377\377\377" "\377\377\0\0\17\77\377\377\377\377\377\374\360\360\340\340\340\340\340\340\340\360\360\370\374\376\377\377\377\377\377\377" "\377\377\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\360\370\370\374\374\374\374\374\374\374\374\370\360\360\340\300\300\300\340\360\370\360" "\360`\0\0\0\0\0\0\1\1\3\7\7\3\1\0\0\0\1\1\3\7\7\17\17\17\17\17\17\7\7\3" "\1\0\0\0\0\0\0\300\300\340\360\370\370\370\374\374\374\374\374\374\374\374\374\374\374\374\370\370\370\360\340\300" "\200\0\0\0\0\0\0\0\1\3\7\7\203\201\201\200\300\300\300\300\300\300\300\300\301\301\307\377\377\377\377\377" "\377\374\0\0\200\340\370\374\376\376\377\377\77\77\37\37\37\37\37\17\17\17\17\17\17\17\17\377\377\377\377\377" "\377\377\0\0\17\77\377\377\377\377\377\374\360\360\340\340\340\340\340\340\340\360\360\370\374\376\377\377\377\377\377\377" "\377\377\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\360\360\370\370\370\370\360\340\0\0\0\0\0\300\360\360\370\370\370\370\360\340" "\0\0\0\0\0\0\0\0\0\3\7\17\17\17\17\7\7\3\0\0\0\0\0\3\7\17\17\17\17\17\7\3" "\0\0\0\0\0\0\0\200\300\340\360\360\370\370\374\374\374\374\374\374\374\374\374\374\374\374\370\370\370\360\340\300" "\200\0\0\0\0\0\0\0\1\3\7\7\203\201\201\200\300\300\300\300\300\300\300\300\301\301\307\377\377\377\377\377" "\377\374\0\0\200\340\370\374\376\376\377\377\77\77\37\37\37\37\37\17\17\17\17\17\17\17\17\377\377\377\377\377" "\377\377\0\0\17\77\377\377\377\377\377\374\360\360\340\340\340\340\340\340\340\360\360\370\374\376\377\377\377\377\377\377" "\377\377\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\360\370\374\376\37\17\17\17\17\37\376\374\370\360\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\37><<<<>\37\17\7\3\0\0\0\0\0" "\0\0\0\0\0\0\0\300\300\340\360\370\370\370\374\374\374\374\374\374\374\374\374\374\374\374\370\370\370\360\340\300" "\200\0\0\0\0\0\0\0\1\3\7\7\203\201\201\200\200\300\300\300\300\300\300\300\301\301\307\377\377\377\377\377" "\377\374\0\0\200\340\370\374\376\376\377\377\77\77\37\37\37\37\37\17\17\17\17\17\17\17\17\377\377\377\377\377" "\377\377\0\0\17\77\377\377\377\377\377\374\360\360\340\340\340\340\340\340\340\360\360\370\370\374\377\377\377\377\377\377" "\377\377\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0p\370\374\374\376~~~~~~\376\376\374\374\370\360\370\374\374\376\376~~~~\376\376" "\374\374\370\360\0\1\3\201\200\300\300\340\340\340\340\340\341\377\377\377\377\377\377\343\340\340\340\340\340\340\340\341" "\377\377\377\377\374\376\377\377\177\37\17\17\7\7\7\7\7\377\377\377\377\377\377\3\3\3\3\3\3\3\3\3" "\3\3\3\3\177\377\377\377\370\360\340\340\340\340\340\360\370\377\377\377\177\377\377\377\374\370\370\360\360\360\360\360" "\370\370\376\374\0\0\1\1\3\3\3\3\3\3\3\3\3\1\0\0\0\0\0\1\3\3\3\3\3\3\3\3" "\3\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360\370\370\374\374\376\376~~~~~~~~\376\376\376\374\374\370" "\360\360\340\200\0\340\374\377\377\377\377\377\177\17\3\1\0\0\0\0\0\0\0\0\0\0\0\0\1\3\37\37" "\17\7\1\0\0\77\377\377\377\377\377\377\360\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\1\7\17\37\77\177\377\377\377\376\374\370\370\360\360\360\360\360\360\360\370\370\374\374\376\377" "~|\70\20\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\3\377\377\377\377\343\343\343\343\301\201\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\14\17\37\36\36><<<<<<\37\37\37\17\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\10<|\376\377\377\377\374\370\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\77\177\77\37\37\14\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\360\370\370\374\374\376\376~~~~~~~\376\376\374\374\374\370\360\340\300" "\0\0\0\0\340\374\377\377\377\377\377\357\343\341\340\340\340\340\340\340\340\340\340\340\340\341\343\377\377\377\377\377" "\377\370\0\0\77\377\377\377\377\377\377\307\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\1\7\37\77\177\377\377\377\376\374\370\370\360\360\360\360\360\360\360\360\370\370\374\376\377~<" "\30\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\3\3\3\3\3\3\3\3\3\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\374\377\377\377\376|<\10\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\14\37\37\77\177\77\17\7\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\360\370\370\374\374\376\376~~~~~~~\376\376\374\374\374\370\360\340\300" "\0\0\0\0\340\374\377\377\377\377\377\357\343\341\340\340\340\340\340\340\340\340\340\340\340\341\343\377\377\377\377\377" "\377\370\0\0\77\377\377\377\377\377\377\307\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\1\7\37\77\177\377\377\377\376\374\370\370\360\360\360\360\360\360\360\360\370\370\374\376\377~<" "\30\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\3\3\3\3\3\3\3\3\3\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\374\376\376\376\374\370\340\300\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\20<~\377\377\77\37\17\3\1\7\17\77\177\377\377~|\70\0\0\0" "\0\0\0\0\0\0\0\200\300\340\360\360\370\370\374\374\374\374\374\374\374\374\374\374\374\370\370\370\360\340\300\200" "\0\0\0\0\300\370\376\377\377\377\377\337\307\303\301\301\300\300\300\300\300\300\300\301\301\303\307\377\377\377\377\377" "\376\360\0\0\177\377\377\377\377\377\377\217\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\17\0\0\0\3\17\77\177\377\377\377\376\374\370\360\360\340\340\340\340\340\340\340\340\360\360\370\374\376\374x" "\60\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\360\360\370\370\370\370\360\340\0\0\0\0\0\300\360\360\370\370\370\370\360\340\0" "\0\0\0\0\0\0\0\0\3\7\17\17\17\17\7\7\3\0\0\0\0\0\3\7\17\17\17\17\17\7\3\0" "\0\0\0\0\0\0\0\200\300\340\360\360\370\370\374\374\374\374\374\374\374\374\374\374\374\370\370\370\360\340\300\200" "\0\0\0\0\300\370\376\377\377\377\377\337\307\303\301\301\300\300\300\300\300\300\300\301\301\303\307\377\377\377\377\377" "\376\360\0\0\177\377\377\377\377\377\377\217\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\17\0\0\0\3\17\77\177\377\377\377\376\374\370\360\360\340\340\340\340\340\340\340\340\360\360\370\374\376\374x" "\60\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\20\70\374\374\376\377\376\374\360\300\200\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\37\77\177\177\77>\30\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\340\340\340\340\340\340\340\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\0" "\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\376\377\376\374\374x\20\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\36\77\177\177\177\37\17\7\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\340\340\340\340\340\340\340\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\0" "\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\370\376\376\376\376\370\360\340\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\20\70~\377\377\177\37\17\7\1\3\7\37\77\377\377\177~\70\20\0\0\0" "\0\0\0\0\0\0\0\0\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\340\340\340\340\340\340\340\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\0" "\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\360\360\370\370\370\370\360\340\0\0\0\0\0\300\360\360\370\370\370\370\360\340\0" "\0\0\0\0\0\0\0\0\3\7\17\17\17\17\7\7\3\0\0\0\0\0\3\7\17\17\17\17\17\7\3\0" "\0\0\0\0\0\0\0\0\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\340\340\340\340\340\340\340\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\0" "\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\10\10\30\30<<||\374\374\374\370\360\340\340\300\300\340\340\340\340\360\360" "\360\200\0\0\0\0\0\0\0\0\0\14~~>\77\77\77\37\37\37\17\37\77\377\377\377\377\377\363\343\203" "\1\1\0\0\0\0\0\200\300\340\360\370\370\374\374\376\376~~~~~~~\376\375\377\377\377\377\377\377" "\377\374\340\0\300\370\376\377\377\377\377\77\17\3\1\0\0\0\0\0\0\0\0\0\0\1\3\7\77\377\377\377" "\377\377\377\376\77\377\377\377\377\377\377\360\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\377\377\377" "\377\377\377\37\0\1\7\17\37\77\177\377\377\376\374\370\370\360\360\360\360\360\360\360\370\374\376\377\377\377\177\77" "\37\7\1\0\0\0\0\0\0\0\0\0\1\1\1\3\3\3\3\3\3\3\3\3\3\3\1\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\360\370\370\374\374\374\374\374\374\374\370\370\360\340\300\300\300\340\360\370\360\360" "`\0\0\0\0\0\0\0\1\3\7\7\3\1\1\0\0\0\1\3\7\7\17\17\17\17\17\17\7\7\3\1" "\0\0\0\0\0\0\374\374\374\374\374\374\374\300\340\360\360\370\374\374\374\374\374\374\374\374\374\374\370\370\360\340" "\200\0\0\0\0\0\377\377\377\377\377\377\377\77\17\7\3\1\1\0\0\0\0\0\1\3\17\377\377\377\377\377" "\377\376\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\60x\374\374\376\377\374\370\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\37\77\177\177\177\77\34\20\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360\360\370\370\374\374\374\374\374\374\374\374\374\374\374\370\370\360\360\340\300" "\200\0\0\0\300\370\374\377\377\377\377\377\37\7\3\1\1\0\0\0\0\0\0\1\1\3\7\37\377\377\377\377" "\377\376\370\300\177\377\377\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377" "\377\377\377\177\0\3\17\37\77\177\377\377\377\374\370\360\360\340\340\340\340\340\340\340\360\370\374\376\377\377\377\177" "\77\17\3\0\0\0\0\0\0\0\0\1\3\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\374\377\376\374\374x\60\20\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\20\34>\177\177\177\77\37\7\3\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360\360\370\370\374\374\374\374\374\374\374\374\374\374\374\370\370\360\360\340\300" "\200\0\0\0\300\370\374\377\377\377\377\377\37\7\3\1\1\0\0\0\0\0\0\1\1\3\7\37\377\377\377\377" "\377\376\370\300\177\377\377\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377" "\377\377\377\177\0\3\17\37\77\177\377\377\377\374\370\360\360\340\340\340\340\340\340\340\360\370\374\376\377\377\377\177" "\77\17\3\0\0\0\0\0\0\0\0\1\3\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\374\376\376\376\374\360\340\300\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\20\70|\377\377\177\77\17\7\3\3\7\37\77\177\377\377~<\20\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360\360\370\370\374\374\374\374\374\374\374\374\374\374\375\370\370\360\360\340\300" "\200\0\0\0\300\370\374\377\377\377\377\377\37\7\3\1\1\0\0\0\0\0\0\1\1\3\7\37\377\377\377\377" "\377\376\370\300\177\377\377\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377" "\377\377\377\177\0\3\17\37\77\177\377\377\377\374\370\360\360\340\340\340\340\340\340\340\360\370\374\376\377\377\377\177" "\77\17\3\0\0\0\0\0\0\0\0\1\3\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\360\370\370\374\374\374\374\374\374\374\370\370\360\340\340\300\300\340\340\360\370\360" "\340@\0\0\0\0\0\0\1\3\3\7\3\1\1\0\0\0\1\3\7\7\17\17\17\17\17\17\17\7\3\1" "\0\0\0\0\0\0\0\0\200\300\340\360\360\370\370\374\374\374\374\374\374\374\374\374\374\374\370\370\360\360\340\300" "\200\0\0\0\300\370\374\377\377\377\377\377\37\7\3\1\1\0\0\0\0\0\0\1\1\3\7\37\377\377\377\377" "\377\376\370\300\177\377\377\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377" "\377\377\377\177\0\3\17\37\77\177\377\377\377\374\370\360\360\340\340\340\340\340\340\340\360\370\374\376\377\377\377\177" "\77\17\3\0\0\0\0\0\0\0\0\1\3\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\360\360\370\370\370\370\360\340\0\0\0\0\0\0\300\360\360\370\370\370\370\360\340" "\0\0\0\0\0\0\0\0\3\7\17\17\17\17\7\7\3\0\0\0\0\0\0\3\7\17\17\17\17\17\7\3" "\0\0\0\0\0\0\0\0\200\300\340\360\360\370\370\374\374\374\374\374\374\374\374\374\374\374\370\370\360\360\340\300" "\200\0\0\0\300\370\374\377\377\377\377\377\37\7\3\1\1\0\0\0\0\0\0\1\1\3\7\37\377\377\377\377" "\377\376\370\300\177\377\377\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377" "\377\377\377\177\0\3\17\37\77\177\377\377\377\374\370\360\360\340\340\340\340\340\340\340\360\370\374\376\377\377\377\177" "\77\17\3\0\0\0\0\0\0\0\0\1\3\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\37\77\77\77\77\37\17\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0~~~~~~~~~~~~~~~~~~~~~~~~~~" "~~\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\360\360\360\360\340\300\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\17\17\17\7\3\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\200\200" "\0\0\0\0\0\0\0\0\200\300\340\360\360\370\370\374\374\374\374\374\374\374\374\374\374\374\376\377\377\377\377\317" "\207\1\0\0\200\370\374\377\377\377\377\377\37\7\3\1\1\0\200\340\360\374\377\377\177\37\17\7\177\377\377\377" "\377\376\370\300\177\377\377\377\377\377\377\300\0\0\300\340\370\376\377\377\77\37\7\1\0\0\0\0\340\377\377\377" "\377\377\377\177\0\3\17\37\77\377\377\377\376\377\377\377\377\357\343\340\340\340\340\360\360\370\374\377\377\377\377\177" "\77\17\3\0\0\0\30<\77\177\177\177\37\7\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\20\70x\374\376\376\377\374\370\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\37\77\177\177\77\77\34\20\0\0\0\0\0" "\0\0\0\0\0\374\374\374\374\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\374\374" "\374\374\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377\377" "\377\377\0\0\0\3\37\177\377\377\377\377\377\374\370\360\340\340\340\340\340\340\360\360\370\376\377\377\377\377\377\377" "\377\377\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\3\1\1\0\7\7\7\7\7" "\7\7\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\370\376\377\376\376\374x\70\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\34\77\77\177\177\77\17\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\374\374\374\374\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\374\374" "\374\374\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377\377" "\377\377\0\0\0\3\37\177\377\377\377\377\377\374\370\360\340\340\340\340\340\340\360\360\370\376\377\377\377\377\377\377" "\377\377\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\3\1\1\0\7\7\7\7\7" "\7\7\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\370\376\376\376\376\370\360\340\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\20<~\377\377\77\37\17\7\1\3\7\37\77\177\377\177~<\20\0\0" "\0\0\0\0\0\374\374\374\374\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\374\374" "\374\374\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377\377" "\377\377\0\0\0\3\37\177\377\377\377\377\377\374\370\360\340\340\340\340\340\340\360\360\370\376\377\377\377\377\377\377" "\377\377\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\3\1\1\0\7\7\7\7\7" "\7\7\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\360\360\370\370\370\370\360\340\0\0\0\0\0\300\360\360\370\370\370\370\360\340\0" "\0\0\0\0\0\0\0\0\3\7\17\17\17\17\7\7\3\0\0\0\0\0\3\7\17\17\17\17\17\7\3\0" "\0\0\0\0\0\374\374\374\374\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\374\374" "\374\374\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377\377" "\377\377\0\0\0\3\37\177\377\377\377\377\377\374\370\360\340\340\340\340\340\340\360\360\370\376\377\377\377\377\377\377" "\377\377\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\3\1\1\0\7\7\7\7\7" "\7\7\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\376\377\376\374\374\70\20\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\36\77\177\177\177\37\17\7\1\0\0\0\0\0\0\0" "\0\0\0\0\34|\374\374\374\374\374\374\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\374\374\374\374" "\374\374<\4\0\0\1\17\77\377\377\377\377\376\360\300\0\0\0\0\0\0\0\0\200\360\374\377\377\377\377\77" "\17\1\0\0\0\0\0\0\0\0\7\37\177\377\377\377\376\370\340\0\0\200\340\374\377\377\377\377\37\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\377\377\374\377\377\377\177\37\3\0\0\0\0\0" "\0\0\0\0\200\340\300\0\0\0\0\0\0\200\300\340\374\377\377\377\377\177\17\3\0\0\0\0\0\0\0\0" "\0\0\0\0\77\77\77\177\177~~\177\177\77\77\77\37\37\17\7\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\370\370\370\370\370\370\370\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\340\360\360\370\370\374\374\374\374\374\374\374\374\374\374\370\370\360\340\300" "\200\0\0\0\0\377\377\377\377\377\377\377\37\7\3\1\0\0\0\0\0\0\0\1\1\3\7\17\377\377\377\377" "\377\377\374\340\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377" "\377\377\377\177\0\377\377\377\377\377\377\377\377\374\370\360\340\340\340\340\340\340\340\340\360\370\374\376\377\377\377\177" "\77\17\3\0\0\377\377\377\377\377\377\377\0\1\3\3\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\177\177\177\177\177\177\177\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\360\360\370\370\370\370\360\340\0\0\0\0\0\300\360\360\370\370\370\370\360\340\0" "\0\0\0\0\0\0\0\0\3\7\17\17\17\17\7\7\3\0\0\0\0\0\3\7\17\17\17\17\17\7\3\0" "\0\0\0\0\14<\374\374\374\374\374\374\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\374\374\374\374" "\374\374|\14\0\0\1\7\37\377\377\377\377\376\370\300\0\0\0\0\0\0\0\0\0\340\374\377\377\377\377\77" "\17\1\0\0\0\0\0\0\0\0\3\17\177\377\377\377\377\374\340\200\0\0\340\374\377\377\377\377\77\7\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\377\377\377\377\374\377\377\377\377\37\7\0\0\0\0\0" "\0\0\0\0\200\340\300\200\0\0\0\0\0\0\200\340\370\377\377\377\377\177\37\3\0\0\0\0\0\0\0\0" "\0\0\0\0\37\77\77\177\177~~\177\177\177\77\77\37\37\17\7\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0"; #endif /* U8G2_USE_LARGE_FONTS */ /* Fontname: -FreeType-Inconsolata LGC-Bold-R-Normal--62-620-72-72-P-301-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Emboldened by MihailJP. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 95/658 BBX Build Mode: 3 */ const uint8_t u8x8_font_inb46_4x8_r[24324] U8X8_FONT_SECTION("u8x8_font_inb46_4x8_r") = " ~\4\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\370\370\374\374\374\370\370\340\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\177\377\377\377\377\377\37\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\370\374\374\374\374\374\374\370\360\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\7\7\7\7\3\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\370\360\0\0\0\0\0\0\340\360\370\370\370\360\340\0" "\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\377\377\377\377\377\377\377\0" "\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\77\77\0\0\0\0\0\0\77\77\77\77\77\77\77\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300\300\300\0\0\0\0\0\0\300\300\300\300\300\300" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\1\0\0\0\0\0\376\377\377\377\377\377\7" "\0\0\0\0|||||||\374\377\377\377\377\377\377=<<<<<\376\377\377\377\377\377\177|" "||||\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\377\377\377\377\377\377\7\0\0" "\0\0\0\0||||||\376\377\377\377\377\377~~~~~~\376\377\377\377\377\377\77>>>" ">>>\36\0\0\0\0\0\376\377\377\377\377\377\3\0\0\0\0\0\374\377\377\377\377\377\17\0\0\0\0" "\0\0\0\0\0\0\0\0\6\7\7\7\7\7\3\0\0\0\0\0\4\7\7\7\7\7\7\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\370\370\370\370\370\370\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\340\360\370\374\376\376\377\77\37\37\377\377\377\377\377\377\77\77\77\177\376\376\374\374\370" "p \0\0\0\0\37\177\377\377\377\377\377\370\340\300\300\377\377\377\377\377\377\0\0\0\0\0\3\3\1\0" "\0\0\0\0\0\0\0\0\1\3\7\7\17\17\37\37\77\377\377\377\377\377\377\376\374\374\374\370\370\360\360\340" "\300\0\0\0\0\0\0\200\300\300\0\0\0\0\0\0\0\377\377\377\377\377\377\0\1\1\3\7\377\377\377\377" "\377\377\374\0\0\14\37\77\177\177\377\376\374\374\370\370\360\377\377\377\377\377\377\360\370\370\374\377\377\177\77\37" "\17\7\0\0\0\0\0\0\0\0\0\0\1\1\1\1\3\77\77\77\77\77\77\1\1\1\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300" "\300\300\300@\374\376\377\377\377\37\37\17\17\37\77\377\377\377\376\374\360\0\0\0\300\340\370\376\377\377\377\77" "\17\3\1\0\37\77\177\377\377\376\374\370\370\374\374\377\377\177\77\237\347\360\374\377\377\377\177\37\7\1\0\0" "\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\300\360\370\376\377\377\177\77\17\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\340\370\374\377\377\377\77\37\7\201\360\370\374\376\376\177\77\77\77\177\376" "\376\374\370\360\0\0\300\360\374\376\377\377\177\37\17\3\0\0\0\0\37\177\377\377\377\377\360\340\340\340\360\377" "\377\377\377\177\6\7\7\7\7\7\7\1\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7" "\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\340\370\374\376\377\377\377\77\37\37\17\17\37\37\177\377\377\377\377\376\374\360\0\0\0" "\0\0\0\0\0\0\0\17\77\377\377\377\377\377\370\340\200\0\0\200\300\360\377\377\377\377\177\77\17\0\0\0" "\0\0\0\0\0\0\200\300\340\360\371\373\377\377\177\77\377\377\377\377\377\377\347\203\3\1\0\0\0\0\300\300" "\300\200\0\0\374\377\377\377\377\377\37\7\1\0\0\0\0\1\3\7\37\77\177\377\377\376\374\370\340\370\377\377" "\377\177\77\17\77\177\377\377\377\377\376\370\360\340\340\340\340\340\340\360\360\370\374\375\377\377\177\77\177\377\377\377" "\371\360\340\300\0\0\0\1\3\3\7\7\7\7\7\17\7\7\7\7\7\3\3\1\1\0\0\0\0\1\7\17" "\7\3\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\360\370\370\370\370\360\340\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77\77\77\77\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\360\360\370\370\374\374\370" "\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\374\376\377\377\377\177\77\17\7\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\340\370\377\377\377\377\377\177\17\3\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\374\377\377\377\377\377\377\7\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\37\377\377\377\377\377\377\370\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\3\17\177\377\377\377\377\377\370\340\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\37\77\177\377\377\377\374\370\360\340\300\200\200\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\17\37\37\77\77\177\77" "\16\6\0\0\0\0\0\340\374\370\370\360\360\340\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\1\3\3\7\17\37\37\77\377\377\377\376\374\370\360\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\77\377\377\377\377\377\374\360\300\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\377\377\377\377\377\377\374\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\377\377\377\77\7\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\200\200\300\340\360\370\376\377\377\377\177\77\37\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\14~\376\177\177\77\77\37\17\17\7\3\1\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\340\340\340\340\340\340 \0\0\0\0\0\0\0\0" "\0\0\0\0\0\340\360\360\340\340\300\300\200\200\0\0\17\377\377\377\377\377\177\0\0\0\200\200\300\300\340\340" "\360\340\200\0\7\7\7\7\17\17\17\17\37\237\337\377\376\377\377\377\377\377\376\377\337\237\37\17\17\17\17\7" "\7\7\7\4\0\0\0\300\340\360\370\374\376\377\377\77\37\7\3\1\3\7\37\77\377\377\377\374\370\360\340\300" "\0\0\0\0\0\0\0\1\1\3\7\7\3\1\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7\3\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\340\340\340\340\340\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\77\77\77\77\77\77\77\77\77\77\77\77\77\377\377\377\377\377\377\77\77\77\77\77\77\77\77\77" "\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\17\17\17\17\17\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\340\360\360\360\360\340\340\300\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\17\37\77\377\377\377\377\377\377\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\60x|\376\177\77\37\17\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0~~~~~~~~~~~~~~~~~~~~~~~~~~" "~~\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\340\360\360\360\360\340\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\37\37\77\77\77\77\37\37\7\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\370\370\360" "\360`\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\374\377\377\377\377\177\37\7" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\377\377\377\77\7\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\377\377\377\77\17\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\360\376\377\377\377\377\77\17\3\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\374\377\377\377\377\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\14\17\37\37\77\77\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370\374\376\377\377\377\177\77\37\37\17\17\37\37\77\377\377\376\374\370\360\300\0" "\0\0\0\0\200\370\377\377\377\377\377\377\17\3\0\0\0\0\0\0\0\300\340\360\374\377\377\77\377\377\377\377" "\374\200\0\0\377\377\377\377\377\377\377\1\0\0\0\200\340\360\374\376\177\77\37\7\3\1\0\0\377\377\377\377" "\377\377\0\0\7\177\377\377\377\377\377\374\370\376\177\77\37\7\3\1\0\0\0\0\0\0\200\370\377\377\377\377" "\377\17\0\0\0\0\3\17\37\77\377\377\377\377\376\370\360\360\340\340\340\340\360\360\370\376\377\377\177\77\17\3" "\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0p\370\370\374\374~~\177\177\77\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\0`\360\370\374\376\377\377\77\77\37\37\37\17\17\17\37\37\77\77\177\377\377\376\376\374\370" "\340\200\0\0\0\0\0\0\0\1\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\301\377\377\377\377\377" "\377\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\360\370\376\377\377\177\77\37\17\7" "\1\0\0\0\0\0\0\0\0\0\0\300\340\360\370\374\376\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0" "\0\0\0\0\0\0\300\360\370\376\377\377\377\377\357\347\343\341\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\360\360\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\10\34<~\377\177\77\37\37\37\17\17\17\37\37\37\77\77\377\377\377\376\374\370\360" "\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\377\377\377\377\377\177" "\37\0\0\0\0\0\0\0\0\0\0\0\0\0>>>>>>\77\177\177\377\377\377\377\377\363\361\340\200" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\377\377\377\377\377" "\377\374\0\0\0\0 x\374\376\377\377\370\370\360\360\340\340\340\340\340\340\360\360\370\374\377\377\377\377\177\77" "\17\3\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300\300\300\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\374\376\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370\374\377\377\77\37\7\3\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\200\340\360\374\376\377\377\77\37\7\1\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0|\177\177\177\177\177\177\177~~~~~~~~~~\377\377\377\377\377\377\377~~~" "~~~\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\0\0\0\0\0\0\0\370\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\0\0\0\0\0\0\0\377\377\377\377\377\377\377\340\340\360\360\360\360\360\360\360\360\340\340\300\300\200\0\0" "\0\0\0\0\0\0\0\36\37\77\77\177\77\37\17\7\7\7\3\3\3\7\7\7\17\37\77\377\377\377\377\376" "\374\360\300\0\0\0\0\0\0\0\0\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377" "\377\377\377\0\0\10\30<~\377\377\377\377\374\370\360\360\340\340\340\340\340\340\360\360\370\374\377\377\377\377\177" "\37\17\1\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0" "\0\0\0\0\0\0\0\0\200\300\360\370\374\376\376\377\177\77\77\37\37\37\17\17\17\37\37\77\177\377\177>" "\36\14\0\0\0\0\300\374\377\377\377\377\377\77\207\301\300\340\340\340\340\340\340\340\340\340\300\300\200\200\0\0" "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\77\37\37\17\17\7\7\7\7\7\17\37\77\377\377\377\377\376" "\374\360\200\0\0\0\37\377\377\377\377\377\377\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\0\0\0\1\17\37\177\377\377\377\377\374\370\360\360\340\340\340\340\340\360\370\374\377\377\377\377\177" "\37\17\1\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\0\0\0\0\0\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\217\357\377\377\377\377\377\377\37" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\376\377\377\377\377\177\17\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\377\377\377\377\77\17\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\377\377\377\177\17\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\377\377\377\177\17\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\6\7\7\7\7\7\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370\374\376\377\377\177\77\37\37\37\17\17\37\37\77\77\377\377\377\377\376\374\360" "\300\0\0\0\0\0\0\37\177\377\377\377\377\377\360\340\200\200\0\0\0\0\0\200\300\360\377\377\377\377\377\77" "\17\0\0\0\0\0\0\0\200\300\341\363\367\377\377\377\177\77\77>>~\177\377\377\377\377\367\343\341\300\200" "\0\0\0\0\0\360\374\377\377\377\377\377\17\3\1\0\0\0\0\0\0\0\0\0\1\3\17\377\377\377\377\377" "\376\370\0\0\0\7\37\77\177\377\377\377\377\374\370\360\360\340\340\340\340\340\340\360\360\370\376\377\377\377\177\77" "\37\7\0\0\0\0\0\0\0\0\1\3\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370\374\376\377\377\177\77\37\37\17\17\17\37\37\77\177\377\377\376\376\374\360\340" "\0\0\0\0\0\0\376\377\377\377\377\377\377\203\0\0\0\0\0\0\0\0\0\0\0\0\7\377\377\377\377\377" "\377\370\0\0\0\0\1\17\77\177\377\377\377\377\374\370\360\340\340\340\340\340\360\360\370\374\376\377\377\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\1\3\3\3\7\7\7\7\7\7\7\7\3\3\1\341\377\377\377\377\377" "\377\37\0\0\0\0\0\300\360\370\374\374\374\360\360\340\340\340\340\340\340\360\360\370\374\377\377\377\177\77\17\7" "\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\340\340\340\340\300\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\77\77\177\177\177\177\77\77\17\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\340\360\360\360\360\340\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\37\37\77\77\77\77\37\37\7\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\340\360\360\360\360\340\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\37\37\77\77\77\77\37\37\7\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\360\370\370\370\370\360\360\340\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\377\377\377\377\377\377\177\37\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\30<>\177\77\37\17\7\3\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\340\340\360\360\370" "\370\374\374\376\0\0\0\200\200\300\300\340\340\360\360\370\370\374\374\376\376\177\177\77\77\37\37\17\17\7\7\3" "\3\1\1\0~\177\377\377\377\377\377\377\367\347\343\303\201\201\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\1\1\3\3\7\7\17\37\37\77\77\177\177\376\376\374\374\370\370\360\360\340\340\300\200" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\17\17\37\77\77" "\177\177\377\376\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374" "\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0~~~~~~~~~~~~~~~~~~~~~~~~~~~~" "~~~\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\376\374\374\370\370\360\360\340\340\300\300\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\1\1\3\3\3\7\7\17\17\37\37\77\77\177\177\376\376\374\374\370\370\360\360\340\340\300\300\200" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\201\201\303\303\347\347\377\377\377\377\377" "\377\377\177~\0\0\200\200\300\300\340\340\360\360\370\370\374\376\376\377\177\177\77\37\37\17\17\7\7\3\1\1" "\0\0\0\0\377\377\177\77\77\37\37\17\17\7\3\3\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\300\340\340\360\360\360\370\370\370\370\370\370\370\370\360\360\340\340\300\200\0\0" "\0\0\0\0\0\14\36\77\177\377\177\77\37\17\7\3\3\3\1\1\1\3\3\7\17\37\377\377\377\377\377\374" "\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370\377\377\377\377\377\177" "\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\370\376\377\377\377\377\77\37\17\7\3\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\17\17\17\17\17\17\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\370\374\374\374\374\374\374\370\360\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\7\7\7\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0" "\0\0\0\0\0\0\200\340\360\370\374\376\376\377\177\77\37\37\37\17\17\17\37\37\37\37\77\77\177\377\376\374" "\370\340\300\0\370\376\377\377\377\177\17\3\1\0\0\0\200\300\340\360\360\370\370\370\374\374\374\374\374\375\377\377" "\377\377\377\376\377\377\377\377\377\0\0\0\0\0\374\377\377\377\377\377\217\3\1\1\0\0\0\0\0\300\377\377" "\377\377\377\377\77\377\377\377\377\376\340\300\0\0\1\7\37\77\77\177\177\377\376\376\374\374\376~\177\77\177\177" "\177\177\177\177\0\1\3\17\37\77\177\377\377\376\374\370\370\360\360\340\340\340\340\340\340\340\340\340\360\360\370\370" "\340\300\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\7\7\7\7\7\7\7\7\7\7\7\7\3\3\3" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\340\200\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\376\377\377\377\377\374\360\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\360\376\377\377\377\177\17\37\377\377\377\377\376\360\300\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\360\376\377\377\377\377\37\3\0\0\0\0\7\37\377\377\377\377\376\370\300\0\0" "\0\0\0\0\0\200\340\374\377\377\377\377\177\177~~~~~~~~~~\177\177\377\377\377\377\376\370" "\300\0\0\0\374\377\377\377\377\377\37\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\77\377\377\377" "\377\377\370\340\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7" "\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17\17\37\37\37\77\177\377\377\377\376\376\374" "\360\300\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\200\200\200\300\340\360\377\377\377\377\377" "\177\37\0\0\377\377\377\377\377\377\377\77\77\77\77\77\77\77\77\77\77\77\177\177\177\377\377\377\377\363\361\340" "\300\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\377\377\377\377" "\377\377\374\0\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\340\340\340\360\360\360\370\374\377\377\377\377\177" "\77\17\3\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0" "\0\0\0\0\0\0\0\300\340\360\370\374\376\377\377\177\77\77\37\37\17\17\17\37\37\37\77\177\377\377\376\376" "\374\370\360\300\200\370\377\377\377\377\377\377\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7" "\7\3\3\1\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\7\177\377\377\377\377\377\377\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\1\7\37\77\177\377\377\377\376\374\370\360\360\340\340\340\340\340\340\340\360\370\370\374\377\377" "\177~\34\14\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\17\17\17\17\17\17\17\37\37\37\37\77\177\377\377\377\376\374\370\360" "\340\200\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\177\377\377\377" "\377\377\376\340\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\377" "\377\377\177\7\0\377\377\377\377\377\377\377\340\340\340\340\340\340\340\360\360\360\360\370\374\376\377\377\377\177\77\17" "\7\1\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\0\0\0\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\17\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\340\340\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\0\0\0\0\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\17\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\377\377\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\0\0" "\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0" "\0\0\0\0\0\0\300\340\360\370\374\376\377\377\177\77\77\37\37\37\17\17\17\37\37\37\77\177\377\377\376\374" "\370\360`\0\370\377\377\377\377\377\377\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\3" "\1\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360" "\360\360\360\0\177\377\377\377\377\377\377\340\200\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\377\377\377" "\377\377\377\0\0\3\7\37\77\177\377\377\377\376\374\370\360\360\340\340\340\340\340\340\340\340\360\360\370\377\377\377" "\377\377\177\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300" "\300\300\300\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\0\377\377\377\377\377\377\377\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\77\377\377\377\377" "\377\377\377\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\0\0\0\0\0\0\0\0\17\17\17\17\17\17\17\17\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\340\340\340\340\340\340\340\340\340\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\340" "\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\300\0\0\0\0\0\0\0\0\0\0\17\17\17\17\17\17\17\17\377\377\377\377\377\377\377\17\17\17\17" "\17\17\17\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0" "\0\0\0\0 p\370\376\377\374\370\360\360\340\340\340\340\340\360\370\376\377\377\377\377\77\37\3\0\0\0\0" "\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300" "\300\300\300@\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\200\300\360\370\374\376\377\377\177\77\37\17" "\7\1\0\0\377\377\377\377\377\377\377\0\0\200\300\360\370\374\376\377\377\177\77\17\7\3\1\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377~\77\37\77\377\377\377\377\371\360\340\200\0\0\0\0\0\0\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\1\7\17\77\177\377\377\377\376\370\360\340\200\0\0\0" "\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\1\3\17\37\77\377\377\377\377\376\370" "\360\300\200\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7\7" "\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\340\340\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300" "\300\300\300\300\377\377\377\377\377\377\377\376\370\340\200\0\0\0\0\0\0\0\0\0\0\0\300\360\374\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\37\177\377\377\376\370\340\0\0\0\0\300\360\374\377\377\177\37\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\0\0\1\7\37\177\377\377\374\374\377\377\177\37\7\1\0\0\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\1\7\7\7\7\1\0\0\0\0\0\0\377\377\377" "\377\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377" "\377\377\377\377\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7" "\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300" "\300\300\300\300\377\377\377\377\377\377\377\377\376\370\340\300\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\7\37\77\377\377\377\374\360\340\200\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\3\17\77\177\377\377\376\370\340\300\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\1\7\37\177\377\377\377\374\360\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\377\377\377" "\377\377\377\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\0\300\340\370\374\374\376\377\377\177\77\37\37\37\17\17\17\37\37\77\77\177\377\377\376\374\374" "\370\340\300\0\370\377\377\377\377\377\377\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\77\377\377" "\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\377\377\177\377\377\377\377\377\376\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\377\377" "\377\377\377\377\0\1\7\37\77\177\377\377\377\376\374\370\360\340\340\340\340\340\340\340\360\370\370\376\377\377\377\177" "\77\37\7\1\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17\17\37\37\37\77\177\377\377\377\376\374" "\370\360\300\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\301\377\377\377\377" "\377\377\177\0\0\377\377\377\377\377\377\377\374\374\374\374\374\374\374\374\374\374\374\376\376\377\177\177\177\77\37\17" "\7\3\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\0\300\340\360\374\374\376\377\377\177\77\37\37\17\17\17\37\37\37\77\77\177\377\377\376\374\374" "\360\340\300\0\370\377\377\377\377\377\377\17\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\77\377\377" "\377\377\377\376\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377" "\377\377\377\377\377\377\377\377\377\377\376\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\377\377" "\377\377\377\377\0\3\17\77\177\377\377\377\377\374\370\360\340\340\340\300\300\300\340\340\340\360\370\376\377\377\177\77" "\37\7\3\0\0\0\0\0\0\0\1\3\3\7\7\17\17\377\377\377\377\377\377\317\207\207\7\3\1\0\200\200" "\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\37\37\77\77\77\77\77\77\77\77\77" "\77\77\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17\17\37\37\37\77\177\377\377\377\376\374" "\370\340\200\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\341\377\377\377\377" "\377\377\77\0\0\377\377\377\377\377\377\377\374\374\374\374\374\374\374\374\374\374\374\376\376\377\177\177\77\37\37\17" "\3\1\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\1\7\17\77\377\377\377\377\374\360\340\200\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\377\377\376" "\370\340\200\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\7" "\7\7\7\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0" "\0\0\0\0\0\0\200\340\370\374\376\377\377\377\77\77\37\37\37\17\17\17\37\37\37\77\177\377\377\376\376\374" "\70\20\0\0\0\0\37\177\377\377\377\377\377\370\340\300\200\200\0\0\0\0\0\0\0\0\0\0\3\3\1\0" "\0\0\0\0\0\0\0\0\1\3\3\7\17\17\37\37\77\77\177\177~\376\376\374\374\370\370\360\360\340\340\300" "\200\0\0\0\0\0\0\0\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\3\7\17\377\377\377\377" "\377\377\374\0\0\70~\377\377\377\376\374\370\360\360\340\340\340\340\340\340\340\340\360\360\370\374\376\377\377\377\177" "\77\37\7\0\0\0\0\0\1\1\3\3\3\7\7\7\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\300\300\17\17\17\17\17\17\17\17\17\17\17\17\377\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17" "\17\17\17\17\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300" "\300\300\300\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\377\377\377\377\377\377\377\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377" "\377\377\377\0\1\17\77\177\377\377\377\377\376\370\360\360\340\340\340\340\340\340\340\360\360\370\376\377\377\377\377\177" "\37\17\1\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300" "\300\300\300\300\37\377\377\377\377\377\376\360\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\376\377\377" "\377\377\77\7\0\0\3\37\377\377\377\377\377\374\340\0\0\0\0\0\0\0\0\0\0\340\374\377\377\377\377\177" "\17\1\0\0\0\0\0\0\0\7\77\377\377\377\377\377\370\300\0\0\0\0\200\360\377\377\377\377\177\17\1\0" "\0\0\0\0\0\0\0\0\0\0\0\1\7\77\377\377\377\377\376\360\340\374\377\377\377\377\37\3\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\17\177\377\377\377\377\377\377\77\7\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\7\7\1\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200" "\300\300\300\300\377\377\377\377\377\340\0\0\0\0\0\0\0\300\374\376\376\376\360\200\0\0\0\0\0\0\300\377" "\377\377\377\377\177\377\377\377\377\377\360\0\0\0\0\300\374\377\377\377\377\377\377\377\370\200\0\0\0\300\377\377" "\377\377\377\17\0\37\377\377\377\377\377\374\0\340\376\377\377\377\37\3\7\77\377\377\377\377\370\300\340\377\377\377" "\377\377\3\0\0\0\7\377\377\377\377\377\377\377\377\377\37\1\0\0\0\0\3\77\377\377\377\377\377\377\377\377" "\77\0\0\0\0\0\0\1\177\377\377\377\377\377\37\1\0\0\0\0\0\0\0\0\3\77\377\377\377\377\377\17" "\0\0\0\0\0\0\0\0\0\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\7\3\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\300\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300" "\300\300\300\0\0\3\17\77\177\377\377\377\376\370\340\200\0\0\0\0\0\0\0\200\340\370\376\377\377\377\177\37" "\7\3\0\0\0\0\0\0\0\1\7\37\77\377\377\377\377\374\360\300\360\370\376\377\377\377\177\37\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\303\377\377\377\377\377\377\377\377\377\303\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\200\340\360\374\377\377\377\377\77\17\3\17\77\177\377\377\377\376\370\340\300\0\0" "\0\0\0\0\0\300\340\370\376\377\377\377\177\77\17\3\0\0\0\0\0\0\0\1\7\37\77\377\377\377\377\374" "\370\340\200\0\7\7\7\7\7\7\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\7" "\7\7\7\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\300\300\300\300\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300" "\300\300\300\300\7\37\177\377\377\377\377\374\360\300\0\0\0\0\0\0\0\0\0\0\0\300\360\376\377\377\377\377" "\77\17\3\0\0\0\0\1\7\37\177\377\377\377\377\374\360\300\0\0\0\200\360\374\377\377\377\377\77\17\3\0" "\0\0\0\0\0\0\0\0\0\0\0\1\7\37\77\377\377\377\377\374\376\377\377\377\177\17\3\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\300\0\0\0\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\317\357\377\377\377\377\377\77" "\37\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\370\376\377\377\377\177\37\7\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\370\376\377\377\377\177\37\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\360\370\376\377\377\377\177\37\17\3\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\300\360\370\376\377\377\377\377\377\357\343\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\340\360\360\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374" "\374\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\370\370\370\370\370\370\370\370\370\370\370\370\370\370\370\370" "\370\0\0\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1" "\1\0\0\0\0\20p\370\370\374\374\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\3\17\77\377\377\377\377\376\370\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\377\377\376\370\340\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\37\177\377\377\377\377\374\360\300\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\177\377\377\377\377\374\360\300\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\377\377\377\377\377\370\340" "\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\37\37\17\17" "\7\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\370\370\370\370\370\370\370\370\370\370\370\370\370\370\370\370\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\300\300\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\370\376\377\377\177\377\377\377\374\370\340\200\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\360\370\376\377\377\177\37\17\3\1\0\0\3\17\77\177\377\377\377\374\360\300\200" "\0\0\0\0\0\0\0\0\1\1\3\3\3\1\0\0\0\0\0\0\0\0\0\0\0\1\7\3\3\1\1\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\340\340\340\340\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\7\7\0\0\0\0\0\0\374\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\374\360\340\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\3\17\37\177\377\377\377\377\377\374\300\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\17\77\177\177\77\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0`\340\360\370\374\374\374\376~~~~~~~~~\376\376\374\374\374\370\360\340" "\300\0\0\0\0\0\0\0\0\1\203\203\301\300\300\300\340\340\340\340\340\340\340\340\340\340\343\377\377\377\377\377" "\377\376\0\0\300\360\374\376\377\377\377\177\37\37\17\17\17\17\17\7\7\7\7\7\7\7\207\377\377\377\377\377" "\377\377\0\0\7\37\177\377\377\377\377\376\370\370\360\360\360\360\360\360\360\370\370\374\376\377\177\377\377\377\377\377" "\377\377\0\0\0\0\0\0\0\1\1\3\3\3\3\3\3\3\3\3\3\3\1\1\0\0\0\3\3\3\3\3" "\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\370\370\370\370\370\370\370\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\340\360\360\370\374\374\374\374\374\374\374\374\374\374\370\370\360\360\340\300" "\0\0\0\0\0\377\377\377\377\377\377\377\37\7\3\1\0\0\0\0\0\0\0\1\3\7\17\177\377\377\377\377" "\377\376\360\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377" "\377\377\377\0\0\377\377\377\377\377\377\377\377\374\370\360\340\340\340\340\340\340\340\360\360\370\376\377\377\377\177\77" "\37\7\0\0\0\7\7\7\7\7\3\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\200\300\340\360\370\370\374\374\376\376~~~~~~~~\376\376\374\374\374\370" "\360\340\300\200\0\340\374\377\377\377\377\377\177\17\3\1\0\0\0\0\0\0\0\0\0\0\0\0\1\3\37\37" "\17\3\1\0\0\77\377\377\377\377\377\377\360\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\1\7\17\37\77\177\377\377\377\376\374\370\370\360\360\360\360\360\360\360\370\370\374\374\376\377" "~<\70\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\3\3\3\3\3\3\3\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\370\370\370\370\370" "\370\370\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\0\0\200\300\340\360\370\370\374\374\374\374\374\374\374\374\374\374\370\370\360\340\377\377\377\377\377" "\377\377\0\0\300\374\377\377\377\377\377\177\17\3\1\1\0\0\0\0\0\0\1\1\3\7\37\377\377\377\377\377" "\377\377\0\0\177\377\377\377\377\377\377\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377\377" "\377\377\0\0\0\7\37\77\177\377\377\377\376\374\370\360\340\340\340\340\340\340\360\360\370\374\377\377\377\377\377\377" "\377\377\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\3\1\1\0\7\7\7\7\7" "\7\7\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\360\370\370\374\374\376\376~~~~~~~\376\376\374\374\374\370\360\340\300" "\0\0\0\0\340\374\377\377\377\377\377\357\343\341\340\340\340\340\340\340\340\340\340\340\340\341\343\377\377\377\377\377" "\377\370\0\0\77\377\377\377\377\377\377\307\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\1\7\37\77\177\377\377\377\376\374\370\370\360\360\360\360\360\360\360\360\370\370\374\376\377~<" "\30\0\0\0\0\0\0\0\0\0\0\0\1\1\3\3\3\3\3\3\3\3\3\3\3\3\1\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\340\340\360\360\370\370\374\374\374\374\374\374\374\374\370\370" "\370\360\360\340\0\0\0\0\0\0\0\0\360\376\377\377\377\377\377\37\7\3\1\1\0\0\0\1\1\1\3\3" "\17\37\77\17\0\360\360\360\360\360\360\360\377\377\377\377\377\377\377\360\360\360\360\360\360\360\360\360\360\360\0\0" "\0\0\0\0\0\3\3\3\3\3\3\3\377\377\377\377\377\377\377\3\3\3\3\3\3\3\3\3\3\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\340\360\360\370\374\374\376~>>>>>>>~\376\374\374\370\370\374\374~~~" "~~~~~\377\377\377\377\377\377\341\200\0\0\0\0\0\0\0\0\0\200\341\377\377\377\377\377~\0\0" "\0\0\0\0\0\1\3\307\357\377\377\377\377\177\177~~~~~\177\177\77\77\37\37\17\7\3\0\0\0" "\0\0\0\0\0\0\217\337\377\377\377\377\376\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\370\370\370\360" "\340\300\0\0\376\377\377\377\377\377\347\301\200\200\200\200\0\0\0\0\0\0\200\200\200\300\301\341\377\377\377\377" "\377\377\77\0\1\3\7\17\17\37\37\37\37\77\77\77\77\77\77\77\77\77\77\77\37\37\37\37\17\17\7\3" "\1\0\0\0\0\0\370\370\370\370\370\370\370\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\377\377\377\377\377\377\377\300\340\360\360\370\374\374\374\374\374\374\374\374\374\374\370\370\360\340" "\200\0\0\0\0\0\377\377\377\377\377\377\377\77\17\7\3\1\1\0\0\0\0\0\1\3\17\377\377\377\377\377" "\377\376\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\360\370\370\370\370\360\340\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\17\17\17\7\7\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\340\340\340\340\340\340\340\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\0" "\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\360\370\370\370\370\360\340\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\17\17\17\7\7\3\0\0" "\0\0\0\0\0\0\0\0\0\0\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\300\340\360\340\300\200\0\0\0\0\0\0\0\200\300\340\377\377\377\377\377\377\77\0\0\0" "\0\0\0\0\2\7\17\37\37\77\77\77\177\177\177~~\177\177\77\77\77\37\37\17\7\3\0\0\0\0\0" "\0\0\0\0\0\370\370\370\370\370\370\370\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\374\374\374|<" "\34\14\4\0\0\377\377\377\377\377\377\377\0\200\300\340\360\370\374\376\377\177\77\37\17\7\3\1\1\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\77\37\17\7\17\37\177\377\377\377\376\374\360\340\300\200\0\0\0\0" "\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\1\3\17\37\77\177\377\377\377\376\370\360" "\340\300\200\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\7\7" "\7\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\370\370\370\370\370\370\370\370\370\370\370\370\370\370\370\370\370\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\1\1\1\1\1\1\1\1\1\1\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\340\340\340\340\340\340\340\340\340\340\377\377\377\377\377\377\377\340\340\340\340\340\340\340\340\340" "\0\0\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\376\376\376\376\376\376\374\374~~~\376\376\376\376\374\370\360\370\374\374~~~\376\376\376\376" "\374\374\360\300\377\377\377\377\377\377\3\0\0\0\0\0\377\377\377\377\377\377\377\1\0\0\0\0\0\377\377\377" "\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\377\377\377" "\377\377\377\377\377\377\377\377\377\377\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\377\377\377" "\377\377\377\377\3\3\3\3\3\3\0\0\0\0\0\0\3\3\3\3\3\3\3\0\0\0\0\0\0\3\3\3" "\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\376\376\376\376\376\376\376\340\360\370\370\374\376~~~~~\376\376\376\376\374\374\370\360" "\300\0\0\0\0\0\377\377\377\377\377\377\377\37\7\3\1\0\0\0\0\0\0\0\0\1\7\377\377\377\377\377" "\377\377\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\0\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\3\3\3\3" "\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\200\300\340\360\370\370\374\374\376\376~~~~~~\376\376\376\374\374\370\370\360\340" "\300\0\0\0\340\374\376\377\377\377\377\177\17\3\1\0\0\0\0\0\0\0\0\0\0\1\3\17\177\377\377\377" "\377\377\374\340\77\377\377\377\377\377\377\360\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\377\377\377" "\377\377\377\77\0\1\7\17\37\77\177\377\377\376\374\370\370\360\360\360\360\360\360\360\370\374\376\377\377\377\177\77" "\37\7\1\0\0\0\0\0\0\0\0\0\1\1\1\3\3\3\3\3\3\3\3\3\3\3\1\1\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\376\376\376\376\376\376\376\360\370\370\374|~~~~~~\376\376\376\376\374\374\370\360\340" "\300\200\0\0\0\377\377\377\377\377\377\377\17\3\1\0\0\0\0\0\0\0\0\0\0\1\3\7\177\377\377\377" "\377\377\376\360\0\377\377\377\377\377\377\377\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\377\377\377" "\377\377\377\77\0\377\377\377\377\377\377\377\177\376\374\370\360\360\360\360\360\360\360\360\370\374\376\377\377\377\177\77" "\37\7\1\0\0\377\377\377\377\377\377\377\0\0\1\1\3\3\3\3\3\3\3\3\3\3\1\1\0\0\0\0" "\0\0\0\0\0\77\77\77\77\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\340\360\370\370\374\374\376\376~~~~~~~\376\374\374\370\370\376\376\376\376" "\376\376\376\0\340\374\377\377\377\377\377\77\7\1\1\0\0\0\0\0\0\0\0\0\0\1\3\77\377\377\377\377" "\377\377\377\0\77\377\377\377\377\377\377\360\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\377\377\377\377" "\377\377\377\0\0\1\7\37\77\177\377\377\377\376\374\370\370\360\360\360\360\360\360\370\370\374\377\177\377\377\377\377" "\377\377\377\0\0\0\0\0\0\0\0\0\1\3\3\3\3\3\3\3\3\3\3\3\1\0\0\0\377\377\377\377" "\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\77\77\77\77" "\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\376\376\376\376\376\376\376\340\360\370\370\374\374\376~~~~~~~\376\376\374" "\374\370\370\60\0\0\0\0\377\377\377\377\377\377\377\177\37\7\3\1\0\0\0\0\0\0\0\0\0\0\1\3" "\7\3\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\300\340\360\360\370\370\374\374\374\374\374\374\376\374\374\374\374\374\374\370\370\360\360\340" "\300\200\0\0\0\0\0\37\177\377\377\377\377\377\363\341\300\300\300\200\200\200\0\0\1\1\3\7\17\37\37\7" "\3\0\0\0\0\0\0\0\200\0\1\3\3\7\7\7\17\17\17\37\37\37\77\77\77\177\376\376\374\374\370\360" "\340\300\0\0\0\60|\376\377\377\374\374\370\360\360\360\340\340\340\340\340\340\340\340\360\360\370\377\377\377\377\177" "\77\37\0\0\0\0\0\0\0\1\3\3\3\7\7\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\376\376\376\376\377\377\17\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\374\374\374\374\374\374\374\374\374\377\377\377\377\377\377\374\374\374\374\374\374\374\374\374\374\374" "\0\0\0\0\0\0\0\0\0\0\0\0\0\370\377\377\377\377\377\377\3\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\17\177\377\377\377\377\377\376\360\360\340\340\340\340\340\360\360\370\370" "\374\374\340\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\3\3\3" "\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\374\374\374\374\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\374\374" "\374\374\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377" "\377\377\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377\377" "\377\377\0\0\0\3\37\177\377\377\377\377\377\374\370\360\340\340\340\340\340\340\360\360\370\376\377\377\377\377\377\377" "\377\377\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\3\1\1\0\7\7\7\7\7" "\7\7\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\34\374\374\374\374\374\374\354\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\374\374\374" "\374\374<\0\0\0\3\37\177\377\377\377\377\374\360\200\0\0\0\0\0\0\0\0\0\300\370\377\377\377\377\77" "\17\1\0\0\0\0\0\0\0\1\17\77\377\377\377\377\376\360\300\0\0\200\340\374\377\377\377\177\37\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\1\7\37\377\377\377\377\376\376\377\377\377\77\17\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\7\7\7\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\374\374\374\374\374\0\0\0\0\0\0\0\0\200\340\340\340\340\340\0\0\0\0\0\0\0\0\374" "\374\374\374\374\77\377\377\377\377\377\340\0\0\0\0\200\370\377\377\377\377\377\377\377\370\200\0\0\0\0\360\377" "\377\377\377\377\0\7\177\377\377\377\377\376\300\200\370\377\377\377\177\7\1\17\377\377\377\377\374\340\0\370\377\377" "\377\377\177\1\0\0\0\17\377\377\377\377\377\377\377\377\77\7\0\0\0\0\0\7\177\377\377\377\376\377\377\377" "\377\17\0\0\0\0\0\0\1\7\7\7\7\7\7\3\0\0\0\0\0\0\0\0\0\3\7\7\7\7\7\7" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\4\34<\374\374\374\374\374\360\340\300\0\0\0\0\0\0\0\0\0\300\340\370\374\374\374\374|" "\34\14\0\0\0\0\0\0\1\3\17\37\77\377\377\377\376\370\360\300\360\370\376\377\377\177\77\17\7\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\300\340\361\377\377\377\377\177\377\377\377\377\370\340\300\200\0\0\0\0" "\0\0\0\0\0\0\200\340\360\374\376\377\377\377\77\37\7\3\0\0\0\3\7\37\77\177\377\377\376\374\370\340" "\300\200\0\0\6\7\7\7\7\7\7\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\1\3\7\7\7\7" "\7\7\6\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\34|\374\374\374\374\374\374\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\374\374\374\374" "\374\374<\4\0\0\1\17\77\377\377\377\377\376\360\300\0\0\0\0\0\0\0\0\200\360\374\377\377\377\377\77" "\17\1\0\0\0\0\0\0\0\0\7\37\177\377\377\377\376\370\340\0\0\200\340\374\377\377\377\377\37\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\77\377\377\377\377\374\377\377\377\177\37\3\0\0\0\0\0" "\0\0\0\0\200\340\300\0\0\0\0\0\0\200\300\340\374\377\377\377\377\177\17\3\0\0\0\0\0\0\0\0" "\0\0\0\0\77\77\77\177\177~~\177\177\77\77\77\37\37\17\7\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374\374" "|\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\374\377\377\177\77\37\17\7\1\0" "\0\0\0\0\0\0\0\0\0\0\200\300\340\360\370\376\377\377\377\77\37\17\7\3\1\0\0\0\0\0\0\0" "\0\0\0\0\300\340\360\370\376\377\377\377\377\377\357\347\343\341\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\340\360\360\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\340\340\360\360\360\360\360\360\360\360\360\360\360" "\0\0\0\0\0\0\0\0\0\0\0\0\340\374\377\377\377\377\377\77\17\7\7\3\3\3\3\3\3\3\3\3" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\340\340\340\340\340\360\370\374\377\377\377\177\77\17\3\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\7\7\7\7\7\17\17\77\377\377\377\376\374\370\300\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\177\377\377\377\377\377\377\360\300\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\3\7\17\37\77\77\77\177\177\177\177~~~~~~~~" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\360\360\360\360\360\360\360\360\360\360\360\340\340\300\300\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\3\3\3\3\3\3\3\3\7\7\17\37\377\377\377\377\377\376\360\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\3\17\37\177\177\377\377\376\370\360\360\340" "\340\340\340\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\374\376\377\377\377\177\37\17\7\7" "\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\377\377\377\377\377\377\377\0\0\0\0\0" "\0\0\0\0\0\0\0\0~~~~~~~~\177\177\177\77\77\77\37\17\7\3\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0`\360\370\370\374\374\376\376~~~~\376\376\376\374\374\370\370\360\360\340\340\340\360\360\370\374" "\376\374|\70\0\0\1\1\3\1\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\3\3\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: -FreeType-Inconsolata LGC-Bold-R-Normal--62-620-72-72-P-301-ISO10646-1 Copyright: Original Roman version created by Raph Levien using his own tools and FontForge. Copyright 2006 Raph Levien. Hellenisation of the Roman font, by Dimosthenis Kaponis, using FontForge. Hellenic glyphs Copyright 2010-2012 Dimosthenis Kaponis. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Cyrillic glyphs added by MihailJP, using FontForge. Cyrillic glyphs Copyright 2012 MihailJP. Released under the SIL Open Font License, http://scripts.sil.org/OFL. Emboldened by MihailJP. Some glyphs modified by Greg Omelaenko, using FontForge. Glyphs: 18/658 BBX Build Mode: 3 */ const uint8_t u8x8_font_inb46_4x8_n[6916] U8X8_FONT_SECTION("u8x8_font_inb46_4x8_n") = " :\4\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\340\340\340\340\340\340 \0\0\0\0\0\0\0\0" "\0\0\0\0\0\340\360\360\340\340\300\300\200\200\0\0\17\377\377\377\377\377\177\0\0\0\200\200\300\300\340\340" "\360\340\200\0\7\7\7\7\17\17\17\17\37\237\337\377\376\377\377\377\377\377\376\377\337\237\37\17\17\17\17\7" "\7\7\7\4\0\0\0\300\340\360\370\374\376\377\377\77\37\7\3\1\3\7\37\77\377\377\377\374\370\360\340\300" "\0\0\0\0\0\0\0\1\1\3\7\7\3\1\0\0\0\0\0\0\0\0\0\0\0\1\7\7\7\3\1\1" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\340\340\340\340\340\340\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\77\77\77\77\77\77\77\77\77\77\77\77\77\377\377\377\377\377\377\77\77\77\77\77\77\77\77\77" "\77\77\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\17\17\17\17\17\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\340\360\360\360\360\340\340\300\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\17\37\77\377\377\377\377\377\377\77\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\60x|\376\177\77\37\17\7\3\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0~~~~~~~~~~~~~~~~~~~~~~~~~~" "~~\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\340\360\360\360\360\340\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\37\37\77\77\77\77\37\37\7\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\374\370\370\360" "\360`\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\360\374\377\377\377\377\177\37\7" "\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\377\377\377\77\7\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\370\376\377\377\377\377\77\17\3\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\360\376\377\377\377\377\77\17\3\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\374\377\377\377\377\177\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\14\17\37\37\77\77\37\7\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370\374\376\377\377\377\177\77\37\37\17\17\37\37\77\377\377\376\374\370\360\300\0" "\0\0\0\0\200\370\377\377\377\377\377\377\17\3\0\0\0\0\0\0\0\300\340\360\374\377\377\77\377\377\377\377" "\374\200\0\0\377\377\377\377\377\377\377\1\0\0\0\200\340\360\374\376\177\77\37\7\3\1\0\0\377\377\377\377" "\377\377\0\0\7\177\377\377\377\377\377\374\370\376\177\77\37\7\3\1\0\0\0\0\0\0\200\370\377\377\377\377" "\377\17\0\0\0\0\3\17\37\77\377\377\377\377\376\370\360\360\340\340\340\340\360\360\370\376\377\377\177\77\17\3" "\0\0\0\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0p\370\370\374\374~~\177\177\77\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\1\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\0`\360\370\374\376\377\377\77\77\37\37\37\17\17\17\37\37\77\77\177\377\377\376\376\374\370" "\340\200\0\0\0\0\0\0\0\1\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\301\377\377\377\377\377" "\377\77\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\340\360\370\376\377\377\177\77\37\17\7" "\1\0\0\0\0\0\0\0\0\0\0\300\340\360\370\374\376\377\377\177\77\37\17\7\3\1\0\0\0\0\0\0" "\0\0\0\0\0\0\300\360\370\376\377\377\377\377\357\347\343\341\340\340\340\340\340\340\340\340\340\340\340\340\340\340" "\360\360\0\0\0\0\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7\7" "\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\10\34<~\377\177\77\37\37\37\17\17\17\37\37\37\77\77\377\377\377\376\374\370\360" "\300\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\360\377\377\377\377\377\177" "\37\0\0\0\0\0\0\0\0\0\0\0\0\0>>>>>>\77\177\177\377\377\377\377\377\363\361\340\200" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\7\377\377\377\377\377" "\377\374\0\0\0\0 x\374\376\377\377\370\370\360\360\340\340\340\340\340\340\360\360\370\374\377\377\377\377\177\77" "\17\3\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\300\300\300\300\300\300\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\360\374\376\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\340\370\374\377\377\77\37\7\3\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\200\340\360\374\376\377\377\77\37\7\1\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0|\177\177\177\177\177\177\177~~~~~~~~~~\377\377\377\377\377\377\377~~~" "~~~\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377\377\377\377\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\7\7\7\7\7\7\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\0\0\0\0\0\0\0\370\377\377\377\377\377\377\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17" "\17\0\0\0\0\0\0\0\377\377\377\377\377\377\377\340\340\360\360\360\360\360\360\360\360\340\340\300\300\200\0\0" "\0\0\0\0\0\0\0\36\37\77\77\177\77\37\17\7\7\7\3\3\3\7\7\7\17\37\77\377\377\377\377\376" "\374\360\300\0\0\0\0\0\0\0\0\200\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\377\377\377\377" "\377\377\377\0\0\10\30<~\377\377\377\377\374\370\360\360\340\340\340\340\340\340\360\360\370\374\377\377\377\377\177" "\37\17\1\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\7\7\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0" "\0\0\0\0\0\0\0\0\200\300\360\370\374\376\376\377\177\77\77\37\37\37\17\17\17\37\37\77\177\377\177>" "\36\14\0\0\0\0\300\374\377\377\377\377\377\77\207\301\300\340\340\340\340\340\340\340\340\340\300\300\200\200\0\0" "\0\0\0\0\0\0\377\377\377\377\377\377\377\377\77\37\37\17\17\7\7\7\7\7\17\37\77\377\377\377\377\376" "\374\360\200\0\0\0\37\377\377\377\377\377\377\360\0\0\0\0\0\0\0\0\0\0\0\0\0\0\377\377\377\377" "\377\377\377\0\0\0\0\1\17\37\177\377\377\377\377\374\370\360\360\340\340\340\340\340\360\370\374\377\377\377\377\177" "\37\17\1\0\0\0\0\0\0\0\0\0\1\1\3\3\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300\300" "\300\0\0\0\0\0\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\17\217\357\377\377\377\377\377\377\37" "\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\360\376\377\377\377\377\177\17\3\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\376\377\377\377\377\77\17\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\377\377\377\177\17\1\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\300\370\377\377\377\377\377\177\17\1\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\6\7\7\7\7\7\7\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370\374\376\377\377\177\77\37\37\37\17\17\37\37\77\77\377\377\377\377\376\374\360" "\300\0\0\0\0\0\0\37\177\377\377\377\377\377\360\340\200\200\0\0\0\0\0\200\300\360\377\377\377\377\377\77" "\17\0\0\0\0\0\0\0\200\300\341\363\367\377\377\377\177\77\77>>~\177\377\377\377\377\367\343\341\300\200" "\0\0\0\0\0\360\374\377\377\377\377\377\17\3\1\0\0\0\0\0\0\0\0\0\1\3\17\377\377\377\377\377" "\376\370\0\0\0\7\37\77\177\377\377\377\377\374\370\360\360\340\340\340\340\340\340\360\360\370\376\377\377\377\177\77" "\37\7\0\0\0\0\0\0\0\0\1\3\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\3\1\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\200\300\300\300\300\300\300\300\200\200\200\0\0\0\0\0\0" "\0\0\0\0\0\0\0\300\360\370\374\376\377\377\177\77\37\37\17\17\17\37\37\77\177\377\377\376\376\374\360\340" "\0\0\0\0\0\0\376\377\377\377\377\377\377\203\0\0\0\0\0\0\0\0\0\0\0\0\7\377\377\377\377\377" "\377\370\0\0\0\0\1\17\77\177\377\377\377\377\374\370\360\340\340\340\340\340\360\360\370\374\376\377\377\377\377\377" "\377\377\0\0\0\0\0\0\0\0\0\1\3\3\3\7\7\7\7\7\7\7\7\3\3\1\341\377\377\377\377\377" "\377\37\0\0\0\0\0\300\360\370\374\374\374\360\360\340\340\340\340\340\340\360\360\370\374\377\377\377\177\77\17\7" "\0\0\0\0\0\0\0\0\0\1\3\3\7\7\7\7\7\7\7\7\7\7\7\3\3\1\1\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\300\300\340\340\340\340\300\300\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\17\77\77\177\177\177\177\77\77\17\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\200\340\340\360\360\360\360\340\340\200\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\37\37\77\77\77\77\37\37\7\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0"; /* Fontname: -FreeType-Press Start 2P-Medium-R-Normal--8-80-72-72-P-69-ISO10646-1 Copyright: (c) 2011 Cody Glyphs: 192/556 BBX Build Mode: 3 */ const uint8_t u8x8_font_pressstart2p_f[1796] U8X8_FONT_SECTION("u8x8_font_pressstart2p_f") = " \377\1\1\0\0\0\0\0\0\0\0\0\0__\7\0\0\0\0\7\7\0\7\7\0\0\42\177\177\42" "\177\177\42\0$.*\177*:\20\0F%\23\10dR\61\0\66\177I_v`P\0\0\0\7\7" "\0\0\0\0\0\0\34>cA\0\0\0Ac>\34\0\0\0\10*>\34>*\10\0\0\10\10>" ">\10\10\0\0\200\340`\0\0\0\0\0\10\10\10\10\10\10\0\0\0``\0\0\0\0@ \20\10" "\4\2\1\0\34>aAC>\34\0\0@B\177\177@@\0bsyY]OF\0 aIM" "O{\61\0\30\34\26\23\177\177\20\0'gEEE}\70\0<~KIIy\60\0\3\3qy" "\15\7\3\0\66OMYYv\60\0\6OIIi\77\36\0\0\0\66\66\0\0\0\0\0@v\66" "\0\0\0\0\0\10\34\66cA\0\0\24\24\24\24\24\24\24\0\0Ac\66\34\10\0\0\6\7SS" "[\17\6\0>A]U]Q\36\0|~\23\21\23~|\0\177\177III\177\66\0\34>cA" "Ac\42\0\177\177AAc>\34\0\177\177IIIIA\0\177\177\11\11\11\11\1\0\34>cA" "Iyy\0\177\177\10\10\10\177\177\0\0AA\177\177AA\0 `@@@\177\77\0\177\177\30<" "vcA\0\0\177\177@@@@\0\177\177\16\34\16\177\177\0\177\177\16\34\70\177\177\0>\177AA" "A\177>\0\177\177\21\21\21\37\16\0>\177AQq\77^\0\177\177\21\61yoN\0&oII" "Kz\60\0\0\1\1\177\177\1\1\0\77\177@@@\177\77\0\17\37\70p\70\37\17\0\177\177\70\34" "\70\177\177\0cw>\34>wc\0\0\7\17xx\17\7\0aqy]OGC\0\0\0\177\177" "AA\0\0\1\2\4\10\20 @\0\0AA\177\177\0\0\0\0\2\3\1\3\2\0\0\200\200\200\200" "\200\200\200\0\0\0\0\1\2\0\0\0 tTTT|x\0\77\177DDD|\70\0\70|DD" "DDD\0\70|DDD\177\177\0\70|TTT\134\30\0\0\4\4~\177\5\5\0\30\274\244\244" "\244\374|\0\177\177\4\4\4|x\0\0@D}}@@\0\0\200\200\204\375}\0\0\177\177\30\70" "|lD\0\0@A\177\177@@\0|\4||\4|x\0||\4\4\4|x\0\70|DD" "D|\70\0\374\374$$$<\30\0\30<$$$\374\374\0\0||\10\4\4\4\0H\134TT" "Tt \0\0\4\4\177\177\4\4\0<|@@@||\0\0\34<``<\34\0<@||" "@||\0ll\70\70\70ll\0\34\274\240\240\240\374|\0Ddt|\134LD\0\0\0\10>" "wA\0\0\0\0\0\177\177\0\0\0\0Aw>\10\0\0\0\10\4\14\34\30\20\10\0\0``\0" "``\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0p}}\0\0\0\34>\42\177\42\66\24\0H~\177I" "IKB\0\0\42\34\42\42\34\42\0\0+/||/+\0\0\0\0ww\0\0\0\0&oU" "U{\62\0\0\1\1\0\1\1\0\0\34\0|~\35;r}|\0\70|EFD|\70\0\70|DF" "E|\70\0\70~GEG~\70\0\70~EGF}\70\0\70}EDE}\70\0\0\42\24\10" "\24\42\0\0>\177QIE\177>\0<|AB@|<\0<|@BA|<\0\70zCA" "Cz\70\0<}A@A}<\0\0\14\34rq\34\14\0\177\177\42\42\42>\34\0\0~\177!" "I\177\66\0 tUVT|x\0 tTVU|x\0 vWUW~x\0 vUW" "V}x\0 uUTU}x\0 tVUV|x\0 tT|T\134\30\0\30<\244\244" "d$$\0\70|UVT\134\30\0\70|TVU\134\30\0\70~WUW^\30\0\70}UT" "U]\30\0\0@Izx@@\0\0@Hzy@@\0\0BKy{B@\0\0AE|" "}A@\0\64{KNNy\60\0|~\5\7\6}x\0\70|EFD|\70\0\70|DF" "E|\70\0\70~GEG~\70\0\70~EGF}\70\0\70}EDE}\70\0\0\10\10*" "*\10\10\0\70|dTL|\70\0<|AB@||\0<|@BA||\0\70zCA" "Czx\0<}A@A}|\0\34\274\240\242\241\374|\0\377\377$$$<\30\0\34\275\241\240" "\241\375|"; /* Fontname: -FreeType-Press Start 2P-Medium-R-Normal--8-80-72-72-P-69-ISO10646-1 Copyright: (c) 2011 Cody Glyphs: 96/556 BBX Build Mode: 3 */ const uint8_t u8x8_font_pressstart2p_r[772] U8X8_FONT_SECTION("u8x8_font_pressstart2p_r") = " \177\1\1\0\0\0\0\0\0\0\0\0\0__\7\0\0\0\0\7\7\0\7\7\0\0\42\177\177\42" "\177\177\42\0$.*\177*:\20\0F%\23\10dR\61\0\66\177I_v`P\0\0\0\7\7" "\0\0\0\0\0\0\34>cA\0\0\0Ac>\34\0\0\0\10*>\34>*\10\0\0\10\10>" ">\10\10\0\0\200\340`\0\0\0\0\0\10\10\10\10\10\10\0\0\0``\0\0\0\0@ \20\10" "\4\2\1\0\34>aAC>\34\0\0@B\177\177@@\0bsyY]OF\0 aIM" "O{\61\0\30\34\26\23\177\177\20\0'gEEE}\70\0<~KIIy\60\0\3\3qy" "\15\7\3\0\66OMYYv\60\0\6OIIi\77\36\0\0\0\66\66\0\0\0\0\0@v\66" "\0\0\0\0\0\10\34\66cA\0\0\24\24\24\24\24\24\24\0\0Ac\66\34\10\0\0\6\7SS" "[\17\6\0>A]U]Q\36\0|~\23\21\23~|\0\177\177III\177\66\0\34>cA" "Ac\42\0\177\177AAc>\34\0\177\177IIIIA\0\177\177\11\11\11\11\1\0\34>cA" "Iyy\0\177\177\10\10\10\177\177\0\0AA\177\177AA\0 `@@@\177\77\0\177\177\30<" "vcA\0\0\177\177@@@@\0\177\177\16\34\16\177\177\0\177\177\16\34\70\177\177\0>\177AA" "A\177>\0\177\177\21\21\21\37\16\0>\177AQq\77^\0\177\177\21\61yoN\0&oII" "Kz\60\0\0\1\1\177\177\1\1\0\77\177@@@\177\77\0\17\37\70p\70\37\17\0\177\177\70\34" "\70\177\177\0cw>\34>wc\0\0\7\17xx\17\7\0aqy]OGC\0\0\0\177\177" "AA\0\0\1\2\4\10\20 @\0\0AA\177\177\0\0\0\0\2\3\1\3\2\0\0\200\200\200\200" "\200\200\200\0\0\0\0\1\2\0\0\0 tTTT|x\0\77\177DDD|\70\0\70|DD" "DDD\0\70|DDD\177\177\0\70|TTT\134\30\0\0\4\4~\177\5\5\0\30\274\244\244" "\244\374|\0\177\177\4\4\4|x\0\0@D}}@@\0\0\200\200\204\375}\0\0\177\177\30\70" "|lD\0\0@A\177\177@@\0|\4||\4|x\0||\4\4\4|x\0\70|DD" "D|\70\0\374\374$$$<\30\0\30<$$$\374\374\0\0||\10\4\4\4\0H\134TT" "Tt \0\0\4\4\177\177\4\4\0<|@@@||\0\0\34<``<\34\0<@||" "@||\0ll\70\70\70ll\0\34\274\240\240\240\374|\0Ddt|\134LD\0\0\0\10>" "wA\0\0\0\0\0\177\177\0\0\0\0Aw>\10\0\0\0\10\4\14\34\30\20\10\0\0``\0" "``\0"; /* Fontname: -FreeType-Press Start 2P-Medium-R-Normal--8-80-72-72-P-69-ISO10646-1 Copyright: (c) 2011 Cody Glyphs: 18/556 BBX Build Mode: 3 */ const uint8_t u8x8_font_pressstart2p_n[220] U8X8_FONT_SECTION("u8x8_font_pressstart2p_n") = " :\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10*>\34>*\10\0\0\10\10>" ">\10\10\0\0\200\340`\0\0\0\0\0\10\10\10\10\10\10\0\0\0``\0\0\0\0@ \20\10" "\4\2\1\0\34>aAC>\34\0\0@B\177\177@@\0bsyY]OF\0 aIM" "O{\61\0\30\34\26\23\177\177\20\0'gEEE}\70\0<~KIIy\60\0\3\3qy" "\15\7\3\0\66OMYYv\60\0\6OIIi\77\36\0\0\0\66\66\0\0\0"; /* Fontname: -FreeType-Press Start 2P-Medium-R-Normal--8-80-72-72-P-69-ISO10646-1 Copyright: (c) 2011 Cody Glyphs: 64/556 BBX Build Mode: 3 */ const uint8_t u8x8_font_pressstart2p_u[516] U8X8_FONT_SECTION("u8x8_font_pressstart2p_u") = " _\1\1\0\0\0\0\0\0\0\0\0\0__\7\0\0\0\0\7\7\0\7\7\0\0\42\177\177\42" "\177\177\42\0$.*\177*:\20\0F%\23\10dR\61\0\66\177I_v`P\0\0\0\7\7" "\0\0\0\0\0\0\34>cA\0\0\0Ac>\34\0\0\0\10*>\34>*\10\0\0\10\10>" ">\10\10\0\0\200\340`\0\0\0\0\0\10\10\10\10\10\10\0\0\0``\0\0\0\0@ \20\10" "\4\2\1\0\34>aAC>\34\0\0@B\177\177@@\0bsyY]OF\0 aIM" "O{\61\0\30\34\26\23\177\177\20\0'gEEE}\70\0<~KIIy\60\0\3\3qy" "\15\7\3\0\66OMYYv\60\0\6OIIi\77\36\0\0\0\66\66\0\0\0\0\0@v\66" "\0\0\0\0\0\10\34\66cA\0\0\24\24\24\24\24\24\24\0\0Ac\66\34\10\0\0\6\7SS" "[\17\6\0>A]U]Q\36\0|~\23\21\23~|\0\177\177III\177\66\0\34>cA" "Ac\42\0\177\177AAc>\34\0\177\177IIIIA\0\177\177\11\11\11\11\1\0\34>cA" "Iyy\0\177\177\10\10\10\177\177\0\0AA\177\177AA\0 `@@@\177\77\0\177\177\30<" "vcA\0\0\177\177@@@@\0\177\177\16\34\16\177\177\0\177\177\16\34\70\177\177\0>\177AA" "A\177>\0\177\177\21\21\21\37\16\0>\177AQq\77^\0\177\177\21\61yoN\0&oII" "Kz\60\0\0\1\1\177\177\1\1\0\77\177@@@\177\77\0\17\37\70p\70\37\17\0\177\177\70\34" "\70\177\177\0cw>\34>wc\0\0\7\17xx\17\7\0aqy]OGC\0\0\0\177\177" "AA\0\0\1\2\4\10\20 @\0\0AA\177\177\0\0\0\0\2\3\1\3\2\0\0\200\200\200\200" "\200\200\200"; /* Fontname: -FreeType-PC Senior-Medium-R-Normal--8-80-72-72-P-48-ISO10646-1 Copyright: TrueType conversion 2001 codeman38. Glyphs: 192/260 BBX Build Mode: 3 */ const uint8_t u8x8_font_pcsenior_f[1796] U8X8_FONT_SECTION("u8x8_font_pcsenior_f") = " \377\1\1\0\0\0\0\0\0\0\0\0\6__\6\0\0\0\0\7\7\0\7\7\0\0\24\177\177\24" "\177\177\24\0$.kk:\22\0\0Ff\60\30\14fb\0\60zO]\67zH\0\4\7\3\0" "\0\0\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\0\10*>\34\34>*\10\10\10>>" "\10\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0\0`\60\30\14" "\6\3\1\0>\177qYM\177>\0@B\177\177@@\0\0bsYIof\0\0\42cII" "\177\66\0\0\30\34\26S\177\177P\0'gEE}\71\0\0<~KIy\60\0\0\3\3qy" "\17\7\0\0\66\177II\177\66\0\0\6OIi\77\36\0\0\0\0ff\0\0\0\0\0\200\346f" "\0\0\0\0\10\34\66cA\0\0\0$$$$$$\0\0\0Ac\66\34\10\0\0\2\3QY" "\17\6\0\0>\177A]]\37\36\0|~\23\23~|\0\0A\177\177II\177\66\0\34>cA" "Ac\42\0A\177\177Ac>\34\0A\177\177I]Ac\0A\177\177I\35\1\3\0\34>cA" "Qsr\0\177\177\10\10\177\177\0\0\0A\177\177A\0\0\0\60p@A\177\77\1\0A\177\177\10" "\34wc\0A\177\177A@`p\0\177\177\16\34\16\177\177\0\177\177\6\14\30\177\177\0\34>cA" "c>\34\0A\177\177I\11\17\6\0\36\77!q\177^\0\0A\177\177\11\31\177f\0&oMY" "s\62\0\0\3A\177\177A\3\0\0\177\177@@\177\177\0\0\37\77``\77\37\0\0\177\177\60\30" "\60\177\177\0Cg<\30\177D$\0\0<|@@<|@\0\34<``<\34\0\0<|p\70" "p|<\0Dl\70\20\70lD\0\234\274\240\240\374|\0\0Ldt\134Ld\0\0\10\10>w" "AA\0\0\0\0\0ww\0\0\0AAw>\10\10\0\0\2\3\1\3\2\3\1\0pxLF" "Lxp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0{{\0\0\0\30<$\347\347$$\0h~\177I" "Cf \0\0\0\0\0\0\0\0\0+/\374\374/+\0\0\0\0\0ww\0\0\0@\332\277\245" "\375Y\3\2\0\0\0\0\0\0\0\0~\201\225\261\261\225\201~\0&/)//(\0\10\34\66\42" "\10\34\66\42\10\10\10\10\70\70\0\0\10\10\10\10\10\10\0\0\300\377\177\5\5e\177\77\0\0\0\0" "\0\0\0\0\0\6\17\11\17\6\0\0DD__DD\0\0\0\31\35\27\22\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\200\376~ >\36\0\6\17\11\177\177\1\177\177\0\0\0\30" "\30\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0&/)/&\0\0\42\66\34\10" "\42\66\34\10Oo\60\30lv\373\371o_(\324\262\325\253\221\0\0\0\0\0\0\0\0\60xME" "` \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0y}\26\22\26}y\0px++xp\0\0|~\13\11\177\177I\0\16\237\221\261" "\373J\0\0\0\0\0\0\0\0\0\0D||UUE\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0}}\31\61}}\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\31\24\0\0!uUT|x@\0 tTU}y@\0\2#uUU}{B\0\0\0\0" "\0\0\0\0!uTT}y@\0 tWW|x@\0 tTT||TT\30<\244\244" "\344@\0\0\71}UT\134\30\0\0\70|TU]\31\0\0\2;}UU]\33\2\71}TT" "]\31\0\0\1E}|@\0\0\0\0D}}A\0\0\0\2\3E}}C\2\0\1E||" "A\1\0\0\0\0\0\0\0\0\0\0zz\12\12zp\0\0\62zJHx\60\0\0\60xHJ" "z\62\0\0\62{II{\62\0\0\0\0\0\0\0\0\0\0\62zHHz\62\0\0\10\10kk" "\10\10\0\0\0\0\0\0\0\0\0\0:zB@xx@\0\70x@Bzz@\0:{AA" "{z@\0:z@@zz@\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\232\272\240\240" "\372z\0"; /* Fontname: -FreeType-PC Senior-Medium-R-Normal--8-80-72-72-P-48-ISO10646-1 Copyright: TrueType conversion 2001 codeman38. Glyphs: 96/260 BBX Build Mode: 3 */ const uint8_t u8x8_font_pcsenior_r[772] U8X8_FONT_SECTION("u8x8_font_pcsenior_r") = " \177\1\1\0\0\0\0\0\0\0\0\0\6__\6\0\0\0\0\7\7\0\7\7\0\0\24\177\177\24" "\177\177\24\0$.kk:\22\0\0Ff\60\30\14fb\0\60zO]\67zH\0\4\7\3\0" "\0\0\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\0\10*>\34\34>*\10\10\10>>" "\10\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0\0`\60\30\14" "\6\3\1\0>\177qYM\177>\0@B\177\177@@\0\0bsYIof\0\0\42cII" "\177\66\0\0\30\34\26S\177\177P\0'gEE}\71\0\0<~KIy\60\0\0\3\3qy" "\17\7\0\0\66\177II\177\66\0\0\6OIi\77\36\0\0\0\0ff\0\0\0\0\0\200\346f" "\0\0\0\0\10\34\66cA\0\0\0$$$$$$\0\0\0Ac\66\34\10\0\0\2\3QY" "\17\6\0\0>\177A]]\37\36\0|~\23\23~|\0\0A\177\177II\177\66\0\34>cA" "Ac\42\0A\177\177Ac>\34\0A\177\177I]Ac\0A\177\177I\35\1\3\0\34>cA" "Qsr\0\177\177\10\10\177\177\0\0\0A\177\177A\0\0\0\60p@A\177\77\1\0A\177\177\10" "\34wc\0A\177\177A@`p\0\177\177\16\34\16\177\177\0\177\177\6\14\30\177\177\0\34>cA" "c>\34\0A\177\177I\11\17\6\0\36\77!q\177^\0\0A\177\177\11\31\177f\0&oMY" "s\62\0\0\3A\177\177A\3\0\0\177\177@@\177\177\0\0\37\77``\77\37\0\0\177\177\60\30" "\60\177\177\0Cg<\30\177D$\0\0<|@@<|@\0\34<``<\34\0\0<|p\70" "p|<\0Dl\70\20\70lD\0\234\274\240\240\374|\0\0Ldt\134Ld\0\0\10\10>w" "AA\0\0\0\0\0ww\0\0\0AAw>\10\10\0\0\2\3\1\3\2\3\1\0pxLF" "Lxp"; /* Fontname: -FreeType-PC Senior-Medium-R-Normal--8-80-72-72-P-48-ISO10646-1 Copyright: TrueType conversion 2001 codeman38. Glyphs: 18/260 BBX Build Mode: 3 */ const uint8_t u8x8_font_pcsenior_n[220] U8X8_FONT_SECTION("u8x8_font_pcsenior_n") = " :\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10*>\34\34>*\10\10\10>>" "\10\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0\0`\60\30\14" "\6\3\1\0>\177qYM\177>\0@B\177\177@@\0\0bsYIof\0\0\42cII" "\177\66\0\0\30\34\26S\177\177P\0'gEE}\71\0\0<~KIy\60\0\0\3\3qy" "\17\7\0\0\66\177II\177\66\0\0\6OIi\77\36\0\0\0\0ff\0\0\0"; /* Fontname: -FreeType-PC Senior-Medium-R-Normal--8-80-72-72-P-48-ISO10646-1 Copyright: TrueType conversion 2001 codeman38. Glyphs: 64/260 BBX Build Mode: 3 */ const uint8_t u8x8_font_pcsenior_u[517] U8X8_FONT_SECTION("u8x8_font_pcsenior_u") = " _\1\1\0\0\0\0\0\0\0\0\0\6__\6\0\0\0\0\7\7\0\7\7\0\0\24\177\177\24" "\177\177\24\0$.kk:\22\0\0Ff\60\30\14fb\0\60zO]\67zH\0\4\7\3\0" "\0\0\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\0\10*>\34\34>*\10\10\10>>" "\10\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0\0`\60\30\14" "\6\3\1\0>\177qYM\177>\0@B\177\177@@\0\0bsYIof\0\0\42cII" "\177\66\0\0\30\34\26S\177\177P\0'gEE}\71\0\0<~KIy\60\0\0\3\3qy" "\17\7\0\0\66\177II\177\66\0\0\6OIi\77\36\0\0\0\0ff\0\0\0\0\0\200\346f" "\0\0\0\0\10\34\66cA\0\0\0$$$$$$\0\0\0Ac\66\34\10\0\0\2\3QY" "\17\6\0\0>\177A]]\37\36\0|~\23\23~|\0\0A\177\177II\177\66\0\34>cA" "Ac\42\0A\177\177Ac>\34\0A\177\177I]Ac\0A\177\177I\35\1\3\0\34>cA" "Qsr\0\177\177\10\10\177\177\0\0\0A\177\177A\0\0\0\60p@A\177\77\1\0A\177\177\10" "\34wc\0A\177\177A@`p\0\177\177\16\34\16\177\177\0\177\177\6\14\30\177\177\0\34>cA" "c>\34\0A\177\177I\11\17\6\0\36\77!q\177^\0\0A\177\177\11\31\177f\0&oMY" "s\62\0\0\3A\177\177A\3\0\0\177\177@@\177\177\0\0\37\77``\77\37\0\0\177\177\60\30" "\60\177\177\0Cg<\30" "\10\10\0\0\0\0\200`\0\0\0\0\0\10\10\10\10\10\10\0\0\0\0`\0\0\0\0\0@ \20" "\10\4\2\0\0>aQIE>\0\0DB\177@@\0\0\0bQQIIf\0\0\42AI" "II\66\0\20\30\24R\177P\20\0\0'EEEE\71\0\0A]UU\36\0\0|\22\21\21\22|\0\0A\177III\66\0\0\34\42A" "AA\42\0\0A\177AA\42\34\0\0A\177I]Ac\0\0A\177I\35\1\3\0\0\34\42A" "QQr\0\0\177\10\10\10\10\177\0\0\0A\177A\0\0\0\0\60@@A\77\1\0\0A\177\10" "\24\42A@\0A\177A@@`\0\0\177\1\2\4\2\1\177\0\177\1\2\4\10\177\0\0\34\42A" "A\42\34\0\0A\177I\11\11\6\0\0\36!!\61!^@\0A\177I\31)F\0\0&II" "II\62\0\0\3\1A\177A\1\3\0\77@@@@\77\0\0\17\20 @ \20\17\0\77@@" "\70@@\77\0A\42\24\10\24\42A\0\1\2DxD\2\1\0CaQIECa\0\177AA" "A\0\0\0\1\2\4\10\20 @\0\0AAA\177\0\0\0\10\4\2\1\2\4\10\0\200\200\200\200" "\200\200\200\200\0\0\0\3\4\0\0\0\0 TTTTx@\0\1\177\60HHH\60\0\70DD" "DD(\0\0\60HHH\61\177@\0\70TTTT\30\0\0\0H~I\1\2\0\0\230\244\244" "\244\244x\4\0A\177\10\4\4x\0\0\0D}@\0\0\0\0`\200\200\200\204}\0\0\1\177\20" "(D@\0\0\0A\177@\0\0\0\0|\4\4x\4\4x\0|\10\4\4\4x\0\0\70DD" "DD\70\0\0\204\374\230$$\30\0\0\30$$\230\374\204\0\0D|H\4\4\30\0\0HTT" "TT$\0\0\4\4\77DD \0\0<@@@ |\0\0\14\20 @ \20\14\0<@@" "\70@@<\0D(\20(D\0\0\0\234\240\240\240\240|\0\0DdTLD\0\0\0\10\10\66" "AA\0\0\0\0\0w\0\0\0\0\0\0AA\66\10\10\0\0\2\1\1\2\2\1\0\0pHD" "BDHp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0z\0\0\0\0\0\30$$\347$$\0\0h^I" "AB \0BZ$$$ZB\0\0\25\26|\26\25\0\0\0\0\0w\0\0\0\0@\332\247\245" "\345Y\3\2\0\1\0\0\0\1\0\0~\201\231\245\245\201~\0\0&)))/(\0\0\10\24\42" "\10\24\42\0\0\10\10\10\10\10\70\0\0\10\10\10\10\10\10\0~\201\275\225\251\201~\0\1\1\1\1" "\1\1\1\1\0\6\11\11\6\0\0\0\0DD_DD\0\0\0\22\31\25\22\0\0\0\0\12\21\25" "\12\0\0\0\0\0\0\2\1\0\0\0\200~\20\20\20\16\20\0\6\11\11\177\1\1\177\1\0\0\0\20" "\20\0\0\0\0\0\200\200\240@\0\0\0\22\37\20\0\0\0\0\0&)))&\0\0\0\42\24\10" "\42\24\10\0J/\30(\64*\375 J/\30\210\324\312\251\260\225U*PhT\372@\0\60HE" "@@ \0\1y\24\22\22\24x\0\0x\24\22\22\24y\1\0r)%%)r\0\0y\25\25" "\25\25y\0\0y\24\22\22\24y\0\0p(++(p\0\0|\12\11\11\177II\0\16\221\221" "\261\261J\0\0E}TTD\0\0\0D|TUE\0\0\2E}UUE\2\0\0E|T" "TE\0\0\0\1E|D\0\0\0\0\0D|E\1\0\0\2\1E}E\1\2\0\0\1D|" "D\1\0\0\0I\177IA\42\34\0\0z\11\21\42Cx\0\1\31$BB$\30\0\0\30$B" "B$\31\1\22)EEE)\22\0\0\21)EEE)\21\0\31$BB$\31\0\0\42\24\10" "\24\42\0\0>qYIMG>\0\0=A@@@<\0\0<@@@A=\0\0:AA" "AA:\0\0=@@@@=\0\0\4HpH\5\1\0\0A\177U\24\24\10\0\0~\1\1" "IV \0\0 UUTx@\0\0 TTUy@\0\0\42UUUyB\0\0!UU" "UUy@\0!TTTxA\0\0 TUTx@\0\0 TTx\70TT\0\30$\244" "\244\344@\0\0\70UUTT\30\0\0\70TTUU\30\0\0:UUUU\32\0\0\71TT" "TT\31\0\0\0\1E|@\0\0\0\0\0D}A\0\0\2\1E}A\2\0\0\0\0\1D" "|A\0\0\0\60JJK>\2\0\0z\11\11\12\12q\0\0\60IJHH\60\0\0\60HH" "JI\60\0\0\60JIIJ\60\0\0\62JJJJ\62\0\0\62HHHH\62\0\0\10\10k" "k\10\10\0\270DdTLD:\0\0\70AB@@\70\0\0\70@@DB\70\0\0\70BA" "AB\70\0\0:@@@z@\0\0\30\240\240\240\242z\0\0\201\377\244$$\30\0\0\32\240\240" "\240\240z"; /* Fontname: -FreeType-PxPlus IBM CGAthin-Medium-R-Normal--8-80-72-72-P-64-ISO10646-1 Copyright: Outline (vector) version (c) 2015 VileR Glyphs: 96/781 BBX Build Mode: 3 */ const uint8_t u8x8_font_pxplusibmcgathin_r[773] U8X8_FONT_SECTION("u8x8_font_pxplusibmcgathin_r") = " \177\1\1\0\0\0\0\0\0\0\0\0\0\6_\6\0\0\0\0\0\7\0\0\7\0\0\0\24\177\24" "\24\177\24\0\0$*kk*\22\0\0F&\20\10db\0\60JEM\62HH\0\0\0\4\3" "\0\0\0\0\0\34\42A\0\0\0\0\0\0A\42\34\0\0\0\10*\34\34\34*\10\0\0\10\10>" "\10\10\0\0\0\0\200`\0\0\0\0\0\10\10\10\10\10\10\0\0\0\0`\0\0\0\0\0@ \20" "\10\4\2\0\0>aQIE>\0\0DB\177@@\0\0\0bQQIIf\0\0\42AI" "II\66\0\20\30\24R\177P\20\0\0'EEEE\71\0\0A]UU\36\0\0|\22\21\21\22|\0\0A\177III\66\0\0\34\42A" "AA\42\0\0A\177AA\42\34\0\0A\177I]Ac\0\0A\177I\35\1\3\0\0\34\42A" "QQr\0\0\177\10\10\10\10\177\0\0\0A\177A\0\0\0\0\60@@A\77\1\0\0A\177\10" "\24\42A@\0A\177A@@`\0\0\177\1\2\4\2\1\177\0\177\1\2\4\10\177\0\0\34\42A" "A\42\34\0\0A\177I\11\11\6\0\0\36!!\61!^@\0A\177I\31)F\0\0&II" "II\62\0\0\3\1A\177A\1\3\0\77@@@@\77\0\0\17\20 @ \20\17\0\77@@" "\70@@\77\0A\42\24\10\24\42A\0\1\2DxD\2\1\0CaQIECa\0\177AA" "A\0\0\0\1\2\4\10\20 @\0\0AAA\177\0\0\0\10\4\2\1\2\4\10\0\200\200\200\200" "\200\200\200\200\0\0\0\3\4\0\0\0\0 TTTTx@\0\1\177\60HHH\60\0\70DD" "DD(\0\0\60HHH\61\177@\0\70TTTT\30\0\0\0H~I\1\2\0\0\230\244\244" "\244\244x\4\0A\177\10\4\4x\0\0\0D}@\0\0\0\0`\200\200\200\204}\0\0\1\177\20" "(D@\0\0\0A\177@\0\0\0\0|\4\4x\4\4x\0|\10\4\4\4x\0\0\70DD" "DD\70\0\0\204\374\230$$\30\0\0\30$$\230\374\204\0\0D|H\4\4\30\0\0HTT" "TT$\0\0\4\4\77DD \0\0<@@@ |\0\0\14\20 @ \20\14\0<@@" "\70@@<\0D(\20(D\0\0\0\234\240\240\240\240|\0\0DdTLD\0\0\0\10\10\66" "AA\0\0\0\0\0w\0\0\0\0\0\0AA\66\10\10\0\0\2\1\1\2\2\1\0\0pHD" "BDHp"; /* Fontname: -FreeType-PxPlus IBM CGAthin-Medium-R-Normal--8-80-72-72-P-64-ISO10646-1 Copyright: Outline (vector) version (c) 2015 VileR Glyphs: 18/781 BBX Build Mode: 3 */ const uint8_t u8x8_font_pxplusibmcgathin_n[220] U8X8_FONT_SECTION("u8x8_font_pxplusibmcgathin_n") = " :\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10*\34\34\34*\10\0\0\10\10>" "\10\10\0\0\0\0\200`\0\0\0\0\0\10\10\10\10\10\10\0\0\0\0`\0\0\0\0\0@ \20" "\10\4\2\0\0>aQIE>\0\0DB\177@@\0\0\0bQQIIf\0\0\42AI" "II\66\0\20\30\24R\177P\20\0\0'EEEE\71\0\0" "\10\10\0\0\0\0\200`\0\0\0\0\0\10\10\10\10\10\10\0\0\0\0`\0\0\0\0\0@ \20" "\10\4\2\0\0>aQIE>\0\0DB\177@@\0\0\0bQQIIf\0\0\42AI" "II\66\0\20\30\24R\177P\20\0\0'EEEE\71\0\0A]UU\36\0\0|\22\21\21\22|\0\0A\177III\66\0\0\34\42A" "AA\42\0\0A\177AA\42\34\0\0A\177I]Ac\0\0A\177I\35\1\3\0\0\34\42A" "QQr\0\0\177\10\10\10\10\177\0\0\0A\177A\0\0\0\0\60@@A\77\1\0\0A\177\10" "\24\42A@\0A\177A@@`\0\0\177\1\2\4\2\1\177\0\177\1\2\4\10\177\0\0\34\42A" "A\42\34\0\0A\177I\11\11\6\0\0\36!!\61!^@\0A\177I\31)F\0\0&II" "II\62\0\0\3\1A\177A\1\3\0\77@@@@\77\0\0\17\20 @ \20\17\0\77@@" "\70@@\77\0A\42\24\10\24\42A\0\1\2DxD\2\1\0CaQIECa\0\177AA" "A\0\0\0\1\2\4\10\20 @\0\0AAA\177\0\0\0\10\4\2\1\2\4\10\0\200\200\200\200" "\200\200\200\200"; /* Fontname: -FreeType-PxPlus IBM CGA-Medium-R-Normal--8-80-72-72-P-68-ISO10646-1 Copyright: Outline (vector) version (c) 2015 VileR Glyphs: 192/781 BBX Build Mode: 3 */ const uint8_t u8x8_font_pxplusibmcga_f[1796] U8X8_FONT_SECTION("u8x8_font_pxplusibmcga_f") = " \377\1\1\0\0\0\0\0\0\0\0\0\6__\6\0\0\0\0\7\7\0\7\7\0\0\24\177\177\24" "\177\177\24\0$.kk:\22\0\0Ff\60\30\14fb\0\60zO]\67zH\0\4\7\3\0" "\0\0\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\0\10*>\34\34>*\10\10\10>>" "\10\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0\0`\60\30\14" "\6\3\1\0>\177qYM\177>\0@B\177\177@@\0\0bsYIOf\0\0\42cII" "\177\66\0\0\30\34\26S\177\177P\0'gEE}\71\0\0<~KIy\60\0\0\3\3qy" "\17\7\0\0\66\177II\177\66\0\0\6OIi\77\36\0\0\0\0ff\0\0\0\0\0@v\66" "\0\0\0\0\10\34\66cA\0\0\0$$$$$$\0\0\0Ac\66\34\10\0\0\2\3QY" "\17\6\0\0>\177A]]\37\36\0|~\23\23~|\0\0A\177\177II\177\66\0\34>cA" "Ac\42\0A\177\177Ac>\34\0A\177\177I]Ac\0A\177\177I\35\1\3\0\34>cA" "Qsr\0\177\177\10\10\177\177\0\0\0A\177\177A\0\0\0\60p@A\177\77\1\0A\177\177\10" "\34wc\0A\177\177A@`p\0\177\177\16\34\16\177\177\0\177\177\6\14\30\177\177\0\34>cA" "c>\34\0A\177\177I\11\17\6\0\36\77!q\177^\0\0A\177\177\11\31\177f\0\42gMY" "s\42\0\0\3A\177\177A\3\0\0\177\177@@\177\177\0\0\37\77``\77\37\0\0\177\177\60\30" "\60\177\177\0Cg<\30\177D$\0\0<|@@<|@\0\34<``<\34\0\0<|p\70" "p|<\0Dl\70\20\70lD\0\234\274\240\240\374|\0\0Ldt\134Ld\0\0\10\10>w" "AA\0\0\0\0\0ww\0\0\0AAw>\10\10\0\0\2\3\1\3\2\3\1\0pxLF" "Lxp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0{{\0\0\0\30<$\347\347$$\0h~\177I" "Cf \0Z~$$$~Z\0+/\374\374/+\0\0\0\0\0ww\0\0\0@\332\277\245" "\375Y\3\2\1\1\0\0\0\1\1\0~\201\231\245\245\201~\0\0&/)//(\0\10\34\66\42" "\10\34\66\42\10\10\10\10\70\70\0\0\0\10\10\10\10\10\10\0~\201\275\225\251\201~\0\1\1\1\1" "\1\1\1\1\0\6\17\11\17\6\0\0DD__DD\0\0\0\31\35\27\22\0\0\0\0\21\25\37" "\12\0\0\0\0\0\2\3\1\0\0\0\200\376~ >\36\0\6\17\11\177\177\1\177\177\0\0\0\20" "\20\0\0\0\0\0\200\240\340@\0\0\0\22\37\37\20\0\0\0\0&/)/&\0\0\42\66\34\10" "\42\66\34\10Oo\60\30lv\373\371Oo\60\30\314\356\273\221\221\325\177:Xl\366\362\60xME" "` \0\0y}\26\22\26|x\0x|\26\22\26}y\0r{)){r\0\0y}\25\25" "}y\0\0y}\26\22\26}y\0px++xp\0\0|~\13\11\177\177I\0\16\237\221\261" "\373J\0\0E}}TTD\0\0D||UUE\0\0F\177}UWF\0\0E}|T" "UE\0\0\1E}|D\0\0\0\0D|}E\1\0\0\2KyyK\2\0\0\1E||" "E\1\0\0I\177\177Ic>\34\0}}\31\61}}\0\0\1\31\177qYM\177>\0=}A@|<\0\0<|@A}=\0\0:{AA" "{:\0\0=}@@}=\0\0\14\134pq]\15\0\0A\177\177U\24\34\10\0~\177\1\11" "_v \0!uUT|x@\0 tTU}y@\0\2#uUU}{B!uUU" "}y@\0!uTT}y@\0 tWW|x@\0 tTT||TT\30<\244\244" "\344@\0\0\71}UT\134\30\0\0\70|TU]\31\0\0\2;}UU]\33\2\71}TT" "]\31\0\0\1E}|@\0\0\0\0D}}A\0\0\0\2\3E}}C\2\0\1E||" "A\1\0\0\60xJK\177>\2\0zz\12\12zp\0\0\62zJHx\60\0\0\60xHJ" "z\62\0\0\62{II{\62\0\0\62zJJz\62\0\0\62zHHz\62\0\0\10\10kk" "\10\10\0\0\270|dTL|:\0:zB@xx@\0\70x@Bzz@\0:{AA" "{z@\0:z@@zz@\0\30\270\240\242\372z\0\0\201\377\377\244$<\30\0\232\272\240\240" "\372z\0"; /* Fontname: -FreeType-PxPlus IBM CGA-Medium-R-Normal--8-80-72-72-P-68-ISO10646-1 Copyright: Outline (vector) version (c) 2015 VileR Glyphs: 96/781 BBX Build Mode: 3 */ const uint8_t u8x8_font_pxplusibmcga_r[772] U8X8_FONT_SECTION("u8x8_font_pxplusibmcga_r") = " \177\1\1\0\0\0\0\0\0\0\0\0\6__\6\0\0\0\0\7\7\0\7\7\0\0\24\177\177\24" "\177\177\24\0$.kk:\22\0\0Ff\60\30\14fb\0\60zO]\67zH\0\4\7\3\0" "\0\0\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\0\10*>\34\34>*\10\10\10>>" "\10\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0\0`\60\30\14" "\6\3\1\0>\177qYM\177>\0@B\177\177@@\0\0bsYIOf\0\0\42cII" "\177\66\0\0\30\34\26S\177\177P\0'gEE}\71\0\0<~KIy\60\0\0\3\3qy" "\17\7\0\0\66\177II\177\66\0\0\6OIi\77\36\0\0\0\0ff\0\0\0\0\0@v\66" "\0\0\0\0\10\34\66cA\0\0\0$$$$$$\0\0\0Ac\66\34\10\0\0\2\3QY" "\17\6\0\0>\177A]]\37\36\0|~\23\23~|\0\0A\177\177II\177\66\0\34>cA" "Ac\42\0A\177\177Ac>\34\0A\177\177I]Ac\0A\177\177I\35\1\3\0\34>cA" "Qsr\0\177\177\10\10\177\177\0\0\0A\177\177A\0\0\0\60p@A\177\77\1\0A\177\177\10" "\34wc\0A\177\177A@`p\0\177\177\16\34\16\177\177\0\177\177\6\14\30\177\177\0\34>cA" "c>\34\0A\177\177I\11\17\6\0\36\77!q\177^\0\0A\177\177\11\31\177f\0\42gMY" "s\42\0\0\3A\177\177A\3\0\0\177\177@@\177\177\0\0\37\77``\77\37\0\0\177\177\60\30" "\60\177\177\0Cg<\30\177D$\0\0<|@@<|@\0\34<``<\34\0\0<|p\70" "p|<\0Dl\70\20\70lD\0\234\274\240\240\374|\0\0Ldt\134Ld\0\0\10\10>w" "AA\0\0\0\0\0ww\0\0\0AAw>\10\10\0\0\2\3\1\3\2\3\1\0pxLF" "Lxp"; /* Fontname: -FreeType-PxPlus IBM CGA-Medium-R-Normal--8-80-72-72-P-68-ISO10646-1 Copyright: Outline (vector) version (c) 2015 VileR Glyphs: 18/781 BBX Build Mode: 3 */ const uint8_t u8x8_font_pxplusibmcga_n[220] U8X8_FONT_SECTION("u8x8_font_pxplusibmcga_n") = " :\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10*>\34\34>*\10\10\10>>" "\10\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0\0`\60\30\14" "\6\3\1\0>\177qYM\177>\0@B\177\177@@\0\0bsYIOf\0\0\42cII" "\177\66\0\0\30\34\26S\177\177P\0'gEE}\71\0\0<~KIy\60\0\0\3\3qy" "\17\7\0\0\66\177II\177\66\0\0\6OIi\77\36\0\0\0\0ff\0\0\0"; /* Fontname: -FreeType-PxPlus IBM CGA-Medium-R-Normal--8-80-72-72-P-68-ISO10646-1 Copyright: Outline (vector) version (c) 2015 VileR Glyphs: 64/781 BBX Build Mode: 3 */ const uint8_t u8x8_font_pxplusibmcga_u[517] U8X8_FONT_SECTION("u8x8_font_pxplusibmcga_u") = " _\1\1\0\0\0\0\0\0\0\0\0\6__\6\0\0\0\0\7\7\0\7\7\0\0\24\177\177\24" "\177\177\24\0$.kk:\22\0\0Ff\60\30\14fb\0\60zO]\67zH\0\4\7\3\0" "\0\0\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\0\10*>\34\34>*\10\10\10>>" "\10\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0\0`\60\30\14" "\6\3\1\0>\177qYM\177>\0@B\177\177@@\0\0bsYIOf\0\0\42cII" "\177\66\0\0\30\34\26S\177\177P\0'gEE}\71\0\0<~KIy\60\0\0\3\3qy" "\17\7\0\0\66\177II\177\66\0\0\6OIi\77\36\0\0\0\0ff\0\0\0\0\0@v\66" "\0\0\0\0\10\34\66cA\0\0\0$$$$$$\0\0\0Ac\66\34\10\0\0\2\3QY" "\17\6\0\0>\177A]]\37\36\0|~\23\23~|\0\0A\177\177II\177\66\0\34>cA" "Ac\42\0A\177\177Ac>\34\0A\177\177I]Ac\0A\177\177I\35\1\3\0\34>cA" "Qsr\0\177\177\10\10\177\177\0\0\0A\177\177A\0\0\0\60p@A\177\77\1\0A\177\177\10" "\34wc\0A\177\177A@`p\0\177\177\16\34\16\177\177\0\177\177\6\14\30\177\177\0\34>cA" "c>\34\0A\177\177I\11\17\6\0\36\77!q\177^\0\0A\177\177\11\31\177f\0\42gMY" "s\42\0\0\3A\177\177A\3\0\0\177\177@@\177\177\0\0\37\77``\77\37\0\0\177\177\60\30" "\60\177\177\0Cg<\30cA\0\0\0\0Ac>\34\0\0\10*>\34\34>*\10\0\10\10>" ">\10\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0`\60\30\14" "\6\3\1\0\34>cIc>\34\0\0@B\177\177@@\0BcqYIof\0\42cII" "I\177\66\0\30\34\26S\177\177P\0/oIIIy\61\0<~KIIx\60\0\3\3qy" "\15\7\3\0\66\177III\177\66\0\6OIIi\77\36\0\0\0\0ff\0\0\0\0\0\200\346" "f\0\0\0\0\0\10\34\66cA\0\0$$$$$$\0\0\0Ac\66\34\10\0\2\3\1Y" "]\7\2\0>\177A]]\37\36\0|~\13\11\13~|\0A\177\177II\177\66\0\34>cA" "Ac\42\0A\177\177Ac>\34\0A\177\177I]Ac\0A\177\177I\35\1\3\0\34>cA" "Q\63r\0\177\177\10\10\10\177\177\0\0\0A\177\177A\0\0\60p@A\177\77\1\0A\177\177\10" "\34wc\0A\177\177A@`p\0\177\177\16\34\16\177\177\0\177\177\6\14\30\177\177\0>\177AA" "A\177>\0A\177\177I\11\17\6\0>\177AA\341\377\276\0A\177\177\11\31wf\0\0\42gM" "Ys\42\0\0\3A\177\177A\3\0\77\177@@@\177\77\0\37\77`@`\77\37\0\77\177`\70" "`\177\77\0cw\34\10\34wc\0\0\7OxxO\7\0GcqYMgs\0\0\0\177\177" "AA\0\0\1\3\6\14\30\60`\0\0\0AA\177\177\0\0\10\14\6\3\6\14\10\0\200\200\200\200" "\200\200\200\200\0\0\1\3\6\4\0\0 tTT" "wAA\0\0\0\0\357\357\0\0\0\0AAw>\10\10\0\2\3\1\3\2\3\1\0pxLF" "Lxp\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\60}}\60\0\0\30<$\347\347$$\0\0h~\177" "ICf Z~$$$~Z\0\0+/\374\374/+\0\0\0\0\357\357\0\0\0@\232\277\245" "\245\375Y\2\2\2\0\0\0\2\2\0~\201\231\245\245\245\201~\0&/)//(\0\10\34\66\42" "\10\34\66\42\0\10\10\10\10\70\70\0\0\10\10\10\10\10\10\0~\201\275\225\225\251\201~\1\1\1\1" "\1\1\1\1\0\6\17\11\17\6\0\0\0DD__DD\0\0\21\31\35\27\22\0\0\0\21\25\25" "\37\12\0\0\0\0\4\6\3\1\0\0\0\200\376~ >\36\6\17\11\177\177\1\177\177\0\0\0\20" "\20\0\0\0\0\0\200\240\340@\0\0\0\0\22\37\37\20\0\0\0&/)/&\0\0\42\66\34\10" "\42\66\34\10Bo\77Xl\326\373ABo\77\30\314\356\273\221\225U\77Zh\324\372A\0 p]" "M@` px,%/zp\0pz/%,xp\0pz-%-zp\0r{-'" ".{q\0y}\26\22\26}y\0x|\27\23\27|x\0|~\13\11\177\177I\0<~B\302" "\302f$\0||UWVTD\0||VWUDD\0|~UUUVD\0}}TT" "TUE\0\0\0E\177~D\0\0\0\0D~\177E\0\0\0\2E}}E\2\0\0\1E|" "|E\1\0I\177\177Ic>\34\0~\177\11\23\42\177}\0\70|EGF|\70\0\70|FG" "E|\70\0\70~EEE~\70\0:\177EGF\177\71\0=\177BBB\177=\0\42\66\34\10" "\34\66\42\0\134>sIg>\35\0<}CB@|<\0<|BCA|<\0\70zAA" "Az\70\0=}@@@}=\0\0\14\134rs]\14\0A\177\177U\24\34\10\0~\177\1\11" "_v \0 tUW>x@\0 tVW=x@\0 vUU>x@\0\42wUW" ">{A\0!uTT\2\0\12{q\13\12{q\0\60xIKJx\60\0\60xJK" "Ix\60\0\60zIIIz\60\0\62{IKJ{\61\0\61yHHHy\61\0\0\10\10*" "*\10\10\0\270|dTL|:\0<}CB<|@\0<|BC=|@\0\70zAA" ":x@\0=}@@=}@\0\234\274\242\243\241\374|\0\201\377\377\244$<\30\0\235\275\240\240" "\240\375}"; /* Fontname: -FreeType-PxPlus TandyNew TV-Medium-R-Normal--8-80-72-72-P-70-ISO10646-1 Copyright: Outline (vector) version (c) 2015 VileR Glyphs: 96/781 BBX Build Mode: 3 */ const uint8_t u8x8_font_pxplustandynewtv_r[772] U8X8_FONT_SECTION("u8x8_font_pxplustandynewtv_r") = " \177\1\1\0\0\0\0\0\0\0\0\0\0\6__\6\0\0\0\3\7\0\0\7\3\0\24\177\177\24" "\177\177\24\0\0$.kk:\22\0Ff\60\30\14fb\0\60zO]\67zH\0\0\0\4\7" "\3\0\0\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\10*>\34\34>*\10\0\10\10>" ">\10\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0`\60\30\14" "\6\3\1\0\34>cIc>\34\0\0@B\177\177@@\0BcqYIof\0\42cII" "I\177\66\0\30\34\26S\177\177P\0/oIIIy\61\0<~KIIx\60\0\3\3qy" "\15\7\3\0\66\177III\177\66\0\6OIIi\77\36\0\0\0\0ff\0\0\0\0\0\200\346" "f\0\0\0\0\0\10\34\66cA\0\0$$$$$$\0\0\0Ac\66\34\10\0\2\3\1Y" "]\7\2\0>\177A]]\37\36\0|~\13\11\13~|\0A\177\177II\177\66\0\34>cA" "Ac\42\0A\177\177Ac>\34\0A\177\177I]Ac\0A\177\177I\35\1\3\0\34>cA" "Q\63r\0\177\177\10\10\10\177\177\0\0\0A\177\177A\0\0\60p@A\177\77\1\0A\177\177\10" "\34wc\0A\177\177A@`p\0\177\177\16\34\16\177\177\0\177\177\6\14\30\177\177\0>\177AA" "A\177>\0A\177\177I\11\17\6\0>\177AA\341\377\276\0A\177\177\11\31wf\0\0\42gM" "Ys\42\0\0\3A\177\177A\3\0\77\177@@@\177\77\0\37\77`@`\77\37\0\77\177`\70" "`\177\77\0cw\34\10\34wc\0\0\7OxxO\7\0GcqYMgs\0\0\0\177\177" "AA\0\0\1\3\6\14\30\60`\0\0\0AA\177\177\0\0\10\14\6\3\6\14\10\0\200\200\200\200" "\200\200\200\200\0\0\1\3\6\4\0\0 tTT" "wAA\0\0\0\0\357\357\0\0\0\0AAw>\10\10\0\2\3\1\3\2\3\1\0pxLF" "Lxp"; /* Fontname: -FreeType-PxPlus TandyNew TV-Medium-R-Normal--8-80-72-72-P-70-ISO10646-1 Copyright: Outline (vector) version (c) 2015 VileR Glyphs: 18/781 BBX Build Mode: 3 */ const uint8_t u8x8_font_pxplustandynewtv_n[220] U8X8_FONT_SECTION("u8x8_font_pxplustandynewtv_n") = " :\1\1\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\10*>\34\34>*\10\0\10\10>" ">\10\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0`\60\30\14" "\6\3\1\0\34>cIc>\34\0\0@B\177\177@@\0BcqYIof\0\42cII" "I\177\66\0\30\34\26S\177\177P\0/oIIIy\61\0<~KIIx\60\0\3\3qy" "\15\7\3\0\66\177III\177\66\0\6OIIi\77\36\0\0\0\0ff\0\0"; /* Fontname: -FreeType-PxPlus TandyNew TV-Medium-R-Normal--8-80-72-72-P-70-ISO10646-1 Copyright: Outline (vector) version (c) 2015 VileR Glyphs: 64/781 BBX Build Mode: 3 */ const uint8_t u8x8_font_pxplustandynewtv_u[517] U8X8_FONT_SECTION("u8x8_font_pxplustandynewtv_u") = " _\1\1\0\0\0\0\0\0\0\0\0\0\6__\6\0\0\0\3\7\0\0\7\3\0\24\177\177\24" "\177\177\24\0\0$.kk:\22\0Ff\60\30\14fb\0\60zO]\67zH\0\0\0\4\7" "\3\0\0\0\0\0\34>cA\0\0\0\0Ac>\34\0\0\10*>\34\34>*\10\0\10\10>" ">\10\10\0\0\0\200\340`\0\0\0\0\10\10\10\10\10\10\0\0\0\0``\0\0\0`\60\30\14" "\6\3\1\0\34>cIc>\34\0\0@B\177\177@@\0BcqYIof\0\42cII" "I\177\66\0\30\34\26S\177\177P\0/oIIIy\61\0<~KIIx\60\0\3\3qy" "\15\7\3\0\66\177III\177\66\0\6OIIi\77\36\0\0\0\0ff\0\0\0\0\0\200\346" "f\0\0\0\0\0\10\34\66cA\0\0$$$$$$\0\0\0Ac\66\34\10\0\2\3\1Y" "]\7\2\0>\177A]]\37\36\0|~\13\11\13~|\0A\177\177II\177\66\0\34>cA" "Ac\42\0A\177\177Ac>\34\0A\177\177I]Ac\0A\177\177I\35\1\3\0\34>cA" "Q\63r\0\177\177\10\10\10\177\177\0\0\0A\177\177A\0\0\60p@A\177\77\1\0A\177\177\10" "\34wc\0A\177\177A@`p\0\177\177\16\34\16\177\177\0\177\177\6\14\30\177\177\0>\177AA" "A\177>\0A\177\177I\11\17\6\0>\177AA\341\377\276\0A\177\177\11\31wf\0\0\42gM" "Ys\42\0\0\3A\177\177A\3\0\77\177@@@\177\77\0\37\77`@`\77\37\0\77\177`\70" "`\177\77\0cw\34\10\34wc\0\0\7OxxO\7\0GcqYMgs\0\0\0\177\177" "AA\0\0\1\3\6\14\30\60`\0\0\0AA\177\177\0\0\10\14\6\3\6\14\10\0\200\200\200\200" "\200\200\200\200"; /* Fontname: -FreeType-Px437 Wyse700a-Medium-R-Normal--16-160-72-72-P-131-ISO10646-1 Copyright: Outline (vector) version (c) 2015 VileR Glyphs: 151/288 BBX Build Mode: 3 */ const uint8_t u8x8_font_px437wyse700a_2x2_f[7172] U8X8_FONT_SECTION("u8x8_font_px437wyse700a_2x2_f") = " \377\2\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0p\370\374\374\374\374\370p\0\0\0\0\0\0\0\0\0\0\33\33\33\33\0\0" "\0\0\0\0\0\0\6\16\36\36\0\0\0\0\36\36\16\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \370\370\370 \370\370\370 \0\0\4\4\37\37\37\4\4\4\4\37\37" "\37\4\4\0\0\0\60xx\374\317\207\207\217\234\30\30\20\0\0\0\0\4\14\14\34xppy\37\17" "\17\6\0\0\0\0\60\60\60\60\0\200\300\340\360p\60\20\0\0\0\0\20\30\34\36\17\7\3\1\30\30" "\30\30\0\0\0\0\20\70\270\374\354\304\354|\70\270\220\200\200\0\0\6\17\17\37\31\21\21\33\17\17\37" "\37\31\20\0\0\0\0\20\36\36\36\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\360\370\374\34\14\4\0\0\0\0\0\0\0\0\0\3\7\17\37\34\30\20\0" "\0\0\0\0\0\0\0\0\0\0\0\4\14\34\374\370\360\340\0\0\0\0\0\0\0\0\0\20\30\34\37\17" "\7\3\0\0\0\200\240\240\340\340\300\300\300\300\340\340\240\240\200\0\0\0\2\2\3\3\1\1\1\1\3\3" "\2\2\0\0\0\200\200\200\200\200\360\360\360\360\200\200\200\200\200\0\0\0\0\0\0\0\7\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 <<\34\14\0\0" "\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\30\30\30\0\0" "\0\0\0\0\0\0\0\0\0\0\200\300\340\360x\70\30\10\0\0\0\0\10\14\16\17\7\3\1\0\0\0" "\0\0\0\0\0\0\360\370\370\374\14\204\304l\374\370\370\360\0\0\0\0\7\17\17\37\33\21\20\30\37\17" "\17\7\0\0\0\0\20\20\30\30\374\374\374\374\0\0\0\0\0\0\0\0\20\20\20\20\37\37\37\37\20\20" "\20\20\0\0\0\0\10\10\14\14\4\4\204\314\374\370x\60\0\0\0\0\30\34\36\36\27\23\21\21\30\30" "\30\30\0\0\0\0\10\10\14\14\204\204\204\204\314\374xx\60\0\0\0\10\10\30\30\20\20\20\20\31\37" "\17\17\6\0\0\0\200\300\340\360x<\374\374\374\374\0\0\0\0\0\0\1\1\1\1\21\21\37\37\37\37" "\21\21\0\0\0\0||||DDDD\304\304\204\204\4\0\0\0\10\10\30\30\20\20\20\20\30\37" "\17\17\7\0\0\0\360\370\370\374\214\204\204\204\204\204\0\0\0\0\0\0\7\17\17\37\30\20\20\20\31\37" "\17\17\6\0\0\0\14\14\14\14\4\204\304\344\374|<\34\0\0\0\0\0\0\0\0\37\37\37\37\0\0" "\0\0\0\0\0\0\60xx\374\314\204\204\204\314\374xx\60\0\0\0\6\17\17\37\31\20\20\20\31\37" "\17\17\6\0\0\0\60xx\374\314\204\204\204\214\374\370\370\360\0\0\0\0\0\20\20\20\20\20\20\30\37" "\17\17\7\0\0\0\0\0\0\0\60\60\60\60\0\0\0\0\0\0\0\0\0\0\0\0\14\14\14\14\0\0" "\0\0\0\0\0\0\0\0\0\0\60\60\60\60\0\0\0\0\0\0\0\0\0\0\0\20\34\34\34\14\0\0" "\0\0\0\0\0\0\200\300\340\360x<\34\14\4\0\0\0\0\0\0\0\0\1\3\7\17\36\34\30\20\0" "\0\0\0\0\0\0@@@@@@@@@@@@\0\0\0\0\2\2\2\2\2\2\2\2\2\2" "\2\2\0\0\0\0\0\0\0\4\14\34>" "\22\22\0\0\0\0\200\200\304\304LLXXPP\300\300\200\200\0\0\17\17\37\37\22\22\22\22\22\22" "\33\33\13\13\0\0\200\200\300\300PPXXLL\304\304\200\200\0\0\17\17\37\37\22\22\22\22\22\22" "\33\33\13\13\0\0\200\200\320\320XXLLXX\320\320\200\200\0\0\17\17\37\37\22\22\22\22\22\22" "\33\33\13\13\0\0\230\230\330\330@@@@XX\330\330\200\200\0\0\17\17\37\37\22\22\22\22\22\22" "\33\33\13\13\0\0\4\4LL\330\330\320\320\0\0\0\0\0\0\0\0\0\0\20\20\37\37\37\37\20\20" "\0\0\0\0\0\0\0\0PP\330\330\314\314\4\4\0\0\0\0\0\0\0\0\20\20\37\37\37\37\20\20" "\0\0\0\0\0\0\20\20XX\314\314\314\314\30\30\20\20\0\0\0\0\0\0\20\20\37\37\37\37\20\20" "\0\0\0\0\0\0\30\30XX\300\300\300\300\30\30\30\30\0\0\0\0\0\0\20\20\37\37\37\37\20\20" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0PP\330\330\210\210XXP\320\330\330\210\10\0\0\0\0\37\37\37\37\0\0\0\0\37" "\37\37\37\0\0\0\0\200\204\304\314LXX\320\320\200\200\0\0\0\0\7\17\17\37\30\20\20\20\30\37" "\17\17\7\0\0\0\0\200\220\320\330XLL\304\304\200\200\0\0\0\0\7\17\17\37\30\20\20\20\30\37" "\17\17\7\0\0\0\0\220\220\330\330LLX\330\320\220\200\0\0\0\0\7\17\17\37\30\20\20\20\30\37" "\17\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\30\230\230\330\300@@@\300\330\230\230\30\0\0\0\7\17\17\37\30\20\20\20\30\37" "\17\17\7\0\0\200\200\200\200\200\230\230\230\230\200\200\200\200\200\0\0\0\0\0\0\0\14\14\14\14\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\304\304\14\14\30\30\320\320\300\300\0\0\0\0\17\17\37\37\20\20\20\20\17\17" "\37\37\20\20\0\0\300\300\320\320\30\30\14\14\304\304\300\300\0\0\0\0\17\17\37\37\20\20\20\20\17\17" "\37\37\20\20\0\0\320\320\330\330\14\14\14\14\330\330\320\320\0\0\0\0\17\17\37\37\20\20\20\20\17\17" "\37\37\20\20\0\0\330\330\330\330\0\0\0\0\330\330\330\330\0\0\0\0\17\17\37\37\20\20\20\20\17\17" "\37\37\20\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\330\330\330\330\0\0\0\0\0\330\330\330\330\0\0\0\3\7GOLHHHh\177" "\77\77\37"; /* Fontname: -FreeType-Px437 Wyse700a-Medium-R-Normal--16-160-72-72-P-131-ISO10646-1 Copyright: Outline (vector) version (c) 2015 VileR Glyphs: 96/288 BBX Build Mode: 3 */ const uint8_t u8x8_font_px437wyse700a_2x2_r[3077] U8X8_FONT_SECTION("u8x8_font_px437wyse700a_2x2_r") = " \177\2\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0p\370\374\374\374\374\370p\0\0\0\0\0\0\0\0\0\0\33\33\33\33\0\0" "\0\0\0\0\0\0\6\16\36\36\0\0\0\0\36\36\16\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \370\370\370 \370\370\370 \0\0\4\4\37\37\37\4\4\4\4\37\37" "\37\4\4\0\0\0\60xx\374\317\207\207\217\234\30\30\20\0\0\0\0\4\14\14\34xppy\37\17" "\17\6\0\0\0\0\60\60\60\60\0\200\300\340\360p\60\20\0\0\0\0\20\30\34\36\17\7\3\1\30\30" "\30\30\0\0\0\0\20\70\270\374\354\304\354|\70\270\220\200\200\0\0\6\17\17\37\31\21\21\33\17\17\37" "\37\31\20\0\0\0\0\20\36\36\36\16\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\360\370\374\34\14\4\0\0\0\0\0\0\0\0\0\3\7\17\37\34\30\20\0" "\0\0\0\0\0\0\0\0\0\0\0\4\14\34\374\370\360\340\0\0\0\0\0\0\0\0\0\20\30\34\37\17" "\7\3\0\0\0\200\240\240\340\340\300\300\300\300\340\340\240\240\200\0\0\0\2\2\3\3\1\1\1\1\3\3" "\2\2\0\0\0\200\200\200\200\200\360\360\360\360\200\200\200\200\200\0\0\0\0\0\0\0\7\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 <<\34\14\0\0" "\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\30\30\30\0\0" "\0\0\0\0\0\0\0\0\0\0\200\300\340\360x\70\30\10\0\0\0\0\10\14\16\17\7\3\1\0\0\0" "\0\0\0\0\0\0\360\370\370\374\14\204\304l\374\370\370\360\0\0\0\0\7\17\17\37\33\21\20\30\37\17" "\17\7\0\0\0\0\20\20\30\30\374\374\374\374\0\0\0\0\0\0\0\0\20\20\20\20\37\37\37\37\20\20" "\20\20\0\0\0\0\10\10\14\14\4\4\204\314\374\370x\60\0\0\0\0\30\34\36\36\27\23\21\21\30\30" "\30\30\0\0\0\0\10\10\14\14\204\204\204\204\314\374xx\60\0\0\0\10\10\30\30\20\20\20\20\31\37" "\17\17\6\0\0\0\200\300\340\360x<\374\374\374\374\0\0\0\0\0\0\1\1\1\1\21\21\37\37\37\37" "\21\21\0\0\0\0||||DDDD\304\304\204\204\4\0\0\0\10\10\30\30\20\20\20\20\30\37" "\17\17\7\0\0\0\360\370\370\374\214\204\204\204\204\204\0\0\0\0\0\0\7\17\17\37\30\20\20\20\31\37" "\17\17\6\0\0\0\14\14\14\14\4\204\304\344\374|<\34\0\0\0\0\0\0\0\0\37\37\37\37\0\0" "\0\0\0\0\0\0\60xx\374\314\204\204\204\314\374xx\60\0\0\0\6\17\17\37\31\20\20\20\31\37" "\17\17\6\0\0\0\60xx\374\314\204\204\204\214\374\370\370\360\0\0\0\0\0\20\20\20\20\20\20\30\37" "\17\17\7\0\0\0\0\0\0\0\60\60\60\60\0\0\0\0\0\0\0\0\0\0\0\0\14\14\14\14\0\0" "\0\0\0\0\0\0\0\0\0\0\60\60\60\60\0\0\0\0\0\0\0\0\0\0\0\20\34\34\34\14\0\0" "\0\0\0\0\0\0\200\300\340\360x<\34\14\4\0\0\0\0\0\0\0\0\1\3\7\17\36\34\30\20\0" "\0\0\0\0\0\0@@@@@@@@@@@@\0\0\0\0\2\2\2\2\2\2\2\2\2\2" "\2\2\0\0\0\0\0\0\0\4\14\34\77\77\77\1\0" "\0\0\0\0\0\0`\360\360\370\230\10\10\10\230\370\360\360`\0\0\0\14\36\36\77\63!!!\63\77" "\36\36\14\0\0\0`\360\360\370\230\10\10\10\30\370\360\360\340\0\0\0\0\0 !!!!!\61\77" "\37\37\17\0\0\0\0\0\0\0````\0\0\0\0\0\0\0\0\0\0\0\0\30\30\30\30\0\0" "\0\0\0"; /* Fontname: -FreeType-Px437 Wyse700b-Medium-R-Normal--16-160-72-72-P-124-ISO10646-1 Copyright: Outline (vector) version (c) 2015 VileR Glyphs: 151/288 BBX Build Mode: 3 */ const uint8_t u8x8_font_px437wyse700b_2x2_f[7172] U8X8_FONT_SECTION("u8x8_font_px437wyse700b_2x2_f") = " \377\2\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\33\33\33\0\0" "\0\0\0\0\0\0\0\36\36\36\0\0\0\0\36\36\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \370\370\370 \370\370\370 \0\0\4\4\37\37\37\4\4\4\4\37\37" "\37\4\4\0\0\60xx\314\204\204\376\376\204\204\214\30\30\20\0\0\4\14\14\30\20\20\77\77\20\20\31" "\17\17\6\0\0\0\0\60\60\60\60\0\200\300\340p\60\20\0\0\0\0\0\20\30\34\16\7\3\1\30\30" "\30\30\0\0\0\0\20\70\270\354\304\304\304\354\70\70\220\200\200\0\0\6\17\17\31\20\20\20\31\37\17\17" "\37\31\20\0\0\0\0\0\0\20\30\34\16\6\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\340\360\370\34\14\4\0\0\0\0\0\0\0\0\0\0\3\7\17\34\30\20\0" "\0\0\0\0\0\0\0\0\0\4\14\34\370\360\340\0\0\0\0\0\0\0\0\0\0\20\30\34\17\7\3\0" "\0\0\0\0\0\0\200\200\240\240\340\300\300\300\340\240\240\200\200\0\0\0\0\0\2\2\3\1\1\1\3\2" "\2\0\0\0\0\0\200\200\200\200\200\360\360\360\200\200\200\200\200\0\0\0\0\0\0\0\0\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@xx\70\30\0\0" "\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\30\30\30\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\340p\70\30\10\0\0\0\0\0\10\14\16\7\3\1\0\0\0" "\0\0\0\0\0\0\360\370\370\14\4\204\304d<\370\370\360\0\0\0\0\7\17\17\36\23\21\20\20\30\17" "\17\7\0\0\0\0\0\0\20\20\30\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\0\0" "\0\0\0\0\0\0\10\10\14\4\4\4\4\204\204\314xx\60\0\0\0\30\34\34\26\22\23\21\21\20\20" "\20\20\20\0\0\0\10\10\14\4\4\204\204\204\204\314xx\60\0\0\0\10\10\30\20\20\20\20\20\20\31" "\17\17\6\0\0\0\200\300\340p\70\34\14\374\374\374\0\0\0\0\0\0\1\1\1\1\1\1\1\37\37\37" "\1\1\0\0\0\0|||DDDDDD\304\204\204\4\0\0\0\10\10\30\20\20\20\20\20\20\30" "\17\17\7\0\0\0\360\370\370\214\204\204\204\204\204\204\0\0\0\0\0\0\7\17\17\30\20\20\20\20\20\31" "\17\17\6\0\0\0\4\4\4\4\4\204\304\344|<\34\0\0\0\0\0\0\0\0\0\37\37\37\0\0\0" "\0\0\0\0\0\0\60xx\314\204\204\204\204\204\314xx\60\0\0\0\6\17\17\31\20\20\20\20\20\31" "\17\17\6\0\0\0\60xx\314\204\204\204\204\204\214\370\370\360\0\0\0\0\0\20\20\20\20\20\20\20\30" "\17\17\7\0\0\0\0\0\0\0\60\60\60\0\0\0\0\0\0\0\0\0\0\0\0\0\14\14\14\0\0\0" "\0\0\0\0\0\0\0\0\0\0\60\60\60\0\0\0\0\0\0\0\0\0\0\0\0\20\34\34\14\0\0\0" "\0\0\0\0\0\0\0\200\300\340p\70\34\14\4\0\0\0\0\0\0\0\0\0\1\3\7\16\34\30\20\0" "\0\0\0\0\0\0@@@@@@@@@@@@\0\0\0\0\2\2\2\2\2\2\2\2\2\2" "\2\2\0\0\0\0\0\0\0\4\14\34\70p\340\300\200\0\0\0\0\0\0\0\0\20\30\34\16\7\3\1" "\0\0\0\0\0\0\20\30\30\14\4\4\204\304\354x\70\20\0\0\0\0\0\0\0\0\0\33\33\33\0\0" "\0\0\0\0\0\360\370\370\14\4\304\344\344$$,\370\370\360\0\0\7\17\17\30\20\21\23\23\22\22\22" "\23\23\1\0\0\0\300\340\360\70\34\14\14\34\70\360\340\300\0\0\0\0\37\37\37\1\1\1\1\1\1\37" "\37\37\0\0\0\0\374\374\374\204\204\204\204\204\204\314xx\60\0\0\0\37\37\37\20\20\20\20\20\20\31" "\17\17\6\0\0\0\360\370\370\14\4\4\4\4\4\14\30\30\20\0\0\0\7\17\17\30\20\20\20\20\20\30" "\14\14\4\0\0\0\374\374\374\4\4\4\4\4\4\14\370\370\360\0\0\0\37\37\37\20\20\20\20\20\20\30" "\17\17\7\0\0\0\374\374\374\204\204\204\204\204\204\4\4\4\0\0\0\0\37\37\37\20\20\20\20\20\20\20" "\20\20\0\0\0\0\374\374\374\204\204\204\204\204\204\4\4\4\0\0\0\0\37\37\37\0\0\0\0\0\0\0" "\0\0\0\0\0\0\360\370\370\14\4\4\4\4\4\14\30\30\20\0\0\0\7\17\17\30\20\20\20\20\21\31" "\17\17\7\0\0\0\374\374\374\200\200\200\200\200\200\200\374\374\374\0\0\0\37\37\37\0\0\0\0\0\0\0" "\37\37\37\0\0\0\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\0\0\0\0\0\4\14\14\30\20\20\20\30\17" "\17\7\0\0\0\0\0\374\374\374\300\340\360\70\34\14\4\0\0\0\0\0\0\37\37\37\0\1\3\7\16\34" "\30\20\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\20\20\20\20\20\20\20" "\20\20\0\0\0\374\374\374\34\70p\340\340p\70\34\374\374\374\0\0\37\37\37\0\0\0\0\0\0\0\0" "\37\37\37\0\0\0\374\374\374\70p\340\300\200\0\0\374\374\374\0\0\0\37\37\37\0\0\0\1\3\7\16" "\37\37\37\0\0\0\360\370\370\14\4\4\4\4\4\14\370\370\360\0\0\0\7\17\17\30\20\20\20\20\20\30" "\17\17\7\0\0\0\374\374\374\204\204\204\204\204\204\314xx\60\0\0\0\37\37\37\0\0\0\0\0\0\0" "\0\0\0\0\0\0\360\370\370\14\4\4\4\4\4\14\370\370\360\0\0\0\7\17\17\30\20\20\24\34\34\70" "\77/\7\0\0\0\374\374\374\204\204\204\204\204\204\314xx\60\0\0\0\37\37\37\0\0\0\1\3\7\16" "\34\30\20\0\0\60xx\314\204\204\204\204\204\204\214\30\30\20\0\0\4\14\14\30\20\20\20\20\20\20\31" "\17\17\6\0\0\0\4\4\4\4\4\374\374\374\4\4\4\4\4\0\0\0\0\0\0\0\0\37\37\37\0\0" "\0\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\374\374\374\0\0\0\7\17\17\30\20\20\20\20\20\30" "\17\17\7\0\0\0\374\374\374\0\0\0\0\0\0\374\374\374\0\0\0\0\1\3\7\16\34\30\30\34\16\7" "\3\1\0\0\0\374\374\374\0\0\0\0\0\0\0\0\374\374\374\0\0\7\17\37\30\34\16\7\7\16\34\30" "\37\17\7\0\0\0\14\34\34\16\7\3" "\1\0\0\0\0\0@@@@@@@@@\300\300\300@\0\0\0\20\30\30\34\24\26\22\23\21\21" "\20\20\20\0\0\0\0\200\200\200\360x|\14\4\4\4\0\0\0\0\0\0\0\0\0\7\17\37\30\20\20" "\20\0\0\0\0\0\0\0\0\0\0|||\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\0\0" "\0\0\0\0\0\0\0\4\4\4\14|x\360\200\200\200\0\0\0\0\0\0\20\20\20\30\37\17\7\0\0" "\0\0\0\0\0\0\10\10\10\14\4\4\14\10\10\14\4\4\4\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\200\300@` \60\20\60 `@\300\200\200\0\3\3\3\2\2\2\2\2\2\2\2" "\2\3\3\3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\354\354\354\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\0\0" "\0\0\0\0\0\0\340\340\360\20\20\34\34\34\20\20\60 \0\0\0\3\3\7\4\4\34\34\34\4\6" "\6\2\2\0\0\0\0@@\370\370\374DD\4\14\10\10\0\0\0\0\30\30\30\37\37\37\20\20\20\20" "\30\10\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\204\214\234\270\360\340\300\340\360\270\234\214\204\0\0\0\2\2\2\2\2\37\37\37\2\2" "\2\2\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\304\304\356*:\22\22\22\62\42\346\304\304\0\0\0\10\10\31\21\23\22\22\22\27\25" "\35\10\10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\230\230\274\244\244\244\244\274\274\274\240\240\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\200\300@` \240\200\300@` \0\0\0\0\0\1\1\3\2\2\0\1\1" "\3\2\2\0\0\0\200\200\200\200\200\200\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0" "\0\7\7\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\14\14\36\22\22\22\22\36\14\14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0@@@@@\370\370\370@@@@@\0\0\0\10\10\10\10\10\13\13\13\10\10" "\10\10\10\0\204\304\306\342\242\262\222\236\214\214\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\340\340\340\0\0\0\0\0\340\340\340\0\0\0 \77\37\37\4\4\4\4\6" "\3\3\1\0\0xx\374\204\204\204\374\374\374\4\4\374\374\374\4\0\0\0\0\0\0\0\37\37\37\0\0" "\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\1\1\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\230\230\274\244\244\244\244\274\230\230\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0 `@\300\200\240 `@\300\200\200\0\0\0\2\2\3\1\1\0\2\2\3\1" "\1\0\0\0\0\10|||\0\0\200\200\300@` \0\0\0\4\4\6\2\3\1\31\30\34\24>" ">>\20\0\0\10|||\0\0\200\200\300@` \0\0\0\4\4\6\2\3\1\1 \62\62:" "..$\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\354\354\354\0\0\0\0\0\0\0\0\0\4\16\16\33\21\21\20\20\30\14" "\14\4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\206\306\346p\60\60p\346\306\206\0\0\0\0\0\37\37\37\2\2\2\2\2\2\37" "\37\37\0\0\0\0\0\200\302\342w\65\65w\342\302\200\0\0\0\0\0\37\37\37\2\2\2\2\2\2\37" "\37\37\0\0\0\300\340\360\270\234\214\204\374\374\374\204\204\204\204\4\0\37\37\37\0\0\0\0\37\37\37\20" "\20\20\20\20\0\0\360\370\370\14\4\4\4\4\4\4\14\30\30\0\0\0\3\7GLHHHHXx" "|&\6\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\360\360\360\24\24\26\22\23\21\21\20\20\0\0\0\0\37\37\37\21\21\21\21\21\21\20" "\20\20\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\364\364\364v\342\302\206\4\4\6\362\362\362\0\0\0\37\37\37\0\0\1\3\7\16\34" "\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\346\346\66\20\20\20\20\20\66\346\346\300\0\0\0\7\17\17\30\20\20\20\20\20\30" "\17\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\360\366\366\6\0\0\0\0\0\6\366\366\360\0\0\0\7\17\17\30\20\20\20\20\20\30" "\17\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\340\340\360\220\220\220\220\220\220\220\360``\0\0\0\37\77\77\4\4\4\4\4\4\4" "\7\3\3\0\0\0\0\0@DDLHXPP\300\200\200\0\0\0\16\16\37\21\21\21\21\21\21\21" "\37\37\37\0\0\0\0\0@PPXHLDD\300\200\200\0\0\0\16\16\37\21\21\21\21\21\21\21" "\37\37\37\0\0\0\0\20PXHLDLHX\320\220\200\0\0\0\16\16\37\21\21\21\21\21\21\21" "\37\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\30XX@@@@@X\330\230\200\0\0\0\16\16\37\21\21\21\21\21\21\21" "\37\37\37\0\0\0\0\0HH\134TTT\134H\310\200\200\0\0\0\16\16\37\21\21\21\21\21\21\21" "\37\37\37\0\0\0@@@@\300\200\200\300@@@\300\300\200\14\36\36\22\22\22\37\37\37\37\22\22" "\22\23\23\21\0\0\200\200\300@@@@@@\300\200\200\0\0\0\0\7\7OHHHHXx|" "$\4\0\0\0\0\200\200\300DDLHXPP\300\200\200\0\0\0\17\17\37\22\22\22\22\22\22\22" "\23\23\3\0\0\0\200\200\300@PPXHLD\304\200\200\0\0\0\17\17\37\22\22\22\22\22\22\22" "\23\23\3\0\0\0\200\220\320XHLDLHX\320\220\200\0\0\0\17\17\37\22\22\22\22\22\22\22" "\23\23\3\0\0\0\200\230\330X@@@@@X\330\230\200\0\0\0\17\17\37\22\22\22\22\22\22\22" "\23\23\3\0\0\0\0\0\4\4\14\310\330\320\20\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\0\0" "\0\0\0\0\0\0\0\0\0\20\20\330\310\314\4\4\0\0\0\0\0\0\0\0\0\0\0\37\37\37\0\0" "\0\0\0\0\0\0\0\20\20\30\10\314\304\314\10\30\20\20\0\0\0\0\0\0\0\0\0\37\37\37\0\0" "\0\0\0\0\0\0\0\30\30\30\0\300\300\300\0\30\30\30\0\0\0\0\0\0\0\0\0\37\37\37\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\320\320\320XHHXP\320\230\210\10\0\0\0\0\37\37\37\0\0\0\0\0\0\37" "\37\37\0\0\0\0\0\200\200\304DLHXP\320\200\200\0\0\0\0\7\17\17\30\20\20\20\20\20\30" "\17\17\7\0\0\0\0\200\200\320PXHLD\304\200\200\0\0\0\0\7\17\17\30\20\20\20\20\20\30" "\17\17\7\0\0\0\0\220\220\330HLDLH\330\220\220\0\0\0\0\7\17\17\30\20\20\20\20\20\30" "\17\17\7\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\230\230\330@@@@@\330\230\230\0\0\0\0\7\17\17\30\20\20\20\20\20\30" "\17\17\7\0\0\0\200\200\200\200\200\230\230\230\200\200\200\200\200\0\0\0\0\0\0\0\0\14\14\14\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\300\300\304\4\14\10\30\20\20\300\300\300\0\0\0\0\17\17\37\20\20\20\20\20\20\37" "\37\37\0\0\0\0\300\300\300\20\20\30\10\14\4\304\300\300\0\0\0\0\17\17\37\20\20\20\20\20\20\37" "\37\37\0\0\0\0\320\320\330\10\14\4\4\14\10\330\320\320\0\0\0\0\17\17\37\20\20\20\20\20\20\37" "\37\37\0\0\0\0\300\330\330\30\0\0\0\0\30\330\330\300\0\0\0\0\17\17\37\20\20\20\20\20\20\37" "\37\37\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0@\330\330\230\0\0\0\0\0\230\330\330@\0\0\0\0\0Acw>\34\16\7\3" "\1\0\0"; /* Fontname: -FreeType-Px437 Wyse700b-Medium-R-Normal--16-160-72-72-P-124-ISO10646-1 Copyright: Outline (vector) version (c) 2015 VileR Glyphs: 96/288 BBX Build Mode: 3 */ const uint8_t u8x8_font_px437wyse700b_2x2_r[3077] U8X8_FONT_SECTION("u8x8_font_px437wyse700b_2x2_r") = " \177\2\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\33\33\33\0\0" "\0\0\0\0\0\0\0\36\36\36\0\0\0\0\36\36\36\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0 \370\370\370 \370\370\370 \0\0\4\4\37\37\37\4\4\4\4\37\37" "\37\4\4\0\0\60xx\314\204\204\376\376\204\204\214\30\30\20\0\0\4\14\14\30\20\20\77\77\20\20\31" "\17\17\6\0\0\0\0\60\60\60\60\0\200\300\340p\60\20\0\0\0\0\0\20\30\34\16\7\3\1\30\30" "\30\30\0\0\0\0\20\70\270\354\304\304\304\354\70\70\220\200\200\0\0\6\17\17\31\20\20\20\31\37\17\17" "\37\31\20\0\0\0\0\0\0\20\30\34\16\6\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\340\360\370\34\14\4\0\0\0\0\0\0\0\0\0\0\3\7\17\34\30\20\0" "\0\0\0\0\0\0\0\0\0\4\14\34\370\360\340\0\0\0\0\0\0\0\0\0\0\20\30\34\17\7\3\0" "\0\0\0\0\0\0\200\200\240\240\340\300\300\300\340\240\240\200\200\0\0\0\0\0\2\2\3\1\1\1\3\2" "\2\0\0\0\0\0\200\200\200\200\200\360\360\360\200\200\200\200\200\0\0\0\0\0\0\0\0\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@xx\70\30\0\0" "\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\30\30\30\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\340p\70\30\10\0\0\0\0\0\10\14\16\7\3\1\0\0\0" "\0\0\0\0\0\0\360\370\370\14\4\204\304d<\370\370\360\0\0\0\0\7\17\17\36\23\21\20\20\30\17" "\17\7\0\0\0\0\0\0\20\20\30\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\0\0" "\0\0\0\0\0\0\10\10\14\4\4\4\4\204\204\314xx\60\0\0\0\30\34\34\26\22\23\21\21\20\20" "\20\20\20\0\0\0\10\10\14\4\4\204\204\204\204\314xx\60\0\0\0\10\10\30\20\20\20\20\20\20\31" "\17\17\6\0\0\0\200\300\340p\70\34\14\374\374\374\0\0\0\0\0\0\1\1\1\1\1\1\1\37\37\37" "\1\1\0\0\0\0|||DDDDDD\304\204\204\4\0\0\0\10\10\30\20\20\20\20\20\20\30" "\17\17\7\0\0\0\360\370\370\214\204\204\204\204\204\204\0\0\0\0\0\0\7\17\17\30\20\20\20\20\20\31" "\17\17\6\0\0\0\4\4\4\4\4\204\304\344|<\34\0\0\0\0\0\0\0\0\0\37\37\37\0\0\0" "\0\0\0\0\0\0\60xx\314\204\204\204\204\204\314xx\60\0\0\0\6\17\17\31\20\20\20\20\20\31" "\17\17\6\0\0\0\60xx\314\204\204\204\204\204\214\370\370\360\0\0\0\0\0\20\20\20\20\20\20\20\30" "\17\17\7\0\0\0\0\0\0\0\60\60\60\0\0\0\0\0\0\0\0\0\0\0\0\0\14\14\14\0\0\0" "\0\0\0\0\0\0\0\0\0\0\60\60\60\0\0\0\0\0\0\0\0\0\0\0\0\20\34\34\14\0\0\0" "\0\0\0\0\0\0\0\200\300\340p\70\34\14\4\0\0\0\0\0\0\0\0\0\1\3\7\16\34\30\20\0" "\0\0\0\0\0\0@@@@@@@@@@@@\0\0\0\0\2\2\2\2\2\2\2\2\2\2" "\2\2\0\0\0\0\0\0\0\4\14\34\70p\340\300\200\0\0\0\0\0\0\0\0\20\30\34\16\7\3\1" "\0\0\0\0\0\0\20\30\30\14\4\4\204\304\354x\70\20\0\0\0\0\0\0\0\0\0\33\33\33\0\0" "\0\0\0\0\0\360\370\370\14\4\304\344\344$$,\370\370\360\0\0\7\17\17\30\20\21\23\23\22\22\22" "\23\23\1\0\0\0\300\340\360\70\34\14\14\34\70\360\340\300\0\0\0\0\37\37\37\1\1\1\1\1\1\37" "\37\37\0\0\0\0\374\374\374\204\204\204\204\204\204\314xx\60\0\0\0\37\37\37\20\20\20\20\20\20\31" "\17\17\6\0\0\0\360\370\370\14\4\4\4\4\4\14\30\30\20\0\0\0\7\17\17\30\20\20\20\20\20\30" "\14\14\4\0\0\0\374\374\374\4\4\4\4\4\4\14\370\370\360\0\0\0\37\37\37\20\20\20\20\20\20\30" "\17\17\7\0\0\0\374\374\374\204\204\204\204\204\204\4\4\4\0\0\0\0\37\37\37\20\20\20\20\20\20\20" "\20\20\0\0\0\0\374\374\374\204\204\204\204\204\204\4\4\4\0\0\0\0\37\37\37\0\0\0\0\0\0\0" "\0\0\0\0\0\0\360\370\370\14\4\4\4\4\4\14\30\30\20\0\0\0\7\17\17\30\20\20\20\20\21\31" "\17\17\7\0\0\0\374\374\374\200\200\200\200\200\200\200\374\374\374\0\0\0\37\37\37\0\0\0\0\0\0\0" "\37\37\37\0\0\0\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\374\374\374\0\0\0\0\0\4\14\14\30\20\20\20\30\17" "\17\7\0\0\0\0\0\374\374\374\300\340\360\70\34\14\4\0\0\0\0\0\0\37\37\37\0\1\3\7\16\34" "\30\20\0\0\0\0\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\20\20\20\20\20\20\20" "\20\20\0\0\0\374\374\374\34\70p\340\340p\70\34\374\374\374\0\0\37\37\37\0\0\0\0\0\0\0\0" "\37\37\37\0\0\0\374\374\374\70p\340\300\200\0\0\374\374\374\0\0\0\37\37\37\0\0\0\1\3\7\16" "\37\37\37\0\0\0\360\370\370\14\4\4\4\4\4\14\370\370\360\0\0\0\7\17\17\30\20\20\20\20\20\30" "\17\17\7\0\0\0\374\374\374\204\204\204\204\204\204\314xx\60\0\0\0\37\37\37\0\0\0\0\0\0\0" "\0\0\0\0\0\0\360\370\370\14\4\4\4\4\4\14\370\370\360\0\0\0\7\17\17\30\20\20\24\34\34\70" "\77/\7\0\0\0\374\374\374\204\204\204\204\204\204\314xx\60\0\0\0\37\37\37\0\0\0\1\3\7\16" "\34\30\20\0\0\60xx\314\204\204\204\204\204\204\214\30\30\20\0\0\4\14\14\30\20\20\20\20\20\20\31" "\17\17\6\0\0\0\4\4\4\4\4\374\374\374\4\4\4\4\4\0\0\0\0\0\0\0\0\37\37\37\0\0" "\0\0\0\0\0\0\374\374\374\0\0\0\0\0\0\0\374\374\374\0\0\0\7\17\17\30\20\20\20\20\20\30" "\17\17\7\0\0\0\374\374\374\0\0\0\0\0\0\374\374\374\0\0\0\0\1\3\7\16\34\30\30\34\16\7" "\3\1\0\0\0\374\374\374\0\0\0\0\0\0\0\0\374\374\374\0\0\7\17\37\30\34\16\7\7\16\34\30" "\37\17\7\0\0\0\14\34\34\16\7\3" "\1\0\0\0\0\0@@@@@@@@@\300\300\300@\0\0\0\20\30\30\34\24\26\22\23\21\21" "\20\20\20\0\0\0\0\200\200\200\360x|\14\4\4\4\0\0\0\0\0\0\0\0\0\7\17\37\30\20\20" "\20\0\0\0\0\0\0\0\0\0\0|||\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\0\0" "\0\0\0\0\0\0\0\4\4\4\14|x\360\200\200\200\0\0\0\0\0\0\20\20\20\30\37\17\7\0\0" "\0\0\0\0\0\0\10\10\10\14\4\4\14\10\10\14\4\4\4\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\200\200\300@` \60\20\60 `@\300\200\200\0\3\3\3\2\2\2\2\2\2\2\2" "\2\3\3\3"; /* Fontname: -FreeType-Px437 Wyse700b-Medium-R-Normal--16-160-72-72-P-124-ISO10646-1 Copyright: Outline (vector) version (c) 2015 VileR Glyphs: 18/288 BBX Build Mode: 3 */ const uint8_t u8x8_font_px437wyse700b_2x2_n[868] U8X8_FONT_SECTION("u8x8_font_px437wyse700b_2x2_n") = " :\2\2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\200\200\240\240\340\300\300\300\340\240\240\200\200\0\0\0\0\0\2\2\3\1\1\1\3\2" "\2\0\0\0\0\0\200\200\200\200\200\360\360\360\200\200\200\200\200\0\0\0\0\0\0\0\0\7\7\7\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0@xx\70\30\0\0" "\0\0\0\0\0\0\200\200\200\200\200\200\200\200\200\200\200\200\200\0\0\0\0\0\0\0\0\0\0\0\0\0" "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\30\30\30\30\0\0" "\0\0\0\0\0\0\0\0\0\0\0\200\300\340p\70\30\10\0\0\0\0\0\10\14\16\7\3\1\0\0\0" "\0\0\0\0\0\0\360\370\370\14\4\204\304d<\370\370\360\0\0\0\0\7\17\17\36\23\21\20\20\30\17" "\17\7\0\0\0\0\0\0\20\20\30\374\374\374\0\0\0\0\0\0\0\0\0\0\0\0\0\37\37\37\0\0" "\0\0\0\0\0\0\10\10\14\4\4\4\4\204\204\314xx\60\0\0\0\30\34\34\26\22\23\21\21\20\20" "\20\20\20\0\0\0\10\10\14\4\4\204\204\204\204\314xx\60\0\0\0\10\10\30\20\20\20\20\20\20\31" "\17\17\6\0\0\0\200\300\340p\70\34\14\374\374\374\0\0\0\0\0\0\1\1\1\1\1\1\1\37\37\37" "\1\1\0\0\0\0|||DDDDDD\304\204\204\4\0\0\0\10\10\30\20\20\20\20\20\20\30" "\17\17\7\0\0\0\360\370\370\214\204\204\204\204\204\204\0\0\0\0\0\0\7\17\17\30\20\20\20\20\20\31" "\17\17\6\0\0\0\4\4\4\4\4\204\304\344|<\34\0\0\0\0\0\0\0\0\0\37\37\37\0\0\0" "\0\0\0\0\0\0\60xx\314\204\204\204\204\204\314xx\60\0\0\0\6\17\17\31\20\20\20\20\20\31" "\17\17\6\0\0\0\60xx\314\204\204\204\204\204\214\370\370\360\0\0\0\0\0\20\20\20\20\20\20\20\30" "\17\17\7\0\0\0\0\0\0\0\60\60\60\0\0\0\0\0\0\0\0\0\0\0\0\0\14\14\14\0\0\0" "\0\0\0"; ================================================ FILE: Drivers/u8g2/Src/u8x8_gpio.c ================================================ /* u8x8_gpio.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" void u8x8_gpio_call(u8x8_t *u8x8, uint8_t msg, uint8_t arg) { u8x8->gpio_and_delay_cb(u8x8, msg, arg, NULL); } /* void u8x8_gpio_Delay(u8x8_t *u8x8, uint8_t msg, uint8_t dly) { u8x8->gpio_and_delay_cb(u8x8, msg, dly, NULL); } */ ================================================ FILE: Drivers/u8g2/Src/u8x8_input_value.c ================================================ /* u8x8_input_value.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" /* return: 0: value is not changed (HOME/Break Button pressed) 1: value has been updated */ uint8_t u8x8_UserInterfaceInputValue(u8x8_t *u8x8, const char *title, const char *pre, uint8_t *value, uint8_t lo, uint8_t hi, uint8_t digits, const char *post) { uint8_t height; uint8_t y; uint8_t width; uint8_t x; uint8_t local_value = *value; uint8_t r; uint8_t event; /* calculate overall height of the input value box */ height = 1; /* button line */ height += u8x8_GetStringLineCnt(title); /* calculate offset from top */ y = 0; if ( height < u8x8_GetRows(u8x8) ) { y = u8x8_GetRows(u8x8); y -= height; y /= 2; } /* calculate offset from left for the label */ x = 0; width = u8x8_GetUTF8Len(u8x8, pre); width += digits; width += u8x8_GetUTF8Len(u8x8, post); if ( width < u8x8_GetCols(u8x8) ) { x = u8x8_GetCols(u8x8); x -= width; x /= 2; } /* render */ u8x8_ClearDisplay(u8x8); /* required, because not everything is filled */ u8x8_SetInverseFont(u8x8, 0); y += u8x8_DrawUTF8Lines(u8x8, 0, y, u8x8_GetCols(u8x8), title); x += u8x8_DrawUTF8(u8x8, x, y, pre); u8x8_DrawUTF8(u8x8, x+digits, y, post); u8x8_SetInverseFont(u8x8, 1); /* event loop */ u8x8_DrawUTF8(u8x8, x, y, u8x8_u8toa(local_value, digits)); for(;;) { event = u8x8_GetMenuEvent(u8x8); if ( event == U8X8_MSG_GPIO_MENU_SELECT ) { *value = local_value; r = 1; break; } else if ( event == U8X8_MSG_GPIO_MENU_HOME ) { r = 0; break; } else if ( event == U8X8_MSG_GPIO_MENU_NEXT || event == U8X8_MSG_GPIO_MENU_UP ) { if ( local_value >= hi ) local_value = lo; else local_value++; u8x8_DrawUTF8(u8x8, x, y, u8x8_u8toa(local_value, digits)); } else if ( event == U8X8_MSG_GPIO_MENU_PREV || event == U8X8_MSG_GPIO_MENU_DOWN ) { if ( local_value <= lo ) local_value = hi; else local_value--; u8x8_DrawUTF8(u8x8, x, y, u8x8_u8toa(local_value, digits)); } } u8x8_SetInverseFont(u8x8, 0); return r; } ================================================ FILE: Drivers/u8g2/Src/u8x8_message.c ================================================ /* u8x8_message.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" uint8_t u8x8_draw_button_line(u8x8_t *u8x8, uint8_t y, uint8_t w, uint8_t cursor, const char *s) { uint8_t i; uint8_t cnt; uint8_t total; uint8_t d; uint8_t x; cnt = u8x8_GetStringLineCnt(s); /* calculate the width of the button */ total = 0; for( i = 0; i < cnt; i++ ) { total += u8x8_GetUTF8Len(u8x8, u8x8_GetStringLineStart(i, s)); } total += (cnt-1); /* had one space between the buttons */ /* calculate the left offset */ d = 0; if ( total < w ) { d = w; d -= total; d /= 2; } /* draw the buttons */ x = d; u8x8_SetInverseFont(u8x8, 0); for( i = 0; i < cnt; i++ ) { if ( i == cursor ) u8x8_SetInverseFont(u8x8, 1); x+=u8x8_DrawUTF8(u8x8, x, y, u8x8_GetStringLineStart(i, s)); u8x8_SetInverseFont(u8x8, 0); x+=u8x8_DrawUTF8(u8x8, x, y, " "); } /* return the number of buttons */ return cnt; } /* title1: Multiple lines,separated by '\n' title2: A single line/string which is terminated by '\0' or '\n' . "title2" accepts the return value from u8x8_GetStringLineStart() title3: Multiple lines,separated by '\n' buttons: one more more buttons separated by '\n' and terminated with '\0' */ uint8_t u8x8_UserInterfaceMessage(u8x8_t *u8x8, const char *title1, const char *title2, const char *title3, const char *buttons) { uint8_t height; uint8_t y; uint8_t cursor = 0; uint8_t button_cnt; uint8_t event; u8x8_SetInverseFont(u8x8, 0); /* calculate overall height of the message box */ height = 1; /* button line */ height += u8x8_GetStringLineCnt(title1); if ( title2 != NULL ) height ++; height += u8x8_GetStringLineCnt(title3); /* calculate offset from top */ y = 0; if ( height < u8x8_GetRows(u8x8) ) { y = u8x8_GetRows(u8x8); y -= height; y /= 2; } /* draw message box */ u8x8_ClearDisplay(u8x8); /* required, because not everything is filled */ y += u8x8_DrawUTF8Lines(u8x8, 0, y, u8x8_GetCols(u8x8), title1); if ( title2 != NULL ) { u8x8_DrawUTF8Line(u8x8, 0, y, u8x8_GetCols(u8x8), title2); y++; } y += u8x8_DrawUTF8Lines(u8x8, 0, y, u8x8_GetCols(u8x8), title3); button_cnt = u8x8_draw_button_line(u8x8, y, u8x8_GetCols(u8x8), cursor, buttons); for(;;) { event = u8x8_GetMenuEvent(u8x8); if ( event == U8X8_MSG_GPIO_MENU_SELECT ) return cursor+1; else if ( event == U8X8_MSG_GPIO_MENU_HOME ) break; else if ( event == U8X8_MSG_GPIO_MENU_NEXT || event == U8X8_MSG_GPIO_MENU_UP ) { cursor++; if ( cursor >= button_cnt ) cursor = 0; u8x8_draw_button_line(u8x8, y, u8x8_GetCols(u8x8), cursor, buttons); } else if ( event == U8X8_MSG_GPIO_MENU_PREV || event == U8X8_MSG_GPIO_MENU_DOWN ) { if ( cursor == 0 ) cursor = button_cnt; cursor--; u8x8_draw_button_line(u8x8, y, u8x8_GetCols(u8x8), cursor, buttons); } } return 0; } ================================================ FILE: Drivers/u8g2/Src/u8x8_selection_list.c ================================================ /* u8x8_selection_list.c selection list with scroll option Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" /* increase the cursor position */ void u8sl_Next(u8sl_t *u8sl) { u8sl->current_pos++; if ( u8sl->current_pos >= u8sl->total ) { u8sl->current_pos = 0; u8sl->first_pos = 0; } else { if ( u8sl->first_pos + u8sl->visible <= u8sl->current_pos + 1 ) { u8sl->first_pos = u8sl->current_pos - u8sl->visible + 1; } } } void u8sl_Prev(u8sl_t *u8sl) { if ( u8sl->current_pos == 0 ) { u8sl->current_pos = u8sl->total - 1; u8sl->first_pos = 0; if ( u8sl->total > u8sl->visible ) u8sl->first_pos = u8sl->total - u8sl->visible; } else { u8sl->current_pos--; if ( u8sl->first_pos > u8sl->current_pos ) u8sl->first_pos = u8sl->current_pos; } } void u8x8_DrawSelectionList(u8x8_t *u8x8, u8sl_t *u8sl, u8x8_sl_cb sl_cb, const void *aux) { uint8_t i; for( i = 0; i < u8sl->visible; i++ ) { sl_cb(u8x8, u8sl, i+u8sl->first_pos, aux); } } /* selection list with string line */ void u8x8_sl_string_line_cb(u8x8_t *u8x8, u8sl_t *u8sl, uint8_t idx, const void *aux) { const char *s; uint8_t row; /* calculate offset from display upper border */ row = u8sl->y; /* calculate target pos */ row += idx; row -= u8sl->first_pos; /* check whether this is the current cursor line */ if ( idx == u8sl->current_pos ) u8x8_SetInverseFont(u8x8, 1); else u8x8_SetInverseFont(u8x8, 0); /* get the line from the array */ s = u8x8_GetStringLineStart(idx, (const char *)aux); /* draw the line */ if ( s == NULL ) s = ""; u8x8_DrawUTF8Line(u8x8, u8sl->x, row, u8x8_GetCols(u8x8), s); u8x8_SetInverseFont(u8x8, 0); } /* title: NULL for no title, valid str for title line. Can contain mutliple lines, separated by '\n' start_pos: default position for the cursor (starts with 1) sl: string list (list of strings separated by \n) returns 0 if user has pressed the home key returns the selected line+1 if user has pressed the select key (e.g. 1 for the first line) */ uint8_t u8x8_UserInterfaceSelectionList(u8x8_t *u8x8, const char *title, uint8_t start_pos, const char *sl) { u8sl_t u8sl; uint8_t event; uint8_t title_lines; if ( start_pos > 0 ) start_pos--; u8sl.visible = u8x8_GetRows(u8x8); u8sl.total = u8x8_GetStringLineCnt(sl); u8sl.first_pos = 0; u8sl.current_pos = start_pos; u8sl.x = 0; u8sl.y = 0; //u8x8_ClearDisplay(u8x8); /* not required because all is 100% filled */ u8x8_SetInverseFont(u8x8, 0); if ( title != NULL ) { title_lines = u8x8_DrawUTF8Lines(u8x8, u8sl.x, u8sl.y, u8x8_GetCols(u8x8), title); u8sl.y+=title_lines; u8sl.visible-=title_lines; } if ( u8sl.current_pos >= u8sl.total ) u8sl.current_pos = u8sl.total-1; u8x8_DrawSelectionList(u8x8, &u8sl, u8x8_sl_string_line_cb, sl); for(;;) { event = u8x8_GetMenuEvent(u8x8); if ( event == U8X8_MSG_GPIO_MENU_SELECT ) return u8sl.current_pos+1; else if ( event == U8X8_MSG_GPIO_MENU_HOME ) return 0; else if ( event == U8X8_MSG_GPIO_MENU_NEXT || event == U8X8_MSG_GPIO_MENU_DOWN ) { u8sl_Next(&u8sl); u8x8_DrawSelectionList(u8x8, &u8sl, u8x8_sl_string_line_cb, sl); } else if ( event == U8X8_MSG_GPIO_MENU_PREV || event == U8X8_MSG_GPIO_MENU_UP ) { u8sl_Prev(&u8sl); u8x8_DrawSelectionList(u8x8, &u8sl, u8x8_sl_string_line_cb, sl); } } } ================================================ FILE: Drivers/u8g2/Src/u8x8_setup.c ================================================ /* u8x8_setup.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" /* universal dummy callback, which will be default for all callbacks */ uint8_t u8x8_dummy_cb(U8X8_UNUSED u8x8_t *u8x8, U8X8_UNUSED uint8_t msg, U8X8_UNUSED uint8_t arg_int, U8X8_UNUSED void *arg_ptr) { /* the dummy callback will not handle any message and will fail for all messages */ return 0; } static const u8x8_display_info_t u8x8_null_display_info = { /* chip_enable_level = */ 0, /* chip_disable_level = */ 1, /* post_chip_enable_wait_ns = */ 0, /* pre_chip_disable_wait_ns = */ 0, /* reset_pulse_width_ms = */ 0, /* post_reset_wait_ms = */ 0, /* sda_setup_time_ns = */ 0, /* sck_pulse_width_ns = */ 0, /* half of cycle time (100ns according to datasheet), AVR: below 70: 8 MHz, >= 70 --> 4MHz clock */ /* sck_clock_hz = */ 4000000UL, /* since Arduino 1.6.0, the SPI bus speed in Hz. Should be 1000000000/sck_pulse_width_ns */ /* spi_mode = */ 0, /* active high, rising edge */ /* i2c_bus_clock_100kHz = */ 4, /* data_setup_time_ns = */ 0, /* write_pulse_width_ns = */ 0, /* tile_width = */ 1, /* 8x8 */ /* tile_hight = */ 1, /* default_x_offset = */ 0, /* flipmode_x_offset = */ 0, /* pixel_width = */ 8, /* pixel_height = */ 8 }; /* a special null device */ uint8_t u8x8_d_null_cb(u8x8_t *u8x8, uint8_t msg, U8X8_UNUSED uint8_t arg_int, U8X8_UNUSED void *arg_ptr) { switch(msg) { case U8X8_MSG_DISPLAY_SETUP_MEMORY: u8x8_d_helper_display_setup_memory(u8x8, &u8x8_null_display_info); break; case U8X8_MSG_DISPLAY_INIT: u8x8_d_helper_display_init(u8x8); break; } /* the null device callback will succeed for all messages */ return 1; } /* Description: Setup u8x8 Args: u8x8 An empty u8x8 structure */ void u8x8_SetupDefaults(u8x8_t *u8x8) { u8x8->display_info = NULL; u8x8->display_cb = u8x8_dummy_cb; u8x8->cad_cb = u8x8_dummy_cb; u8x8->byte_cb = u8x8_dummy_cb; u8x8->gpio_and_delay_cb = u8x8_dummy_cb; u8x8->is_font_inverse_mode = 0; u8x8->device_address = 0; u8x8->utf8_state = 0; /* also reset by u8x8_utf8_init */ u8x8->bus_clock = 0; /* issue 769 */ u8x8->i2c_address = 255; u8x8->debounce_default_pin_state = 255; /* assume all low active buttons */ #ifdef U8X8_USE_PINS { uint8_t i; for( i = 0; i < U8X8_PIN_CNT; i++ ) u8x8->pins[i] = U8X8_PIN_NONE; } #endif } /* Description: Setup u8x8 and assign the callback function. The dummy callback "u8x8_dummy_cb" can be used, if no callback is required. This setup will not communicate with the display itself. Use u8x8_InitDisplay() to send the startup code to the Display. Args: u8x8 An empty u8x8 structure display_cb Display/controller specific callback function cad_cb Display controller specific communication callback function byte_cb Display controller/communication specific callback funtion gpio_and_delay_cb Environment specific callback function */ void u8x8_Setup(u8x8_t *u8x8, u8x8_msg_cb display_cb, u8x8_msg_cb cad_cb, u8x8_msg_cb byte_cb, u8x8_msg_cb gpio_and_delay_cb) { /* setup defaults and reset pins to U8X8_PIN_NONE */ u8x8_SetupDefaults(u8x8); /* setup specific callbacks */ u8x8->display_cb = display_cb; u8x8->cad_cb = cad_cb; u8x8->byte_cb = byte_cb; u8x8->gpio_and_delay_cb = gpio_and_delay_cb; /* setup display info */ u8x8_SetupMemory(u8x8); } ================================================ FILE: Drivers/u8g2/Src/u8x8_string.c ================================================ /* u8x8_string.c string line procedures Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" uint8_t u8x8_GetStringLineCnt(const char *str) { char e; uint8_t line_cnt = 1; if ( str == NULL ) return 0; for(;;) { e = *str; if ( e == '\0' ) break; str++; if ( e == '\n' ) line_cnt++; } return line_cnt; } /* Assumes strings, separated by '\n' in "str". Returns the string at index "line_idx". First strng has line_idx = 0 Example: Returns "xyz" for line_idx = 1 with str = "abc\nxyz" Support both UTF8 and normal strings. */ const char *u8x8_GetStringLineStart(uint8_t line_idx, const char *str ) { char e; uint8_t line_cnt = 1; if ( line_idx == 0 ) return str; for(;;) { e = *str; if ( e == '\0' ) break; str++; if ( e == '\n' ) { if ( line_cnt == line_idx ) return str; line_cnt++; } } return NULL; /* line not found */ } /* copy until first '\n' or '\0' in str */ /* Important: There is no string overflow check, ensure */ /* that the destination buffer is large enough */ void u8x8_CopyStringLine(char *dest, uint8_t line_idx, const char *str) { if ( dest == NULL ) return; str = u8x8_GetStringLineStart( line_idx, str ); if ( str != NULL ) { for(;;) { if ( *str == '\n' || *str == '\0' ) break; *dest = *str; dest++; str++; } } *dest = '\0'; } /* Draw a string Extend the string to size "w" Center the string within "w" return the size of the string */ uint8_t u8x8_DrawUTF8Line(u8x8_t *u8x8, uint8_t x, uint8_t y, uint8_t w, const char *s) { uint8_t d, lw; uint8_t cx, dx; d = 0; lw = u8x8_GetUTF8Len(u8x8, s); if ( lw < w ) { d = w; d -=lw; d /= 2; } cx = x; dx = cx + d; while( cx < dx ) { u8x8_DrawUTF8(u8x8, cx, y, " "); cx++; } cx += u8x8_DrawUTF8(u8x8, cx, y, s); dx = x + w; while( cx < dx ) { u8x8_DrawUTF8(u8x8, cx, y, " "); cx++; } cx -= x; return cx; } /* draw several lines at position x,y. lines are stored in s and must be separated with '\n'. lines can be centered with respect to "w" if s == NULL nothing is drawn and 0 is returned returns the number of lines in s */ uint8_t u8x8_DrawUTF8Lines(u8x8_t *u8x8, uint8_t x, uint8_t y, uint8_t w, const char *s) { uint8_t i; uint8_t cnt; cnt = u8x8_GetStringLineCnt(s); for( i = 0; i < cnt; i++ ) { u8x8_DrawUTF8Line(u8x8, x, y, w, u8x8_GetStringLineStart(i, s)); y++; } return cnt; } ================================================ FILE: Drivers/u8g2/Src/u8x8_u16toa.c ================================================ /* u8x8_u16toa.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" const char *u8x8_u16toap(char * dest, uint16_t v) { uint8_t pos; uint8_t d; uint16_t c; c = 10000; for( pos = 0; pos < 5; pos++ ) { d = '0'; while( v >= c ) { v -= c; d++; } dest[pos] = d; c /= 10; } dest[5] = '\0'; return dest; } /* v = value, d = number of digits */ const char *u8x8_u16toa(uint16_t v, uint8_t d) { static char buf[6]; d = 5-d; return u8x8_u16toap(buf, v) + d; } ================================================ FILE: Drivers/u8g2/Src/u8x8_u8toa.c ================================================ /* u8x8_u8toa.c Universal 8bit Graphics Library (https://github.com/olikraus/u8g2/) Copyright (c) 2016, olikraus@gmail.com All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include "u8x8.h" static const unsigned char u8x8_u8toa_tab[3] = { 100, 10, 1 } ; const char *u8x8_u8toap(char * dest, uint8_t v) { uint8_t pos; uint8_t d; uint8_t c; for( pos = 0; pos < 3; pos++ ) { d = '0'; c = *(u8x8_u8toa_tab+pos); while( v >= c ) { v -= c; d++; } dest[pos] = d; } dest[3] = '\0'; return dest; } /* v = value, d = number of digits */ const char *u8x8_u8toa(uint8_t v, uint8_t d) { static char buf[4]; d = 3-d; return u8x8_u8toap(buf, v) + d; } ================================================ FILE: F1-T12+858D.ioc ================================================ #MicroXplorer Configuration settings - do not modify ADC1.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_2 ADC1.Channel-1\#ChannelRegularConversion=ADC_CHANNEL_3 ADC1.Channel-2\#ChannelRegularConversion=ADC_CHANNEL_5 ADC1.Channel-3\#ChannelRegularConversion=ADC_CHANNEL_6 ADC1.ContinuousConvMode=ENABLE ADC1.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,NbrOfConversionFlag,ContinuousConvMode,Mode,Rank-1\#ChannelRegularConversion,Channel-1\#ChannelRegularConversion,SamplingTime-1\#ChannelRegularConversion,NbrOfConversion,Rank-2\#ChannelRegularConversion,Channel-2\#ChannelRegularConversion,SamplingTime-2\#ChannelRegularConversion,Rank-3\#ChannelRegularConversion,Channel-3\#ChannelRegularConversion,SamplingTime-3\#ChannelRegularConversion,master ADC1.Mode=ADC_DUALMODE_INTERLFAST ADC1.NbrOfConversion=4 ADC1.NbrOfConversionFlag=1 ADC1.Rank-0\#ChannelRegularConversion=1 ADC1.Rank-1\#ChannelRegularConversion=2 ADC1.Rank-2\#ChannelRegularConversion=3 ADC1.Rank-3\#ChannelRegularConversion=4 ADC1.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_71CYCLES_5 ADC1.SamplingTime-1\#ChannelRegularConversion=ADC_SAMPLETIME_71CYCLES_5 ADC1.SamplingTime-2\#ChannelRegularConversion=ADC_SAMPLETIME_71CYCLES_5 ADC1.SamplingTime-3\#ChannelRegularConversion=ADC_SAMPLETIME_71CYCLES_5 ADC1.master=1 ADC2.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_4 ADC2.ContinuousConvMode=ENABLE ADC2.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,NbrOfConversionFlag,ContinuousConvMode,Mode,NbrOfConversion ADC2.Mode=ADC_DUALMODE_INTERLFAST ADC2.NbrOfConversion=1 ADC2.NbrOfConversionFlag=1 ADC2.Rank-0\#ChannelRegularConversion=1 ADC2.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_71CYCLES_5 CAD.formats= CAD.pinconfig= CAD.provider= Dma.ADC1.0.Direction=DMA_PERIPH_TO_MEMORY Dma.ADC1.0.Instance=DMA1_Channel1 Dma.ADC1.0.MemDataAlignment=DMA_MDATAALIGN_WORD Dma.ADC1.0.MemInc=DMA_MINC_ENABLE Dma.ADC1.0.Mode=DMA_NORMAL Dma.ADC1.0.PeriphDataAlignment=DMA_PDATAALIGN_WORD Dma.ADC1.0.PeriphInc=DMA_PINC_DISABLE Dma.ADC1.0.Priority=DMA_PRIORITY_LOW Dma.ADC1.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority Dma.Request0=ADC1 Dma.RequestsNb=1 File.Version=6 I2C1.I2C_Mode=I2C_Fast I2C1.IPParameters=I2C_Mode KeepUserPlacement=false Mcu.CPN=STM32F103C8T6 Mcu.Family=STM32F1 Mcu.IP0=ADC1 Mcu.IP1=ADC2 Mcu.IP10=TIM4 Mcu.IP2=DMA Mcu.IP3=I2C1 Mcu.IP4=NVIC Mcu.IP5=RCC Mcu.IP6=SPI2 Mcu.IP7=SYS Mcu.IP8=TIM1 Mcu.IP9=TIM2 Mcu.IPNb=11 Mcu.Name=STM32F103C(8-B)Tx Mcu.Package=LQFP48 Mcu.Pin0=PD0-OSC_IN Mcu.Pin1=PD1-OSC_OUT Mcu.Pin10=PB1 Mcu.Pin11=PB10 Mcu.Pin12=PB11 Mcu.Pin13=PB13 Mcu.Pin14=PB15 Mcu.Pin15=PA8 Mcu.Pin16=PA9 Mcu.Pin17=PA10 Mcu.Pin18=PA11 Mcu.Pin19=PA12 Mcu.Pin2=PA0-WKUP Mcu.Pin20=PA13 Mcu.Pin21=PA14 Mcu.Pin22=PA15 Mcu.Pin23=PB3 Mcu.Pin24=PB6 Mcu.Pin25=PB7 Mcu.Pin26=PB9 Mcu.Pin27=VP_SYS_VS_Systick Mcu.Pin28=VP_TIM1_VS_no_output3 Mcu.Pin29=VP_TIM2_VS_ClockSourceINT Mcu.Pin3=PA1 Mcu.Pin30=VP_TIM2_VS_no_output3 Mcu.Pin31=VP_TIM2_VS_no_output4 Mcu.Pin32=VP_TIM4_VS_ClockSourceINT Mcu.Pin4=PA2 Mcu.Pin5=PA3 Mcu.Pin6=PA4 Mcu.Pin7=PA5 Mcu.Pin8=PA6 Mcu.Pin9=PB0 Mcu.PinsNb=33 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32F103C8Tx MxCube.Version=6.9.1 MxDb.Version=DB.6.0.91 NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.DMA1_Channel1_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.EXTI0_IRQn=true\:0\:0\:false\:false\:false\:true\:true\:true NVIC.ForceEnableDMAVector=true NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.MemoryManagement_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.NonMaskableInt_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.PendSV_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4 NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false NVIC.SysTick_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:false NVIC.TIM1_CC_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.TIM2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false PA0-WKUP.GPIOParameters=GPIO_Label PA0-WKUP.GPIO_Label=IRON_POWER PA0-WKUP.Signal=S_TIM2_CH1_ETR PA1.GPIOParameters=GPIO_Label PA1.GPIO_Label=FAN_POWER PA1.Signal=S_TIM2_CH2 PA10.GPIOParameters=GPIO_Label PA10.GPIO_Label=OLED_CS PA10.Locked=true PA10.Signal=GPIO_Output PA11.GPIOParameters=GPIO_Label PA11.GPIO_Label=GUN_POWER PA11.Signal=S_TIM1_CH4 PA12.GPIOParameters=GPIO_PuPd,GPIO_Label PA12.GPIO_Label=AC_ZERO PA12.GPIO_PuPd=GPIO_PULLUP PA12.Signal=S_TIM1_ETR PA13.Mode=Serial_Wire PA13.Signal=SYS_JTMS-SWDIO PA14.Mode=Serial_Wire PA14.Signal=SYS_JTCK-SWCLK PA15.GPIOParameters=GPIO_Label PA15.GPIO_Label=AC_RELAY PA15.Locked=true PA15.Signal=GPIO_Output PA2.GPIOParameters=GPIO_Label PA2.GPIO_Label=IRON_CURRENT PA2.Signal=ADCx_IN2 PA3.GPIOParameters=GPIO_Label PA3.GPIO_Label=FAN_CURRENT PA3.Locked=true PA3.Signal=ADCx_IN3 PA4.GPIOParameters=GPIO_Label PA4.GPIO_Label=IRON_TEMP PA4.Locked=true PA4.Signal=ADCx_IN4 PA5.GPIOParameters=GPIO_Label PA5.GPIO_Label=GUN_TEMP PA5.Locked=true PA5.Signal=ADCx_IN5 PA6.GPIOParameters=GPIO_Label PA6.GPIO_Label=AMBIENT PA6.Locked=true PA6.Signal=ADCx_IN6 PA8.GPIOParameters=GPIO_PuPd,GPIO_Label PA8.GPIO_Label=GUN_REED PA8.GPIO_PuPd=GPIO_NOPULL PA8.Locked=true PA8.Signal=GPIO_Input PA9.GPIOParameters=GPIO_PuPd,GPIO_Label PA9.GPIO_Label=ENCODER_R PA9.GPIO_PuPd=GPIO_PULLUP PA9.Locked=true PA9.Signal=GPIO_Input PB0.GPIOParameters=GPIO_PuPd,GPIO_Label,GPIO_ModeDefaultEXTI PB0.GPIO_Label=ENCODER_L PB0.GPIO_ModeDefaultEXTI=GPIO_MODE_IT_RISING_FALLING PB0.GPIO_PuPd=GPIO_PULLUP PB0.Locked=true PB0.Signal=GPXTI0 PB1.GPIOParameters=GPIO_PuPd,GPIO_Label PB1.GPIO_Label=ENCODER_B PB1.GPIO_PuPd=GPIO_PULLUP PB1.Locked=true PB1.Signal=GPIO_Input PB10.GPIOParameters=GPIO_Label PB10.GPIO_Label=OLED_RESET PB10.Locked=true PB10.Signal=GPIO_Output PB11.GPIOParameters=GPIO_Label PB11.GPIO_Label=OLED_DC PB11.Locked=true PB11.Signal=GPIO_Output PB13.GPIOParameters=GPIO_Label PB13.GPIO_Label=OLED_SCK PB13.Mode=TX_Only_Simplex_Unidirect_Master PB13.Signal=SPI2_SCK PB15.GPIOParameters=GPIO_Label PB15.GPIO_Label=OLED_SDA PB15.Mode=TX_Only_Simplex_Unidirect_Master PB15.Signal=SPI2_MOSI PB3.GPIOParameters=GPIO_PuPd,GPIO_Label PB3.GPIO_Label=TILT_SW PB3.GPIO_PuPd=GPIO_NOPULL PB3.Locked=true PB3.Signal=GPIO_Input PB6.GPIOParameters=GPIO_Pu PB6.GPIO_Pu=GPIO_PULLUP PB6.Mode=I2C PB6.Signal=I2C1_SCL PB7.GPIOParameters=GPIO_Pu PB7.GPIO_Pu=GPIO_PULLUP PB7.Mode=I2C PB7.Signal=I2C1_SDA PB9.GPIOParameters=GPIO_Label PB9.GPIO_Label=BUZZER PB9.Signal=S_TIM4_CH4 PD0-OSC_IN.Mode=HSE-External-Oscillator PD0-OSC_IN.Signal=RCC_OSC_IN PD1-OSC_OUT.Mode=HSE-External-Oscillator PD1-OSC_OUT.Signal=RCC_OSC_OUT PinOutPanel.RotationAngle=0 ProjectManager.AskForMigrate=true ProjectManager.BackupPrevious=false ProjectManager.CompilerOptimize=2 ProjectManager.ComputerToolchain=false ProjectManager.CoupleFile=false ProjectManager.CustomerFirmwarePackage= ProjectManager.DefaultFWLocation=true ProjectManager.DeletePrevious=true ProjectManager.DeviceId=STM32F103C8Tx ProjectManager.FirmwarePackage=STM32Cube FW_F1 V1.8.5 ProjectManager.FreePins=false ProjectManager.HalAssertFull=false ProjectManager.HeapSize=0x200 ProjectManager.KeepUserCode=true ProjectManager.LastFirmware=true ProjectManager.LibraryCopy=1 ProjectManager.MainLocation=Src ProjectManager.NoMain=false ProjectManager.PreviousToolchain=STM32CubeIDE ProjectManager.ProjectBuild=false ProjectManager.ProjectFileName=F1-T12+858D.ioc ProjectManager.ProjectName=F1-T12+858D ProjectManager.ProjectStructure= ProjectManager.RegisterCallBack= ProjectManager.StackSize=0x400 ProjectManager.TargetToolchain=STM32CubeIDE ProjectManager.ToolChainLocation= ProjectManager.UAScriptAfterPath= ProjectManager.UAScriptBeforePath= ProjectManager.UnderRoot=true ProjectManager.functionlistsort=1-MX_GPIO_Init-GPIO-false-HAL-true,2-MX_DMA_Init-DMA-false-HAL-true,3-SystemClock_Config-RCC-false-HAL-true,4-MX_SPI2_Init-SPI2-false-HAL-true,5-MX_ADC1_Init-ADC1-false-HAL-true,6-MX_ADC2_Init-ADC2-false-HAL-true,7-MX_I2C1_Init-I2C1-false-HAL-true,8-MX_TIM1_Init-TIM1-false-HAL-true,9-MX_TIM2_Init-TIM2-false-HAL-true,10-MX_TIM4_Init-TIM4-false-HAL-true RCC.ADCFreqValue=12000000 RCC.ADCPresc=RCC_ADCPCLK2_DIV6 RCC.AHBFreq_Value=72000000 RCC.APB1CLKDivider=RCC_HCLK_DIV2 RCC.APB1Freq_Value=36000000 RCC.APB1TimFreq_Value=72000000 RCC.APB2Freq_Value=72000000 RCC.APB2TimFreq_Value=72000000 RCC.FCLKCortexFreq_Value=72000000 RCC.FamilyName=M RCC.HCLKFreq_Value=72000000 RCC.IPParameters=ADCFreqValue,ADCPresc,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,MCOFreq_Value,PLLCLKFreq_Value,PLLMCOFreq_Value,PLLMUL,PLLSourceVirtual,SYSCLKFreq_VALUE,SYSCLKSource,TimSysFreq_Value,USBFreq_Value,VCOOutput2Freq_Value RCC.MCOFreq_Value=72000000 RCC.PLLCLKFreq_Value=72000000 RCC.PLLMCOFreq_Value=36000000 RCC.PLLMUL=RCC_PLL_MUL9 RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE RCC.SYSCLKFreq_VALUE=72000000 RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK RCC.TimSysFreq_Value=72000000 RCC.USBFreq_Value=72000000 RCC.VCOOutput2Freq_Value=8000000 SH.ADCx_IN2.0=ADC1_IN2,IN2 SH.ADCx_IN2.1=ADC2_IN2,IN2 SH.ADCx_IN2.ConfNb=2 SH.ADCx_IN3.0=ADC1_IN3,IN3 SH.ADCx_IN3.1=ADC2_IN3,IN3 SH.ADCx_IN3.ConfNb=2 SH.ADCx_IN4.0=ADC2_IN4,IN4 SH.ADCx_IN4.1=ADC1_IN4,IN4 SH.ADCx_IN4.ConfNb=2 SH.ADCx_IN5.0=ADC1_IN5,IN5 SH.ADCx_IN5.1=ADC2_IN5,IN5 SH.ADCx_IN5.ConfNb=2 SH.ADCx_IN6.0=ADC1_IN6,IN6 SH.ADCx_IN6.1=ADC2_IN6,IN6 SH.ADCx_IN6.ConfNb=2 SH.GPXTI0.0=GPIO_EXTI0 SH.GPXTI0.ConfNb=1 SH.S_TIM1_CH4.0=TIM1_CH4,PWM Generation4 CH4 SH.S_TIM1_CH4.ConfNb=1 SH.S_TIM1_ETR.0=TIM1_ETR,ClockSourceETR_Mode2 SH.S_TIM1_ETR.ConfNb=1 SH.S_TIM2_CH1_ETR.0=TIM2_CH1,PWM Generation1 CH1 SH.S_TIM2_CH1_ETR.ConfNb=1 SH.S_TIM2_CH2.0=TIM2_CH2,PWM Generation2 CH2 SH.S_TIM2_CH2.ConfNb=1 SH.S_TIM4_CH4.0=TIM4_CH4,PWM Generation4 CH4 SH.S_TIM4_CH4.ConfNb=1 SPI2.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_4 SPI2.CalculateBaudRate=9.0 MBits/s SPI2.Direction=SPI_DIRECTION_2LINES SPI2.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,BaudRatePrescaler SPI2.Mode=SPI_MODE_MASTER SPI2.VirtualType=VM_MASTER TIM1.Channel-Output\ Compare3\ No\ Output=TIM_CHANNEL_3 TIM1.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4 TIM1.IPParameters=Period,Channel-PWM Generation4 CH4,Channel-Output Compare3 No Output,Pulse-Output Compare3 No Output TIM1.Period=99 TIM1.Pulse-Output\ Compare3\ No\ Output=97 TIM2.Channel-Output\ Compare3\ No\ Output=TIM_CHANNEL_3 TIM2.Channel-Output\ Compare4\ No\ Output=TIM_CHANNEL_4 TIM2.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1 TIM2.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2 TIM2.IPParameters=Channel-PWM Generation1 CH1,Prescaler,Period,Channel-PWM Generation2 CH2,Channel-Output Compare3 No Output,Channel-Output Compare4 No Output,Pulse-Output Compare3 No Output,Pulse-Output Compare4 No Output,Pulse-PWM Generation1 CH1,Pulse-PWM Generation2 CH2 TIM2.Period=1999 TIM2.Prescaler=719 TIM2.Pulse-Output\ Compare3\ No\ Output=0 TIM2.Pulse-Output\ Compare4\ No\ Output=1980 TIM2.Pulse-PWM\ Generation1\ CH1=0 TIM2.Pulse-PWM\ Generation2\ CH2=0 TIM4.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4 TIM4.IPParameters=Channel-PWM Generation4 CH4,Period,Prescaler TIM4.Period=65535 TIM4.Prescaler=71 VP_SYS_VS_Systick.Mode=SysTick VP_SYS_VS_Systick.Signal=SYS_VS_Systick VP_TIM1_VS_no_output3.Mode=Output Compare3 No Output VP_TIM1_VS_no_output3.Signal=TIM1_VS_no_output3 VP_TIM2_VS_ClockSourceINT.Mode=Internal VP_TIM2_VS_ClockSourceINT.Signal=TIM2_VS_ClockSourceINT VP_TIM2_VS_no_output3.Mode=Output Compare3 No Output VP_TIM2_VS_no_output3.Signal=TIM2_VS_no_output3 VP_TIM2_VS_no_output4.Mode=Output Compare4 No Output VP_TIM2_VS_no_output4.Signal=TIM2_VS_no_output4 VP_TIM4_VS_ClockSourceINT.Mode=Internal VP_TIM4_VS_ClockSourceINT.Signal=TIM4_VS_ClockSourceINT board=F1_OLED_SPI ================================================ FILE: Inc/buzzer.h ================================================ /* * buzzer.h * * Created on: 14 . 2019 . * Author: Alex */ #ifndef BUZZER_H_ #define BUZZER_H_ #ifndef __BUZZ_H #define __BUZZ_H #include "main.h" class BUZZER { public: BUZZER(void); void activate(bool e) { enabled = e; } void lowBeep(void); void shortBeep(void); void doubleBeep(void); void failedBeep(void); private: void playTone(uint16_t period_mks, uint16_t duration_ms); bool enabled = true; }; #endif #endif /* BUZZER_H_ */ ================================================ FILE: Inc/cfgtypes.h ================================================ /* * cfgtypes.h * * Created on: 15 aug. 2019 * Author: Alex */ #ifndef CFGTYPES_H_ #define CFGTYPES_H_ #include "iron_tips.h" /* * The configuration bit map: * CFG_CELSIUS - The temperature units: Celsius (1) or Fahrenheit (0) * CFG_BUZZER - Is the Buzzer Enabled (1) * CFG_KEEP_IRON - Is keep the iron working while in Hot Air Gun mode * CFG_SWITCH - Switch type: Tilt (0) or REED (1) */ typedef enum { CFG_CELSIUS = 1, CFG_BUZZER = 2, CFG_KEEP_IRON = 4, CFG_SWITCH = 8, CFG_AU_START = 16, CFG_BIG_STEP = 128 } CFG_BIT_MASK; /* Configuration record in the EEPROM (after the tip table) has the following format: * Records are aligned by 2**n bytes (in this case, 32 bytes) * * Boost is a bit map. The upper 4 bits are boost increment temperature (n*5 Celsius), i.e. * 0000 - disabled * 0001 - +4 degrees * 1111 - +75 degrees * The lower 4 bits is the boost time ((n+1)* 20 seconds), i.e. * 0000 - 20 seconds * 0001 - 40 seconds * 1111 - 320 seconds */ typedef struct s_config RECORD; struct s_config { uint32_t ID; // The configuration record ID uint16_t crc; // The checksum uint16_t iron_temp; // The IRON preset temperature in degrees (Celsius or Fahrenheit) uint16_t gun_temp; // The Hot Air Gun preset temperature in degrees (Celsius or Fahrenheit) uint16_t gun_fan_speed; // The Hot Air Gun fan speed uint16_t iron_Kp, iron_Ki, iron_Kd; // The IRON PID coefficients uint16_t gun_Kp, gun_Ki, gun_Kd; // The Hot Air Gun PID coefficients uint16_t low_temp; // The low power temperature (C) or 0 if the tilt sensor is disabled uint8_t low_to; // The low power timeout (5 seconds intervals) uint8_t scr_save_timeout; // The screen saver timeout (in minutes) [0-60]. Zero if disabled uint8_t boost; // Two 4-bits parameters: The boost increment temperature and boost time. See description above uint8_t tip; // Current tip index uint8_t off_timeout; // The Automatic switch-off timeout in minutes [0 - 30] uint8_t bit_mask; // See CFG_BIT_MASK }; /* Configuration data of each initialized tip are saved in the upper area of the EEPROM. * Two tip record per one EEPROM chunk, as soon each tip recored requires 16 bytes only. * The tip configuration record has the following format: * 4 reference temperature points * tip status bitmap * tip suffix name */ typedef struct s_tip TIP; struct s_tip { uint16_t t200, t260, t330, t400; // The internal temperature in reference points uint8_t mask; // The bit mask: TIP_ACTIVE + TIP_CALIBRATED char name[tip_name_sz]; // T12 tip name suffix, JL02 for T12-JL02 int8_t ambient; // The ambient temperature in Celsius when the tip being calibrated uint8_t crc; // CRC checksum }; // This tip structure is used to show available tips when tip is activating typedef struct s_tip_list_item TIP_ITEM; struct s_tip_list_item { uint8_t tip_index; // Index of the tip in the global list in EEPROM uint8_t mask; // The bit mask: 0 - active, 1 - calibrated char name[tip_name_sz+5]; // Complete tip name, i.e. T12-*** }; /* * This structure presents a tip record for all possible tips, declared in iron_tips.c * During controller initialization phase, the buildTipTable() function creates * the tip list in memory of all possible tips. If the tip is calibrated, i.e. has a record * in the upper area of EEPROM, the tip record saves chunk number, where the calibration data resides */ typedef struct s_tip_table TIP_TABLE; struct s_tip_table { uint8_t tip_chunk_index; // The tip chunk index in the EEPROM uint8_t tip_mask; // The bit mask: 0 - active, 1 - calibrated }; typedef enum tip_status { TIP_ACTIVE = 1, TIP_CALIBRATED = 2 } TIP_STATUS; #endif ================================================ FILE: Inc/config.h ================================================ /* * config.h * * Created on: 15 aug. 2019. * Author: Alex */ #ifndef CONFIG_H_ #define CONFIG_H_ #include "main.h" #include "pid.h" #include "eeprom.h" #include "cfgtypes.h" #include "iron_tips.h" #include "pid.h" #include "buzzer.h" typedef enum cfg_status {CFG_OK = 0, CFG_NO_TIP, CFG_READ_ERROR} CFG_STATUS; typedef enum temp_force {DEV_DEFAULT = 0, DEV_IRON = 1, DEV_GUN = 2} CFG_TEMP_DEVICE; /* * The actual configuration record is loaded from the EEPROM chunk into a_cfg variable * The spare copy of the configuration record is preserved into s_cfg variable * When update request arrives, configuration record writes into EEPROM if spare copy is different from actual copy */ class CFG_CORE: public TIPS { public: CFG_CORE(void) { } bool isCelsius(void) { return a_cfg.bit_mask & CFG_CELSIUS; } bool isBuzzerEnabled(void) { return a_cfg.bit_mask & CFG_BUZZER; } bool isKeepIron(void) { return a_cfg.bit_mask & CFG_KEEP_IRON;} bool isReedType(void) { return a_cfg.bit_mask & CFG_SWITCH; } bool isBigTempStep(void) { return a_cfg.bit_mask & CFG_BIG_STEP; } bool isAutoStart(void) { return a_cfg.bit_mask & CFG_AU_START; } uint16_t tempPresetHuman(void) { return a_cfg.iron_temp; } uint16_t gunTempPreset(void) { return a_cfg.gun_temp; } uint16_t gunFanPreset(void) { return a_cfg.gun_fan_speed; } uint8_t getOffTimeout(void) { return a_cfg.off_timeout; } uint16_t getLowTemp(void) { return a_cfg.low_temp; } uint8_t getLowTO(void) { return a_cfg.low_to; } // 5-seconds intervals uint8_t getScrTo(void) { return a_cfg.scr_save_timeout; } void setup(uint8_t off_timeout, bool buzzer, bool celsius, bool keep_iron, bool reed, bool big_temp_step, bool auto_start, uint16_t low_temp, uint8_t low_to, uint8_t scr_saver); void savePresetTempHuman(uint16_t temp_set); void saveGunPreset(uint16_t temp, uint16_t fan = 0); uint8_t boostTemp(void); uint16_t boostDuration(void); void saveBoost(uint8_t temp, uint16_t duration); void restoreConfig(void); PIDparam pidParams(bool iron); PIDparam pidParamsSmooth(bool iron = true); protected: void setDefaults(void); void correctConfig(RECORD *cfg); void syncConfig(void); bool areConfigsIdentical(void); RECORD a_cfg; // active configuration private: RECORD s_cfg; // spare configuration, used when save the configuration to the EEPROM }; typedef struct s_TIP_RECORD TIP_RECORD; struct s_TIP_RECORD { uint16_t calibration[4]; uint8_t mask; int8_t ambient; }; class TIP_CFG { public: TIP_CFG(void) { } bool isTipCalibrated(void) { return tip[0].mask & TIP_CALIBRATED; } uint16_t tempMinC(void) { return t_minC; } uint16_t tempMaxC(void) { return t_maxC; } bool gunActive(void) { return gun_active; } void load(const TIP& tip, bool gun = false); void dump(TIP* tip, bool gun = false); int8_t ambientTemp(void); uint16_t calibration(uint8_t index); void activateGun(bool gun); // Activate Hot Air Gun calibration (or return to the current tip) uint16_t referenceTemp(uint8_t index, CFG_TEMP_DEVICE force_device = DEV_DEFAULT); uint16_t tempCelsius(uint16_t temp, int16_t ambient, CFG_TEMP_DEVICE force_device = DEV_DEFAULT); void getTipCalibtarion(uint16_t temp[4]); void applyTipCalibtarion(uint16_t temp[4], int8_t ambient); void resetTipCalibration(void); protected: void defaultCalibration(bool gun = false); bool isValidTipConfig(TIP *tip); private: TIP_RECORD tip[2]; // Active IRON tip (0) and Hot Air Gun virtual tip (1) uint16_t t_minC = 0; uint16_t t_maxC = 0; bool gun_active = false; // Current Working mode: Hot Air Gun or soldering IRON const uint16_t temp_ref_iron[4] = { 200, 260, 330, 400}; const uint16_t temp_ref_gun[4] = { 200, 300, 400, 500}; }; class CFG : public EEPROM, public CFG_CORE, public TIP_CFG, public BUZZER { public: CFG(I2C_HandleTypeDef* pHi2c): EEPROM(pHi2c) { } CFG_STATUS init(void); uint16_t tipChunksTotal(void); uint16_t tempToHuman(uint16_t temp, int16_t ambient, CFG_TEMP_DEVICE force_device = DEV_DEFAULT); uint16_t humanToTemp(uint16_t temp, int16_t ambient); uint16_t lowTempInternal(int16_t ambient); const char* tipName(void); void changeTip(uint8_t index); uint8_t currentTipIndex(void); void saveTipCalibtarion(uint8_t index, uint16_t temp[4], uint8_t mask, int8_t ambient); bool toggleTipActivation(uint8_t index); int tipList(uint8_t second, TIP_ITEM list[], uint8_t list_len, bool active_only); void saveConfig(void); void savePID(PIDparam &pp, bool iron = true); void initConfigArea(void); void clearAllTipsCalibration(void); private: bool selectTip(uint8_t index); uint8_t buildTipTable(TIP_TABLE tt[]); char* buildFullTipName(char tip_name[tip_name_sz], const uint8_t index); uint8_t freeTipChunkIndex(void); bool isTipCorrect(uint8_t tip_chunk_index, TIP *tip); TIP_TABLE *tip_table = 0; // Tip table - chunk number of the tip or 0xFF if does not exist in the EEPROM }; #endif ================================================ FILE: Inc/core.h ================================================ /* * core.h * * Created on: 16 sep 2019 * Author: Alex */ #ifndef CORE_H_ #define CORE_H_ #include "main.h" #ifndef __cplusplus typedef uint8_t bool; #endif // Forward function declaration bool isACsine(void); #ifdef __cplusplus extern "C" { #endif void setup(void); void loop(void); #ifdef __cplusplus } #endif #endif ================================================ FILE: Inc/display.h ================================================ /* * display.h * */ #ifndef DISPLAY_H_ #define DISPLAY_H_ #include "main.h" #include "oled.h" #include "config.h" typedef enum { SCR_MODE_OFF = 0, SCR_MODE_IRON_ON, SCR_MODE_IRON_STBY, SCR_MODE_GUN_ON } SCR_MODE; const uint16_t d_width = 128; // display width const uint16_t d_height = 64; // display height class DSPL : public U8G2 { public: DSPL(void) : U8G2() { } void init(void); void mainInit(void) { msg_buff[0] = tip_name[0] = 0; } void status(const char *msg); void msgClean(void); void msgOFF(void); void msgON(void); void msgCold(void); void msgReady(void); void msgIdle(void); void msgStandby(void); void msgBoost(void); void timeToOff(uint8_t time); void tip(const char *tip_name); void fanSpeed(uint8_t pcnt); void pidInit(void); void pidSetLowerAxisLabel(const char *label); void pidModify(uint8_t index, uint16_t value); void autoPidInfo(const char *message); void autoPidCurrentLoop(uint16_t loop, uint32_t period); void pidPutData(int16_t temp, uint16_t disp); void pidShowGraph(uint8_t pwr); void pidShowMenu(uint16_t pid_k[3], uint8_t index); void animateFan(uint8_t indx); void mainShow(uint16_t t_set, uint16_t t_cur, int16_t t_amb, uint8_t p_applied, bool is_celsius, bool tip_calibrated, uint16_t t_alter, uint8_t fan_index = 0, bool tilt_iron_used=false); void scrSave(SCR_MODE mode, uint16_t t_cur, uint16_t t_alter); void tuneShow(uint16_t tune_temp, uint16_t temp, uint8_t pwr_pcnt); void calibShow(const char* tip_name, uint8_t ref_point, uint16_t current_temp, uint16_t real_temp, bool celsius, uint8_t power, bool on, bool ready, uint8_t int_temp_pcnt); void calibManualShow(const char* tip_name, uint16_t ref_temp, uint16_t current_temp, uint16_t setup_temp, bool celsius, uint8_t power, bool on, bool ready); void tipListShow(const char* title, TIP_ITEM list[], uint8_t list_len, uint8_t index, bool name_only); void menuItemShow(const char* title, const char* item, const char* value, bool modify); void errorShow(void); void errorMessage(const char *msg); void debugShow(bool gun_mode, uint16_t power, bool iron, bool gun, uint16_t data[4]); void showVersion(void); private: char msg_buff[8] = {0}; // the buffer for the message in top right corner char tip_name[10] = {0}; // the buffer for tip name char err_msg[40] = {0}; // the buffer of error message // PID tune data uint32_t default_mode = 0; // The time in ms to return to the default mode char modified_value[25] = {0}; // The buffer to show current value of being modified coefficient char lower_axis[3] = {0}; // Lower axis label (2 symbols and '\0' at the end) int16_t h_temp[80] = {0}; // The temperature history data uint16_t h_disp[80] = {0}; // The dispersion history data uint8_t data_index = 0; // The index in the array to put new data bool full_buff = false; // Whether the history data buffer is full // Screen saver data uint16_t saver_center[2] = {d_width/2, d_height/2}; // Current center of the output data int8_t saver_speed[2] = {1, 1}; // Current speed of center pointer }; void DPIDK_init(void); void DPIDK_modify(uint8_t index, uint16_t value); void DPIDK_putData(int16_t temp, uint16_t disp); void DPIDK_showGraph(void); void DPIDK_showMenu(uint16_t pid_k[3], uint8_t index); void DISPL_showCalibration(const char* tip_name, uint16_t ref_temp, uint16_t current_temp, uint16_t real_temp, bool celsius, uint8_t power, bool on, bool ready); void DISPL_showCalibManual(const char* tip_name, uint16_t ref_temp, uint16_t current_temp, uint16_t setup_temp, bool celsius, uint8_t power, bool on, bool ready); void DISPL_showTipList(const char* title, TIP_ITEM list[], uint8_t list_len, uint8_t index, bool name_only); void DISPL_showMenuItem(const char* title, const char* item, const char* value, bool modify); void DISPL_showError(void); void DISPL_resetScale(void); void DDEBUG_show(int16_t delta_t, uint32_t td, uint32_t pd, int ip, int ap); #endif ================================================ FILE: Inc/eeprom.h ================================================ /* * eeprom.h * * Created on: 15 aug. 2019. * Author: Alex * * The data in the EEPROM is addressed by chunks. * There are 128 chunks of 32 bytes in the EEPROM IC at24c32a. * First 64 chunks [0-63] are used to store configuration data. * One record per chunk as soon the configuration record can fit into one chunk. * To save EEPROM rewrite cycles, new record is written to the next free chunk, increasing record ID. * When the controller starts, it reads all the chunks in the configuration area and find the last record * that has the biggest record ID. * * Last 64 chunks [64-127] are used to store the tip configuration data. * As soon as tip configuration requires only 16 bytes, two records can fit to the chunk. * Only active and calibrated tips are stored in this area. * When the controller starts, it reads all the chunks in the tip area and builds tip configuration table (tip_table, see config.c). * The tip_table tip_chunk_index field is the index of the tip in tip configuration area. * index = 0 means the first (of two) record in the first tip configuration chunk (64 chunk of the EEPROM). * index = 1 means the second record record in the first tip configuration chunk (64 chunk of the EEPROM). * * For chunk manipulations two functions are used: readChunk() and writeChunk(). * These functions read and write the EEPROM chunk from/to static data buffer. * To increase performance, last read and written chunk index is stored to chunk_in_data variable. * readChunk( function returns immediately, if data in the buffer is already actual. */ #ifndef EEPROM_H_ #define EEPROM_H_ #include "main.h" #include "cfgtypes.h" typedef enum tip_io_status {EPR_OK = 0, EPR_IO, EPR_CHECKSUM, EPR_INDEX} TIP_IO_STATUS; #define eeprom_chunk_size (32) // Number of bytes in one EEPROM chunk class EEPROM { public: EEPROM(I2C_HandleTypeDef* pHi2c) { hi2c = pHi2c; } bool init(); uint16_t tipDataTotal(void); bool loadRecord(RECORD* config_record); bool saveRecord(RECORD* config_record); // Modifies the record: increment the ID and calculate CRC TIP_IO_STATUS loadTipData(TIP* tip, uint8_t tip_chunk_index); TIP_IO_STATUS saveTipData(TIP* tip, uint8_t tip_chunk_index); void clearConfigArea(void); void forceReloadChunk(void) { chunk_in_data = 65535; } private: bool readChunk(uint16_t chunk_index); bool writeChunk(uint16_t chunk_index); uint8_t CFG_checkSum(RECORD* cfg, bool write); uint8_t TIP_checkSum(TIP* tip, bool write); uint16_t requiredTipSpace(void); I2C_HandleTypeDef* hi2c = 0; bool can_write = false; // The flag indicates that data can be saved to the EEPROM uint16_t r_chunk = 0; // Chunk number of the correct record in EEPROM to be read uint16_t w_chunk = 0; // Chunk number in the EEPROM to start write new record uint8_t data[eeprom_chunk_size]; // Data buffer for one EEPROM chunk uint16_t chunk_in_data = 65535; // Current chunk number in the data buffer [0-(eeprom_chunks-1)]. For caching const uint16_t eeprom_chunks = 128; // The number of chunks in my EEPROM IC const uint16_t eeprom_address = 0x50; // AT24C32 EEPROM IC address on the I2C bus const uint16_t cfg_chunks = 64; // The space of EEPROM (in chunks) dedicated to the configuration data const uint16_t tip_chunks = 64; // The maximum number of chunks used to store the configured tips }; #endif ================================================ FILE: Inc/encoder.h ================================================ /* * encoder.h * * Created on: 15 aug. 2019. * Author: Alex */ #ifndef ENCODER_H_ #define ENCODER_H_ #include "main.h" #include "stat.h" class RENC { public: RENC(GPIO_TypeDef* aPORT, uint16_t aPIN, GPIO_TypeDef* bPORT, uint16_t bPIN); void addButton(GPIO_TypeDef* ButtonPORT, uint16_t ButtonPIN); uint8_t buttonStatus(void); bool write(int16_t initPos); void reset(int16_t initPos, int16_t low, int16_t upp, uint8_t inc, uint8_t fast_inc, bool looped); void encoderIntr(void); void setTimeout(uint16_t timeout_ms) { over_press = timeout_ms; } void setIncrement(uint8_t inc) { increment = fast_increment = inc; } uint8_t getIncrement(void) { return increment; } int16_t read(void) { return pos; } private: EMP_AVERAGE avg; // Do average the button readings to maintain the button status int16_t min_pos = 0; // Minimum value of rotary encoder int16_t max_pos = 0; // Maximum value of roraty encoder uint16_t over_press = 0; // Maximum time in ms the button can be pressed bool is_looped = false; // Whether the encoder is looped uint8_t increment = 0; // The value to add or substract for each encoder tick uint8_t fast_increment = 0; // The value to change encoder when it runs quickly volatile uint32_t rpt = 0; // Time in ms when the encoder was rotated volatile uint32_t changed = 0; // Time in ms when the value was changed volatile int16_t pos = 0; // Encoder current position volatile bool s_up = false; // The status of the secondary channel bool i_b_rel = false; // Ignore button release event bool b_on = false; // The button current position: true - pressed uint32_t bpt = 0; // Time in ms when the button was pressed (press time) uint32_t b_check = 0; // Time in ms when the button should be checked GPIO_TypeDef* b_port = 0; // The PORT of the press button GPIO_TypeDef* m_port = 0; // The PORT of the main channel GPIO_TypeDef* s_port = 0; // The PORT of the secondary channel uint16_t b_pin = 0; // The PIN number of the button uint16_t m_pin = 0; // The PIN number of the main channel uint16_t s_pin = 0; // The PIN number of the secondary channel const uint8_t trigger_on = 100; // avg limit to change button status to on const uint8_t trigger_off = 50; // avg limit to change button status to off const uint8_t avg_length = 4; // avg length const uint8_t b_check_period = 20; // The button check period, ms const uint16_t long_press = 1500; // If the button was pressed more that this timeout, we assume the long button press const uint16_t fast_timeout = 300; // Time in ms to change encoder quickly const uint16_t def_over_press = 2500; // Default value for button over press timeout (ms) }; #endif ================================================ FILE: Inc/font.h ================================================ /* * font.h * * Created on: 3 . 2019 . * Author: Alex */ #ifndef FONT_H_ #define FONT_H_ #include "u8g2.h" extern const uint8_t u8g2_font_kam24n[] U8G2_FONT_SECTION("google_kameron_24"); extern const uint8_t u8g2_font_kam26n[] U8G2_FONT_SECTION("google_kameron_26"); extern const uint8_t u8g2_font_kam28n[] U8G2_FONT_SECTION("google_kameron_28"); #endif /* FONT_H_ */ ================================================ FILE: Inc/gun.h ================================================ /* * gun.h * * Created on: 14 aug 2019 * Author: Alex */ #ifndef GUN_H_ #define GUN_H_ #include "stat.h" #include "pid.h" #include "tools.h" #include "unit.h" #define FAN_TIM htim2 extern TIM_HandleTypeDef FAN_TIM; class HOTGUN : public UNIT { public: typedef enum { POWER_OFF, POWER_HEATING, POWER_ON, POWER_FIXED, POWER_COOLING, POWER_PID_TUNE } PowerMode; HOTGUN(void) : h_power(hot_gun_hist_length), h_temp(hot_gun_hist_length) { } void init(void); virtual bool isOn(void) { return (mode == POWER_ON || mode == POWER_FIXED); } virtual uint16_t presetTemp(void) { return temp_set; } virtual uint16_t averageTemp(void) { return avg_sync_temp; } virtual uint16_t getMaxFixedPower(void) { return max_fix_power; } virtual bool isCold(void) { return h_temp.read() < temp_gun_cold; } virtual uint16_t pwrDispersion(void) { return d_power.read(); } virtual void setTemp(uint16_t temp) { temp_set = constrain(temp, 0, int_temp_max); } virtual uint16_t tmpDispersion(void) { return d_temp.read(); } virtual uint16_t avgPower(void) { return avgPowerPcnt(); } uint16_t presetFan(void) { return fan_speed; } bool isFanWorking(void) { return (fanSpeed() >= min_fan_speed); } uint16_t maxFanSpeed(void) { return max_fan_speed; } void setFan(uint16_t fan) { fan_speed = constrain(fan, min_working_fan, max_fan_speed); } void fanFixed(uint16_t fan) { TIM2->CCR2 = constrain(fan, 0, max_fan_speed);} void updateTemp(uint16_t value); uint16_t alternateTemp(void); // Current temperature or 0 if cold virtual void switchPower(bool On); virtual uint8_t avgPowerPcnt(void); uint16_t appliedPower(void); uint16_t fanSpeed(void); // Fan supplied to Fan, PWM duty virtual void fixPower(uint16_t Power); // Set the specified power to the the hot gun uint8_t presetFanPcnt(void); uint16_t power(void); // Required Hot Air Gun power to keep the preset temperature protected: void safetyRelay(bool activate); volatile uint8_t relay_ready_cnt = 0; // The relay ready counter, see HOTHUN::power() private: void shutdown(void); PowerMode mode = POWER_OFF; uint8_t fix_power = 0; // Fixed power value of the Hot Air Gun (or zero if off) bool chill = false; // Chill the Hot Air gun if it is over heating bool reach_cold_temp = true; // Flag indicating the Hot Air Gun has reached the 'temp_gun_cold' temperature uint16_t temp_set = 0; // The preset temperature of the hot air gun (internal units) uint16_t fan_speed = 0; // Preset fan speed uint32_t fan_off_time = 0; // Time when the fan should be powered off in cooling mode (ms) EMP_AVERAGE h_power; // Exponential average of applied power EMP_AVERAGE h_temp; // Exponential average of Hot Air Gun temperature EMP_AVERAGE d_power; // Exponential average of power dispersion EMP_AVERAGE d_temp; // Exponential temperature math dispersion EMP_AVERAGE zero_temp; // Exponential average of minimum (zero) temperature volatile uint16_t avg_sync_temp = 0; // Average temperature synchronized with TIM1 (used to calculate required power, see power() method) const uint8_t max_fix_power = 70; const uint8_t max_power = 99; const uint16_t min_fan_speed = 600; const uint16_t max_fan_speed = 1999; const uint16_t max_cool_fan = 1600; const uint16_t min_working_fan = 800; const uint16_t temp_gun_cold = 100; // The temperature of the cold Hot Air Gun const uint32_t fan_off_timeout = 6*60*1000;// The timeout to turn the fan off in cooling mode const uint32_t fan_extra_time = 60000; // Extra time to wait after the Hot Air Gun reaches the 'temp_gun_cold' temperature const uint16_t fan_off_value = 500; const uint16_t fan_on_value = 1000; const uint8_t sw_off_value = 30; const uint8_t sw_on_value = 60; const uint8_t sw_avg_len = 10; const uint32_t relay_activate = 1; // The relay activation delay (loops of TIM1, 1 time per second) const int32_t stable = 300000; // The power value when the Hot Gun reaches the preset temperature. Used in PID::pidStable() }; #endif ================================================ FILE: Inc/hw.h ================================================ /* * hw.h * * Created on: 12 aug 2019 * Author: Alex */ #ifndef HW_H_ #define HW_H_ #include "stat.h" #include "iron.h" #include "gun.h" #include "encoder.h" #include "display.h" #include "config.h" extern I2C_HandleTypeDef hi2c1; class SCRSAVER { public: SCRSAVER(void) { } void init(uint8_t timeout) { to = timeout; reset(); } void reset(void); bool scrSaver(void); private: uint32_t scr_save_ms = 0; // Time to switch to Screen Saver mode (if > 0, ms) uint8_t to = 0; // Timeout, minutes bool scr_saver = false; // Is the screen saver active }; class HW { public: HW(void) : cfg(&hi2c1), encoder(ENCODER_R_GPIO_Port, ENCODER_R_Pin, ENCODER_L_GPIO_Port, ENCODER_L_Pin) { } CFG_STATUS init(void); CFG cfg; DSPL dspl; IRON iron; RENC encoder; HOTGUN hotgun; BUZZER buzz; SCRSAVER scrsaver; }; #endif ================================================ FILE: Inc/iron.h ================================================ /* * iron.h * * Created on: 13 aug 2019 * Author: Alex */ #ifndef IRON_H_ #define IRON_H_ #include "pid.h" #include "stat.h" #include "unit.h" class IRON : public UNIT { public: typedef enum { POWER_OFF, POWER_ON, POWER_FIXED, POWER_COOLING, POWER_PID_TUNE } PowerMode; IRON(void) { } void init(void); virtual void switchPower(bool On); virtual bool isOn(void) { return (mode == POWER_ON); } virtual uint16_t presetTemp(void) { return temp_set; } virtual uint16_t averageTemp(void) { return h_temp.read(); } virtual uint16_t tmpDispersion(void) { return d_temp.read(); } virtual uint16_t pwrDispersion(void) { return d_power.read(); } virtual uint16_t getMaxFixedPower(void) { return max_fix_power; } virtual bool isCold(void) { return (mode == POWER_OFF); } int32_t tempShortAverage(int32_t t) { return t_iron_short.average(t); } void resetShortTemp(void) { t_iron_short.reset(); } void updateAmbient(uint32_t value) { t_amb.update(value); } uint16_t ambientInternal(void) { return t_amb.read(); } bool noAmbientSensor(void) { return t_amb.read() >= max_ambient_value; } uint16_t temp(void) { return temp_curr; } int32_t ambientTemp(void); uint16_t alternateTemp(void); // Current temperature or 0 if cold virtual void setTemp(uint16_t t); // Set the temperature to be kept (internal units) virtual uint16_t avgPower(void); // Average applied power virtual uint8_t avgPowerPcnt(void); // Power applied to the IRON in percents virtual void fixPower(uint16_t Power); // Set the specified power to the the soldering IRON void adjust(uint16_t t); // Adjust preset temperature depending on ambient temperature uint16_t power(int32_t t); // Required power to keep preset temperature void reset(void); // Iron is disconnected, clear the temp history void lowPowerMode(uint16_t t); // Activate low power mode (preset temp.) To disable, use switchPower(true) private: uint16_t temp_set = 0; // The temperature that should be kept uint16_t temp_low = 0; // The temperature in low power mode (if not zero) uint16_t fix_power = 0; // Fixed power value of the IRON (or zero if off) volatile PowerMode mode = POWER_OFF; // Working mode of the IRON volatile bool chill = false; // Whether the IRON should be cooled (preset temp is lower than current) volatile uint16_t temp_curr = 0; // The actual IRON temperature EMP_AVERAGE t_iron_short; // Exponential average of the IRON temperature (short period) EMP_AVERAGE t_amb; // Exponential average of the ambient temperature EMP_AVERAGE h_power; // Exponential average of applied power EMP_AVERAGE h_temp; // Exponential average of temperature EMP_AVERAGE d_power; // Exponential average of power math dispersion EMP_AVERAGE d_temp; // Exponential temperature math dispersion const uint16_t max_power = 1999; // Maximum power to the IRON const uint16_t max_fix_power = 1000; // Maximum power in fixed power mode const uint8_t ec = 20; // Exponential average coefficient const uint16_t iron_cold = 100; // The internal temperature when the IRON is cold const uint8_t ambient_emp_coeff = 10; // Exponential average coefficient for ambient temperature const uint8_t iron_emp_coeff = 8; // Exponential average coefficient for IRON temperature const uint16_t iron_off_value = 500; const uint16_t iron_on_value = 1000; const uint8_t iron_sw_len = 3; // Exponential coefficient of current through the IRON switch const uint8_t sw_off_value = 14; const uint8_t sw_on_value = 20; const uint8_t sw_avg_len = 5; const uint8_t sw_tilt_len = 2; const uint32_t check_sw_period = 100; // Tilt switch check period, ms const uint16_t max_ambient_value = 3900; // About -30 degrees. If the soldering IRON disconnected completely, "ambient" value is greater than this }; #endif ================================================ FILE: Inc/iron_tips.h ================================================ /* * iron_tips.h * * Created on: 15 aug. 2019. * Author: Alex */ #ifndef IRON_TIPS_H_ #define IRON_TIPS_H_ #include "main.h" // The length of the tip name #define tip_name_sz (5) class TIPS { public: TIPS() { } uint16_t loaded(void); const char* name(uint8_t index); int index(const char *name); }; #endif ================================================ FILE: Inc/main.h ================================================ /* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : main.h * @brief : Header for main.c file. * This file contains the common defines of the application. ****************************************************************************** * @attention * *

© Copyright (c) 2019 STMicroelectronics. * All rights reserved.

* * This software component is licensed by ST under BSD 3-Clause license, * the "License"; You may not use this file except in compliance with the * License. You may obtain a copy of the License at: * opensource.org/licenses/BSD-3-Clause * ****************************************************************************** */ /* USER CODE END Header */ /* Define to prevent recursive inclusion -------------------------------------*/ #ifndef __MAIN_H #define __MAIN_H #ifdef __cplusplus extern "C" { #endif /* Includes ------------------------------------------------------------------*/ #include "stm32f1xx_hal.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ /* USER CODE END Includes */ /* Exported types ------------------------------------------------------------*/ /* USER CODE BEGIN ET */ /* USER CODE END ET */ /* Exported constants --------------------------------------------------------*/ /* USER CODE BEGIN EC */ /* USER CODE END EC */ /* Exported macro ------------------------------------------------------------*/ /* USER CODE BEGIN EM */ /* USER CODE END EM */ void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim); /* Exported functions prototypes ---------------------------------------------*/ void Error_Handler(void); /* USER CODE BEGIN EFP */ /* USER CODE END EFP */ /* Private defines -----------------------------------------------------------*/ #define IRON_POWER_Pin GPIO_PIN_0 #define IRON_POWER_GPIO_Port GPIOA #define FAN_POWER_Pin GPIO_PIN_1 #define FAN_POWER_GPIO_Port GPIOA #define IRON_CURRENT_Pin GPIO_PIN_2 #define IRON_CURRENT_GPIO_Port GPIOA #define FAN_CURRENT_Pin GPIO_PIN_3 #define FAN_CURRENT_GPIO_Port GPIOA #define IRON_TEMP_Pin GPIO_PIN_4 #define IRON_TEMP_GPIO_Port GPIOA #define GUN_TEMP_Pin GPIO_PIN_5 #define GUN_TEMP_GPIO_Port GPIOA #define AMBIENT_Pin GPIO_PIN_6 #define AMBIENT_GPIO_Port GPIOA #define ENCODER_L_Pin GPIO_PIN_0 #define ENCODER_L_GPIO_Port GPIOB #define ENCODER_L_EXTI_IRQn EXTI0_IRQn #define ENCODER_B_Pin GPIO_PIN_1 #define ENCODER_B_GPIO_Port GPIOB #define OLED_RESET_Pin GPIO_PIN_10 #define OLED_RESET_GPIO_Port GPIOB #define OLED_DC_Pin GPIO_PIN_11 #define OLED_DC_GPIO_Port GPIOB #define OLED_SCK_Pin GPIO_PIN_13 #define OLED_SCK_GPIO_Port GPIOB #define OLED_SDA_Pin GPIO_PIN_15 #define OLED_SDA_GPIO_Port GPIOB #define GUN_REED_Pin GPIO_PIN_8 #define GUN_REED_GPIO_Port GPIOA #define ENCODER_R_Pin GPIO_PIN_9 #define ENCODER_R_GPIO_Port GPIOA #define OLED_CS_Pin GPIO_PIN_10 #define OLED_CS_GPIO_Port GPIOA #define GUN_POWER_Pin GPIO_PIN_11 #define GUN_POWER_GPIO_Port GPIOA #define AC_ZERO_Pin GPIO_PIN_12 #define AC_ZERO_GPIO_Port GPIOA #define AC_RELAY_Pin GPIO_PIN_15 #define AC_RELAY_GPIO_Port GPIOA #define TILT_SW_Pin GPIO_PIN_3 #define TILT_SW_GPIO_Port GPIOB #define BUZZER_Pin GPIO_PIN_9 #define BUZZER_GPIO_Port GPIOB /* USER CODE BEGIN Private defines */ #define FW_VERSION ("4.08") /* USER CODE END Private defines */ #ifdef __cplusplus } #endif #endif /* __MAIN_H */ ================================================ FILE: Inc/mode.h ================================================ /* * mode.h * * Created on: 19 sep. 2019 * Author: Alex */ #ifndef MODE_H_ #define MODE_H_ #include "buzzer.h" #include "core.h" #include "oled.h" #include "encoder.h" #include "display.h" #include "iron.h" #include "gun.h" #include "cfgtypes.h" #include "config.h" #include "stat.h" #include "hw.h" // Forward class declaration class MWORK_GUN; class MODE { public: MODE(HW *pCore) { this->pCore = pCore; } void setup(MODE* return_mode, MODE* short_mode, MODE* long_mode); virtual void init(void) { } virtual MODE* loop(void) { return 0; } virtual ~MODE(void) { } void ironMode(bool iron) { use_iron = iron; } MODE* returnToMain(void); protected: void resetTimeout(void); void setTimeout(uint16_t t); bool use_iron = true; // Active 'tip': soldering iron or hot air gun HW* pCore = 0; uint16_t timeout_secs = 0; // Timeout to return to main mode, seconds uint32_t time_to_return = 0; // Time in ms when to return to the main mode uint32_t update_screen = 0; // Time in ms when the screen should be updated MODE* mode_return = 0; // Previous working mode MODE* mode_spress = 0; // When encoder button short pressed MODE* mode_lpress = 0; // When encoder button long pressed }; //---------------------- The iron standby mode ----------------------------------- class MSTBY_IRON : public MODE { public: MSTBY_IRON(HW *pCore) : MODE(pCore) { } virtual void init(void); virtual MODE* loop(void); void setGunMode(MWORK_GUN* gw) { gun_work = gw; } private: MWORK_GUN* gun_work = 0; // Hot Air Gun Work mode uint32_t clear_used_ms = 0; // Time in ms when used flag should be cleared (if > 0) bool used = false; // Whether the IRON was used (was hot) bool cool_notified = 0; // Whether there was cold notification played bool no_handle = false; // Whether soldering iron handle disconnected (no ambient sensor) uint16_t old_temp_set = 0; }; //-------------------- The iron main working mode, keep the temperature ---------- class MWORK_IRON : public MODE { public: MWORK_IRON(HW *pCore) : MODE(pCore) { } virtual void init(void); virtual MODE* loop(void); void setGunMode(MWORK_GUN* gw) { gun_work = gw; } void setLowPowerMode(MODE* lp) { low_power_mode = lp; } private: void adjustPresetTemp(void); bool hwTimeout(bool tilt_active); void swTimeout(uint16_t temp, uint16_t temp_set, uint16_t temp_setH, uint32_t td, uint32_t pd, uint16_t ap); MWORK_GUN* gun_work = 0; // Hot Air Gun Standby mode MODE* low_power_mode = 0; // Low power mode pointer EMP_AVERAGE idle_pwr; // Exponential average value for idle power bool auto_off_notified = false; // The time (in ms) when the automatic power-off was notified bool ready = false; // Whether the IRON have reached the preset temperature uint32_t ready_clear = 0; // Time when to clean 'Ready' message uint32_t lowpower_time = 0; // Time when switch to standby power mode uint16_t old_temp_set = 0; const uint16_t period = 500; // Redraw display period (ms) const uint8_t ec = 5; // The exponential average coefficient }; //-------------------- The iron low power mode, decrease iron temperature -------- class MLOW_POWER : public MODE { public: MLOW_POWER(HW *pCore) : MODE(pCore) { } virtual void init(void); virtual MODE* loop(void); private: bool auto_off_notified = false; // The time (in ms) when the automatic power-off was notified uint16_t old_enc = 0; // old encoder position const uint16_t period = 1000; // Redraw display period (ms) }; //---------------------- The boost mode, shortly increase the temperature -------- class MBOOST : public MODE { public: MBOOST(HW *pCore) : MODE(pCore) { } virtual void init(void); virtual MODE* loop(void); private: uint16_t old_pos = 0; uint8_t phase = 0; // 0 - heating, 1 - cooling, 2 - ready }; //---------------------- The tip selection mode ---------------------------------- class MSLCT : public MODE { public: MSLCT(HW *pCore) : MODE(pCore) { } virtual void init(void); virtual MODE* loop(void); private: TIP_ITEM tip_list[3]; uint32_t tip_begin_select = 0; // The time in ms when we started to select new tip uint8_t old_index = 3; }; //---------------------- The Activate tip mode: select tips to use --------------- class MTACT : public MODE { public: MTACT(HW *pCore) : MODE(pCore) { } virtual void init(void); virtual MODE* loop(void); private: uint8_t old_tip_index = 255; }; //---------------------- The Menu mode ------------------------------------------- #define M_MENU_LENGTH (20) class MMENU : public MODE { public: MMENU(HW* pCore, MODE* m_boost, MODE* m_calib, MODE* m_act, MODE* m_tune, MODE* m_pid, MODE* m_gun_menu, MODE *m_about); virtual void init(void); virtual MODE* loop(void); private: MODE* mode_menu_boost; MODE* mode_calibrate_menu; MODE* mode_activate_tips; MODE* mode_tune; MODE* mode_tune_pid; MODE* mode_gun_menu; MODE* mode_about; uint8_t off_timeout = 0; // Automatic switch off timeout in minutes or 0 to disable uint16_t low_temp = 0; // The low power temperature (Celsius) 0 - disable tilt sensor uint8_t low_to = 0; // The low power timeout, seconds uint8_t scr_saver = 0; // Screen saver timeout in minutes or 0 to disable bool buzzer = true; // Whether the buzzer is enabled bool celsius = true; // Temperature units: C/F bool keep_iron = false; // Keep the iron working While in Hot Air Gun Mode bool reed = false; // IRON switch type: reed/tilt bool temp_step = false; // The preset temperature step (1/5) bool auto_start = false; // Automatic power on iron at startup uint8_t set_param = 0; // The index of the modifying parameter uint8_t mode_menu_item = 1; // Save active menu element index to return back later // When new menu item added, the m_len, in_place_start, in_place_end, tip_calib_menu constants should be adjusted const char* menu_name[M_MENU_LENGTH] = { "boost setup", "units", "buzzer", "keep iron", "switch type", "temp. step", "auto start", "auto off", // #7 First parameter that can be modified in-place "standby temp", "standby time", "screen saver", // #10 Last parameter that can be modified in-place "save", "cancel", "calibrate tip", // #13 Menu item to start menu when the tip is not calibrated "activate tips", "tune iron", "gun menu", "reset config", "tune iron PID", "about" }; const uint8_t in_place_start = 7; // See the menu names. Index of the first parameter that can be changed inside menu const uint8_t in_place_end = 10; // See the menu names. Index of the last parameter that can be changed inside menu const uint8_t tip_calib_menu = 13; // See the menu names. Index of 'calibrate tip' menu const uint16_t min_standby_C = 120; // Minimum standby temperature, Celsius }; //---------------------- Calibrate tip menu -------------------------------------- class MCALMENU : public MODE { public: MCALMENU(HW* pCore, MODE* cal_auto, MODE* cal_manual); virtual void init(void); virtual MODE* loop(void); private: MODE* mode_calibrate_tip; MODE* mode_calibrate_tip_manual; uint8_t old_item = 4; const char* menu_list[4] = { "automatic", "manual", "clear", "exit" }; }; //---------------------- The calibrate tip mode: setup temperature --------------- #define MCALIB_POINTS 8 class MCALIB : public MODE { public: MCALIB(HW *pCore) : MODE(pCore) { } virtual void init(void); virtual MODE* loop(void); private: bool calibrationOLS(uint16_t* tip, uint16_t min_temp, uint16_t max_temp); uint8_t closestIndex(uint16_t temp); void updateReference(uint8_t indx); void buildFinishCalibration(void); uint8_t ref_temp_index = 0; // Which temperature reference to change: [0-MCALIB_POINTS] uint16_t calib_temp[2][MCALIB_POINTS]; // The calibration data: real temp. [0] and temp. in internal units [1] uint16_t tip_temp_max = 0; // the maximum possible tip temperature in the internal units bool ready = false; // Whether the temperature has been established bool tuning = false; int16_t old_encoder = 3; const uint16_t start_int_temp = 600; // Minimal temperature in internal units, about 100 degrees Celsius }; //---------------------- The calibrate tip mode: manual calibration -------------- class MCALIB_MANUAL : public MODE { public: MCALIB_MANUAL(HW *pCore) : MODE(pCore) { } virtual void init(void); virtual MODE* loop(void); private: void buildCalibration(int8_t ablient, uint16_t tip[], uint8_t ref_point); void restorePIDconfig(CFG *pCFG, IRON* pIron, HOTGUN* pHG); uint8_t ref_temp_index = 0; // Which temperature reference to change: [0-3] uint16_t calib_temp[4]; // The calibration temp. in internal units in reference points bool ready = 0; // Whether the temperature has been established bool tuning = 0; // Whether the reference temperature is modifying (else we select new reference point) uint32_t temp_setready_ms = 0; // The time in ms when we should check the temperature is ready int16_t old_encoder = 4; uint16_t fan_speed = 1500; // The Hot Air Gun fan speed during calibration }; //---------------------- The Boost setup menu mode ------------------------------- class MMBST : public MODE { public: MMBST(HW *pCore) : MODE(pCore) { } virtual void init(void); virtual MODE* loop(void); private: uint8_t delta_temp = 0; // The temperature increment uint16_t duration = 0; // The boost period (secs) uint8_t mode = 0; // The current mode: 0: select menu item, 1 - change temp, 2 - change duration uint8_t old_item = 0; const char* boost_name[3] = { "temperature", "duration", "back to menu" }; }; //---------------------- The tune mode ------------------------------------------- class MTUNE : public MODE { public: MTUNE(HW *pCore) : MODE(pCore) { } virtual void init(void); virtual MODE* loop(void); private: uint16_t old_power = 0; bool powered = true; bool check_connected = false; // Flag indicating to check IRON or Hot Air Gun is connected uint32_t check_delay = 0; // Time in ms when to start checking Hot Air Gun is connected }; //---------------------- The PID coefficients tune mode -------------------------- class MTPID : public MODE { public: MTPID(HW *pCore) : MODE(pCore) { } virtual void init(void); virtual MODE* loop(void); private: uint32_t data_update = 0; // When read the data from the sensors (ms) uint32_t temp_setready_ms = 0; // The time in ms when we should check the temperature is ready uint8_t data_index = 0; // Active coefficient bool modify = 0; // Whether is modifying value of coefficient bool on = 0; // Whether the IRON is turned on uint16_t old_index = 3; }; //---------------------- The Hot Air Gun main working mode ----------------------- class MWORK_GUN : public MODE, SCRSAVER { public: MWORK_GUN(HW *pCore) : MODE(pCore) { } void setIronModes(MODE* is, MODE* iw) { iron_standby = is; iron_working = iw; } virtual void init(void); virtual MODE* loop(void); void keepIronWorking(bool iw) { keep_iron = iw; } private: MODE* iron_standby = 0; // Standby IRON mode MODE* iron_working = 0; // Working IRON mode uint32_t old_param = 0; bool edit_temp = true; // The rotary encoder is changing the temperature preset bool ready = false; // Whether the Hot Air Gun have reached the preset temperature uint32_t return_to_temp = 0; // The time when to return to change the temperature uint32_t ready_clear = 0; // Time when to clean 'Ready' message uint32_t fan_animate = 0; // Time when draw new fan animation uint8_t fan_angle = 0; // Current angle of fan icon [0..3] bool keep_iron = false; // Keep iron working while in Hot Air Gun mode const uint16_t edit_fan_timeout = 3000; // The time to edit fan speed (ms) }; //---------------------- Hot Air Gun setup menu ---------------------------------- class MENU_GUN : public MODE { public: MENU_GUN(HW* pCore, MODE* calib, MODE* pot_tune, MODE* pid_tune); virtual void init(void); virtual MODE* loop(void); private: MODE* mode_calibrate; MODE* mode_tune; MODE* mode_pid; uint8_t old_item = 5; const char* menu_list[5] = { "calibrate", "tune gun", "tune gun PID", "clear", "exit" }; }; //---------------------- The Fail mode: display error message -------------------- class MFAIL : public MODE { public: MFAIL(HW *pCore) : MODE(pCore) { } virtual void init(void); virtual MODE* loop(void); }; //---------------------- The About dialog mode. Show about message --------------- class MABOUT : public MODE { public: MABOUT(HW *pCore) : MODE(pCore) { } virtual void init(void); virtual MODE* loop(void); }; //---------------------- The Debug mode: display internal parameters ------------ class MDEBUG : public MODE { public: MDEBUG(HW *pCore) : MODE(pCore) { } virtual void init(void); virtual MODE* loop(void); private: uint16_t old_power = 0; // Old encoder value bool gun_mode = false; // Gun/iron mode const uint16_t max_iron_power = 300; const uint16_t min_fan_speed = 600; const uint16_t max_fan_power = 1999; }; #endif ================================================ FILE: Inc/myU8g2lib.h ================================================ /* * myU8glib.h * * Created on: 12 . 2019 . * Author: Alex */ #ifndef MYU8GLIB_H_ #define MYU8GLIB_H_ #include "u8x8.h" #include "u8g2.h" class U8X8 { protected: u8x8_t u8x8; public: uint8_t tx, ty; U8X8(void) { home(); } u8x8_t *getU8x8(void) { return &u8x8; } void sendF(const char *fmt, ...) { va_list va; va_start(va, fmt); u8x8_cad_vsendf(&u8x8, fmt, va); va_end(va); } uint8_t getCols(void) { return u8x8_GetCols(&u8x8); } uint8_t getRows(void) { return u8x8_GetRows(&u8x8); } void drawTile(uint8_t x, uint8_t y, uint8_t cnt, uint8_t *tile_ptr) { u8x8_DrawTile(&u8x8, x, y, cnt, tile_ptr); } void initDisplay(void) { u8x8_InitDisplay(&u8x8); } void clearDisplay(void) { u8x8_ClearDisplay(&u8x8); } void fillDisplay(void) { u8x8_FillDisplay(&u8x8); } void setPowerSave(uint8_t is_enable) { u8x8_SetPowerSave(&u8x8, is_enable); } bool begin(void) { initDisplay(); clearDisplay(); setPowerSave(0); return 1; } void setFlipMode(uint8_t mode) { u8x8_SetFlipMode(&u8x8, mode); } void refreshDisplay(void) { // Dec 16: Only required for SSD1606 u8x8_RefreshDisplay(&u8x8); } void clearLine(uint8_t line) { u8x8_ClearLine(&u8x8, line); } void setContrast(uint8_t value) { u8x8_SetContrast(&u8x8, value); } void setInverseFont(uint8_t value) { u8x8_SetInverseFont(&u8x8, value); } void setFont(const uint8_t *font_8x8) { u8x8_SetFont(&u8x8, font_8x8); } void drawGlyph(uint8_t x, uint8_t y, uint8_t encoding) { u8x8_DrawGlyph(&u8x8, x, y, encoding); } void draw2x2Glyph(uint8_t x, uint8_t y, uint8_t encoding) { u8x8_Draw2x2Glyph(&u8x8, x, y, encoding); } void draw1x2Glyph(uint8_t x, uint8_t y, uint8_t encoding) { u8x8_Draw1x2Glyph(&u8x8, x, y, encoding); } void drawString(uint8_t x, uint8_t y, const char *s) { u8x8_DrawString(&u8x8, x, y, s); } void drawUTF8(uint8_t x, uint8_t y, const char *s) { u8x8_DrawUTF8(&u8x8, x, y, s); } void draw2x2String(uint8_t x, uint8_t y, const char *s) { u8x8_Draw2x2String(&u8x8, x, y, s); } void draw1x2String(uint8_t x, uint8_t y, const char *s) { u8x8_Draw1x2String(&u8x8, x, y, s); } void draw2x2UTF8(uint8_t x, uint8_t y, const char *s) { u8x8_Draw2x2UTF8(&u8x8, x, y, s); } void draw1x2UTF8(uint8_t x, uint8_t y, const char *s) { u8x8_Draw1x2UTF8(&u8x8, x, y, s); } uint8_t getUTF8Len(const char *s) { return u8x8_GetUTF8Len(&u8x8, s); } size_t write(uint8_t v); size_t write(const uint8_t *buffer, size_t size) { size_t cnt = 0; while( size > 0 ) { cnt += write(*buffer++); size--; } return cnt; } void inverse(void) { setInverseFont(1); } void noInverse(void) { setInverseFont(0); } /* return 0 for no event or U8X8_MSG_GPIO_MENU_SELECT, */ /* U8X8_MSG_GPIO_MENU_NEXT, U8X8_MSG_GPIO_MENU_PREV, */ /* U8X8_MSG_GPIO_MENU_HOME */ uint8_t getMenuEvent(void) { return u8x8_GetMenuEvent(&u8x8); } uint8_t userInterfaceSelectionList(const char *title, uint8_t start_pos, const char *sl) { return u8x8_UserInterfaceSelectionList(&u8x8, title, start_pos, sl); } uint8_t userInterfaceMessage(const char *title1, const char *title2, const char *title3, const char *buttons) { return u8x8_UserInterfaceMessage(&u8x8, title1, title2, title3, buttons); } uint8_t userInterfaceInputValue(const char *title, const char *pre, uint8_t *value, uint8_t lo, uint8_t hi, uint8_t digits, const char *post) { return u8x8_UserInterfaceInputValue(&u8x8, title, pre, value, lo, hi, digits, post); } /* LiquidCrystal compatible functions */ void home(void) { tx = 0; ty = 0; } void clear(void) { clearDisplay(); home(); } void noDisplay(void) { u8x8_SetPowerSave(&u8x8, 1); } void display(void) { u8x8_SetPowerSave(&u8x8, 0); } void setCursor(uint8_t x, uint8_t y) { tx = x; ty = y; } void drawLog(uint8_t x, uint8_t y, class U8X8LOG &u8x8log); }; class U8X8LOG { public: u8log_t u8log; /* the constructor does nothing, use begin() instead */ U8X8LOG(void) { } /* connect to u8g2, draw to u8g2 whenever required */ bool begin(class U8X8 &u8x8, uint8_t width, uint8_t height, uint8_t *buf) { u8log_Init(&u8log, width, height, buf); u8log_SetCallback(&u8log, u8log_u8x8_cb, u8x8.getU8x8()); return true; } /* disconnected version, manual redraw required */ bool begin(uint8_t width, uint8_t height, uint8_t *buf) { u8log_Init(&u8log, width, height, buf); return true; } void setLineHeightOffset(int8_t line_height_offset) { u8log_SetLineHeightOffset(&u8log, line_height_offset); } void setRedrawMode(uint8_t is_redraw_line_for_each_char) { u8log_SetRedrawMode(&u8log, is_redraw_line_for_each_char); } /* virtual function for print base class */ size_t write(uint8_t v) { u8log_WriteChar(&u8log, v); return 1; } size_t write(const uint8_t *buffer, size_t size) { size_t cnt = 0; while( size > 0 ) { cnt += write(*buffer++); size--; } return cnt; } void writeString(const char *s) { u8log_WriteString(&u8log, s); } void writeChar(uint8_t c) { u8log_WriteChar(&u8log, c); } void writeHex8(uint8_t b) { u8log_WriteHex8(&u8log, b); } void writeHex16(uint16_t v) { u8log_WriteHex16(&u8log, v); } void writeHex32(uint32_t v) { u8log_WriteHex32(&u8log, v); } void writeDec8(uint8_t v, uint8_t d) { u8log_WriteDec8(&u8log, v, d); } void writeDec16(uint8_t v, uint8_t d) { u8log_WriteDec16(&u8log, v, d); } }; /* u8log_u8x8.c */ inline void U8X8::drawLog(uint8_t x, uint8_t y, class U8X8LOG &u8x8log) { u8x8_DrawLog(&u8x8, x, y, &(u8x8log.u8log)); } class U8G2 { protected: u8g2_t u8g2; u8x8_char_cb cpp_next_cb; /* the cpp interface has its own decoding function for the Arduino print command */ public: u8g2_uint_t tx, ty; U8G2(void) { cpp_next_cb = u8x8_ascii_next; home(); } u8x8_t *getU8x8(void) { return u8g2_GetU8x8(&u8g2); } u8g2_t *getU8g2(void) { return &u8g2; } void sendF(const char *fmt, ...) { va_list va; va_start(va, fmt); u8x8_cad_vsendf(u8g2_GetU8x8(&u8g2), fmt, va); va_end(va); } uint32_t getBusClock(void) { return u8g2_GetU8x8(&u8g2)->bus_clock; } void setBusClock(uint32_t clock_speed) { u8g2_GetU8x8(&u8g2)->bus_clock = clock_speed; } void setI2CAddress(uint8_t adr) { u8g2_SetI2CAddress(&u8g2, adr); } void enableUTF8Print(void) { cpp_next_cb = u8x8_utf8_next; } void disableUTF8Print(void) { cpp_next_cb = u8x8_ascii_next; } /* u8x8 interface */ uint8_t getCols(void) { return u8x8_GetCols(u8g2_GetU8x8(&u8g2)); } uint8_t getRows(void) { return u8x8_GetRows(u8g2_GetU8x8(&u8g2)); } void drawTile(uint8_t x, uint8_t y, uint8_t cnt, uint8_t *tile_ptr) { u8x8_DrawTile(u8g2_GetU8x8(&u8g2), x, y, cnt, tile_ptr); } /* return 0 for no event or U8X8_MSG_GPIO_MENU_SELECT, */ /* U8X8_MSG_GPIO_MENU_NEXT, U8X8_MSG_GPIO_MENU_PREV, */ /* U8X8_MSG_GPIO_MENU_HOME */ uint8_t getMenuEvent(void) { return u8x8_GetMenuEvent(u8g2_GetU8x8(&u8g2)); } void initDisplay(void) { u8g2_InitDisplay(&u8g2); } void clearDisplay(void) { u8g2_ClearDisplay(&u8g2); } void setPowerSave(uint8_t is_enable) { u8g2_SetPowerSave(&u8g2, is_enable); } void setFlipMode(uint8_t mode) { u8g2_SetFlipMode(&u8g2, mode); } void setContrast(uint8_t value) { u8g2_SetContrast(&u8g2, value); } void setDisplayRotation(const u8g2_cb_t *u8g2_cb) { u8g2_SetDisplayRotation(&u8g2, u8g2_cb); } bool begin(void) { /* note: call to u8x8_utf8_init is not required here, this is done in the setup procedures before */ #ifndef U8G2_USE_DYNAMIC_ALLOC initDisplay(); clearDisplay(); setPowerSave(0); return 1; #else return 0; #endif } void beginSimple(void) { /* does not clear the display and does not wake up the display */ /* user is responsible for calling clearDisplay() and setPowerSave(0) */ initDisplay(); } /* u8g2 */ u8g2_uint_t getDisplayHeight(void) { return u8g2_GetDisplayHeight(&u8g2); } u8g2_uint_t getDisplayWidth(void) { return u8g2_GetDisplayWidth(&u8g2); } /* u8g2_buffer.c */ void sendBuffer(void) { u8g2_SendBuffer(&u8g2); } void clearBuffer(void) { u8g2_ClearBuffer(&u8g2); } void firstPage(void) { u8g2_FirstPage(&u8g2); } uint8_t nextPage(void) { return u8g2_NextPage(&u8g2); } uint8_t *getBufferPtr(void) { return u8g2_GetBufferPtr(&u8g2); } uint8_t getBufferTileHeight(void) { return u8g2_GetBufferTileHeight(&u8g2); } uint8_t getBufferTileWidth(void) { return u8g2_GetBufferTileWidth(&u8g2); } uint8_t getPageCurrTileRow(void) { return u8g2_GetBufferCurrTileRow(&u8g2); } // obsolete void setPageCurrTileRow(uint8_t row) { u8g2_SetBufferCurrTileRow(&u8g2, row); } // obsolete uint8_t getBufferCurrTileRow(void) { return u8g2_GetBufferCurrTileRow(&u8g2); } void setBufferCurrTileRow(uint8_t row) { u8g2_SetBufferCurrTileRow(&u8g2, row); } // this should be renamed to setBufferAutoClear void setAutoPageClear(uint8_t mode) { u8g2_SetAutoPageClear(&u8g2, mode); } void updateDisplayArea(uint8_t tx, uint8_t ty, uint8_t tw, uint8_t th) { u8g2_UpdateDisplayArea(&u8g2, tx, ty, tw, th); } void updateDisplay(void) { u8g2_UpdateDisplay(&u8g2); } void refreshDisplay(void) { u8x8_RefreshDisplay(u8g2_GetU8x8(&u8g2)); } /* u8g2_hvline.c */ void setDrawColor(uint8_t color_index) { u8g2_SetDrawColor(&u8g2, color_index); } uint8_t getDrawColor(void) { return u8g2_GetDrawColor(&u8g2); } void drawPixel(u8g2_uint_t x, u8g2_uint_t y) { u8g2_DrawPixel(&u8g2, x, y); } void drawHLine(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w) { u8g2_DrawHLine(&u8g2, x, y, w); } void drawVLine(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t h) { u8g2_DrawVLine(&u8g2, x, y, h); } void drawHVLine(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t len, uint8_t dir) { u8g2_DrawHVLine(&u8g2, x, y, len, dir); } /* u8g2_box.c */ void drawFrame(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h) { u8g2_DrawFrame(&u8g2, x, y, w, h); } void drawRFrame(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, u8g2_uint_t r) { u8g2_DrawRFrame(&u8g2, x, y, w, h,r); } void drawBox(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h) { u8g2_DrawBox(&u8g2, x, y, w, h); } void drawRBox(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, u8g2_uint_t r) { u8g2_DrawRBox(&u8g2, x, y, w, h,r); } /* u8g2_circle.c */ void drawCircle(u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rad, uint8_t opt = U8G2_DRAW_ALL) { u8g2_DrawCircle(&u8g2, x0, y0, rad, opt); } void drawDisc(u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rad, uint8_t opt = U8G2_DRAW_ALL) { u8g2_DrawDisc(&u8g2, x0, y0, rad, opt); } void drawEllipse(u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rx, u8g2_uint_t ry, uint8_t opt = U8G2_DRAW_ALL) { u8g2_DrawEllipse(&u8g2, x0, y0, rx, ry, opt); } void drawFilledEllipse(u8g2_uint_t x0, u8g2_uint_t y0, u8g2_uint_t rx, u8g2_uint_t ry, uint8_t opt = U8G2_DRAW_ALL) { u8g2_DrawFilledEllipse(&u8g2, x0, y0, rx, ry, opt); } /* u8g2_line.c */ void drawLine(u8g2_uint_t x1, u8g2_uint_t y1, u8g2_uint_t x2, u8g2_uint_t y2) { u8g2_DrawLine(&u8g2, x1, y1, x2, y2); } /* u8g2_bitmap.c */ void setBitmapMode(uint8_t is_transparent) { u8g2_SetBitmapMode(&u8g2, is_transparent); } void drawBitmap(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t cnt, u8g2_uint_t h, const uint8_t *bitmap) { u8g2_DrawBitmap(&u8g2, x, y, cnt, h, bitmap); } void drawXBM(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, const uint8_t *bitmap) { u8g2_DrawXBM(&u8g2, x, y, w, h, bitmap); } void drawXBMP(u8g2_uint_t x, u8g2_uint_t y, u8g2_uint_t w, u8g2_uint_t h, const uint8_t *bitmap) { u8g2_DrawXBMP(&u8g2, x, y, w, h, bitmap); } /* u8g2_polygon.c */ void drawTriangle(int16_t x0, int16_t y0, int16_t x1, int16_t y1, int16_t x2, int16_t y2) { u8g2_DrawTriangle(&u8g2, x0, y0, x1, y1, x2, y2); } /* u8log_u8g2.c */ void drawLog(u8g2_uint_t x, u8g2_uint_t y, class U8G2LOG &u8g2log); /* u8g2_font.c */ void setFont(const uint8_t *font) {u8g2_SetFont(&u8g2, font); } void setFontMode(uint8_t is_transparent) {u8g2_SetFontMode(&u8g2, is_transparent); } void setFontDirection(uint8_t dir) {u8g2_SetFontDirection(&u8g2, dir); } int8_t getAscent(void) { return u8g2_GetAscent(&u8g2); } int8_t getDescent(void) { return u8g2_GetDescent(&u8g2); } void setFontPosBaseline(void) { u8g2_SetFontPosBaseline(&u8g2); } void setFontPosBottom(void) { u8g2_SetFontPosBottom(&u8g2); } void setFontPosTop(void) { u8g2_SetFontPosTop(&u8g2); } void setFontPosCenter(void) { u8g2_SetFontPosCenter(&u8g2); } void setFontRefHeightText(void) { u8g2_SetFontRefHeightText(&u8g2); } void setFontRefHeightExtendedText(void) { u8g2_SetFontRefHeightExtendedText(&u8g2); } void setFontRefHeightAll(void) { u8g2_SetFontRefHeightAll(&u8g2); } u8g2_uint_t drawGlyph(u8g2_uint_t x, u8g2_uint_t y, uint16_t encoding) { return u8g2_DrawGlyph(&u8g2, x, y, encoding); } u8g2_uint_t drawStr(u8g2_uint_t x, u8g2_uint_t y, const char *s) { return u8g2_DrawStr(&u8g2, x, y, s); } u8g2_uint_t drawUTF8(u8g2_uint_t x, u8g2_uint_t y, const char *s) { return u8g2_DrawUTF8(&u8g2, x, y, s); } u8g2_uint_t drawExtUTF8(u8g2_uint_t x, u8g2_uint_t y, uint8_t to_left, const uint16_t *kerning_table, const char *s) { return u8g2_DrawExtUTF8(&u8g2, x, y, to_left, kerning_table, s); } u8g2_uint_t getStrWidth(const char *s) { return u8g2_GetStrWidth(&u8g2, s); } u8g2_uint_t getUTF8Width(const char *s) { return u8g2_GetUTF8Width(&u8g2, s); } // not required any more, enable UTF8 for print //void printUTF8(const char *s) { tx += u8g2_DrawUTF8(&u8g2, tx, ty, s); } /* virtual function for print base class */ size_t write(uint8_t v) { uint16_t e = cpp_next_cb(&(u8g2.u8x8), v); if ( e < 0x0fffe ) tx += u8g2_DrawGlyph(&u8g2, tx, ty, e); return 1; } size_t write(const uint8_t *buffer, size_t size) { size_t cnt = 0; while( size > 0 ) { cnt += write(*buffer++); size--; } return cnt; } /* user interface */ uint8_t userInterfaceSelectionList(const char *title, uint8_t start_pos, const char *sl) { return u8g2_UserInterfaceSelectionList(&u8g2, title, start_pos, sl); } uint8_t userInterfaceMessage(const char *title1, const char *title2, const char *title3, const char *buttons) { return u8g2_UserInterfaceMessage(&u8g2, title1, title2, title3, buttons); } uint8_t userInterfaceInputValue(const char *title, const char *pre, uint8_t *value, uint8_t lo, uint8_t hi, uint8_t digits, const char *post) { return u8g2_UserInterfaceInputValue(&u8g2, title, pre, value, lo, hi, digits, post); } /* LiquidCrystal compatible functions */ void home(void) { tx = 0; ty = 0; u8x8_utf8_init(u8g2_GetU8x8(&u8g2)); } void clear(void) { home(); clearDisplay(); clearBuffer(); } void noDisplay(void) { u8g2_SetPowerSave(&u8g2, 1); } void display(void) { u8g2_SetPowerSave(&u8g2, 0); } void setCursor(u8g2_uint_t x, u8g2_uint_t y) { tx = x; ty = y; } /* u8glib compatible functions */ void sleepOn(void) { u8g2_SetPowerSave(&u8g2, 1); } void sleepOff(void) { u8g2_SetPowerSave(&u8g2, 0); } void setColorIndex(uint8_t color_index) { u8g2_SetDrawColor(&u8g2, color_index); } uint8_t getColorIndex(void) { return u8g2_GetDrawColor(&u8g2); } int8_t getFontAscent(void) { return u8g2_GetAscent(&u8g2); } int8_t getFontDescent(void) { return u8g2_GetDescent(&u8g2); } int8_t getMaxCharHeight(void) { return u8g2_GetMaxCharHeight(&u8g2); } int8_t getMaxCharWidth(void) { return u8g2_GetMaxCharWidth(&u8g2); } u8g2_uint_t getHeight() { return u8g2_GetDisplayHeight(&u8g2); } u8g2_uint_t getWidth() { return u8g2_GetDisplayWidth(&u8g2); } }; class U8G2LOG { public: u8log_t u8log; /* the constructor does nothing, use begin() instead */ U8G2LOG(void) { } /* connect to u8g2, draw to u8g2 whenever required */ bool begin(class U8G2 &u8g2, uint8_t width, uint8_t height, uint8_t *buf) { u8log_Init(&u8log, width, height, buf); u8log_SetCallback(&u8log, u8log_u8g2_cb, u8g2.getU8g2()); return true; } /* disconnected version, manual redraw required */ bool begin(uint8_t width, uint8_t height, uint8_t *buf) { u8log_Init(&u8log, width, height, buf); return true; } void setLineHeightOffset(int8_t line_height_offset) { u8log_SetLineHeightOffset(&u8log, line_height_offset); } void setRedrawMode(uint8_t is_redraw_line_for_each_char) { u8log_SetRedrawMode(&u8log, is_redraw_line_for_each_char); } /* virtual function for print base class */ size_t write(uint8_t v) { u8log_WriteChar(&u8log, v); return 1; } size_t write(const uint8_t *buffer, size_t size) { size_t cnt = 0; while( size > 0 ) { cnt += write(*buffer++); size--; } return cnt; } void writeString(const char *s) { u8log_WriteString(&u8log, s); } void writeChar(uint8_t c) { u8log_WriteChar(&u8log, c); } void writeHex8(uint8_t b) { u8log_WriteHex8(&u8log, b); } void writeHex16(uint16_t v) { u8log_WriteHex16(&u8log, v); } void writeHex32(uint32_t v) { u8log_WriteHex32(&u8log, v); } void writeDec8(uint8_t v, uint8_t d) { u8log_WriteDec8(&u8log, v, d); } void writeDec16(uint8_t v, uint8_t d) { u8log_WriteDec16(&u8log, v, d); } }; /* u8log_u8g2.c */ inline void U8G2::drawLog(u8g2_uint_t x, u8g2_uint_t y, class U8G2LOG &u8g2log) { u8g2_DrawLog(&u8g2, x, y, &(u8g2log.u8log)); } #endif /* MYU8GLIB_H_ */ ================================================ FILE: Inc/oled.h ================================================ /* * oled.h * * Created on: 31 . 2019 . * Author: Alex */ #ifndef OLED_H_ #define OLED_H_ #include "stm32f1xx_hal.h" #include "myU8g2lib.h" #include "font.h" #include "main.h" #define SPI_HANDLER hspi2 // use your SPI handler #define I2C_HANDLER hi2c1 // use your I2C handler extern SPI_HandleTypeDef SPI_HANDLER; extern I2C_HandleTypeDef I2C_HANDLER; #define OLED_I2C_ADDR (0x3C) extern "C" uint8_t u8x8_gpio_and_delay_stm32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); extern "C" uint8_t u8x8_byte_stm32_hw_spi(u8x8_t *u8g2, uint8_t msg, uint8_t arg_int, void *arg_ptr); extern "C" uint8_t u8x8_byte_stm32_hw_i2c(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr); #endif ================================================ FILE: Inc/pid.h ================================================ /* * pid.h * * Created on: 13 ���. 2019 �. * Author: Alex */ #ifndef _PID_H #define _PID_H #include "main.h" #include "stat.h" #include "vars.h" class PIDparam { public: PIDparam(int32_t Kp = 0, int32_t Ki = 0, int32_t Kd = 0); PIDparam(const PIDparam &p); int32_t Kp = 0; int32_t Ki = 0; int32_t Kd = 0; }; /* The PID algorithm * Un = Kp*(Xs - Xn) + Ki*summ{j=0; j<=n}(Xs - Xj) + Kd(Xn - Xn-1), * Where Xs - is the setup temperature, Xn - the temperature on n-iteration step * In this program the interactive formula is used: * Un = Un-1 + Kp*(Xn-1 - Xn) + Ki*(Xs - Xn) + Kd*(Xn-2 + Xn - 2*Xn-1) * With the first step: * U0 = Kp*(Xs - X0) + Ki*(Xs - X0); Xn-1 = Xn; * * The default values of PID coefficients can be found in config.cpp */ class PID { public: PID(void) { } void load(const PIDparam &p); PIDparam dump(void) { return PIDparam(Kp, Ki, Kd); } void pidStable(int32_t power) { this->power = power; } void init(uint16_t ms, uint8_t denominator_p = 11, bool heat_force = true); void resetPID(uint16_t t = 0); // reset PID algorithm history parameters int32_t reqPower(int16_t temp_set, int16_t temp_curr); int32_t changePID(uint8_t p, int32_t k); // set or get (if parameter < 0) PID parameter void newPIDparams(uint16_t delta_power, uint32_t diff, uint32_t period); private: void debugPID(int t_set, int t_curr, long kp, long ki, long kd, long delta_p); uint32_t T = 20; // Check IRON or Hot Air Gun period, ms (to calculate auto PID parameters) int16_t temp_h0 = 0; // previously measured temperatures int16_t temp_h1 = 0; int32_t power = 0; // The power iterative multiplied by denominator int32_t Kp = 10; // The PID coefficients multiplied by denominator. int32_t Ki = 10; int32_t Kd = 0; int32_t Kp_force = 10; // Kp * 5 int32_t Ki_force = 5; // Ki / 10 int16_t denominator_p = 11; // The common coefficient denominator power of 2 (11 means 2048) bool use_force = true; // Flag indicating to use forcibly heating mode }; class PIDTUNE { public: PIDTUNE(void) : period(auto_pid_hist_length), temp_max(auto_pid_hist_length), temp_min(auto_pid_hist_length) { } void start(uint16_t base_pwr, uint16_t delta_power, uint16_t base_temp, uint16_t delta_temp); uint16_t run(uint32_t t); uint16_t autoTuneLoops(void) { return loops; } uint32_t autoTunePeriod(void) { return period.read(); } uint16_t tempMin(void) { return temp_min.read(); } uint16_t tempMax(void) { return temp_max.read(); } bool periodStable(void); private: HIST period; // Average value of relay method oscillations period HIST temp_max; // Average value of maximum temperature HIST temp_min; // Average value of minimum temperature volatile uint16_t base_power = 0; // Base power value volatile uint16_t delta_power = 0; // PLUS delta power applied volatile uint16_t base_temp = 0; // Base temperature value volatile uint16_t delta_temp = 0; // The temperature limit (base_temp - delta_temp <= t <= base_temp + delta_temp) volatile bool app_delta_power = false; // Do apply delta power volatile uint32_t pwr_change = 0; // The time (ms) when tune extra power changed volatile bool check_max = false; volatile bool check_min = false; volatile uint16_t t_max = 0; volatile uint16_t t_min = 0; volatile uint16_t loops = 0; // Whole tune oscillation loop count }; #endif ================================================ FILE: Inc/stat.h ================================================ /* * stat.h * * Math statistic class */ #ifndef STAT_H_ #define STAT_H_ #include "main.h" // Exponential average class EMP_AVERAGE { public: EMP_AVERAGE(uint8_t h_length = 8) { emp_k = h_length; emp_data = 0; } void length(uint8_t h_length) { emp_k = h_length; emp_data = 0; } void reset(void) { emp_data = 0; } int32_t average(int32_t value); void update(int32_t value); int32_t read(void); private: volatile uint8_t emp_k = 8; volatile uint32_t emp_data = 0; }; #define H_LENGTH (16) // Flat history data with round buffer class HIST { public: HIST(uint8_t h_length = H_LENGTH) { len = index = 0; max_len = h_length; } void length(uint8_t h_length) { len = index = 0; if (h_length > H_LENGTH) h_length = H_LENGTH; max_len = h_length; } void reset() { len = index = 0; } int32_t read(void); int32_t average(int32_t value); void update(int32_t value); uint32_t dispersion(void); // the math dispersion of the data private: volatile int32_t queue[H_LENGTH]; volatile uint8_t len; // The number of elements in the queue volatile uint8_t max_len; // Maximum length of the queue, not greater than H_LENGTH volatile uint8_t index; // The current element position, use ring buffer }; class SWITCH : public EMP_AVERAGE { public: SWITCH(uint8_t len=8) : EMP_AVERAGE(len) { } void init(uint8_t h_len, uint16_t on = 500, uint16_t off = 500); bool status(void) { return mode; } bool changed(void); void update(uint16_t value); private: bool sw_changed = false; // The status has changed flag bool mode = false; // The switch mode on (true)/off int16_t on_val = 400; // Turn on value int16_t off_val = 500; // Turn off value }; #endif ================================================ FILE: Inc/stm32f1xx_hal_conf.h ================================================ /* USER CODE BEGIN Header */ /** ****************************************************************************** * @file stm32f1xx_hal_conf.h * @brief HAL configuration file. ****************************************************************************** * @attention * * Copyright (c) 2017 STMicroelectronics. * All rights reserved. * * This software is licensed under terms that can be found in the LICENSE file * in the root directory of this software component. * If no LICENSE file comes with this software, it is provided AS-IS. * ****************************************************************************** */ /* USER CODE END Header */ /* Define to prevent recursive inclusion -------------------------------------*/ #ifndef __STM32F1xx_HAL_CONF_H #define __STM32F1xx_HAL_CONF_H #ifdef __cplusplus extern "C" { #endif /* Exported types ------------------------------------------------------------*/ /* Exported constants --------------------------------------------------------*/ /* ########################## Module Selection ############################## */ /** * @brief This is the list of modules to be used in the HAL driver */ #define HAL_MODULE_ENABLED #define HAL_ADC_MODULE_ENABLED /*#define HAL_CRYP_MODULE_ENABLED */ /*#define HAL_CAN_MODULE_ENABLED */ /*#define HAL_CAN_LEGACY_MODULE_ENABLED */ /*#define HAL_CEC_MODULE_ENABLED */ /*#define HAL_CORTEX_MODULE_ENABLED */ /*#define HAL_CRC_MODULE_ENABLED */ /*#define HAL_DAC_MODULE_ENABLED */ #define HAL_DMA_MODULE_ENABLED /*#define HAL_ETH_MODULE_ENABLED */ /*#define HAL_FLASH_MODULE_ENABLED */ #define HAL_GPIO_MODULE_ENABLED #define HAL_I2C_MODULE_ENABLED /*#define HAL_I2S_MODULE_ENABLED */ /*#define HAL_IRDA_MODULE_ENABLED */ /*#define HAL_IWDG_MODULE_ENABLED */ /*#define HAL_NOR_MODULE_ENABLED */ /*#define HAL_NAND_MODULE_ENABLED */ /*#define HAL_PCCARD_MODULE_ENABLED */ /*#define HAL_PCD_MODULE_ENABLED */ /*#define HAL_HCD_MODULE_ENABLED */ /*#define HAL_PWR_MODULE_ENABLED */ /*#define HAL_RCC_MODULE_ENABLED */ /*#define HAL_RTC_MODULE_ENABLED */ /*#define HAL_SD_MODULE_ENABLED */ /*#define HAL_MMC_MODULE_ENABLED */ /*#define HAL_SDRAM_MODULE_ENABLED */ /*#define HAL_SMARTCARD_MODULE_ENABLED */ #define HAL_SPI_MODULE_ENABLED /*#define HAL_SRAM_MODULE_ENABLED */ #define HAL_TIM_MODULE_ENABLED /*#define HAL_UART_MODULE_ENABLED */ /*#define HAL_USART_MODULE_ENABLED */ /*#define HAL_WWDG_MODULE_ENABLED */ #define HAL_CORTEX_MODULE_ENABLED #define HAL_DMA_MODULE_ENABLED #define HAL_FLASH_MODULE_ENABLED #define HAL_EXTI_MODULE_ENABLED #define HAL_GPIO_MODULE_ENABLED #define HAL_PWR_MODULE_ENABLED #define HAL_RCC_MODULE_ENABLED /* ########################## Oscillator Values adaptation ####################*/ /** * @brief Adjust the value of External High Speed oscillator (HSE) used in your application. * This value is used by the RCC HAL module to compute the system frequency * (when HSE is used as system clock source, directly or through the PLL). */ #if !defined (HSE_VALUE) #define HSE_VALUE 8000000U /*!< Value of the External oscillator in Hz */ #endif /* HSE_VALUE */ #if !defined (HSE_STARTUP_TIMEOUT) #define HSE_STARTUP_TIMEOUT 100U /*!< Time out for HSE start up, in ms */ #endif /* HSE_STARTUP_TIMEOUT */ /** * @brief Internal High Speed oscillator (HSI) value. * This value is used by the RCC HAL module to compute the system frequency * (when HSI is used as system clock source, directly or through the PLL). */ #if !defined (HSI_VALUE) #define HSI_VALUE 8000000U /*!< Value of the Internal oscillator in Hz*/ #endif /* HSI_VALUE */ /** * @brief Internal Low Speed oscillator (LSI) value. */ #if !defined (LSI_VALUE) #define LSI_VALUE 40000U /*!< LSI Typical Value in Hz */ #endif /* LSI_VALUE */ /*!< Value of the Internal Low Speed oscillator in Hz The real value may vary depending on the variations in voltage and temperature. */ /** * @brief External Low Speed oscillator (LSE) value. * This value is used by the UART, RTC HAL module to compute the system frequency */ #if !defined (LSE_VALUE) #define LSE_VALUE 32768U /*!< Value of the External oscillator in Hz*/ #endif /* LSE_VALUE */ #if !defined (LSE_STARTUP_TIMEOUT) #define LSE_STARTUP_TIMEOUT 5000U /*!< Time out for LSE start up, in ms */ #endif /* LSE_STARTUP_TIMEOUT */ /* Tip: To avoid modifying this file each time you need to use different HSE, === you can define the HSE value in your toolchain compiler preprocessor. */ /* ########################### System Configuration ######################### */ /** * @brief This is the HAL system configuration section */ #define VDD_VALUE 3300U /*!< Value of VDD in mv */ #define TICK_INT_PRIORITY 0U /*!< tick interrupt priority (lowest by default) */ #define USE_RTOS 0U #define PREFETCH_ENABLE 1U #define USE_HAL_ADC_REGISTER_CALLBACKS 0U /* ADC register callback disabled */ #define USE_HAL_CAN_REGISTER_CALLBACKS 0U /* CAN register callback disabled */ #define USE_HAL_CEC_REGISTER_CALLBACKS 0U /* CEC register callback disabled */ #define USE_HAL_DAC_REGISTER_CALLBACKS 0U /* DAC register callback disabled */ #define USE_HAL_ETH_REGISTER_CALLBACKS 0U /* ETH register callback disabled */ #define USE_HAL_HCD_REGISTER_CALLBACKS 0U /* HCD register callback disabled */ #define USE_HAL_I2C_REGISTER_CALLBACKS 0U /* I2C register callback disabled */ #define USE_HAL_I2S_REGISTER_CALLBACKS 0U /* I2S register callback disabled */ #define USE_HAL_MMC_REGISTER_CALLBACKS 0U /* MMC register callback disabled */ #define USE_HAL_NAND_REGISTER_CALLBACKS 0U /* NAND register callback disabled */ #define USE_HAL_NOR_REGISTER_CALLBACKS 0U /* NOR register callback disabled */ #define USE_HAL_PCCARD_REGISTER_CALLBACKS 0U /* PCCARD register callback disabled */ #define USE_HAL_PCD_REGISTER_CALLBACKS 0U /* PCD register callback disabled */ #define USE_HAL_RTC_REGISTER_CALLBACKS 0U /* RTC register callback disabled */ #define USE_HAL_SD_REGISTER_CALLBACKS 0U /* SD register callback disabled */ #define USE_HAL_SMARTCARD_REGISTER_CALLBACKS 0U /* SMARTCARD register callback disabled */ #define USE_HAL_IRDA_REGISTER_CALLBACKS 0U /* IRDA register callback disabled */ #define USE_HAL_SRAM_REGISTER_CALLBACKS 0U /* SRAM register callback disabled */ #define USE_HAL_SPI_REGISTER_CALLBACKS 0U /* SPI register callback disabled */ #define USE_HAL_TIM_REGISTER_CALLBACKS 0U /* TIM register callback disabled */ #define USE_HAL_UART_REGISTER_CALLBACKS 0U /* UART register callback disabled */ #define USE_HAL_USART_REGISTER_CALLBACKS 0U /* USART register callback disabled */ #define USE_HAL_WWDG_REGISTER_CALLBACKS 0U /* WWDG register callback disabled */ /* ########################## Assert Selection ############################## */ /** * @brief Uncomment the line below to expanse the "assert_param" macro in the * HAL drivers code */ /* #define USE_FULL_ASSERT 1U */ /* ################## Ethernet peripheral configuration ##################### */ /* Section 1 : Ethernet peripheral configuration */ /* MAC ADDRESS: MAC_ADDR0:MAC_ADDR1:MAC_ADDR2:MAC_ADDR3:MAC_ADDR4:MAC_ADDR5 */ #define MAC_ADDR0 2U #define MAC_ADDR1 0U #define MAC_ADDR2 0U #define MAC_ADDR3 0U #define MAC_ADDR4 0U #define MAC_ADDR5 0U /* Definition of the Ethernet driver buffers size and count */ #define ETH_RX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for receive */ #define ETH_TX_BUF_SIZE ETH_MAX_PACKET_SIZE /* buffer size for transmit */ #define ETH_RXBUFNB 8U /* 4 Rx buffers of size ETH_RX_BUF_SIZE */ #define ETH_TXBUFNB 4U /* 4 Tx buffers of size ETH_TX_BUF_SIZE */ /* Section 2: PHY configuration section */ /* DP83848_PHY_ADDRESS Address*/ #define DP83848_PHY_ADDRESS 0x01U /* PHY Reset delay these values are based on a 1 ms Systick interrupt*/ #define PHY_RESET_DELAY 0x000000FFU /* PHY Configuration delay */ #define PHY_CONFIG_DELAY 0x00000FFFU #define PHY_READ_TO 0x0000FFFFU #define PHY_WRITE_TO 0x0000FFFFU /* Section 3: Common PHY Registers */ #define PHY_BCR ((uint16_t)0x00) /*!< Transceiver Basic Control Register */ #define PHY_BSR ((uint16_t)0x01) /*!< Transceiver Basic Status Register */ #define PHY_RESET ((uint16_t)0x8000) /*!< PHY Reset */ #define PHY_LOOPBACK ((uint16_t)0x4000) /*!< Select loop-back mode */ #define PHY_FULLDUPLEX_100M ((uint16_t)0x2100) /*!< Set the full-duplex mode at 100 Mb/s */ #define PHY_HALFDUPLEX_100M ((uint16_t)0x2000) /*!< Set the half-duplex mode at 100 Mb/s */ #define PHY_FULLDUPLEX_10M ((uint16_t)0x0100) /*!< Set the full-duplex mode at 10 Mb/s */ #define PHY_HALFDUPLEX_10M ((uint16_t)0x0000) /*!< Set the half-duplex mode at 10 Mb/s */ #define PHY_AUTONEGOTIATION ((uint16_t)0x1000) /*!< Enable auto-negotiation function */ #define PHY_RESTART_AUTONEGOTIATION ((uint16_t)0x0200) /*!< Restart auto-negotiation function */ #define PHY_POWERDOWN ((uint16_t)0x0800) /*!< Select the power down mode */ #define PHY_ISOLATE ((uint16_t)0x0400) /*!< Isolate PHY from MII */ #define PHY_AUTONEGO_COMPLETE ((uint16_t)0x0020) /*!< Auto-Negotiation process completed */ #define PHY_LINKED_STATUS ((uint16_t)0x0004) /*!< Valid link established */ #define PHY_JABBER_DETECTION ((uint16_t)0x0002) /*!< Jabber condition detected */ /* Section 4: Extended PHY Registers */ #define PHY_SR ((uint16_t)0x10U) /*!< PHY status register Offset */ #define PHY_SPEED_STATUS ((uint16_t)0x0002U) /*!< PHY Speed mask */ #define PHY_DUPLEX_STATUS ((uint16_t)0x0004U) /*!< PHY Duplex mask */ /* ################## SPI peripheral configuration ########################## */ /* CRC FEATURE: Use to activate CRC feature inside HAL SPI Driver * Activated: CRC code is present inside driver * Deactivated: CRC code cleaned from driver */ #define USE_SPI_CRC 0U /* Includes ------------------------------------------------------------------*/ /** * @brief Include module's header file */ #ifdef HAL_RCC_MODULE_ENABLED #include "stm32f1xx_hal_rcc.h" #endif /* HAL_RCC_MODULE_ENABLED */ #ifdef HAL_GPIO_MODULE_ENABLED #include "stm32f1xx_hal_gpio.h" #endif /* HAL_GPIO_MODULE_ENABLED */ #ifdef HAL_EXTI_MODULE_ENABLED #include "stm32f1xx_hal_exti.h" #endif /* HAL_EXTI_MODULE_ENABLED */ #ifdef HAL_DMA_MODULE_ENABLED #include "stm32f1xx_hal_dma.h" #endif /* HAL_DMA_MODULE_ENABLED */ #ifdef HAL_ETH_MODULE_ENABLED #include "stm32f1xx_hal_eth.h" #endif /* HAL_ETH_MODULE_ENABLED */ #ifdef HAL_CAN_MODULE_ENABLED #include "stm32f1xx_hal_can.h" #endif /* HAL_CAN_MODULE_ENABLED */ #ifdef HAL_CAN_LEGACY_MODULE_ENABLED #include "Legacy/stm32f1xx_hal_can_legacy.h" #endif /* HAL_CAN_LEGACY_MODULE_ENABLED */ #ifdef HAL_CEC_MODULE_ENABLED #include "stm32f1xx_hal_cec.h" #endif /* HAL_CEC_MODULE_ENABLED */ #ifdef HAL_CORTEX_MODULE_ENABLED #include "stm32f1xx_hal_cortex.h" #endif /* HAL_CORTEX_MODULE_ENABLED */ #ifdef HAL_ADC_MODULE_ENABLED #include "stm32f1xx_hal_adc.h" #endif /* HAL_ADC_MODULE_ENABLED */ #ifdef HAL_CRC_MODULE_ENABLED #include "stm32f1xx_hal_crc.h" #endif /* HAL_CRC_MODULE_ENABLED */ #ifdef HAL_DAC_MODULE_ENABLED #include "stm32f1xx_hal_dac.h" #endif /* HAL_DAC_MODULE_ENABLED */ #ifdef HAL_FLASH_MODULE_ENABLED #include "stm32f1xx_hal_flash.h" #endif /* HAL_FLASH_MODULE_ENABLED */ #ifdef HAL_SRAM_MODULE_ENABLED #include "stm32f1xx_hal_sram.h" #endif /* HAL_SRAM_MODULE_ENABLED */ #ifdef HAL_NOR_MODULE_ENABLED #include "stm32f1xx_hal_nor.h" #endif /* HAL_NOR_MODULE_ENABLED */ #ifdef HAL_I2C_MODULE_ENABLED #include "stm32f1xx_hal_i2c.h" #endif /* HAL_I2C_MODULE_ENABLED */ #ifdef HAL_I2S_MODULE_ENABLED #include "stm32f1xx_hal_i2s.h" #endif /* HAL_I2S_MODULE_ENABLED */ #ifdef HAL_IWDG_MODULE_ENABLED #include "stm32f1xx_hal_iwdg.h" #endif /* HAL_IWDG_MODULE_ENABLED */ #ifdef HAL_PWR_MODULE_ENABLED #include "stm32f1xx_hal_pwr.h" #endif /* HAL_PWR_MODULE_ENABLED */ #ifdef HAL_RTC_MODULE_ENABLED #include "stm32f1xx_hal_rtc.h" #endif /* HAL_RTC_MODULE_ENABLED */ #ifdef HAL_PCCARD_MODULE_ENABLED #include "stm32f1xx_hal_pccard.h" #endif /* HAL_PCCARD_MODULE_ENABLED */ #ifdef HAL_SD_MODULE_ENABLED #include "stm32f1xx_hal_sd.h" #endif /* HAL_SD_MODULE_ENABLED */ #ifdef HAL_NAND_MODULE_ENABLED #include "stm32f1xx_hal_nand.h" #endif /* HAL_NAND_MODULE_ENABLED */ #ifdef HAL_SPI_MODULE_ENABLED #include "stm32f1xx_hal_spi.h" #endif /* HAL_SPI_MODULE_ENABLED */ #ifdef HAL_TIM_MODULE_ENABLED #include "stm32f1xx_hal_tim.h" #endif /* HAL_TIM_MODULE_ENABLED */ #ifdef HAL_UART_MODULE_ENABLED #include "stm32f1xx_hal_uart.h" #endif /* HAL_UART_MODULE_ENABLED */ #ifdef HAL_USART_MODULE_ENABLED #include "stm32f1xx_hal_usart.h" #endif /* HAL_USART_MODULE_ENABLED */ #ifdef HAL_IRDA_MODULE_ENABLED #include "stm32f1xx_hal_irda.h" #endif /* HAL_IRDA_MODULE_ENABLED */ #ifdef HAL_SMARTCARD_MODULE_ENABLED #include "stm32f1xx_hal_smartcard.h" #endif /* HAL_SMARTCARD_MODULE_ENABLED */ #ifdef HAL_WWDG_MODULE_ENABLED #include "stm32f1xx_hal_wwdg.h" #endif /* HAL_WWDG_MODULE_ENABLED */ #ifdef HAL_PCD_MODULE_ENABLED #include "stm32f1xx_hal_pcd.h" #endif /* HAL_PCD_MODULE_ENABLED */ #ifdef HAL_HCD_MODULE_ENABLED #include "stm32f1xx_hal_hcd.h" #endif /* HAL_HCD_MODULE_ENABLED */ #ifdef HAL_MMC_MODULE_ENABLED #include "stm32f1xx_hal_mmc.h" #endif /* HAL_MMC_MODULE_ENABLED */ /* Exported macro ------------------------------------------------------------*/ #ifdef USE_FULL_ASSERT /** * @brief The assert_param macro is used for function's parameters check. * @param expr If expr is false, it calls assert_failed function * which reports the name of the source file and the source * line number of the call that failed. * If expr is true, it returns no value. * @retval None */ #define assert_param(expr) ((expr) ? (void)0U : assert_failed((uint8_t *)__FILE__, __LINE__)) /* Exported functions ------------------------------------------------------- */ void assert_failed(uint8_t* file, uint32_t line); #else #define assert_param(expr) ((void)0U) #endif /* USE_FULL_ASSERT */ #ifdef __cplusplus } #endif #endif /* __STM32F1xx_HAL_CONF_H */ ================================================ FILE: Inc/stm32f1xx_it.h ================================================ /* USER CODE BEGIN Header */ /** ****************************************************************************** * @file stm32f1xx_it.h * @brief This file contains the headers of the interrupt handlers. ****************************************************************************** * @attention * *

© Copyright (c) 2019 STMicroelectronics. * All rights reserved.

* * This software component is licensed by ST under BSD 3-Clause license, * the "License"; You may not use this file except in compliance with the * License. You may obtain a copy of the License at: * opensource.org/licenses/BSD-3-Clause * ****************************************************************************** */ /* USER CODE END Header */ /* Define to prevent recursive inclusion -------------------------------------*/ #ifndef __STM32F1xx_IT_H #define __STM32F1xx_IT_H #ifdef __cplusplus extern "C" { #endif /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ /* USER CODE END Includes */ /* Exported types ------------------------------------------------------------*/ /* USER CODE BEGIN ET */ /* USER CODE END ET */ /* Exported constants --------------------------------------------------------*/ /* USER CODE BEGIN EC */ /* USER CODE END EC */ /* Exported macro ------------------------------------------------------------*/ /* USER CODE BEGIN EM */ /* USER CODE END EM */ /* Exported functions prototypes ---------------------------------------------*/ void NMI_Handler(void); void HardFault_Handler(void); void MemManage_Handler(void); void BusFault_Handler(void); void UsageFault_Handler(void); void SVC_Handler(void); void DebugMon_Handler(void); void PendSV_Handler(void); void SysTick_Handler(void); void DMA1_Channel1_IRQHandler(void); void TIM1_CC_IRQHandler(void); void TIM2_IRQHandler(void); /* USER CODE BEGIN EFP */ /* USER CODE END EFP */ #ifdef __cplusplus } #endif #endif /* __STM32F1xx_IT_H */ ================================================ FILE: Inc/tools.h ================================================ /* * tools.h * * Created on: 13 . 2019 . * Author: Alex */ #ifndef TOOLS_H_ #define TOOLS_H_ #include "main.h" /* * Useful functions */ int32_t map(int32_t value, int32_t v_min, int32_t v_max, int32_t r_min, int32_t r_max); int32_t constrain(int32_t value, int32_t min, int32_t max); uint8_t gauge(uint8_t percent, uint8_t p_middle, uint8_t g_max); int16_t celsiusToFahrenheit(int16_t cels); int16_t fahrenheitToCelsius(int16_t fahr); #endif ================================================ FILE: Inc/unit.h ================================================ /* * unit.h * */ #ifndef UNIT_H_ #define UNIT_H_ #include "pid.h" #include "stat.h" // Common interface methods for IRON and Hot Air Gun class UNIT : public PID, public PIDTUNE { public: UNIT(void) { } virtual ~UNIT(void) { } void init(uint8_t c_len, uint16_t c_min, uint16_t c_max, uint8_t s_len, uint16_t s_min, uint16_t s_max); bool isConnected(void) { return current.status(); } uint16_t unitCurrent(void) { return current.read(); } // Used in debug mode only void updateCurrent(uint16_t value) { current.update(value); } uint16_t reedInternal(void) { return sw.read(); } void updateReedStatus(bool on) { sw.update(on?100:0); } // Update Reed switch status bool isReedSwitch(bool reed); // REED switch: TRUE if switch is shorten; else: TRUE if status has been changed virtual bool isCold(void) = 0; virtual bool isOn(void) = 0; virtual void switchPower(bool On) = 0; virtual uint16_t presetTemp(void) = 0; virtual void setTemp(uint16_t t) = 0; virtual uint16_t averageTemp(void) = 0; virtual uint8_t avgPowerPcnt(void) = 0; virtual uint16_t avgPower(void) = 0; virtual uint16_t tmpDispersion(void) = 0; virtual uint16_t pwrDispersion(void) = 0; virtual void fixPower(uint16_t Power) = 0; virtual uint16_t getMaxFixedPower(void) = 0; private: SWITCH current; // The current through the unit SWITCH sw; // Tilt switch of T12 or Reed switch of Hot Air Gun }; #endif ================================================ FILE: Inc/vars.h ================================================ /* * vars.h * * Created on: 23 . 2019 . * Author: Alex */ #ifndef VARS_H_ #define VARS_H_ #include "main.h" extern const uint16_t int_temp_max; extern const uint8_t auto_pid_hist_length; extern const uint8_t hot_gun_hist_length; extern const uint8_t ec; extern const uint16_t iron_temp_minC; extern const uint16_t iron_temp_maxC; extern const uint16_t gun_temp_minC; extern const uint16_t gun_temp_maxC; extern const uint8_t default_ambient; #endif /* VARS_H_ */ ================================================ FILE: README.md ================================================ # F1-T12-858D Soldering station for hakko t12 tips + 858D rework station The project description is available here: https://www.hackster.io/sfrwmaker/stm32-based-soldering-and-rework-station-e3955b REVISION HISTORY: Nov 2019. First release created Jan 2020. Second release created - Minor changes in the controller schematics - Now the Hot Air Gun reed switch controls working mode - The soldering iron can keep working while Hot Air Gun mode - Screen saver feature implemented Jan 2020. Some updates of the second release - Minor changes in the controller schematics - Buzzer is always on issue fixed Feb 11 2020. Error on Op-amp label on schematics fixed. LM328 - > LM358 Mar 23 2020. New firmware release, 2.02. See detailed description on the project page. - Updated Hot Air Gun cooling procedure - Debug mode added allowing monitoring of the internal parameters Apr 17 2020. New firmware release, 2.03. See detailed description on the project page. - Two mode hardware switch supported: REED and TILT. Tilt switch algorithm updated. - Fixed issue 'jammed on tip selection screen'. Now the main menu reacheble from tip selection mode by long press. - Ambient temperature and tilt switch readings now are available on debug screen. - Controller without soldering handle connected starts working in Hot Air Gun mode. Apr 29 2020. New firmware release, 3.00. See detailed description on the project page. - Optional 220v safety relay added. - Rotary encoder acceleration deactivated. May 12 2020. New firmware release, 3.01. See detailed description on the project page. - Standby mode issues fixed. - Temperature step feature added. June 03 2020. New firmaware release, 3.02. - Hot Air GUN start issue fixed. The power is supplied to the Hot Gun in 1 second after it activated allowing enabling AC relay. - "About" menu item issue fixed. Now this menu is available. - Tilt switch procedures reviewed and updated. - The standby mode separated from main working mode and implemented as a new one. - Screen saver timeout now is a single entity. It is no longer depended on mode switching. To return to the normal screen mode, touch the encoder. - Software automatic power off procedure reviewed and updated. The controller can power off the iron in case of no tilt switch available. - Accelerated mode of rotary encoder implemented in setting low power temperature procedure in the main menu. Jan 03 2021. New firmware release, 4.00. - Display initialization method chhanged. Now the rotation parameter is inside the contstuctor in display.cpp. - Added support for 'Guarantee cool gun' feature. New feature requires the hardware to be updated. With new hardware schematics the controller guarantees the Hot Air Gun cooled before shutdown. You can put Hot Air Gun to the base then switch off the main power switch and leave your working place. The controller will switch-off the Hot Air Gun, waits till the Hot Air gun cooled and power-off itself. The new firmware release suports old hardware also. Of course, new 'guarantee cool gun feature' will not be available on old hardware. Jan 30 2021. New hardware and firmware release, 4.01. The schematics with relay has been simplified. - Support for 'Guarantee cool gun' feature changed. New feature requires the hardware to be updated. See stm32_T12+858D_v4.sch file in the eagle directory. Feb 01 2021. Release 4.02. - Fixed controller hangs after Hot Air Gun cooled issue. Apr 28 2021. Release 4.03. - Debug information about AC zero events added to the debug mode May 25 2021. Release 4.04. - New feature added. Now it is possible to manage soldering iron while in hot air gun mode. If the "keep iron" option is enabled in main menu, long-press the encoder toggles the soldering iron. May 30 2021. Release 4.05. - Automatic startup mode implemented. The soldering iron would power-up when the power applied to the controller if mode activated. - Boost mode updated. Now boost duration time can be increment by 20 seconds upto 320 seconds. Boost mode temperature now more stable. Jun 02 2021. Release 4.06 - No "about" item menu bug fixed Sep 21 2021. Release 4.07 - Support for system clock checking procedure added. The controller checks its clock speed at startup. In case the ckock is lower than 72 MHz, the error message will be displayed. To return to the working mode long press the encoder. Sep 22 2021. Revert to release 4.06 - The controller speed inialized correctly alwas, the speed test is not necessary. - Some followers reported the new firmware does not work. - Restore old source files, rebuild the project. Perhaps, the issue is about the flash limit of the stm32 microcontroller. Apr 01 2022. Release 4.07 - Rotaruy encoder manager improved - New PID parameters for the Hot Air Gun caliration procedure applied - New TIP, T12-D32 added to the tip list Nov 07 2023. Release 4.08 - The CubeMX file and project are mirgated to STM32CubeIDE. - Implemented new PID algorithm, trying to prevent overheating the soldering iron during heating up. - Faster heat-up procedure of soldering iron. - New manage procedure for Hot Air Gun imported from my recent project of soldering station with JBC tips. ================================================ FILE: Src/buzzer.cpp ================================================ /* * buzzer.cpp * * Created on: 14 . 2019 . * Author: Alex */ #include "buzzer.h" #include "main.h" BUZZER::BUZZER(void) { TIM4->CCR4 = 0; } void BUZZER::playTone(uint16_t period_mks, uint16_t duration_ms) { TIM4->ARR = period_mks-1; TIM4->CCR4 = period_mks >> 1; HAL_Delay(duration_ms); TIM4->CCR4 = 0; } void BUZZER::shortBeep(void) { if (!enabled) return; playTone(284, 160); } void BUZZER::doubleBeep(void) { if (!enabled) return; playTone(284, 160); HAL_Delay(100); playTone(284, 160); } void BUZZER::lowBeep(void) { if (!enabled) return; playTone(2840, 160); } void BUZZER::failedBeep(void) { if (!enabled) return; playTone(284, 160); HAL_Delay(50); playTone(2840, 60); HAL_Delay(50); playTone(1420, 160); } ================================================ FILE: Src/config.cpp ================================================ /* * config.cpp * * Created on: 15 aug. 2019. * Author: Alex */ #include #include #include "config.h" #include "iron.h" #include "tools.h" #include "eeprom.h" #include "buzzer.h" #include "iron_tips.h" /* * The configuration data consists of two separate items: * 1. The configuration record (struct s_config) * 2. The tip calibration record (struct s_tip_list_item) * The external EEPROM IC, at24c32a, divided to two separate area * to store configuration records of each type. See eeprom.c for details */ #define NO_TIP_CHUNK 255 // The flag showing that the tip was not found in the EEPROM // Initialize the configuration. Find the actual record in the EEPROM. CFG_STATUS CFG::init(void) { TIP_CFG::activateGun(false); tip_table = (TIP_TABLE*)malloc(sizeof(TIP_TABLE) * TIPS::loaded()); uint8_t tips_loaded = 0; if (EEPROM::init()) { // True if EEPROM is writable if (tip_table) { tips_loaded = buildTipTable(tip_table); } if (loadRecord(&a_cfg)) { correctConfig(&a_cfg); } else { setDefaults(); } selectTip(0); // Load Hot Air Gun calibtarion data (virtual tip) selectTip(a_cfg.tip); // Load tip configuration data into a_tip variable CFG_CORE::syncConfig(); // Save spare configuration if (tips_loaded > 0) { return CFG_OK; } else { return CFG_NO_TIP; } } else { // EEPROM is not writable or is not ready setDefaults(); TIP_CFG::defaultCalibration(0); // 0 means Hot Air Gun selectTip(1); CFG_CORE::syncConfig(); } return CFG_READ_ERROR; } // Load calibration data of the tip from EEPROM. If the tip is not calibrated, initialize the calibration data with the default values bool CFG::selectTip(uint8_t index) { if (!tip_table) return false; bool result = true; uint8_t tip_chunk_index = tip_table[index].tip_chunk_index; if (tip_chunk_index == NO_TIP_CHUNK) { TIP_CFG::defaultCalibration(index == 0); // index == 0 means Hot Air Gun return false; } TIP tip; if (loadTipData(&tip, tip_chunk_index) != EPR_OK) { TIP_CFG::defaultCalibration(index == 0); // index == 0 means Hot Air Gun result = false; } else { if (!(tip.mask & TIP_CALIBRATED)) { // Tip is not calibrated, load default config TIP_CFG::defaultCalibration(index == 0); } else if (!isValidTipConfig(&tip)) { TIP_CFG::defaultCalibration(index == 0); } else { // Tip configuration record is completely correct TIP_CFG::load(tip, index == 0); } } return result; } // Change the current tip. Save configuration to the EEPROM void CFG::changeTip(uint8_t index) { if (selectTip(index)) { a_cfg.tip = index; saveConfig(); } } // Return current tip index (or 0 if Hot Air Gun is active) uint8_t CFG::currentTipIndex(void) { if (!TIP_CFG::gunActive()) return a_cfg.tip; else return 0; } /* * Translate the internal temperature of the IRON or Hot Air Gun to the human readable units (Celsius or Fahrenheit) * Parameters: * temp - Device temperature in internal units * ambient - The ambient temperature * force_mode - */ uint16_t CFG::tempToHuman(uint16_t temp, int16_t ambient, CFG_TEMP_DEVICE force_device) { uint16_t tempH = TIP_CFG::tempCelsius(temp, ambient, force_device); if (!CFG_CORE::isCelsius()) tempH = celsiusToFahrenheit(tempH); return tempH; } // Translate the temperature from human readable units (Celsius or Fahrenheit) to the internal units uint16_t CFG::humanToTemp(uint16_t t, int16_t ambient) { int d = ambient - TIP_CFG::ambientTemp(); uint16_t t200 = referenceTemp(0) + d; uint16_t t400 = referenceTemp(3) + d; uint16_t tmin = tempMinC(); uint16_t tmax = tempMaxC(); if (!CFG_CORE::isCelsius()) { t200 = celsiusToFahrenheit(t200); t400 = celsiusToFahrenheit(t400); tmin = celsiusToFahrenheit(tmin); tmax = celsiusToFahrenheit(tmax); } t = constrain(t, tmin, tmax); uint16_t left = 0; uint16_t right = int_temp_max; uint16_t temp = map(t, t200, t400, TIP_CFG::calibration(0), TIP_CFG::calibration(3)); if (temp > (left+right)/ 2) { temp -= (right-left) / 4; } else { temp += (right-left) / 4; } for (uint8_t i = 0; i < 20; ++i) { uint16_t tempH = tempToHuman(temp, ambient); if (tempH == t) { return temp; } uint16_t new_temp; if (tempH < t) { left = temp; new_temp = (left+right)/2; if (new_temp == temp) new_temp = temp + 1; } else { right = temp; new_temp = (left+right)/2; if (new_temp == temp) new_temp = temp - 1; } temp = new_temp; } return temp; } uint16_t CFG::lowTempInternal(int16_t ambient) { uint16_t t200 = referenceTemp(0); a_cfg.low_temp = constrain(a_cfg.low_temp, ambient, t200); return map(a_cfg.low_temp, ambient, t200, 0, TIP_CFG::calibration(0)); } // Build the complete tip name (including "T12-" prefix) const char* CFG::tipName(void) { uint8_t tip_index = 0; if (!TIP_CFG::gunActive()) tip_index = a_cfg.tip; static char tip_name[tip_name_sz+5]; return buildFullTipName(tip_name, tip_index); } // Save current configuration to the EEPROM void CFG::saveConfig(void) { if (CFG_CORE::areConfigsIdentical()) return; saveRecord(&a_cfg); // calculates CRC and changes ID CFG_CORE::syncConfig(); } void CFG::savePID(PIDparam &pp, bool iron) { if (iron) { a_cfg.iron_Kp = pp.Kp; a_cfg.iron_Ki = pp.Ki; a_cfg.iron_Kd = pp.Kd; } else { a_cfg.gun_Kp = pp.Kp; a_cfg.gun_Ki = pp.Ki; a_cfg.gun_Kd = pp.Kd; } saveRecord(&a_cfg); CFG_CORE::syncConfig(); } // Save new IRON tip calibration data to the EEPROM only. Do not change active configuration void CFG::saveTipCalibtarion(uint8_t index, uint16_t temp[4], uint8_t mask, int8_t ambient) { TIP tip; tip.t200 = temp[0]; tip.t260 = temp[1]; tip.t330 = temp[2]; tip.t400 = temp[3]; tip.mask = mask; tip.ambient = ambient; tip_table[index].tip_mask = mask; const char* name = TIPS::name(index); if (name && isValidTipConfig(&tip)) { strncpy(tip.name, name, tip_name_sz); uint8_t tip_chunk_index = tip_table[index].tip_chunk_index; if (tip_chunk_index == NO_TIP_CHUNK) { // This tip data is not in the EEPROM, it was not active! tip_chunk_index = freeTipChunkIndex(); if (tip_chunk_index == NO_TIP_CHUNK) { // Failed to find free slot to save tip configuration BUZZER::failedBeep(); return; } tip_table[index].tip_chunk_index = tip_chunk_index; tip_table[index].tip_mask = mask; } if (saveTipData(&tip, tip_table[index].tip_chunk_index) == EPR_OK) BUZZER::shortBeep(); else BUZZER::failedBeep(); } } // Toggle (activate/deactivate) tip activation flag. Do not change active tip configuration bool CFG::toggleTipActivation(uint8_t index) { if (!tip_table) return false; TIP tip; uint8_t tip_chunk_index = tip_table[index].tip_chunk_index; if (tip_chunk_index == NO_TIP_CHUNK) { // This tip data is not in the EEPROM, it was not active! tip_chunk_index = freeTipChunkIndex(); if (tip_chunk_index == NO_TIP_CHUNK) return false; // Failed to find free slot to save tip configuration const char *name = TIPS::name(index); if (name) { strncpy(tip.name, name, tip_name_sz); // Initialize tip name tip.mask = TIP_ACTIVE; if (saveTipData(&tip, tip_chunk_index) == EPR_OK) { if (isTipCorrect(tip_chunk_index, &tip)) { tip_table[index].tip_chunk_index = tip_chunk_index; tip_table[index].tip_mask = tip.mask; return true; } } } } else { // Tip configuration data exists in the EEPROM if (loadTipData(&tip, tip_chunk_index) == EPR_OK) { tip.mask ^= TIP_ACTIVE; if (saveTipData(&tip, tip_chunk_index) == EPR_OK) { tip_table[index].tip_mask = tip.mask; return true; } } } return false; } // Check the TIP data was written correctly bool CFG::isTipCorrect(uint8_t tip_chunk_index, TIP *tip) { bool same_name = true; forceReloadChunk(); // Reread the chunk, disable EEPROM cache TIP read_tip; if (loadTipData(&read_tip, tip_chunk_index) == EPR_OK) { for (uint8_t i = 0; i < tip_name_sz; ++i) { if (read_tip.name[i] != tip->name[i]) { same_name = false; break; } } } return same_name; } // Build the tip list starting from the previous tip int CFG::tipList(uint8_t second, TIP_ITEM list[], uint8_t list_len, bool active_only) { if (!tip_table) { // If tip_table is not initialized, return empty list for (uint8_t tip_index = 0; tip_index < list_len; ++tip_index) { list[tip_index].name[0] = '\0'; // Clear whole list } return 0; } uint8_t loaded = 0; // Seek backward for one more tip for (int tip_index = second - 1; tip_index > 0; --tip_index) { // Do not insert Hot Air Gun 'tip' (tip_index == 0) into the list if (!active_only || (tip_table[tip_index].tip_mask & TIP_ACTIVE)) { list[loaded].tip_index = tip_index; list[loaded].mask = tip_table[tip_index].tip_mask; buildFullTipName(list[loaded].name, tip_index); ++loaded; break; // Load just one tip } } for (uint8_t tip_index = second; tip_index < TIPS::loaded(); ++tip_index) { if (tip_index == 0) continue; // Skip Hot Air Gun 'tip' if (active_only && !(tip_table[tip_index].tip_mask & TIP_ACTIVE)) // This tip is not active, but active tip list required continue; // Skip this tip list[loaded].tip_index = tip_index; list[loaded].mask = tip_table[tip_index].tip_mask; buildFullTipName(list[loaded].name, tip_index); ++loaded; if (loaded >= list_len) break; } for (uint8_t tip_index = loaded; tip_index < list_len; ++tip_index) { list[tip_index].name[0] = '\0'; // Clear rest of the list } return loaded; } // Initialize the configuration area. Save default configuration to the EEPROM void CFG::initConfigArea(void) { clearConfigArea(); setDefaults(); saveRecord(&a_cfg); clearAllTipsCalibration(); } void CFG::clearAllTipsCalibration(void) { TIP tmp_tip; for (uint8_t i = 0; i < TIPS::loaded(); ++i) { if (tip_table[i].tip_chunk_index != NO_TIP_CHUNK) { uint8_t m = tip_table[i].tip_mask; // Check The tip is calibrated if ((m & TIP_ACTIVE) && (m & TIP_CALIBRATED)) { if (loadTipData(&tmp_tip, i) == EPR_OK) { tmp_tip.mask = TIP_ACTIVE; // Clear calibrated flag tip_table[i].tip_mask = TIP_ACTIVE; if (saveTipData(&tmp_tip, i) != EPR_OK) { break; // Stop writing to EEPROM on the first IO error } } } } } } /* * Builds the tip configuration table: reads whole tip configuration area and search for configured or active tip * If the tip found, updates the tip_table array with the tip chunk number */ uint8_t CFG::buildTipTable(TIP_TABLE tt[]) { for (uint8_t i = 0; i < TIPS::loaded(); ++i) { tt[i].tip_chunk_index = NO_TIP_CHUNK; tt[i].tip_mask = 0; } TIP tmp_tip; int tip_index = 0; int loaded = 0; for (int i = 0; i < tipDataTotal(); ++i) { switch (loadTipData(&tmp_tip, i)) { case EPR_OK: tip_index = TIPS::index(tmp_tip.name); // Loaded existing tip data once if (tip_index >= 0 && tmp_tip.mask > 0 && tt[tip_index].tip_chunk_index == NO_TIP_CHUNK) { tt[tip_index].tip_chunk_index = i; tt[tip_index].tip_mask = tmp_tip.mask; ++loaded; } break; case EPR_IO: // Exit immediately in case of IO error return loaded; default: // Continue the procedure on all other errors break; } } return loaded; } // Build full name of the current tip. Add prefix "T12-" for the "usual" tip or use complete name for "N*" tips char* CFG::buildFullTipName(char *tip_name, const uint8_t index) { const char *name = TIPS::name(index); if (name) { if (index == 0 || name[0] == 'N') { // Do not modify Hot Air Gun 'tip' name nor N* names strncpy(tip_name, name, tip_name_sz); tip_name[tip_name_sz] = '\0'; } else { // All other names should be prefixed with 'T12-' strcpy(tip_name, "T12-"); strncpy(&tip_name[4], name, tip_name_sz); tip_name[tip_name_sz+4] = '\0'; } } else { strcpy(tip_name, "T12-def"); } return tip_name; } // Compare two configurations bool CFG_CORE::areConfigsIdentical(void) { if (a_cfg.iron_temp != s_cfg.iron_temp) return false; if (a_cfg.gun_temp != s_cfg.gun_temp) return false; if (a_cfg.gun_fan_speed != s_cfg.gun_fan_speed) return false; if (a_cfg.low_temp != s_cfg.low_temp) return false; if (a_cfg.low_to != s_cfg.low_to) return false; if (a_cfg.tip != s_cfg.tip) return false; if (a_cfg.off_timeout != s_cfg.off_timeout) return false; if (a_cfg.bit_mask != s_cfg.bit_mask) return false; if (a_cfg.scr_save_timeout != s_cfg.scr_save_timeout) return false; if (a_cfg.boost != s_cfg.boost) return false; return true; }; // Find the tip_chunk_index in the TIP EEPROM AREA which is not used uint8_t CFG::freeTipChunkIndex(void) { for (uint8_t index = 0; index < tipDataTotal(); ++index) { bool chunk_allocated = false; for (uint8_t i = 0; i < TIPS::loaded(); ++i) { if (tip_table[i].tip_chunk_index == index) { chunk_allocated = true; break; } } if (!chunk_allocated) { return index; } } // Try to find not active TIP for (uint8_t i = 0; i < TIPS::loaded(); ++i) { if (tip_table[i].tip_chunk_index != NO_TIP_CHUNK) { if (!(tip_table[i].tip_mask & TIP_ACTIVE)) { // The data is allocated for tip, but tip is not activated tip_table[i].tip_chunk_index = NO_TIP_CHUNK; tip_table[i].tip_mask = 0; return i; } } } return NO_TIP_CHUNK; } //---------------------- CORE_CFG class functions -------------------------------- void CFG_CORE::setDefaults(void) { a_cfg.iron_temp = 235; a_cfg.gun_temp = 300; a_cfg.gun_fan_speed = 1200; a_cfg.tip = 1; // The first IRON tip. Tip #0 is the Hot Air Gun a_cfg.off_timeout = 0; a_cfg.low_temp = 0; a_cfg.low_to = 5; a_cfg.bit_mask = CFG_CELSIUS | CFG_BUZZER; a_cfg.scr_save_timeout = 0; a_cfg.boost = 0; a_cfg.iron_Kp = 2300; a_cfg.iron_Ki = 50; a_cfg.iron_Kd = 735; a_cfg.gun_Kp = 200; a_cfg.gun_Ki = 64; a_cfg.gun_Kd = 195; } void CFG_CORE::correctConfig(RECORD *cfg) { uint16_t iron_tempC = cfg->iron_temp; uint16_t gun_tempC = cfg->gun_temp; if (!(cfg->bit_mask & CFG_CELSIUS)) { iron_tempC = fahrenheitToCelsius(iron_tempC); gun_tempC = fahrenheitToCelsius(gun_tempC); } iron_tempC = constrain(iron_tempC, iron_temp_minC, iron_temp_maxC); gun_tempC = constrain(gun_tempC, gun_temp_minC, gun_temp_maxC); if (!(cfg->bit_mask & CFG_CELSIUS)) { iron_tempC = celsiusToFahrenheit(iron_tempC); gun_tempC = celsiusToFahrenheit(gun_tempC); } cfg->iron_temp = iron_tempC; cfg->gun_temp = gun_tempC; if (cfg->off_timeout > 30) cfg->off_timeout = 30; if (cfg->tip > TIPS::loaded()) cfg->tip = 1; if (cfg->scr_save_timeout > 60) cfg->scr_save_timeout = 60; } // Apply main configuration parameters: automatic off timeout, buzzer and temperature units void CFG_CORE::setup(uint8_t off_timeout, bool buzzer, bool celsius, bool keep_iron, bool reed, bool temp_step, bool auto_start, uint16_t low_temp, uint8_t low_to, uint8_t scr_saver) { bool cfg_celsius = a_cfg.bit_mask & CFG_CELSIUS; a_cfg.off_timeout = off_timeout; a_cfg.scr_save_timeout = scr_saver; a_cfg.low_temp = low_temp; a_cfg.low_to = low_to; if (cfg_celsius != celsius) { // When we change units, the temperature should be converted if (celsius) { // Translate preset temp. from Fahrenheit to Celsius a_cfg.iron_temp = fahrenheitToCelsius(a_cfg.iron_temp); a_cfg.gun_temp = fahrenheitToCelsius(a_cfg.gun_temp); } else { // Translate preset temp. from Celsius to Fahrenheit a_cfg.iron_temp = celsiusToFahrenheit(a_cfg.iron_temp); a_cfg.gun_temp = celsiusToFahrenheit(a_cfg.gun_temp); } } a_cfg.bit_mask = 0; if (celsius) a_cfg.bit_mask |= CFG_CELSIUS; if (buzzer) a_cfg.bit_mask |= CFG_BUZZER; if (keep_iron) a_cfg.bit_mask |= CFG_KEEP_IRON; if (reed) a_cfg.bit_mask |= CFG_SWITCH; if (temp_step) a_cfg.bit_mask |= CFG_BIG_STEP; if (auto_start) a_cfg.bit_mask |= CFG_AU_START; } void CFG_CORE::savePresetTempHuman(uint16_t temp_set) { a_cfg.iron_temp = temp_set; } void CFG_CORE::saveGunPreset(uint16_t temp_set, uint16_t fan) { a_cfg.gun_temp = temp_set; a_cfg.gun_fan_speed = fan; } void CFG_CORE::syncConfig(void) { memcpy(&s_cfg, &a_cfg, sizeof(RECORD)); } void CFG_CORE::restoreConfig(void) { memcpy(&a_cfg, &s_cfg, sizeof(RECORD)); // restore configuration from spare copy } /* * Boost is a bit map. The upper 4 bits are boost increment temperature (n*5 Celsius), i.e. * 0000 - disabled * 0001 - +5 degrees * 1111 - +75 degrees * The lower 4 bits is the boost time ((n+1)* 5 seconds), i.e. * 0000 - 5 seconds * 0001 - 10 seconds * 1111 - 80 seconds */ uint8_t CFG_CORE::boostTemp(void){ uint8_t t = a_cfg.boost >> 4; return t * 5; } uint16_t CFG_CORE::boostDuration(void) { uint16_t d = a_cfg.boost & 0xF; return (d+1)*20; } // Save boost parameters to the current configuration void CFG_CORE::saveBoost(uint8_t temp, uint16_t duration) { if (temp > 75) temp = 75; if (duration > 320) duration = 320; if (duration < 5) duration = 5; temp += 4; temp /= 5; a_cfg.boost = temp << 4; a_cfg.boost &= 0xF0; a_cfg.boost |= ((duration-1)/20) & 0xF; } // PID parameters: Kp, Ki, Kd PIDparam CFG_CORE::pidParams(bool iron) { if (iron) return PIDparam(a_cfg.iron_Kp, a_cfg.iron_Ki, a_cfg.iron_Kd); else return PIDparam(a_cfg.gun_Kp, a_cfg.gun_Ki, a_cfg.gun_Kd); } // PID parameters: Kp, Ki, Kd for smooth work, i.e. tip calibration PIDparam CFG_CORE::pidParamsSmooth(bool iron) { if (iron) return PIDparam(575, 10, 200); else return PIDparam(200, 30, 50); } //---------------------- CORE_CFG class functions -------------------------------- void TIP_CFG::load(const TIP& ltip, bool gun) { uint8_t i = uint8_t(gun); tip[i].calibration[0] = ltip.t200; tip[i].calibration[1] = ltip.t260; tip[i].calibration[2] = ltip.t330; tip[i].calibration[3] = ltip.t400; tip[i].mask = ltip.mask; tip[i].ambient = ltip.ambient; } void TIP_CFG::dump(TIP* ltip, bool gun) { uint8_t i = uint8_t(gun); ltip->t200 = tip[i].calibration[0]; ltip->t260 = tip[i].calibration[1]; ltip->t330 = tip[i].calibration[2]; ltip->t400 = tip[i].calibration[3]; ltip->mask = tip[i].mask; ltip->ambient = tip[i].ambient; } int8_t TIP_CFG::ambientTemp(void) { uint8_t i = uint8_t(gun_active); return tip[i].ambient; } uint16_t TIP_CFG::calibration(uint8_t index) { if (index >= 4) return 0; uint8_t i = uint8_t(gun_active); return tip[i].calibration[index]; } void TIP_CFG::activateGun(bool gun) { if (gun) { t_minC = gun_temp_minC; t_maxC = gun_temp_maxC; } else { t_minC = iron_temp_minC; t_maxC = iron_temp_maxC; } gun_active = gun; } uint16_t TIP_CFG::referenceTemp(uint8_t index, CFG_TEMP_DEVICE force_device) { if (index >= 4) return 0; bool gun = gun_active; if (force_device != DEV_DEFAULT) { gun = (force_device == DEV_GUN); } if (gun) return temp_ref_gun[index]; else return temp_ref_iron[index]; } // Translate the internal temperature of the IRON or Hot Air Gun to Celsius uint16_t TIP_CFG::tempCelsius(uint16_t temp, int16_t ambient, CFG_TEMP_DEVICE force_device) { uint8_t i = uint8_t(gun_active); // Select appropriate calibration tip or gun int16_t tempH = 0; if (force_device != DEV_DEFAULT) { i = (force_device == DEV_GUN)? 1: 0; } // The temperature difference between current ambient temperature and ambient temperature during tip calibration int d = ambient - tip[i].ambient; if (temp < tip[i].calibration[0]) { // less than first calibration point tempH = map(temp, 0, tip[i].calibration[0], ambient, referenceTemp(0, force_device)+d); } else { if (temp <= tip[i].calibration[3]) { // Inside calibration interval for (uint8_t j = 1; j < 4; ++j) { if (temp < tip[i].calibration[j]) { tempH = map(temp, tip[i].calibration[j-1], tip[i].calibration[j], referenceTemp(j-1, force_device)+d, referenceTemp(j, force_device)+d); break; } } } else { // Greater than maximum tempH = map(temp, tip[i].calibration[1], tip[i].calibration[3], referenceTemp(1, force_device)+d, referenceTemp(3, force_device)+d); } } tempH = constrain(tempH, ambient, 999); return tempH; } // Return the reference temperature points of the IRON tip calibration void TIP_CFG::getTipCalibtarion(uint16_t temp[4]) { uint8_t i = uint8_t(gun_active); for (uint8_t j = 0; j < 4; ++j) temp[j] = tip[i].calibration[j]; } // Apply new IRON tip calibration data to the current configuration void TIP_CFG::applyTipCalibtarion(uint16_t temp[4], int8_t ambient) { uint8_t i = uint8_t(gun_active); for (uint8_t j = 0; j < 4; ++j) tip[i].calibration[j] = temp[j]; tip[i].ambient = ambient; tip[i].mask = TIP_CALIBRATED | TIP_ACTIVE; if (tip[i].calibration[3] > int_temp_max) tip[i].calibration[3] = int_temp_max; } // Initialize the tip calibration parameters with the default values void TIP_CFG::resetTipCalibration(void) { defaultCalibration(gun_active); } // Apply default calibration parameters of the tip; Prevent overheating of the tip void TIP_CFG::defaultCalibration(bool gun) { uint8_t i = uint8_t(gun); tip[i].calibration[0] = 680; tip[i].calibration[1] = 964; tip[i].calibration[2] = 1290; tip[i].calibration[3] = 1600; tip[i].ambient = default_ambient; // vars.cpp tip[i].mask = TIP_ACTIVE; } bool TIP_CFG::isValidTipConfig(TIP *tip) { return (tip->t200 < tip->t260 && tip->t260 < tip->t330 && tip->t330 < tip->t400); } ================================================ FILE: Src/core.cpp ================================================ /* * core.cpp * * Created on: 30 aug 2019 * Author: Alex */ #include #include "core.h" #include "hw.h" #include "mode.h" #include "stat.h" #include "oled.h" #include "tools.h" #include "buzzer.h" #include "display.h" #include #define ADC_CONV (4) // Activated ADC Ranks Number (hadc2.Init.NbrOfConversion) #define ADC_LOOPS (2) // Number of ADC conversion loops. Should be even #define ADC_BUFF_SZ (2*ADC_CONV*ADC_LOOPS) extern ADC_HandleTypeDef hadc1; extern ADC_HandleTypeDef hadc2; extern TIM_HandleTypeDef htim1; extern TIM_HandleTypeDef htim2; extern TIM_HandleTypeDef htim4; typedef enum { ADC_IDLE, ADC_CURRENT, ADC_TEMP } t_ADC_mode; volatile static t_ADC_mode adc_mode = ADC_IDLE; volatile static uint16_t buff[ADC_BUFF_SZ]; volatile static uint32_t tim1_cntr = 0; // Previous value of TIM1 counter. Using to check the TIM1 value changing volatile static bool ac_sine = false; // Flag indicating that TIM1 is driven by AC power interrupts on AC_ZERO pin volatile static uint8_t check_count = 1; // Decrement from check_period to zero by TIM2. When become zero, force to check the IRON connectivity volatile static bool clock_ok = true; // Flag indicating the system clock is working at 72 MHz (see RTC_IRQHandler() const static uint16_t max_iron_pwm = 1960; // Max value should be less than TIM2.CHANNEL3 value by 20 const static uint16_t max_gun_pwm = 99; // TIM1 period. Full power can be applied to the HOT GUN const static uint16_t check_iron_pwm = 1; // This power should be applied to check the current through the IRON const static uint8_t check_period = 6; // TIM2 loops between check current through the iron const static uint32_t check_sw_period = 100; // IRON switches check period, ms static HW core; // Hardware core (including all device instances) // MODE instances static MSTBY_IRON standby_iron(&core); static MWORK_IRON work_iron(&core); static MLOW_POWER low_power(&core); static MBOOST boost(&core); static MSLCT select(&core); static MTACT activate(&core); static MCALIB calib_auto(&core); static MCALIB_MANUAL calib_manual(&core); static MCALMENU calib_menu(&core, &calib_auto, &calib_manual); static MTUNE tune(&core); static MFAIL fail(&core); static MMBST boost_setup(&core); static MTPID pid_tune(&core); static MENU_GUN gun_menu(&core, &calib_manual, &tune, &pid_tune); static MWORK_GUN work_gun(&core); static MABOUT about(&core); static MDEBUG debug(&core); static MMENU main_menu(&core, &boost_setup, &calib_menu, &activate, &tune, &pid_tune, &gun_menu, &about); static MODE* pMode = &standby_iron; bool isACsine(void) { return ac_sine; } // Synchronize TIM2 timer to AC power uint16_t syncAC(void) { uint32_t to = HAL_GetTick() + 300; // The timeout uint16_t nxt_tim1 = TIM1->CNT + 2; if (nxt_tim1 > 99) nxt_tim1 -= 99; // TIM1 is clocked by AC zero crossing signal, period is 99. while (HAL_GetTick() < to) { // Prevent hang if (TIM1->CNT == nxt_tim1) { TIM2->CNT = 0; // Synchronize TIM2 to AC power zero crossing signal break; } } // Checking the TIM2 has been synchronized to = HAL_GetTick() + 300; nxt_tim1 = TIM1->CNT + 2; if (nxt_tim1 > 99) nxt_tim1 -= 99; while (HAL_GetTick() < to) { if (TIM1->CNT == nxt_tim1) { return TIM2->CNT; } } return TIM2->ARR+1; // This value is bigger than TIM2 period, the TIM2 has not been synchronized } void SCRSAVER::reset(void) { if (to > 0) { scr_save_ms = HAL_GetTick() + (uint32_t)to * 60000; } else { scr_save_ms = 0; // Disable screen saver } scr_saver = false; } bool SCRSAVER::scrSaver(void) { if (scr_save_ms && !scr_saver && HAL_GetTick() >= scr_save_ms) { scr_saver = true; } return scr_saver; } CFG_STATUS HW::init(void) { dspl.init(); iron.init(); hotgun.init(); encoder.addButton(ENCODER_B_GPIO_Port, ENCODER_B_Pin); CFG_STATUS cfg_init = cfg.init(); PIDparam pp = cfg.pidParams(true); // load IRON PID parameters iron.load(pp); pp = cfg.pidParams(false); // load Hot Air Gun PID parameters hotgun.load(pp); buzz.activate(cfg.isBuzzerEnabled()); scrsaver.init(cfg.getScrTo()); // Screen saver timeout can be reloaded via main menu, see MMENU::loop() return cfg_init; } extern "C" void setup(void) { CFG_STATUS cfg_init = core.init(); // Initialize the hardware structure before start timers HAL_ADCEx_Calibration_Start(&hadc1); // Calibrate both ADCs HAL_ADCEx_Calibration_Start(&hadc2); HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_4); // PWM signal of Hot Air Gun HAL_TIM_OC_Start_IT(&htim1, TIM_CHANNEL_3); // Calculate power of Hot Air Gun interrupt HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); // PWM signal of the IRON HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_2); // PWM signal of FAN (Hot Air Gun) HAL_TIM_OC_Start_IT(&htim2, TIM_CHANNEL_3); // Check the current through the IRON and FAN, also check ambient temperature HAL_TIM_OC_Start_IT(&htim2, TIM_CHANNEL_4); // Calculate power of the IRON HAL_TIM_PWM_Start(&htim4, TIM_CHANNEL_4); // PWM signal for the buzzer // Setup main mode parameters: return mode, short press mode, long press mode standby_iron.setup(&select, &work_iron, &main_menu); work_iron.setup(&standby_iron, &standby_iron, &boost); low_power.setup(&standby_iron, &work_iron, &work_iron); boost.setup(&work_iron, &work_iron, &work_iron); select.setup(&standby_iron, &activate, &main_menu); activate.setup(&standby_iron, &standby_iron, &main_menu); calib_auto.setup(&standby_iron, &standby_iron, &standby_iron); calib_manual.setup(&calib_menu, &standby_iron, &standby_iron); calib_menu.setup(&standby_iron, &standby_iron, &standby_iron); tune.setup(&standby_iron, &standby_iron, &standby_iron); fail.setup(&standby_iron, &standby_iron, &standby_iron); boost_setup.setup(&main_menu, &main_menu, &standby_iron); pid_tune.setup(&standby_iron, &standby_iron, &standby_iron); gun_menu.setup(&main_menu, &standby_iron, &standby_iron); main_menu.setup(&standby_iron, &standby_iron, &standby_iron); about.setup(&standby_iron, &standby_iron, &debug); debug.setup(&standby_iron, &standby_iron, &standby_iron); standby_iron.setGunMode(&work_gun); work_iron.setGunMode(&work_gun); work_iron.setLowPowerMode(&low_power); work_gun.setIronModes(&standby_iron, &work_iron); switch (cfg_init) { case CFG_NO_TIP: pMode = &activate; // No tip configured, run tip activation menu break; case CFG_READ_ERROR: // Failed to read EEPROM core.dspl.errorMessage("EEPROM\nread\nerror"); pMode = &fail; break; default: if (core.cfg.isAutoStart()) pMode = &work_iron; break; } syncAC(); // Synchronize TIM2 timer to AC power HAL_Delay(1000); // Wait till hardware status updated pMode->init(); } extern "C" void loop(void) { static uint32_t AC_check_time = 0; // Time in ms when to check TIM1 is running static uint32_t check_sw = 0; // Time when check iron switches status (ms) if (HAL_GetTick() > check_sw) { check_sw = HAL_GetTick() + check_sw_period; GPIO_PinState pin = HAL_GPIO_ReadPin(TILT_SW_GPIO_Port, TILT_SW_Pin); core.iron.updateReedStatus(GPIO_PIN_SET == pin); // Update T12 TILT switch status pin = HAL_GPIO_ReadPin(GUN_REED_GPIO_Port, GUN_REED_Pin); core.hotgun.updateReedStatus(GPIO_PIN_SET == pin); // Switch active when the Hot Air Gun handle is off-hook } MODE* new_mode = pMode->returnToMain(); if (new_mode && new_mode != pMode) { core.buzz.doubleBeep(); core.iron.switchPower(false); TIM2->CCR1 = 0; pMode = new_mode; pMode->init(); return; } new_mode = pMode->loop(); if (new_mode != pMode) { if (new_mode == 0) new_mode = &fail; // Mode Failed core.iron.switchPower(false); core.hotgun.switchPower(false); TIM2->CCR1 = 0; pMode = new_mode; pMode->init(); } // If TIM1 counter has been changed since last check, we received AC_ZERO events from AC power if (HAL_GetTick() >= AC_check_time) { ac_sine = (TIM1->CNT != tim1_cntr); tim1_cntr = TIM1->CNT; AC_check_time = HAL_GetTick() + 41; // 50Hz AC line generates 100Hz events. The pulse period is 10 ms } } static bool adcStart(t_ADC_mode mode) { if (adc_mode != ADC_IDLE) { // Not ready to check analog data; Something is wrong!!! TIM2->CCR1 = 0; // Switch off the IRON TIM1->CCR4 = 0; // Switch off the Hot Air Gun return false; } HAL_ADC_Start(&hadc2); HAL_ADCEx_MultiModeStart_DMA(&hadc1, (uint32_t*)buff, ADC_CONV*ADC_LOOPS); adc_mode = mode; return true; } /* * IRQ handler * on TIM1 Output channel #3 to calculate required power for Hot Air Gun * on TIM2 Output channel #3 to read the current through the IRON and Fan of Hot Air Gun * also check that TIM1 counter changed driven by AC_ZERO interrupt * on TIM2 Output channel #4 to read the IRON, HOt Air Gun and ambient temperatures */ extern "C" void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim) { if (htim->Instance == TIM1 && htim->Channel == HAL_TIM_ACTIVE_CHANNEL_3) { uint16_t gun_power = core.hotgun.power(); TIM1->CCR4 = constrain(gun_power, 0, max_gun_pwm); } if (htim->Instance == TIM2) { if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_3) { if (TIM2->CCR1 || TIM2->CCR2) // If IRON of Hot Air Gun has been powered adcStart(ADC_CURRENT); } else if (htim->Channel == HAL_TIM_ACTIVE_CHANNEL_4) { adcStart(ADC_TEMP); } } } /* * IRQ handler of ADC complete request. The data is in the ADC buffer (buff) * Data read by 8 slots interleaved: adc1-rank1, adc2-rank1, adc1-rank2, adc2-rank2, ..., adc1-rank4, adc2-rank4 * The ADC buffer would have the following fields (see MX_ADC1_Init() MX_ADC2_Init() in main.c) * ADC1: ADC2: * iron_current iron_temp * fan_current iron_temp * gun_temp iron_temp * ambient iron_temp */ extern "C" void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) { if (hadc->Instance != ADC1) return; HAL_ADCEx_MultiModeStop_DMA(&hadc1); HAL_ADC_Stop(&hadc2); if (adc_mode == ADC_TEMP) { // Read the temperatures only, the current should be ignored volatile uint32_t iron_temp = 0; volatile uint32_t gun_temp = 0; volatile uint32_t ambient = 0; for (uint8_t i = 0; i < ADC_BUFF_SZ; i += 2*ADC_CONV) { iron_temp += buff[i+1] + buff[i+3] + buff[i+5] + buff[i+7]; gun_temp += buff[i+4]; ambient += buff[i+6]; } iron_temp += (ADC_LOOPS*ADC_CONV)/2; // Round the result iron_temp /= ADC_LOOPS*ADC_CONV; gun_temp += ADC_LOOPS/2; // Round the result gun_temp /= ADC_LOOPS; ambient += ADC_LOOPS/2; // Round the result ambient /= ADC_LOOPS; core.iron.updateAmbient(ambient); uint8_t min_iron_pwm = 0; // By default do not power the IRON to check connectivity if (--check_count == 0) { // It is time to check IRON is connected or not check_count = check_period; min_iron_pwm = check_iron_pwm; } if (core.iron.isConnected()) { uint16_t iron_power = core.iron.power(iron_temp); TIM2->CCR1 = constrain(iron_power, min_iron_pwm, max_iron_pwm); } else { TIM2->CCR1 = min_iron_pwm; // Sometimes supply minimum power to the IRON to check connectivity } core.hotgun.updateTemp(gun_temp); // Update average Hot Air Gun temperature. Apply the power by TIM1.CNANNEL3 interrupt } else if (adc_mode == ADC_CURRENT) { // Read the currents, the temperatures should be ignored volatile uint32_t iron_curr = 0; volatile uint32_t fan_curr = 0; for (uint8_t i = 0; i < ADC_BUFF_SZ; i += 2*ADC_CONV) { iron_curr += buff[i]; fan_curr += buff[i+2]; } iron_curr += ADC_LOOPS/2; // Round the result iron_curr /= ADC_LOOPS; fan_curr += ADC_LOOPS/2; // Round the result fan_curr /= ADC_LOOPS; if (TIM2->CCR1) // If IRON has been powered core.iron.updateCurrent(iron_curr); if (TIM2->CCR2) // If Hot Air Gun Fan has been powered core.hotgun.updateCurrent(fan_curr); } adc_mode = ADC_IDLE; } extern "C" void HAL_ADC_ErrorCallback(ADC_HandleTypeDef *hadc) { } extern "C" void HAL_ADC_LevelOutOfWindowCallback(ADC_HandleTypeDef *hadc) { } // Encoder Rotated extern "C" void EXTI0_IRQHandler(void) { core.encoder.encoderIntr(); __HAL_GPIO_EXTI_CLEAR_IT(ENCODER_L_Pin); } ================================================ FILE: Src/display.cpp ================================================ /* * display.cpp * */ #include "display.h" #include "tools.h" #include #include /* * Bitmaps */ static const uint8_t bmTemperature[] = { 0b00010000, 0b00101000, 0b01101000, 0b00101000, 0b01101000, 0b00111000, 0b00111000, 0b01111000, 0b00111000, 0b01111100, 0b11111110, 0b11111110, 0b11111110, 0b01111100, 0b00111000 }; static const uint8_t bmDegree[] = { 0b00111000, 0b01000100, 0b01000100, 0b01000100, 0b00111000 }; static const uint8_t bmNotCalibrated[] = { 0b01011010, 0b10011001, 0b10011001, 0b10011001, 0b10011001, 0b10011001, 0b10000001, 0b10011001, 0b01011010 }; static const uint8_t bmTempGuageLeft[] = { 0b00111100, 0b01111110, 0b01111111, 0b11111111, 0b11111111, 0b11111111, 0b11111011, 0b11110011, 0b01100010, 0b00111100 }; static const uint8_t bmTempGuageRight[] = { 0b11111100, 0b00000010, 0b00000001, 0b00000001, 0b00000010, 0b11111100, }; static const uint8_t bmLeftMark[] = { 0b01100000, 0b01110000, 0b01111000, 0b01111100, 0b01111000, 0b01110000, 0b01100000 }; static const uint8_t bmCheckEmpty[] = { 0b01111110, 0b10000001, 0b10000001, 0b10000001, 0b10000001, 0b10000001, 0b10000001, 0b01111110, }; static const uint8_t bmCheckFull[] = { 0b01111110, 0b10000001, 0b10100101, 0b10011001, 0b10011001, 0b10100101, 0b10000001, 0b01111110, }; static const uint8_t bmArrow[] = { 0b11100000, 0b00111100, 0b11111111, 0b00111100, 0b11100000 }; static const uint8_t bmTiltActive[] = { 0b00000100, 0b00000000, 0b01000100, 0b01000000, 0b00101110, 0b10000000, 0b00011011, 0b00000000, 0b11110001, 0b11100000, 0b00011011, 0b00000000, 0b00101110, 0b10000000, 0b01000100, 0b01000000, 0b00000100, 0b00000000 }; static const uint8_t E[] = { 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xfc, 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0xfc, 0x00, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfe }; static const uint8_t O[] = { 0x01, 0xff, 0x80, 0x07, 0xff, 0xe0, 0x1f, 0xff, 0xf0, 0x3f, 0xff, 0xf8, 0x7f, 0xc3, 0xfc, 0x7f, 0x01, 0xfc, 0x7e, 0x00, 0xfe, 0xfe, 0x00, 0xfe, 0xfc, 0x00, 0x7e, 0xfc, 0x00, 0x7e, 0xfc, 0x00, 0x7e, 0xfc, 0x00, 0x7e, 0xfc, 0x00, 0x7e, 0xfc, 0x00, 0x7e, 0xfc, 0x00, 0xfe, 0xfe, 0x00, 0xfe, 0xfe, 0x00, 0xfc, 0x7f, 0x01, 0xfc, 0x7f, 0x87, 0xf8, 0x3f, 0xff, 0xf8, 0x1f, 0xff, 0xf0, 0x0f, 0xff, 0xc0, 0x03, 0xff, 0x00 }; static const uint8_t R[] = { 0xff, 0xf8, 0x00, 0xff, 0xfe, 0x00, 0xff, 0xff, 0x00, 0xff, 0xff, 0x80, 0xfc, 0x3f, 0x80, 0xfc, 0x1f, 0xc0, 0xfc, 0x1f, 0xc0, 0xfc, 0x1f, 0xc0, 0xfc, 0x1f, 0x80, 0xfc, 0x3f, 0x80, 0xff, 0xff, 0x00, 0xff, 0xfe, 0x00, 0xff, 0xf8, 0x00, 0xff, 0xfc, 0x00, 0xfc, 0xfe, 0x00, 0xfc, 0x7f, 0x00, 0xfc, 0x3f, 0x00, 0xfc, 0x3f, 0x80, 0xfc, 0x1f, 0x80, 0xfc, 0x1f, 0xc0, 0xfc, 0x1f, 0xc0, 0xfc, 0x0f, 0xe0, 0xfc, 0x0f, 0xe0 }; static const uint8_t bmFan[4][32] = { {0x07, 0x00, 0x07, 0x00, 0x03, 0x80, 0x03, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x03, 0xc0, 0x03, 0xc0, 0x0f, 0x70, 0x1c, 0x3b, 0x38, 0x1f, 0x38, 0x0f, 0x70, 0x00, 0x38, 0x00, 0x00, 0x00 }, {0x00, 0xc0, 0x00, 0xe0, 0x00, 0x70, 0x00, 0x70, 0x00, 0x60, 0x00, 0xc0, 0x01, 0xc0, 0x2b, 0x80, 0x7f, 0xc0, 0xf1, 0x80, 0xe0, 0xc0, 0x00, 0xe0, 0x00, 0x70, 0x00, 0x78, 0x00, 0x38, 0x00, 0x18 }, {0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x0e, 0x20, 0x1e, 0x78, 0x38, 0xfd, 0x70, 0xd7, 0xe0, 0x03, 0xc0, 0x01, 0x80, 0x01, 0x00, 0x01, 0x80, 0x03, 0x80, 0x03, 0x80, 0x01, 0xc0, 0x00, 0xe0 }, {0x00, 0x00, 0x20, 0x00, 0xf8, 0x00, 0xfc, 0x00, 0xde, 0x00, 0x06, 0x03, 0x03, 0x8f, 0x01, 0xff, 0x03, 0xfe, 0x03, 0x80, 0x06, 0x00, 0x0e, 0x00, 0x1c, 0x00, 0x3c, 0x00, 0x3e, 0x00, 0x0e, 0x00 } }; static const char* k_proto[3] = { "Kp = %5d", "Ki = %5d", "Kd = %5d" }; void DSPL::init(void) { u8x8_msg_cb msg_cb = u8x8_byte_stm32_hw_spi; if (HAL_OK == HAL_I2C_IsDeviceReady(&I2C_HANDLER, OLED_I2C_ADDR<<1, 2, 2)) { msg_cb = u8x8_byte_stm32_hw_i2c; } // u8g2_Setup_sh1106_128x64_noname_f(&u8g2, U8G2_R2, msg_cb, u8x8_gpio_and_delay_stm32); u8g2_Setup_ssd1306_128x64_noname_f(&u8g2, U8G2_R2, msg_cb, u8x8_gpio_and_delay_stm32); // u8g2_Setup_ssd1305_128x64_adafruit_f(&u8g2, U8G2_R2, msg_cb, u8x8_gpio_and_delay_stm32); // u8g2_Setup_ssd1309_128x64_noname2_f(&u8g2, U8G2_R2, msg_cb, u8x8_gpio_and_delay_stm32); saver_center[0] = d_width/2; saver_center[1] = d_height/2; begin(); } void DSPL::status(const char *msg) { strncpy(msg_buff, msg, 7); msg_buff[7] = '\0'; } void DSPL::msgClean(void) { msg_buff[0] = 0; } void DSPL::msgOFF(void) { static const char *msg = "OFF"; status(msg); } void DSPL::msgON(void) { static const char *msg = "ON"; status(msg); } void DSPL::msgCold(void) { static const char *msg = "Cold"; status(msg); } void DSPL::msgReady(void) { static const char *msg = "Ready"; status(msg); } void DSPL::msgIdle(void) { static const char *msg = "Idle"; status(msg); } void DSPL::msgStandby(void) { static const char *msg = "Stby"; status(msg); } void DSPL::msgBoost(void) { static const char *msg = "Boost"; status(msg); } void DSPL::timeToOff(uint8_t time) { sprintf(msg_buff, "%2d", time); } void DSPL::tip(const char *tip_name) { strncpy(this->tip_name, tip_name, 9); this->tip_name[9] = '\0'; } void DSPL::fanSpeed(uint8_t pcnt) { sprintf(tip_name, "Fan:%3d%c", pcnt, '%'); } void DSPL::animateFan(uint8_t indx) { indx &= 0x3; // Can be from 0 to 3 U8G2::drawBitmap(0, d_height/2-8, 2, 16, bmFan[indx]); U8G2::sendBuffer(); } /* * Main temperature display used in standby or working mode to show IRON or Hot Air Gun status * Parameters: * t_set - The preset temperature, to be kept in main working mode * t_cur - Current temperature of IRON or Hot Air Gun * t_amb - The ambient temperature * p_applied - The applied power to the device, percent * is_celsius - The human readable units of the temperature (Celsius if true or Fahrenheit if false) * tip_calibrated - If current tip calibrated * t_alter - If greater than zero, is a alternate (Hot Air Gun or IRON) current temperature * tilt_iron_used - In IRON working mode the status of the iron tilt switch (active or inactive) * fan_index - Index of fan state bitmap sprite [0-3] (in Hot Air Gun mode) */ void DSPL::mainShow(uint16_t t_set, uint16_t t_cur, int16_t t_amb, uint8_t p_applied, bool is_celsius, bool tip_calibrated, uint16_t t_alter, uint8_t fan_index, bool tilt_iron_used) { t_set = constrain(t_set, 0, 999); t_cur = constrain(t_cur, 0, 999); p_applied = constrain(p_applied, 0, 100); static char sym[] = {'C', '\0'}; if (is_celsius) sym[0] = 'C'; else sym[0] = 'F'; char buff[10]; uint8_t preset_label = d_width - d_width / 4 - 10; uint8_t temp_bar = 0; if (t_cur > t_amb && (t_cur - t_amb) > 20) { temp_bar = map(t_cur, t_amb+20, t_set, 0, preset_label); if (temp_bar >= d_width-10) temp_bar = d_width - 11; } uint8_t p_height = gauge(p_applied, 10, 30); // Applied power triangle height U8G2::clearBuffer(); U8G2::setFont(u8g_font_profont15r); // Show preset temperature sprintf(buff, "%3d", t_set); U8G2::drawBitmap(0, 1, 1, 15, bmTemperature); uint8_t width = U8G2::getStrWidth(buff); U8G2::drawStr(15, 12, buff); U8G2::drawBitmap(16+width, 1, 1, 5, bmDegree); U8G2::drawStr(24+width, 12, sym); // Show status message: 'ON', 'OFF', 'Idle', etc. width = U8G2::getStrWidth(msg_buff); U8G2::drawStr(d_width-5 - width, 12, msg_buff); // Show tip name U8G2::drawStr(12, d_height, tip_name); if (!tip_calibrated) U8G2::drawBitmap(0, d_height-9, 1, 9, bmNotCalibrated); // Show the applied power if (p_height > 0) U8G2::drawTriangle(d_width-5, 45, d_width-5, 45-p_height, d_width-6-p_height/4, 45-p_height); if (t_alter > 0) { // Show alternate device temperature sprintf(buff, "%3d", t_alter); width = U8G2::getStrWidth(buff); U8G2::drawStr(d_width-width-20, d_height, buff); U8G2::drawDisc(d_width-width-28, d_height-5, 2); } else { // Show the ambient temperature if (t_amb >= -9 && t_amb < 100) { sprintf(buff, "%2d", t_amb); width = U8G2::getStrWidth(buff); U8G2::drawStr(d_width-20-width, d_height, buff); } } // Show degree symbol and units ('C' or 'F') U8G2::drawBitmap(d_width-20, d_height-12, 1, 5, bmDegree); U8G2::drawStr(d_width-12, d_height, sym); // Show the current IRON or Hot Air Gun temperature sprintf(buff, "%3d", t_cur); U8G2::setFont(u8g2_font_kam28n); width = U8G2::getStrWidth(buff); U8G2::drawStr((d_width-width+1)/2, 42, buff); // Show temperature bar greed U8G2::drawHLine(5, 51, d_width-10); U8G2::drawVLine(5+preset_label, 47, 6); // Show the temperature bar if (temp_bar > 3) { U8G2::drawBox(5, 48, temp_bar, 3); U8G2::drawHLine(5, 47, temp_bar-1); } // Show IRON tilt switch status if (tilt_iron_used) { U8G2::drawBitmap(0, d_height/2-4, 2, 9, bmTiltActive); } else if (fan_index) { --fan_index; fan_index &= 0x3; // Can be from 0 to 3 U8G2::drawBitmap(0, d_height/2-8, 2, 16, bmFan[fan_index]); } U8G2::sendBuffer(); } void DSPL::scrSave(SCR_MODE mode, uint16_t t_cur, uint16_t t_alter) { static const char *modes[4] = { "OFF", "IRON", "STBY", "GUN" }; U8G2::clearBuffer(); char buff[6]; uint8_t height = 46; uint8_t width = 0; U8G2::setFont(u8g_font_profont15r); if (t_alter > 0) { height += 16; width = U8G2::getStrWidth(modes[(uint8_t)mode]); U8G2::drawStr(saver_center[0]-width/2, saver_center[1]-height/2+15, modes[(uint8_t)mode]); sprintf(buff, "%3d", t_alter); width = U8G2::getStrWidth(buff); U8G2::drawStr(saver_center[0]-width/2, saver_center[1]+height/2, buff); U8G2::setFont(u8g2_font_kam28n); sprintf(buff, "%3d", t_cur); width = U8G2::getStrWidth(buff); U8G2::drawStr(saver_center[0]-width/2, saver_center[1]+15, buff); } else { width = U8G2::getStrWidth(modes[(uint8_t)mode]); U8G2::drawStr(saver_center[0]-width/2, saver_center[1]-height/2+13, modes[(uint8_t)mode]); U8G2::setFont(u8g2_font_kam28n); sprintf(buff, "%3d", t_cur); width = U8G2::getStrWidth(buff); U8G2::drawStr(saver_center[0]-width/2, saver_center[1]+height/2, buff); } U8G2::sendBuffer(); // calculate new message position if (saver_speed[0] > 0) { if (saver_center[0]+width/2 >= d_width) { // Right border of the screen saver_speed[0] = -1; } } else { if ((int)saver_center[0]-width/2 <= 0) { // Left border of the screen saver_speed[0] = 1; } } if (saver_speed[1] > 0) { if (saver_center[1]+height/2 >= d_height) { // Bottom border of the screen saver_speed[1] = -1; } } else { if ((int)saver_center[1]-height/2 <= 0) { // Top border of the screen saver_speed[1] = 1; } } saver_center[0] += saver_speed[0]; saver_center[1] += saver_speed[1]; } void DSPL::tuneShow(uint16_t tune_temp, uint16_t temp, uint8_t pwr_pcnt) { if (temp > 4095) temp = 4095; char p_buff[5]; sprintf(p_buff, "%3d%c", pwr_pcnt, '%'); const char *title_buff = "Tune"; char mtemp_buff[6]; sprintf(mtemp_buff, "%3d", tune_temp); char sym[2] = "C"; U8G2::setFont(u8g_font_profont15r); uint8_t pcnt_width = U8G2::getStrWidth(p_buff) + 5; uint8_t p_len = map(pwr_pcnt, 0, 100, 0, d_width-10-pcnt_width); uint8_t p_height = gauge(pwr_pcnt, 10, 20); uint8_t t_len = 0; if (temp <= 2048) { t_len = map(temp, 0, 2048, 0, 20); } else { t_len = map(temp, 2049, 4095, 20, d_width-16); } uint8_t pos_450 = map(3600, 2049, 4095, 20, d_width-16) + 8; U8G2::clearBuffer(); // Show title uint8_t width = U8G2::getStrWidth(title_buff); U8G2::drawStr((d_width-width)/2, 15, title_buff); // Show status message: 'ON', 'OFF', 'Idle', etc. width = U8G2::getStrWidth(msg_buff); U8G2::drawStr(d_width-5 - width, 12, msg_buff); // Show power applied U8G2::drawTriangle(5, 35, 5+p_len, 35, 5+p_len, 35-p_height); U8G2::drawStr(d_width-pcnt_width, 35, p_buff); // Show temperature bar frame U8G2::drawBitmap(0, d_height-15-9, 1, 10, bmTempGuageLeft); U8G2::drawBitmap(d_width-8, d_height-15-7, 1, 6, bmTempGuageRight); U8G2::drawHLine(8, d_height-15-7, d_width-16); U8G2::drawHLine(8, d_height-15-2, d_width-16); U8G2::drawVLine(pos_450, d_height-15-2, 4); // Show temperature row bar U8G2::drawHLine(8, d_height-15-5, t_len); if (t_len > 1) { U8G2::drawHLine(8, d_height-15-6, t_len); U8G2::drawHLine(8, d_height-15-4, t_len-1); } // Show max temperature text width = U8G2::getStrWidth(mtemp_buff) + 16; U8G2::drawBitmap(d_width-16, d_height-12, 1, 5, bmDegree); U8G2::drawStr(d_width-width, d_height, mtemp_buff); U8G2::drawStr(d_width-8, d_height, sym); U8G2::sendBuffer(); } void DSPL::pidInit(void) { data_index = 0; full_buff = false; default_mode = 0; } void DSPL::pidSetLowerAxisLabel(const char *label) { lower_axis[0] = label[0]; lower_axis[1] = label[1]; lower_axis[2] = '\0'; } void DSPL::pidModify(uint8_t index, uint16_t value) { if (index < 3) { default_mode = HAL_GetTick() + 1000; // Show new value for 1 second sprintf(modified_value, k_proto[index], value); } } void DSPL::autoPidInfo(const char *message) { default_mode = HAL_GetTick() + 2000; // Show the message for 2 seconds for (uint8_t i = 0; i < 19; ++i) { if (!(modified_value[i] = message[i])) break; } modified_value[19] = '\0'; } void DSPL::autoPidCurrentLoop(uint16_t loop, uint32_t period) { default_mode = HAL_GetTick() + 50000; // Show new value for 50 seconds, near forever sprintf(modified_value, "#%d, P=%ld.%03ds", loop, period/1000, (uint16_t)period%1000); } void DSPL::pidPutData(int16_t temp, uint16_t disp) { uint8_t i = data_index; temp = constrain(temp, -500, 500); // Limit graph value disp = constrain(disp, 0, 999); h_temp[i] = temp; h_disp[i] = disp; if (++i >= 80) { i = 0; full_buff = true; } data_index = i; } void DSPL::pidShowGraph(uint8_t pwr) { const uint8_t temp_zero = 20; // The temperature X-axis vertical coordinate const uint8_t disp_zero = 63 ; // The dispersion X-axis vertical coordinate const uint8_t temp_height = 40; // The temperature graph height const uint8_t disp_height = 15; // The dispersion graph height int8_t temp[80]; int8_t disp[80]; pwr = constrain(pwr, 0, 99); // Calculate the transition coefficient for the temperature int16_t min_t = 32767; int16_t max_t = -32767; uint8_t till = 80; if (!full_buff) till = data_index; for (uint8_t i = 0; i < till; ++i) { if (min_t > h_temp[i]) min_t = h_temp[i]; if (max_t < h_temp[i]) max_t = h_temp[i]; } if (min_t < 0) min_t *= -1; if (max_t < min_t) max_t = min_t; // Calculate the transition coefficient for the dispersion uint16_t max_d = 0; uint16_t min_d = 32767; for (uint8_t i = 0; i < till; ++i) { if (min_d > h_disp[i]) min_d = h_disp[i]; if (max_d < h_disp[i]) max_d = h_disp[i]; } // Normalize data to be plotted uint8_t ii = 0; if (full_buff) { ii = data_index + 1; if (ii >= 80) ii = 0; } for (uint8_t i = 0; i < till; ++i) { if (max_t) { if (h_temp[ii] > 0) { temp[i] = temp_zero - (h_temp[ii] * temp_height / max_t); if (temp[i] < 1) temp[i] = 1; } else { int16_t neg = h_temp[ii] * (-1); temp[i] = neg * temp_height / max_t + temp_zero; if (temp[i] > temp_height) temp[i] = temp_height; } } else { temp[i] = temp_zero; } if (max_d > min_d) { int16_t d = (h_disp[ii] - min_d) * disp_height / (max_d - min_d); d = constrain(d, 0, disp_height); disp[i] = disp_zero - d; } else { disp[i] = disp_zero; } if (++ii >= 80) ii = 0; } char max_t_buff[8]; if (max_t > 999) { max_t_buff[0] = '\0'; } else { sprintf(max_t_buff, "%2d", max_t); // The temperature amplitude } char pwr_buff[8]; sprintf(pwr_buff, "%2d%c", pwr, '%'); // Check for temporary data instead of dispersion graph bool show_disp = true; if (default_mode && default_mode > HAL_GetTick()) { show_disp = false; } else { default_mode = 0; } bool show_disp_value = false; int8_t last = data_index - 1; if (last < 0) last = 99; char disp_value[4]; if (max_d <= 999) { sprintf(disp_value, "%3d", max_d); show_disp_value = true; } U8G2::setFont(u8g_font_profont15r); U8G2::clearBuffer(); // Show the temperature graph U8G2::drawHLine(26, temp_zero, d_width-34); // The temperature axis U8G2::drawBitmap(111, temp_zero-2, 1, 5, bmArrow); // The axis arrow U8G2::drawStr(d_width-10, temp_zero-5, "t"); // The axis label for (uint8_t i = 1; i < till-1; ++i) { U8G2::drawLine(i+26, temp[i-1], i+27, temp[i]); } if (max_t_buff[0]) { U8G2::drawStr(0, temp_zero-5, max_t_buff); } U8G2::drawStr(0, 40, pwr_buff); if (show_disp) { if (lower_axis[0]) { uint8_t width = U8G2::getStrWidth(lower_axis); U8G2::drawStr(d_width-width-2, 60, lower_axis); // The lower axis label } // Show the dispersion graph for (uint8_t i = 1; i < till-1; ++i) { U8G2::drawLine(i+26, disp[i-1], i+27, disp[i]); } if (show_disp_value) { U8G2::drawStr(0, 60, disp_value); } } else { U8G2::drawStr(0, 62, modified_value); } U8G2::sendBuffer(); } void DSPL::pidShowMenu(uint16_t pid_k[3], uint8_t index) { static const char* title = "Tune PID"; char buff[12]; U8G2::setFont(u8g_font_profont15r); U8G2::clearBuffer(); // Show title uint8_t width = U8G2::getStrWidth(title); U8G2::drawStr((d_width-width)/2, 13, title); U8G2::drawHLine((d_width-width)/2, 15, width); // Show the Coefficient values for (uint8_t i = 0; i < 3; ++i) { sprintf(buff, k_proto[i], pid_k[i]); U8G2::drawStr(20, 28+i*13, buff); if (index == i) { U8G2::drawBitmap(0, 20+i*13, 1, 7, bmLeftMark); } } U8G2::sendBuffer(); } void DSPL::calibShow(const char* tip_name, uint8_t ref_point, uint16_t current_temp, uint16_t real_temp, bool celsius, uint8_t power, bool on, bool ready, uint8_t int_temp_pcnt) { static const char* title = "Tip:"; static const char* OFF = "OFF"; static const char* ON = "ON"; static char sym[] = {'C', '\0'}; if (celsius) sym[0] = 'C'; else sym[0] = 'F'; char ref_buff[16]; sprintf(ref_buff, "Ref# %d", ref_point); uint8_t p_height = gauge(power, 10, 45); // Applied power triangle height U8G2::setFont(u8g_font_profont15r); U8G2::clearBuffer(); // Show title uint8_t width = U8G2::getStrWidth(title); uint8_t width_tip = U8G2::getStrWidth(tip_name); uint8_t total = width+width_tip+5; int8_t start = (d_width-total)/2; if (start < 0) start = 0; U8G2::drawStr(start, 13, title); U8G2::drawStr(start+width+5, 13, tip_name); U8G2::drawHLine(5, 15, d_width-10); // Show reference point number width = U8G2::getStrWidth(ref_buff); U8G2::drawStr(5, 33, ref_buff); // Show current temperature char temp_buff[10]; sprintf(temp_buff, "%3d", current_temp); U8G2::drawBitmap(5, 57-15, 1, 15, bmTemperature); width = U8G2::getStrWidth(temp_buff); U8G2::drawStr(16, 57, temp_buff); U8G2::drawBitmap(16+1+width, 57-12, 1, 5, bmDegree); U8G2::drawStr(16+1+8+width, 57, sym); if (ready) { // Show real temperature U8G2::drawBitmap(70, 57-7, 1, 7, bmLeftMark); sprintf(temp_buff, "%3d", real_temp); U8G2::drawStr(80, 57, temp_buff); } // Show the power applied if (p_height > 0) { U8G2::drawTriangle(d_width-5, 63, d_width-5, 63-p_height, d_width-6-p_height/4, 63-p_height); } if ((p_height < 28) && on) { width = U8G2::getStrWidth(ON); U8G2::drawStr(d_width-width-5, 33, ON); } if (!on) { width = U8G2::getStrWidth(OFF); U8G2::drawStr(d_width-width-5, 33, OFF); } // Show internal temperature bar int_temp_pcnt = constrain(int_temp_pcnt, 0, 100); if (int_temp_pcnt > 1) { U8G2::drawBox(14, 62, int_temp_pcnt, 2); } U8G2::sendBuffer(); } //---------------------- The Calibration display function ------------------------ void DSPL::calibManualShow(const char* tip_name, uint16_t ref_temp, uint16_t current_temp, uint16_t setup_temp, bool celsius, uint8_t power, bool on, bool ready) { static const char* title = "Tip:"; static const char* OFF = "OFF"; static const char* ON = "ON"; static const char* OK = "OK"; static char sym[] = {'C', '\0'}; static const uint16_t detail_area = 30; if (celsius) sym[0] = 'C'; else sym[0] = 'F'; char ref_buff[16]; sprintf(ref_buff, "Set: %3d", ref_temp); uint8_t p_height = 0; // Applied power triangle height if (power <= 10) p_height = power; else p_height = map(power-10, 0, 90, 10, 45); // calculate the length of the current temperature row bar const uint16_t setup_temp_pos = d_width-32-detail_area; uint16_t t_pos = 0; if (current_temp >= setup_temp) { uint16_t t_diff = constrain((current_temp - setup_temp)/8, 0, detail_area); t_pos = setup_temp_pos + t_diff; } else { uint16_t t_diff = (setup_temp - current_temp)/8; if (t_diff <= detail_area) { t_pos = setup_temp_pos - t_diff; } else { t_diff -= detail_area; t_pos = setup_temp_pos - detail_area - constrain(t_diff / 8, 0, setup_temp_pos-detail_area-8); } } U8G2::setFont(u8g_font_profont15r); U8G2::clearBuffer(); // Show title uint8_t width = U8G2::getStrWidth(title); uint8_t width_tip = U8G2::getStrWidth(tip_name); uint8_t total = width+width_tip+5; int8_t start = (d_width-total)/2; if (start < 0) start = 0; U8G2::drawStr(start, 13, title); U8G2::drawStr(start+width+5, 13, tip_name); U8G2::drawHLine(5, 15, d_width-10); // Show reference temperature width = U8G2::drawStr(5, 33, ref_buff); U8G2::drawBitmap(5+width, 33-12, 1, 5, bmDegree); U8G2::drawStr(5+8+width, 33, sym); if (ready) { // Show ready sign width = U8G2::getStrWidth(OK); U8G2::drawStr(d_width-width-5, 33, OK); } // Show temperature bar frame U8G2::drawBitmap(0, d_height-10-9, 1, 10, bmTempGuageLeft); U8G2::drawBitmap(d_width-24, d_height-10-7, 1, 6, bmTempGuageRight); U8G2::drawHLine(8, d_height-10-7, d_width-32); U8G2::drawHLine(8, d_height-10-2, d_width-32); // Show setup temperature mark U8G2::drawVLine(setup_temp_pos, d_height-10-2, 4); U8G2::drawVLine(setup_temp_pos, d_height-10-7-4, 4); // Show temperature row bar if (t_pos > 10) { U8G2::drawHLine(8, d_height-10-5, t_pos-9); U8G2::drawHLine(8, d_height-10-6, t_pos-9); U8G2::drawHLine(8, d_height-10-4, t_pos-10); } // Show the power applied if (p_height > 0) { U8G2::drawTriangle(d_width-5, 63, d_width-5, 63-p_height, d_width-6-p_height/4, 63-p_height); } if ((p_height < 28) && on) { width = U8G2::getStrWidth(ON); U8G2::drawStr(d_width-width-5, 33, ON); } if (!on) { width = U8G2::getStrWidth(OFF); U8G2::drawStr(d_width-width-5, 33, OFF); } U8G2::sendBuffer(); } //---------------------- The Menu list display functions ------------------------- void DSPL::tipListShow(const char* title, TIP_ITEM list[], uint8_t list_len, uint8_t index, bool name_only) { U8G2::setFont(u8g_font_profont15r); U8G2::clearBuffer(); // Show title uint8_t width = U8G2::getStrWidth(title); U8G2::drawStr((d_width-width)/2, 13, title); U8G2::drawHLine((d_width-width)/2, 15, width); uint8_t left_mark_pos = 0; if (name_only) left_mark_pos = 15; // Show the tip list for (uint8_t i = 0; i < list_len; ++i) { if (list[i].name[0]) { if (list[i].tip_index == index) U8G2::drawBitmap(left_mark_pos, 20+i*13, 1, 7, bmLeftMark); U8G2::drawStr(24, 28+i*13, list[i].name); if (!(list[i].mask & 2)) { // The tip is not calibrated U8G2::drawBitmap(100, 19+i*13, 1, 9, bmNotCalibrated); } if (!name_only) { if (list[i].mask & 1) { // The tip is active U8G2::drawBitmap(12, 20+i*13, 1, 8, bmCheckFull); } else { U8G2::drawBitmap(12, 20+i*13, 1, 8, bmCheckEmpty); } } } } U8G2::sendBuffer(); } void DSPL::menuItemShow(const char* title, const char* item, const char* value, bool modify) { U8G2::setFont(u8g_font_profont15r); U8G2::clearBuffer(); // Show title uint8_t width = U8G2::getStrWidth(title); U8G2::drawStr((d_width-width)/2, 13, title); U8G2::drawHLine((d_width-width)/2, 15, width); // Show the menu item width = U8G2::getStrWidth(item); uint8_t v_width = U8G2::getStrWidth(value); if (value && value[0]) { // Show in-place changed menu item U8G2::drawStr(10, 45, item); if (!modify) { if ((width+v_width+25) < d_width) { // The item name and its value fits single line U8G2::drawStr(d_width-v_width-15, 45, value); } else { // The value of the parameter is shown on the next line U8G2::drawStr(d_width-v_width, 60, value); } } else { U8G2::drawStr((d_width-v_width)/2, 60, value); U8G2::drawStr((d_width-v_width)/2-10, 60, "["); U8G2::drawStr((d_width+v_width)/2+2, 60, "]"); } } else { U8G2::drawStr((d_width-width)/2, 45, item); } U8G2::sendBuffer(); } void DSPL::errorShow(void) { U8G2::clearBuffer(); if (err_msg[0] == '\0') { // No error message specified, show big "ERROR" U8G2::drawBitmap(10, 20, 2, 23, E); U8G2::drawBitmap(10+18, 20, 3, 23, R); U8G2::drawBitmap(10+18+20, 20, 3, 23, R); U8G2::drawBitmap(10+18+20+20, 20, 3, 23, O); U8G2::drawBitmap(10+18+20+20+26, 20, 3, 23, R); } else { U8G2::setFont(u8g_font_profont15r); uint8_t len = strlen(err_msg); uint8_t line = 1; for (uint8_t start = 0; start < len; ) { uint8_t finish = start+1; while (++finish < len) { if (err_msg[finish] == '\n') break; } bool not_end = (finish < len); if (not_end) err_msg[finish] = '\0'; uint8_t width = U8G2::getStrWidth(&err_msg[start]); if (width < d_width) { U8G2::drawStr((d_width-width)/2, line*13, &err_msg[start]); } else { U8G2::drawStr(0, line*13, &err_msg[start]); } if (++line > 4) // Only 4 lines display cat fit break; if (not_end) err_msg[finish] = '\n'; start = finish + 1; } } U8G2::sendBuffer(); } void DSPL::errorMessage(const char *msg) { if (msg[0]) { strncpy(err_msg, msg, 40); } else { err_msg[0] = '\0'; } } void DSPL::debugShow(bool gun_mode, uint16_t power, bool iron, bool gun, uint16_t data[4]) { char buff[14]; U8G2::setFont(u8g_font_profont15r); U8G2::clearBuffer(); if (gun_mode) U8G2::drawBitmap(0, 0, 2, 16, bmFan[0]); sprintf(buff, "%5d", power); U8G2::drawStr(0, 30, buff); for (uint8_t i = 0; i < 4; ++i) { sprintf(buff, "%5d", data[i]); U8G2::drawStr(60, 15*(i+1), buff); } sprintf(buff, "(%c-%c)", iron?'i':' ', gun?'g':' '); U8G2::drawStr(5, 58, buff); U8G2::sendBuffer(); } void DSPL::showVersion(void) { static const char *title = "About"; char buff[30]; U8G2::setFont(u8g_font_profont15r); U8G2::clearBuffer(); // Show title uint8_t width = U8G2::getStrWidth(title); U8G2::drawStr((d_width-width)/2, 13, title); U8G2::drawHLine((d_width-width)/2, 15, width); // Show title sprintf(buff, "IRON & Hot Air Gun"); width = U8G2::getStrWidth(buff); U8G2::drawStr((d_width-width)/2, 30, buff); // Show software version sprintf(buff, "Controller v.%s", FW_VERSION); width = U8G2::getStrWidth(buff); U8G2::drawStr((d_width-width)/2, 45, buff); // Print date of compilation sprintf(buff, "%s", __DATE__); width = U8G2::getStrWidth(buff); U8G2::drawStr((d_width-width)/2, 61, buff); U8G2::sendBuffer(); } ================================================ FILE: Src/eeprom.cpp ================================================ /* * eeprom.cpp * * Created on: 15 aug. 2019. * Author: Alex */ #include #include #include "eeprom.h" #include "iron_tips.h" bool EEPROM::init(void) { // Read all the records in the EEPROM and find min and max record IDs uint32_t min_rec_ID = 0xffffffff; uint16_t min_rec_ch = 0; uint32_t max_rec_ID = 0; uint16_t max_rec_ch = 0; uint16_t records = 0; if (HAL_OK != HAL_I2C_IsDeviceReady(hi2c, eeprom_address<<1, 2, 2)) { can_write = false; return can_write; } can_write = true; for (uint16_t chunk = 0; chunk < cfg_chunks; ++chunk) { if (readChunk(chunk)) { RECORD* cfg = (RECORD*)data; if (CFG_checkSum(cfg, false)) { ++records; if (min_rec_ID > cfg->ID) { min_rec_ID = cfg->ID; min_rec_ch = chunk; } if (max_rec_ID < cfg->ID) { max_rec_ID = cfg->ID; max_rec_ch = chunk; } } else { break; } } else { can_write = false; break; } } if (records == 0) { w_chunk = r_chunk = 0; return can_write; } r_chunk = max_rec_ch; if (records < cfg_chunks) { // The EEPROM is not full w_chunk = r_chunk + 1; if (w_chunk >= cfg_chunks) w_chunk = 0; } else { w_chunk = min_rec_ch; } return can_write; } uint16_t EEPROM::tipDataTotal(void) { uint16_t tip_space = requiredTipSpace(); uint16_t tips_per_chunk = eeprom_chunk_size / tip_space; return tip_chunks * tips_per_chunk; } bool EEPROM::loadRecord(RECORD* config_record) { if (readChunk(r_chunk)) { RECORD* cfg = (RECORD*)data; if (CFG_checkSum(cfg, false)) { memcpy(config_record, cfg, sizeof(RECORD)); return true; } } return false; } bool EEPROM::saveRecord(RECORD* config_record) { if (!can_write) return can_write; config_record->ID ++; CFG_checkSum(config_record, true); memcpy(data, (uint8_t*)config_record, sizeof(RECORD)); if (writeChunk(w_chunk)) { r_chunk = w_chunk; if (++w_chunk >= cfg_chunks) w_chunk = 0; return true; } return false; } /* * Load tip configuration from EEPROM. * As soon one tip record fits to 16 bytes, two tips are saved in one chunk */ TIP_IO_STATUS EEPROM::loadTipData(TIP* tip, uint8_t tip_chunk_index) { uint16_t tip_space = requiredTipSpace(); uint16_t tips_per_chunk = eeprom_chunk_size / tip_space; if (tip_chunk_index > tip_chunks * tips_per_chunk) return EPR_INDEX; uint16_t tip_chunk = tip_chunk_index / tips_per_chunk + eeprom_chunks - tip_chunks; uint8_t index = (tip_chunk_index % tips_per_chunk) * tip_space; if (readChunk(tip_chunk)) { // load whole EEPROM chunk TIP* tmp_tip = (TIP *)&data[index]; // load tip record (first or second) if (TIP_checkSum(tmp_tip, false)) { // CRC of the tip record is correct memcpy(tip, tmp_tip, sizeof(TIP)); // Copy the tip record from the data buffer return EPR_OK; } return EPR_CHECKSUM; } return EPR_IO; } TIP_IO_STATUS EEPROM::saveTipData(TIP* tip, uint8_t tip_chunk_index) { uint16_t tip_space = requiredTipSpace(); uint16_t tips_per_chunk = eeprom_chunk_size / tip_space; if (tip_chunk_index > tip_chunks * tips_per_chunk) return EPR_INDEX; uint16_t tip_chunk = tip_chunk_index / tips_per_chunk + eeprom_chunks - tip_chunks; uint8_t index = (tip_chunk_index % tips_per_chunk) * tip_space; if (readChunk(tip_chunk)) { // load whole EEPROM chunk TIP* tmp_tip = (TIP *)&data[index]; // choose correct record index (1 or 2) memcpy(tmp_tip, tip, sizeof(TIP)); // Replace tip configuration in the data buffer TIP_checkSum(tmp_tip, true); // calculate CRC inside the data buffer if (writeChunk(tip_chunk)) // Rewrite whole chunk return EPR_OK; } return EPR_IO; // Here can be any of IO error: read or write } // Clear bottom area of the EEPROM, where the configuration data is void EEPROM::clearConfigArea(void) { for (uint8_t i = 0; i < eeprom_chunk_size; ++i) data[i] = 0xFF; for (int i = 0; i < cfg_chunks; ++i) { uint32_t addr = i * eeprom_chunk_size; if (HAL_I2C_Mem_Write(hi2c, eeprom_address<<1, addr, I2C_MEMADD_SIZE_16BIT, data, eeprom_chunk_size, 100) != HAL_OK) { break; // Stop writing immediately in case of error } HAL_Delay(10); // Let the data to be saved in the EEPROM } init(); } // Calculate the space required to store TIP configuration. (defined in config.h). The space size should be multiple by 2**N uint16_t EEPROM::requiredTipSpace(void) { uint16_t tip_sz = sizeof(TIP); for (long i = 1; i <= eeprom_chunk_size; i <<= 1) { if (i >= tip_sz) { return i; } } return eeprom_chunk_size; } // Read the EEPROM whole chunk bool EEPROM::readChunk(uint16_t chunk_index) { if (chunk_index == chunk_in_data) return true; if (chunk_index >= eeprom_chunks) return false; uint16_t addr = chunk_index * eeprom_chunk_size; if (HAL_I2C_Mem_Read(hi2c, eeprom_address<<1, addr, I2C_MEMADD_SIZE_16BIT, data, eeprom_chunk_size, 100) == HAL_OK) { chunk_in_data = chunk_index; return true; } return false; } // Write the EEPROM whole chunk bool EEPROM::writeChunk(uint16_t chunk_index) { if (chunk_index >= eeprom_chunks) return false; uint16_t addr = chunk_index * eeprom_chunk_size; chunk_in_data = eeprom_chunks; // Mark the buffer as dirty if (HAL_I2C_Mem_Write(hi2c, eeprom_address<<1, addr, I2C_MEMADD_SIZE_16BIT, data, eeprom_chunk_size, 100) == HAL_OK) { chunk_in_data = chunk_index; HAL_Delay(20); return true; } HAL_Delay(20); return false; } // Checks the CRC of the RECORD structure. Returns true if OK. Replace the CRC with the correct value if write is true uint8_t EEPROM::CFG_checkSum(RECORD* cfg, bool write) { uint16_t summ = 117; // To avoid good check sum with all-zero, start with 117 uint16_t rec_summ = cfg->crc; cfg->crc = 0; uint8_t* d = (uint8_t*)cfg; for (uint8_t i = 0; i < sizeof(RECORD); ++i) { summ <<= 1; summ += d[i]; } bool res = (rec_summ == summ); if (write) cfg->crc = summ; return res; } // Checks the CRC inside tip structure. Returns true if OK, replaces the CRC with the correct value uint8_t EEPROM::TIP_checkSum(TIP* tip, bool write) { uint32_t summ = tip->t200; summ <<= 1; summ += tip->t260; summ <<= 1; summ += tip->t330; summ <<= 1; summ += tip->t400; summ <<= 1; summ += tip->mask; summ <<= 1; summ += tip->ambient; for (int i = 0; i < tip_name_sz; ++i) { summ <<= 1; summ += (uint8_t)tip->name[i]; } summ += 117; // To avoid good check sum with all-zero uint8_t res = (tip->crc == (summ & 0xFF)); if (write) tip->crc = summ & 0xFF; return res; } ================================================ FILE: Src/encoder.cpp ================================================ /* * encoder.cpp * * Created on: 15 aug. 2019. * Author: Alex */ #include "encoder.h" RENC::RENC(GPIO_TypeDef* aPORT, uint16_t aPIN, GPIO_TypeDef* bPORT, uint16_t bPIN) { rpt = 0; m_port = aPORT; s_port = bPORT; m_pin = aPIN; s_pin = bPIN; pos = 0; min_pos = -32767; max_pos = 32766; increment = 1; changed = 0; s_up = false; is_looped = false; increment = fast_increment = 1; } void RENC::addButton(GPIO_TypeDef* ButtonPORT, uint16_t ButtonPIN) { bpt = 0; b_port = ButtonPORT; b_pin = ButtonPIN; over_press = def_over_press; avg.length(avg_length); } void RENC::reset(int16_t initPos, int16_t low, int16_t upp, uint8_t inc, uint8_t fast_inc, bool looped) { min_pos = low; max_pos = upp; if (!write(initPos)) initPos = min_pos; increment = fast_increment = inc; if (fast_inc > increment) fast_increment = fast_inc; is_looped = looped; } /* * The Encoder button current status * 0 - not pressed * 1 - short press * 2 - long press */ uint8_t RENC::buttonStatus(void) { if (HAL_GetTick() >= b_check) { // It is time to check the button status b_check = HAL_GetTick() + b_check_period; uint8_t s = 0; if (GPIO_PIN_RESET == HAL_GPIO_ReadPin(b_port, b_pin)) // if port state is low, the button pressed s = trigger_on << 1; if (b_on) { if (avg.average(s) < trigger_off) b_on = false; } else { if (avg.average(s) > trigger_on) b_on = true; } if (b_on) { // Button status is 'pressed' uint32_t n = HAL_GetTick() - bpt; if ((bpt == 0) || (n > over_press)) { bpt = HAL_GetTick(); } else if (n > long_press) { // Long press if (i_b_rel) { return 0; } else{ i_b_rel = true; return 2; } } } else { // Button status is 'not pressed' if (bpt == 0 || i_b_rel) { bpt = 0; i_b_rel = false; return 0; } uint32_t e = HAL_GetTick() - bpt; bpt = 0; // Ready for next press if (e < over_press) { // Long press already managed return 1; } } } return 0; } bool RENC::write(int16_t initPos) { if ((initPos >= min_pos) && (initPos <= max_pos)) { pos = initPos; return true; } return false; } void RENC::encoderIntr(void) { // Interrupt function, called when the channel A of encoder changed bool mUp = (HAL_GPIO_ReadPin(m_port, m_pin) == GPIO_PIN_SET); uint32_t now_t = HAL_GetTick(); if (!mUp) { // The main channel has been "pressed" if ((rpt == 0) || (now_t - rpt > over_press)) { rpt = now_t; s_up = (HAL_GPIO_ReadPin(s_port, s_pin) == GPIO_PIN_SET); } } else { if (rpt > 0) { if (s_up == (HAL_GPIO_ReadPin(s_port, s_pin) == GPIO_PIN_RESET)) { // Secondary channel polarity has been changed uint8_t inc = increment; if ((now_t - rpt) < over_press) { if ((now_t - changed) < fast_timeout) inc = fast_increment; changed = now_t; if (s_up) pos -= inc; else pos += inc; if (pos > max_pos) { pos = (is_looped)?min_pos:max_pos; } else if (pos < min_pos) { pos = (is_looped)?max_pos:min_pos; } } } rpt = 0; } } } ================================================ FILE: Src/font.c ================================================ /* * font.c * * Created on: 3 . 2019 . * Author: Alex */ /* Fontname: Kameron-24 Copyright: Glyphs: 10/10 BBX Build Mode: 0 */ #include "u8g2.h" const uint8_t u8g2_font_kam24n[] U8G2_FONT_SECTION("google_kameron_24") = { 10,0,4,3,5,5,4,1,6,16,20,1,0,20,0,20, 0,0,0,0,0,1,57,48,28,142,106,153,236,14,162,134, 102,198,70,198,38,6,253,15,39,198,70,198,102,134,166,14, 226,140,0,49,16,138,114,153,134,108,38,230,246,255,163,3, 137,3,1,50,28,141,106,121,142,14,40,136,40,198,12,11, 71,39,39,9,39,7,39,183,147,16,164,164,60,248,0,51, 33,142,106,153,204,14,102,166,102,198,70,228,70,228,70,41, 233,12,139,137,135,43,91,78,200,81,76,209,28,140,25,1, 52,33,142,106,25,71,73,35,36,67,4,69,4,99,228,130, 196,132,164,84,133,9,137,201,200,201,28,124,41,172,203,11, 0,53,34,141,110,25,14,42,14,42,4,37,4,37,100,181, 48,58,32,153,162,144,155,29,29,165,164,172,155,152,26,57, 152,178,2,54,37,143,234,185,236,14,134,168,70,6,69,6, 69,132,215,20,77,28,136,84,81,208,77,76,122,57,33,57, 49,55,51,69,116,48,118,4,55,26,142,106,25,126,32,41, 33,56,33,40,43,59,43,59,43,59,43,187,86,118,91,217, 65,0,56,38,144,102,153,14,15,166,136,104,200,72,6,71, 6,71,6,103,198,166,134,6,237,198,102,6,39,70,61,61, 164,32,163,57,40,59,8,2,57,38,143,102,153,236,14,134, 168,102,230,38,6,39,38,189,156,152,163,160,42,57,144,24, 170,25,30,22,17,28,17,28,153,34,58,152,179,2,0,0, 0,0}; /* Fontname: Kameron-26 Copyright: Glyphs: 10/10 BBX Build Mode: 0 */ const uint8_t u8g2_font_kam26n[] U8G2_FONT_SECTION("google_kameron_26") = { 10,0,4,3,5,5,4,1,6,16,22,2,0,22,0,22, 0,0,0,0,0,1,83,48,31,208,106,186,12,15,166,136, 136,198,102,6,71,6,39,70,253,79,39,6,71,6,103,198, 134,88,29,12,90,1,49,16,202,118,154,134,108,110,98,230, 246,255,55,7,7,6,50,32,207,106,154,174,14,74,200,40, 6,77,155,14,207,46,37,29,37,157,157,149,148,16,149,16, 165,165,61,248,128,0,51,34,207,234,153,236,14,134,216,140, 145,8,142,8,14,207,146,18,90,86,83,15,19,151,54,157, 16,28,25,163,57,32,59,2,52,37,208,106,58,135,217,74, 136,138,136,138,72,202,8,10,9,10,201,73,137,169,26,147, 146,19,18,20,58,248,128,84,92,183,7,17,0,53,35,206, 238,25,14,44,14,44,36,37,36,37,132,117,98,116,80,66, 84,33,56,60,187,150,180,208,112,98,138,228,128,234,10,0, 54,41,208,106,186,14,15,166,166,104,230,70,38,69,38,69, 164,215,24,77,28,140,88,81,16,78,140,122,58,33,58,49, 72,49,56,67,53,117,48,104,5,55,26,207,110,26,126,64, 90,57,33,56,34,56,59,44,60,59,60,44,188,118,120,237, 240,14,1,56,43,208,234,185,12,15,166,136,104,200,72,6, 71,6,71,6,71,6,103,198,166,134,6,13,197,132,6,71, 68,37,70,61,157,24,28,161,170,57,40,59,8,2,57,42, 208,106,186,12,15,166,166,104,6,39,8,39,70,37,70,189, 164,24,164,160,50,57,152,24,178,153,158,22,145,28,145,28, 153,155,161,154,58,24,188,2,0,0,0,0}; /* Fontname: Kameron-28 Copyright: Glyphs: 10/10 BBX Build Mode: 0 */ const uint8_t u8g2_font_kam28n[] U8G2_FONT_SECTION("google_kameron_28") = { 10,0,4,3,5,5,4,1,6,17,23,2,0,23,0,23, 0,0,0,0,0,1,113,48,36,241,234,186,46,15,228,166, 136,230,102,38,71,38,71,38,39,102,253,183,19,147,35,147, 35,147,51,115,67,84,115,7,146,87,0,49,16,235,246,154, 166,140,142,98,6,247,255,143,14,30,4,50,33,239,238,154, 174,14,74,200,40,6,77,155,14,207,206,146,82,146,82,146, 146,14,75,74,136,74,136,210,210,30,124,64,51,38,240,234, 154,238,14,136,168,104,230,72,36,71,36,71,36,167,135,103, 41,107,175,201,167,169,107,107,77,39,36,103,166,138,14,230, 174,0,52,50,241,234,90,167,169,35,132,37,100,69,68,101, 68,101,36,133,4,165,228,166,228,196,212,73,9,74,9,10, 29,28,76,28,28,200,202,3,200,3,200,3,200,3,8,31, 68,30,68,0,53,38,239,110,26,94,28,92,76,74,76,74, 12,111,44,99,36,113,32,67,69,50,56,18,73,188,113,105, 229,196,224,4,21,205,1,217,21,0,54,42,241,234,218,14, 15,168,198,104,6,71,70,69,70,69,196,215,88,77,28,204, 88,145,80,78,80,222,122,59,33,59,49,57,51,56,67,69, 117,64,120,5,55,27,239,238,26,126,64,218,114,66,112,120, 118,120,118,150,118,120,118,120,150,118,120,237,240,134,0,56, 44,241,234,186,14,15,168,216,208,145,76,142,76,142,76,142, 76,206,204,77,173,163,152,156,136,24,155,155,153,156,152,245, 246,146,98,114,164,170,232,128,240,10,0,57,43,240,106,186, 12,15,166,136,104,230,102,6,39,70,37,70,61,61,164,152, 171,40,50,57,152,24,178,153,158,22,145,28,145,28,153,155, 161,154,58,24,52,3,0,0,0,0}; ================================================ FILE: Src/gun.cpp ================================================ /* * gun.cpp * * Created on: 14 aug 2019 * Author: Alex */ #include "gun.h" void HOTGUN::init(void) { mode = POWER_OFF; // Completely stopped, no power on fan also fan_speed = 0; fix_power = 0; chill = false; UNIT::init(sw_avg_len, fan_off_value, fan_on_value, sw_avg_len, sw_off_value, sw_on_value); safetyRelay(false); // Completely turn-off the power of Hot Air Gun h_power.reset(); h_temp.reset(); d_power.length(ec); d_temp.length(ec); PID::init(1000, 13, false); // Initialize PID for Hot Air Gun, 1Hz. Do not forcible heat! resetPID(); } uint8_t HOTGUN::avgPowerPcnt(void) { uint8_t pcnt = 0; if (mode == POWER_FIXED) { pcnt = map(fix_power, 0, max_fix_power, 0, 100); } else { pcnt = map(h_power.read(), 0, max_power, 0, 100); } if (pcnt > 100) pcnt = 100; return pcnt; } uint16_t HOTGUN::appliedPower(void) { return TIM1->CCR4; } uint16_t HOTGUN::fanSpeed(void) { return constrain(TIM2->CCR2, 0, 1999); } uint16_t HOTGUN::alternateTemp(void) { uint16_t t = h_temp.read(); if (mode == POWER_OFF) t = 0; return t; } void HOTGUN::updateTemp(uint16_t value) { if (isConnected()) { int32_t at = h_temp.average(value); int32_t diff = at - value; d_temp.update(diff*diff); } } void HOTGUN::switchPower(bool On) { fan_off_time = 0; // Disable fan offline by timeout switch (mode) { case POWER_OFF: if (fanSpeed() == 0) { // No power supplied to the Fan if (On) { // !FAN && On safetyRelay(true); // Supply AC power to the hot air gun socket mode = POWER_HEATING; } } else { if (On) { if (isConnected()) { // FAN && On && connected safetyRelay(true); uint16_t t = h_temp.read(); if (t < temp_set && t + 200 < temp_set) { mode = POWER_HEATING; } else { mode = POWER_ON; } } else { // FAN && On && !connected shutdown(); } } else { if (isConnected()) { // FAN && !On && connected if (avg_sync_temp < temp_gun_cold) { // FAN && !On && connected && cold shutdown(); } else { // FAN && !On && connected && !cold mode = POWER_COOLING; fan_off_time = HAL_GetTick() + fan_off_timeout; reach_cold_temp = false; } } } } break; case POWER_ON: case POWER_HEATING: case POWER_PID_TUNE: if (!On) { // Start cooling the hot air gun mode = POWER_COOLING; fan_off_time = HAL_GetTick() + fan_off_timeout; reach_cold_temp = false; } break; case POWER_FIXED: if (fanSpeed()) { if (On) { // FAN && On mode = POWER_ON; } else { // FAN && !On if (isConnected()) { // FAN && !On && connected if (avg_sync_temp < temp_gun_cold) { // FAN && !On && connected && cold shutdown(); } else { // FAN && !On && connected && !cold mode = POWER_COOLING; fan_off_time = HAL_GetTick() + fan_off_timeout; reach_cold_temp = false; } } } } else { // !FAN if (!On) { // !FAN && !On shutdown(); } } break; case POWER_COOLING: if (fanSpeed()) { if (On) { // FAN && On if (isConnected()) { // FAN && On && connected safetyRelay(true); // Supply AC power to the hot air gun socket uint16_t t = h_temp.read(); if (t < temp_set && t + 200 < temp_set) { mode = POWER_HEATING; } else { mode = POWER_ON; } } else { // FAN && On && !connected shutdown(); } } else { // FAN && !On if (isConnected()) { if (avg_sync_temp < temp_gun_cold) { // FAN && !On && connected && cold fan_off_time = HAL_GetTick() + fan_extra_time; reach_cold_temp = true; } } else { // FAN && !On && !connected shutdown(); } } } else { if (On) { // !FAN && On safetyRelay(true); // Supply AC power to the hot air gun socket mode = POWER_HEATING; } } break; default: break; } h_power.reset(); d_power.reset(); } void HOTGUN::fixPower(uint16_t Power) { if (Power == 0) { // To switch off the hot gun, set the Power to 0 switchPower(false); return; } if (Power > max_power) Power = max_power; mode = POWER_FIXED; safetyRelay(true); // Supply AC power to the hot air gun socket fix_power = Power; } // Called from HAL_TIM_OC_DelayElapsedCallback() event handler 1 time per second (see core.cpp) uint16_t HOTGUN::power(void) { uint16_t t = h_temp.read(); // Actual Hot Air Gun temperature avg_sync_temp = t; // Save average temperature to be read as average value if ((t >= int_temp_max + 100) || (t > (temp_set + 400))) { // Prevent global over heating if (mode == POWER_ON) chill = true; // Turn off the power in main working mode only; } int32_t p = 0; // The Hot Air Gun power value switch (mode) { case POWER_OFF: break; case POWER_HEATING: case POWER_ON: FAN_TIM.Instance->CCR2 = fan_speed; if (chill) { if (t < (temp_set - 2)) { chill = false; resetPID(); } else { break; } } if (mode == POWER_HEATING && t >= temp_set + 20) { mode = POWER_ON; PID::pidStable(stable); } if (relay_ready_cnt > 0) { // Relay is not ready yet --relay_ready_cnt; // Do not apply power to the HOT GUN till AC relay is ready relay_ready_cnt &= 7; } else { p = PID::reqPower(temp_set, t); p = constrain(p, 0, max_power); } break; case POWER_FIXED: if (relay_ready_cnt > 0) { // Relay is not ready yet --relay_ready_cnt; // Do not apply power to the HOT GUN till AC relay is ready } else { p = fix_power; } FAN_TIM.Instance->CCR2 = fan_speed; break; case POWER_COOLING: if (fanSpeed() < min_fan_speed) { shutdown(); } else { if (isConnected()) { if (avg_sync_temp < temp_gun_cold) { // FAN && connected && cold if (!reach_cold_temp) { reach_cold_temp = true; fan_off_time = HAL_GetTick() + fan_extra_time; } } else { // FAN && connected && !cold uint16_t fan = map(avg_sync_temp, temp_gun_cold, temp_set, max_cool_fan, min_fan_speed); fan = constrain(fan, min_fan_speed, max_fan_speed); FAN_TIM.Instance->CCR2 = fan; } } // Here the FAN is working but the Hot Air Gun can be disconnected if (fan_off_time && HAL_GetTick() >= fan_off_time) { // The fan should be turned off in specific time shutdown(); } } break; case POWER_PID_TUNE: p = PIDTUNE::run(t); break; default: break; } // Only supply the power to the heater if the Hot Air Gun is connected if (fanSpeed() < min_fan_speed || !isConnected()) p = 0; h_power.update(p); int32_t ap = h_power.average(p); int32_t diff = ap - p; d_power.update(diff*diff); return p; } uint8_t HOTGUN::presetFanPcnt(void) { uint16_t pcnt = map(fan_speed, 0, max_fan_speed, 0, 100); if (pcnt > 100) pcnt = 100; return pcnt; } // Can be called from the event handler. void HOTGUN::shutdown(void) { mode = POWER_OFF; TIM2->CCR2 = 0; safetyRelay(false); // Stop supplying AC power to the hot air gun reach_cold_temp = true; } // We need some time to activate the relay, so we initialize the relay_ready_cnt variable. void HOTGUN::safetyRelay(bool activate) { if (activate) { HAL_GPIO_WritePin(AC_RELAY_GPIO_Port, AC_RELAY_Pin, GPIO_PIN_SET); relay_ready_cnt = relay_activate; } else { HAL_GPIO_WritePin(AC_RELAY_GPIO_Port, AC_RELAY_Pin, GPIO_PIN_RESET); relay_ready_cnt = 0; } } ================================================ FILE: Src/iron.cpp ================================================ /* * iron.cpp * * Created on: 13 aug 2019 * Author: Alex */ #include #include "iron.h" #include "tools.h" void IRON::init(void) { mode = POWER_OFF; fix_power = 0; chill = false; UNIT::init(iron_sw_len, iron_off_value, iron_on_value, sw_tilt_len, sw_off_value, sw_on_value); t_iron_short.length(iron_emp_coeff); t_amb.length(ambient_emp_coeff); h_power.length(ec); h_temp.length(ec); d_power.length(ec); d_temp.length(ec); // The IRON is powered by TIM2, calculate the TIM2 period in ms uint32_t tim2_period = (TIM2->PSC + 1) * (TIM2->ARR + 1); uint32_t cpu_speed = SystemCoreClock / 1000; // Calculate TIM2 period in ms tim2_period /= cpu_speed; PID::init(tim2_period, 11, true); // Initialize PID for IRON resetPID(); } void IRON::switchPower(bool On) { if (!On) { fix_power = 0; if (mode != POWER_OFF) mode = POWER_COOLING; // Start the cooling process } else { resetPID(); temp_low = 0; // Disable low power mode mode = POWER_ON; } h_power.reset(); d_power.reset(); temp_low = 0; } uint16_t IRON::alternateTemp(void) { uint16_t t = h_temp.read(); if (mode == POWER_OFF) t = 0; return t; } void IRON::setTemp(uint16_t t) { if (mode == POWER_ON) resetPID(); if (t > int_temp_max) t = int_temp_max; // Do not allow over heating. int_temp_max is defined in vars.cpp temp_set = t; uint16_t ta = h_temp.read(); chill = (ta > t + 20); // The IRON must be cooled } uint16_t IRON::avgPower(void) { uint16_t p = h_power.read(); if (mode == POWER_FIXED) p = fix_power; if (p > max_power) p = max_power; return p; } uint8_t IRON::avgPowerPcnt(void) { uint16_t p = h_power.read(); uint16_t max_p = max_power; if (mode == POWER_FIXED) { p = fix_power; max_p = max_fix_power; } else if (mode == POWER_PID_TUNE) { max_p = max_fix_power; } p = constrain(p, 0, max_p); return map(p, 0, max_p, 0, 100); } void IRON::fixPower(uint16_t Power) { h_power.reset(); d_power.reset(); if (Power == 0) { // To switch off the IRON, set the Power to 0 fix_power = 0; mode = POWER_COOLING; return; } if (Power > max_fix_power) fix_power = max_fix_power; fix_power = Power; mode = POWER_FIXED; } void IRON::adjust(uint16_t t) { if (t > int_temp_max) t = int_temp_max; // Do not allow over heating temp_set = t; } // Called from HAL_ADC_ConvCpltCallback() event handler. See core.cpp for details. uint16_t IRON::power(int32_t t) { t = tempShortAverage(t); // Prevent temperature deviation using short term history average temp_curr = t; int32_t at = h_temp.average(temp_curr); int32_t diff = at - temp_curr; d_temp.update(diff*diff); if ((t >= int_temp_max + 100) || (t > (temp_set + 400))) { // Prevent global over heating if (mode == POWER_ON) chill = true; // Turn off the power in main working mode only; } int32_t p = 0; switch (mode) { case POWER_OFF: break; case POWER_COOLING: if (at < iron_cold) mode = POWER_OFF; break; case POWER_ON: { uint16_t t_set = temp_set; if (temp_low) t_set = temp_low; // If temp_low setup, turn-on low power mode if (chill) { if (t < (t_set - 2)) { chill = false; resetPID(); } else { break; } } p = PID::reqPower(t_set, t); p = constrain(p, 0, max_power); break; } case POWER_FIXED: p = fix_power; break; case POWER_PID_TUNE: p = PIDTUNE::run(t); break; default: break; } int32_t ap = h_power.average(p); diff = ap - p; d_power.update(diff*diff); return p; } void IRON::reset(void) { resetShortTemp(); h_power.reset(); h_temp.reset(); d_power.reset(); d_temp.reset(); mode = POWER_OFF; // New tip inserted, clear COOLING mode } void IRON::lowPowerMode(uint16_t t) { if (mode == POWER_ON && t < temp_set) { temp_low = t; // Activate low power mode chill = true; // Stop heating, when temp reaches standby one, reset PID h_power.reset(); d_power.reset(); } } /* * Return ambient temperature in Celsius * Caches previous result to skip expensive calculations */ int32_t IRON::ambientTemp(void) { static const uint16_t add_resistor = 10000; // The additional resistor value (10koHm) static const float normal_temp[2]= { 10000, 25 }; // nominal resistance and the nominal temperature static const uint16_t beta = 3950; // The beta coefficient of the thermistor (usually 3000-4000) static int32_t average = 0; // Previous value of analog read static int cached_ambient = 0; // Previous value of the temperature if (!isConnected()) return default_ambient; // If IRON is not connected, return default ambient temperature if (abs(t_amb.read() - average) < 20) return cached_ambient; average = t_amb.read(); if (average < max_ambient_value) { // prevent division by zero; About -30 degrees // convert the value to resistance float resistance = 4095.0 / (float)average - 1.0; resistance = (float)add_resistor / resistance; float steinhart = resistance / normal_temp[0]; // (R/Ro) steinhart = log(steinhart); // ln(R/Ro) steinhart /= beta; // 1/B * ln(R/Ro) steinhart += 1.0 / (normal_temp[1] + 273.15); // + (1/To) steinhart = 1.0 / steinhart; // Invert steinhart -= 273.15; // convert to Celsius cached_ambient = round(steinhart); } else { cached_ambient = default_ambient; } return cached_ambient; } ================================================ FILE: Src/iron_tips.cpp ================================================ /* * iron_tips.cpp * * Created on: 15 aug. 2019. * Author: Alex */ #include "iron_tips.h" #include "eeprom.h" #include "string.h" static char tip_names[][tip_name_sz] = { {'H', 'O', 'G', 'U', 'N'}, // The Hot Air Gun is just another virtual tip that has its own calibration. It should be on the top of list!!! {'B', '\0', '\0', '\0', '\0'}, {'B', '1', '\0', '\0', '\0'}, {'B', '2', '\0', '\0', '\0'}, {'B', '3', '\0', '\0', '\0'}, {'B', '4', '\0', '\0', '\0'}, {'B', '2', 'Z', '\0', '\0'}, {'B', 'C', '1', '\0', '\0'}, {'B', 'C', '1', '.' , '5'}, {'B', 'C', '2', '\0', '\0'}, {'B', 'C', '3', '\0', '\0'}, {'B', 'C', '1', 'Z', '\0'}, {'B', 'C', '2', 'Z', '\0'}, {'B', 'C', '4', 'Z', '\0'}, {'B', 'C', 'F', '1', '\0'}, {'B', 'C', 'F', '2', '\0'}, {'B', 'C', 'F', '3', '\0'}, {'B', 'C', 'F', '4', '\0'}, {'B', 'C', 'F', '1', 'Z'}, {'B', 'C', 'F', '2', 'Z'}, {'B', 'C', 'F', '3', 'Z'}, {'B', 'C', 'M', '2', '\0'}, {'B', 'C', 'M', '3', '\0'}, {'B', 'L', '\0', '\0', '\0'}, {'B', 'Z', '\0', '\0', '\0'}, {'C', '1', '\0', '\0', '\0'}, {'C', '2', '\0', '\0', '\0'}, {'C', '3', '\0', '\0', '\0'}, {'C', '4', '\0', '\0', '\0'}, {'D', '0', '8', '\0', '\0'}, {'D', '1', '2', '\0', '\0'}, {'D', '1', '6', '\0', '\0'}, {'D', '2', '4', '\0', '\0'}, {'D', '3', '2', '\0', '\0'}, // Tip added 04/01/2022 {'D', '5', '2', '\0', '\0'}, {'D', '4', '\0', '\0', '\0'}, {'D', 'L', '1', '2', '\0'}, {'D', 'L', '3', '2', '\0'}, {'D', 'L', '5', '2', '\0'}, {'D', '1', '2', 'Z', '\0'}, {'D', '2', '4', 'Z', '\0'}, {'D', '4', 'Z', '\0', '\0'}, {'I', '\0', '\0', '\0', '\0'}, {'I', 'L', '\0', '\0', '\0'}, {'I', 'L', 'S', '\0', '\0'}, {'J', '0', '2', '\0', '\0'}, {'J', 'L', '0', '2', '\0'}, {'J', 'S', '0', '2', '\0'}, {'K', '\0', '\0', '\0', '\0'}, {'K', 'F', '\0', '\0', '\0'}, {'K', 'L', '\0', '\0', '\0'}, {'K', 'R', '\0', '\0', '\0'}, {'K', 'F', 'Z', '\0', '\0'}, {'K', 'R', 'Z', '\0', '\0'}, {'K', 'U', '\0', '\0', '\0'}, // Tip added 09/12/2018 {'W', 'B', '2', '\0', '\0'}, {'W', 'D', '0', '8', '\0'}, {'W', 'D', '1', '2', '\0'}, {'W', 'D', '1', '6', '\0'}, {'W', 'D', '5', '2', '\0'}, {'W', 'I', '\0', '\0', '\0'}, {'N', '1', '-', '0', '6'}, {'N', '1', '-', '0', '8'}, {'N', '1', '-', '1', '0'}, {'N', '1', '-', '1', '3'}, {'N', '1', '-', '1', '6'}, {'N', '1', '-', '2', '0'}, {'N', '1', '-', '2', '3'}, {'N', '1', '-', 'L', '1'}, {'1', '0', '0', '1', '\0'}, {'1', '0', '0', '2', '\0'}, {'1', '0', '0', '3', '\0'}, {'1', '0', '0', '4', '\0'}, {'1', '0', '0', '5', '\0'}, {'1', '0', '0', '6', '\0'}, {'1', '0', '0', '7', '\0'}, {'1', '0', '0', '8', '\0'}, {'1', '0', '0', '9', '\0'}, {'1', '0', '1', '0', '\0'}, {'1', '2', '0', '1', '\0'}, {'1', '2', '0', '2', '\0'}, {'1', '2', '0', '3', '\0'}, {'1', '2', '0', '4', '\0'}, {'1', '2', '0', '5', '\0'}, {'1', '2', '0', '6', '\0'}, {'1', '2', '0', '7', '\0'}, {'1', '2', '0', '8', '\0'}, {'1', '2', '0', '9', '\0'}, {'1', '4', '0', '1', '\0'}, {'1', '4', '0', '2', '\0'}, {'1', '4', '0', '3', '\0'}, {'1', '4', '0', '4', '\0'}, {'1', '4', '0', '5', '\0'}, {'1', '4', '0', '6', '\0'} }; static uint16_t tip_number = sizeof(tip_names) / tip_name_sz; uint16_t TIPS::loaded(void) { return tip_number; } const char* TIPS::name(uint8_t index) { if (index < tip_number) { return tip_names[index]; } return 0; } int TIPS::index(const char *name) { for (uint16_t i = 0; i < tip_number; ++i) { if (strncmp(name, tip_names[i], tip_name_sz) == 0) return i; } return -1; } ================================================ FILE: Src/main.c ================================================ /* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : main.c * @brief : Main program body ****************************************************************************** * @attention * *

© Copyright (c) 2019 STMicroelectronics. * All rights reserved.

* * This software component is licensed by ST under BSD 3-Clause license, * the "License"; You may not use this file except in compliance with the * License. You may obtain a copy of the License at: * opensource.org/licenses/BSD-3-Clause * ****************************************************************************** */ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include "main.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ #include "core.h" /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN PTD */ /* USER CODE END PTD */ /* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD */ /* USER CODE END PD */ /* Private macro -------------------------------------------------------------*/ /* USER CODE BEGIN PM */ /* USER CODE END PM */ /* Private variables ---------------------------------------------------------*/ ADC_HandleTypeDef hadc1; ADC_HandleTypeDef hadc2; DMA_HandleTypeDef hdma_adc1; I2C_HandleTypeDef hi2c1; SPI_HandleTypeDef hspi2; TIM_HandleTypeDef htim1; TIM_HandleTypeDef htim2; TIM_HandleTypeDef htim4; /* USER CODE BEGIN PV */ /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_DMA_Init(void); static void MX_SPI2_Init(void); static void MX_ADC1_Init(void); static void MX_ADC2_Init(void); static void MX_I2C1_Init(void); static void MX_TIM1_Init(void); static void MX_TIM2_Init(void); static void MX_TIM4_Init(void); /* USER CODE BEGIN PFP */ /* USER CODE END PFP */ /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ /* USER CODE END 0 */ /** * @brief The application entry point. * @retval int */ int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_DMA_Init(); MX_SPI2_Init(); MX_ADC1_Init(); MX_ADC2_Init(); MX_I2C1_Init(); MX_TIM1_Init(); MX_TIM2_Init(); MX_TIM4_Init(); /* USER CODE BEGIN 2 */ setup(); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ loop(); } /* USER CODE END 3 */ } /** * @brief System Clock Configuration * @retval None */ void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; RCC_PeriphCLKInitTypeDef PeriphClkInit = {0}; /** Initializes the RCC Oscillators according to the specified parameters * in the RCC_OscInitTypeDef structure. */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } /** Initializes the CPU, AHB and APB buses clocks */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { Error_Handler(); } PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_ADC; PeriphClkInit.AdcClockSelection = RCC_ADCPCLK2_DIV6; if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK) { Error_Handler(); } } /** * @brief ADC1 Initialization Function * @param None * @retval None */ static void MX_ADC1_Init(void) { /* USER CODE BEGIN ADC1_Init 0 */ /* USER CODE END ADC1_Init 0 */ ADC_MultiModeTypeDef multimode = {0}; ADC_ChannelConfTypeDef sConfig = {0}; /* USER CODE BEGIN ADC1_Init 1 */ /* USER CODE END ADC1_Init 1 */ /** Common config */ hadc1.Instance = ADC1; hadc1.Init.ScanConvMode = ADC_SCAN_ENABLE; hadc1.Init.ContinuousConvMode = ENABLE; hadc1.Init.DiscontinuousConvMode = DISABLE; hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc1.Init.NbrOfConversion = 4; if (HAL_ADC_Init(&hadc1) != HAL_OK) { Error_Handler(); } /** Configure the ADC multi-mode */ multimode.Mode = ADC_DUALMODE_INTERLFAST; if (HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode) != HAL_OK) { Error_Handler(); } /** Configure Regular Channel */ sConfig.Channel = ADC_CHANNEL_2; sConfig.Rank = ADC_REGULAR_RANK_1; sConfig.SamplingTime = ADC_SAMPLETIME_71CYCLES_5; if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { Error_Handler(); } /** Configure Regular Channel */ sConfig.Channel = ADC_CHANNEL_3; sConfig.Rank = ADC_REGULAR_RANK_2; if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { Error_Handler(); } /** Configure Regular Channel */ sConfig.Channel = ADC_CHANNEL_5; sConfig.Rank = ADC_REGULAR_RANK_3; if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { Error_Handler(); } /** Configure Regular Channel */ sConfig.Channel = ADC_CHANNEL_6; sConfig.Rank = ADC_REGULAR_RANK_4; if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN ADC1_Init 2 */ /* USER CODE END ADC1_Init 2 */ } /** * @brief ADC2 Initialization Function * @param None * @retval None */ static void MX_ADC2_Init(void) { /* USER CODE BEGIN ADC2_Init 0 */ /* USER CODE END ADC2_Init 0 */ ADC_ChannelConfTypeDef sConfig = {0}; /* USER CODE BEGIN ADC2_Init 1 */ /* USER CODE END ADC2_Init 1 */ /** Common config */ hadc2.Instance = ADC2; hadc2.Init.ScanConvMode = ADC_SCAN_DISABLE; hadc2.Init.ContinuousConvMode = ENABLE; hadc2.Init.DiscontinuousConvMode = DISABLE; hadc2.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc2.Init.DataAlign = ADC_DATAALIGN_RIGHT; hadc2.Init.NbrOfConversion = 1; if (HAL_ADC_Init(&hadc2) != HAL_OK) { Error_Handler(); } /** Configure Regular Channel */ sConfig.Channel = ADC_CHANNEL_4; sConfig.Rank = ADC_REGULAR_RANK_1; sConfig.SamplingTime = ADC_SAMPLETIME_71CYCLES_5; if (HAL_ADC_ConfigChannel(&hadc2, &sConfig) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN ADC2_Init 2 */ /* USER CODE END ADC2_Init 2 */ } /** * @brief I2C1 Initialization Function * @param None * @retval None */ static void MX_I2C1_Init(void) { /* USER CODE BEGIN I2C1_Init 0 */ /* USER CODE END I2C1_Init 0 */ /* USER CODE BEGIN I2C1_Init 1 */ /* USER CODE END I2C1_Init 1 */ hi2c1.Instance = I2C1; hi2c1.Init.ClockSpeed = 400000; hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2; hi2c1.Init.OwnAddress1 = 0; hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT; hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE; hi2c1.Init.OwnAddress2 = 0; hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE; hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE; if (HAL_I2C_Init(&hi2c1) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN I2C1_Init 2 */ /* USER CODE END I2C1_Init 2 */ } /** * @brief SPI2 Initialization Function * @param None * @retval None */ static void MX_SPI2_Init(void) { /* USER CODE BEGIN SPI2_Init 0 */ /* USER CODE END SPI2_Init 0 */ /* USER CODE BEGIN SPI2_Init 1 */ /* USER CODE END SPI2_Init 1 */ /* SPI2 parameter configuration*/ hspi2.Instance = SPI2; hspi2.Init.Mode = SPI_MODE_MASTER; hspi2.Init.Direction = SPI_DIRECTION_2LINES; hspi2.Init.DataSize = SPI_DATASIZE_8BIT; hspi2.Init.CLKPolarity = SPI_POLARITY_LOW; hspi2.Init.CLKPhase = SPI_PHASE_1EDGE; hspi2.Init.NSS = SPI_NSS_SOFT; hspi2.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4; hspi2.Init.FirstBit = SPI_FIRSTBIT_MSB; hspi2.Init.TIMode = SPI_TIMODE_DISABLE; hspi2.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; hspi2.Init.CRCPolynomial = 10; if (HAL_SPI_Init(&hspi2) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN SPI2_Init 2 */ /* USER CODE END SPI2_Init 2 */ } /** * @brief TIM1 Initialization Function * @param None * @retval None */ static void MX_TIM1_Init(void) { /* USER CODE BEGIN TIM1_Init 0 */ /* USER CODE END TIM1_Init 0 */ TIM_ClockConfigTypeDef sClockSourceConfig = {0}; TIM_MasterConfigTypeDef sMasterConfig = {0}; TIM_OC_InitTypeDef sConfigOC = {0}; TIM_BreakDeadTimeConfigTypeDef sBreakDeadTimeConfig = {0}; /* USER CODE BEGIN TIM1_Init 1 */ /* USER CODE END TIM1_Init 1 */ htim1.Instance = TIM1; htim1.Init.Prescaler = 0; htim1.Init.CounterMode = TIM_COUNTERMODE_UP; htim1.Init.Period = 99; htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim1.Init.RepetitionCounter = 0; htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; if (HAL_TIM_Base_Init(&htim1) != HAL_OK) { Error_Handler(); } sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_ETRMODE2; sClockSourceConfig.ClockPolarity = TIM_CLOCKPOLARITY_NONINVERTED; sClockSourceConfig.ClockPrescaler = TIM_CLOCKPRESCALER_DIV1; sClockSourceConfig.ClockFilter = 0; if (HAL_TIM_ConfigClockSource(&htim1, &sClockSourceConfig) != HAL_OK) { Error_Handler(); } if (HAL_TIM_OC_Init(&htim1) != HAL_OK) { Error_Handler(); } if (HAL_TIM_PWM_Init(&htim1) != HAL_OK) { Error_Handler(); } sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim1, &sMasterConfig) != HAL_OK) { Error_Handler(); } sConfigOC.OCMode = TIM_OCMODE_TIMING; sConfigOC.Pulse = 97; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCNPolarity = TIM_OCNPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; sConfigOC.OCIdleState = TIM_OCIDLESTATE_RESET; sConfigOC.OCNIdleState = TIM_OCNIDLESTATE_RESET; if (HAL_TIM_OC_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) { Error_Handler(); } sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 0; if (HAL_TIM_PWM_ConfigChannel(&htim1, &sConfigOC, TIM_CHANNEL_4) != HAL_OK) { Error_Handler(); } sBreakDeadTimeConfig.OffStateRunMode = TIM_OSSR_DISABLE; sBreakDeadTimeConfig.OffStateIDLEMode = TIM_OSSI_DISABLE; sBreakDeadTimeConfig.LockLevel = TIM_LOCKLEVEL_OFF; sBreakDeadTimeConfig.DeadTime = 0; sBreakDeadTimeConfig.BreakState = TIM_BREAK_DISABLE; sBreakDeadTimeConfig.BreakPolarity = TIM_BREAKPOLARITY_HIGH; sBreakDeadTimeConfig.AutomaticOutput = TIM_AUTOMATICOUTPUT_DISABLE; if (HAL_TIMEx_ConfigBreakDeadTime(&htim1, &sBreakDeadTimeConfig) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN TIM1_Init 2 */ /* USER CODE END TIM1_Init 2 */ HAL_TIM_MspPostInit(&htim1); } /** * @brief TIM2 Initialization Function * @param None * @retval None */ static void MX_TIM2_Init(void) { /* USER CODE BEGIN TIM2_Init 0 */ /* USER CODE END TIM2_Init 0 */ TIM_ClockConfigTypeDef sClockSourceConfig = {0}; TIM_MasterConfigTypeDef sMasterConfig = {0}; TIM_OC_InitTypeDef sConfigOC = {0}; /* USER CODE BEGIN TIM2_Init 1 */ /* USER CODE END TIM2_Init 1 */ htim2.Instance = TIM2; htim2.Init.Prescaler = 719; htim2.Init.CounterMode = TIM_COUNTERMODE_UP; htim2.Init.Period = 1999; htim2.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim2.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; if (HAL_TIM_Base_Init(&htim2) != HAL_OK) { Error_Handler(); } sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) { Error_Handler(); } if (HAL_TIM_PWM_Init(&htim2) != HAL_OK) { Error_Handler(); } if (HAL_TIM_OC_Init(&htim2) != HAL_OK) { Error_Handler(); } sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) { Error_Handler(); } sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 0; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) { Error_Handler(); } if (HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) { Error_Handler(); } sConfigOC.OCMode = TIM_OCMODE_TIMING; if (HAL_TIM_OC_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) { Error_Handler(); } sConfigOC.Pulse = 1980; if (HAL_TIM_OC_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_4) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN TIM2_Init 2 */ /* USER CODE END TIM2_Init 2 */ HAL_TIM_MspPostInit(&htim2); } /** * @brief TIM4 Initialization Function * @param None * @retval None */ static void MX_TIM4_Init(void) { /* USER CODE BEGIN TIM4_Init 0 */ /* USER CODE END TIM4_Init 0 */ TIM_ClockConfigTypeDef sClockSourceConfig = {0}; TIM_MasterConfigTypeDef sMasterConfig = {0}; TIM_OC_InitTypeDef sConfigOC = {0}; /* USER CODE BEGIN TIM4_Init 1 */ /* USER CODE END TIM4_Init 1 */ htim4.Instance = TIM4; htim4.Init.Prescaler = 71; htim4.Init.CounterMode = TIM_COUNTERMODE_UP; htim4.Init.Period = 65535; htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; if (HAL_TIM_Base_Init(&htim4) != HAL_OK) { Error_Handler(); } sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK) { Error_Handler(); } if (HAL_TIM_PWM_Init(&htim4) != HAL_OK) { Error_Handler(); } sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK) { Error_Handler(); } sConfigOC.OCMode = TIM_OCMODE_PWM1; sConfigOC.Pulse = 0; sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_4) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN TIM4_Init 2 */ /* USER CODE END TIM4_Init 2 */ HAL_TIM_MspPostInit(&htim4); } /** * Enable DMA controller clock */ static void MX_DMA_Init(void) { /* DMA controller clock enable */ __HAL_RCC_DMA1_CLK_ENABLE(); /* DMA interrupt init */ /* DMA1_Channel1_IRQn interrupt configuration */ HAL_NVIC_SetPriority(DMA1_Channel1_IRQn, 0, 0); HAL_NVIC_EnableIRQ(DMA1_Channel1_IRQn); } /** * @brief GPIO Initialization Function * @param None * @retval None */ static void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; /* USER CODE BEGIN MX_GPIO_Init_1 */ /* USER CODE END MX_GPIO_Init_1 */ /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOD_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOB, OLED_RESET_Pin|OLED_DC_Pin, GPIO_PIN_RESET); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOA, OLED_CS_Pin|AC_RELAY_Pin, GPIO_PIN_RESET); /*Configure GPIO pin : ENCODER_L_Pin */ GPIO_InitStruct.Pin = ENCODER_L_Pin; GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING_FALLING; GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(ENCODER_L_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pin : ENCODER_B_Pin */ GPIO_InitStruct.Pin = ENCODER_B_Pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(ENCODER_B_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pins : OLED_RESET_Pin OLED_DC_Pin */ GPIO_InitStruct.Pin = OLED_RESET_Pin|OLED_DC_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /*Configure GPIO pin : GUN_REED_Pin */ GPIO_InitStruct.Pin = GUN_REED_Pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GUN_REED_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pin : ENCODER_R_Pin */ GPIO_InitStruct.Pin = ENCODER_R_Pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(ENCODER_R_GPIO_Port, &GPIO_InitStruct); /*Configure GPIO pins : OLED_CS_Pin AC_RELAY_Pin */ GPIO_InitStruct.Pin = OLED_CS_Pin|AC_RELAY_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /*Configure GPIO pin : TILT_SW_Pin */ GPIO_InitStruct.Pin = TILT_SW_Pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(TILT_SW_GPIO_Port, &GPIO_InitStruct); /* EXTI interrupt init*/ HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0); HAL_NVIC_EnableIRQ(EXTI0_IRQn); /* USER CODE BEGIN MX_GPIO_Init_2 */ /* USER CODE END MX_GPIO_Init_2 */ } /* USER CODE BEGIN 4 */ /* USER CODE END 4 */ /** * @brief This function is executed in case of error occurrence. * @retval None */ void Error_Handler(void) { /* USER CODE BEGIN Error_Handler_Debug */ /* User can add his own implementation to report the HAL error return state */ /* USER CODE END Error_Handler_Debug */ } #ifdef USE_FULL_ASSERT /** * @brief Reports the name of the source file and the source line number * where the assert_param error has occurred. * @param file: pointer to the source file name * @param line: assert_param error line source number * @retval None */ void assert_failed(uint8_t *file, uint32_t line) { /* USER CODE BEGIN 6 */ /* User can add his own implementation to report the file name and line number, tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ /* USER CODE END 6 */ } #endif /* USE_FULL_ASSERT */ ================================================ FILE: Src/mode.cpp ================================================ /* * mode.cpp * * Created on: 19 sep. 2019 * Author: Alex */ #include #include #include "mode.h" #include "tools.h" //---------------------- The Menu mode ------------------------------------------- void MODE::setup(MODE* return_mode, MODE* short_mode, MODE* long_mode) { mode_return = return_mode; mode_spress = short_mode; mode_lpress = long_mode; } MODE* MODE::returnToMain(void) { if (mode_return && time_to_return && HAL_GetTick() >= time_to_return) return mode_return; return this; } void MODE::resetTimeout(void) { if (timeout_secs) { time_to_return = HAL_GetTick() + timeout_secs * 1000; } } void MODE::setTimeout(uint16_t t) { timeout_secs = t; } //---------------------- The iron standby mode ----------------------------------- void MSTBY_IRON::init(void) { DSPL* pD = &pCore->dspl; CFG* pCFG = &pCore->cfg; IRON* pIron = &pCore->iron; RENC* pEnc = &pCore->encoder; pIron->switchPower(false); pD->mainInit(); bool celsius = pCFG->isCelsius(); int16_t ambient = pIron->ambientTemp(); uint16_t temp_setH = pCFG->tempPresetHuman(); uint16_t temp_set = pCFG->humanToTemp(temp_setH, ambient); pIron->setTemp(temp_set); pD->msgOFF(); pD->tip(pCFG->tipName()); uint16_t t_min = pCFG->tempMinC(); // The minimum preset temperature, defined in main.h uint16_t t_max = pCFG->tempMaxC(); // The maximum preset temperature if (!celsius) { // The preset temperature saved in selected units t_min = celsiusToFahrenheit(t_min); t_max = celsiusToFahrenheit(t_max); } if (pCFG->isBigTempStep()) { // The preset temperature step is 5 degrees temp_setH -= temp_setH % 5; // The preset temperature should be rounded to 5 pEnc->reset(temp_setH, t_min, t_max, 5, 5, false); } else { pEnc->reset(temp_setH, t_min, t_max, 1, 1, false); } no_handle = false; // By default the soldering IRON handle is connected old_temp_set = temp_setH; // Save the rotary encoder position update_screen = 0; // Force to redraw the screen clear_used_ms = 0; used = !pIron->isCold(); // The IRON is in COOLING mode } MODE* MSTBY_IRON::loop(void) { DSPL* pD = &pCore->dspl; CFG* pCFG = &pCore->cfg; IRON* pIron = &pCore->iron; HOTGUN* pHG = &pCore->hotgun; RENC* pEnc = &pCore->encoder; uint16_t temp_set_h = pEnc->read(); uint8_t button = pEnc->buttonStatus(); if (gun_work && pHG->isReedSwitch(true)) { // The Reed switch is open, switch to Hot Air Gun mode gun_work->keepIronWorking(false); // Do not switch on the IRON return gun_work; } // if IRON is disconnected, activate Tip selection mode if (!pIron->noAmbientSensor() && !pIron->isConnected() && isACsine()) return mode_return; // In the Screen saver mode, any rotary encoder change should be ignored if ((button > 0 || temp_set_h != old_temp_set) && pCore->scrsaver.scrSaver()) { button = 0; pEnc->write(old_temp_set); pCore->scrsaver.reset(); update_screen = 0; } if (button == 1) { // The button pressed shortly if (mode_spress) return mode_spress; } else if (button == 2) { // The button was pressed for a long time pCore->buzz.shortBeep(); if (mode_lpress) return mode_lpress; } if (temp_set_h != old_temp_set) { // Preset temperature changed old_temp_set = temp_set_h; pCFG->savePresetTempHuman(temp_set_h); update_screen = 0; // Force to redraw the screen } if (HAL_GetTick() < update_screen) return this; update_screen = HAL_GetTick() + 1000; if (used && pIron->isCold()) { pD->msgCold(); pCore->buzz.lowBeep(); clear_used_ms = HAL_GetTick() + 60000; used = false; } if (clear_used_ms && HAL_GetTick() >= clear_used_ms) { clear_used_ms = 0; pD->msgOFF(); } if (pIron->noAmbientSensor()) { // IRON handle disconnected if (!no_handle) { no_handle = true; pCFG->activateGun(true); // Activate Hot Air Gun pD->tip(pCFG->tipName()); } int16_t temp = pHG->averageTemp(); uint16_t temp_set_h = pCFG->gunTempPreset(); uint16_t temp_h = pCFG->tempToHuman(temp, default_ambient); if (pCore->scrsaver.scrSaver()) { pD->scrSave(SCR_MODE_GUN_ON, temp_h, 0); } else { pD->mainShow(temp_set_h, temp_h, default_ambient, pHG->avgPowerPcnt(), pCFG->isCelsius(), pCFG->isTipCalibrated(), 0, 1, false); } } else { // IRON handle connected again if (no_handle) { no_handle = false; pCFG->activateGun(false); // Activate Soldering IRON pD->tip(pCFG->tipName()); } int16_t ambient = pIron->ambientTemp(); uint16_t temp = pIron->averageTemp(); uint16_t temp_h = pCFG->tempToHuman(temp, ambient); uint16_t temp_set_h = pCFG->tempPresetHuman(); uint16_t gun_temp = pCore->hotgun.alternateTemp(); if (gun_temp > 0) gun_temp = pCFG->tempToHuman(gun_temp, ambient, DEV_GUN); if (pCore->scrsaver.scrSaver()) { pD->scrSave(SCR_MODE_OFF, temp_h, gun_temp); } else { pD->mainShow(temp_set_h, temp_h, ambient, pIron->avgPowerPcnt(), pCFG->isCelsius(), pCFG->isTipCalibrated(), gun_temp, 0, false); } } return this; } //-------------------- The iron main working mode, keep the temperature ---------- void MWORK_IRON::init(void) { DSPL* pD = &pCore->dspl; CFG* pCFG = &pCore->cfg; IRON* pIron = &pCore->iron; RENC* pEnc = &pCore->encoder; bool celsius = pCFG->isCelsius(); int16_t ambient = pIron->ambientTemp(); uint16_t tempH = pCFG->tempPresetHuman(); uint16_t ps_temp = pCFG->humanToTemp(tempH, ambient); uint16_t t_min = pCFG->tempMinC(); uint16_t t_max = pCFG->tempMaxC(); if (!celsius) { // The preset temperature saved in selected units t_min = celsiusToFahrenheit(t_min); t_max = celsiusToFahrenheit(t_max); } if (pCFG->isBigTempStep()) { // The preset temperature step is 5 degrees tempH -= tempH % 5; // The preset temperature should be rounded to 5 pEnc->reset(tempH, t_min, t_max, 5, 5, false); } else { pEnc->reset(tempH, t_min, t_max, 1, 1, false); } pIron->setTemp(ps_temp); pD->mainInit(); pD->msgON(); pD->tip(pCFG->tipName()); idle_pwr.length(ec); idle_pwr.reset(); // Initialize the history for power in idle state auto_off_notified = false; ready = false; lowpower_time = 0; // Low power mode is not enabled yet time_to_return = 0; // Do not allow to return to standby mode old_temp_set = tempH; // Save current rotary encoder position update_screen = 0; pIron->switchPower(true); } void MWORK_IRON::adjustPresetTemp(void) { CFG* pCFG = &pCore->cfg; IRON* pIron = &pCore->iron; uint16_t presetTemp = pIron->presetTemp(); uint16_t tempH = pCFG->tempPresetHuman(); int16_t ambient = pIron->ambientTemp(); uint16_t temp = pCFG->humanToTemp(tempH, ambient);// Expected temperature of IRON in internal units if (temp != presetTemp) { // The ambient temperature have changed, we need to adjust preset temperature pIron->adjust(temp); } } bool MWORK_IRON::hwTimeout(bool tilt_active) { CFG* pCFG = &pCore->cfg; uint32_t now_ms = HAL_GetTick(); if (lowpower_time == 0 || tilt_active) { // If the IRON is used, reset standby time lowpower_time = now_ms + pCFG->getLowTO() * 5000; // Convert timeout (5 secs interval) to milliseconds } if (now_ms >= lowpower_time) { return true; } return false; } // Use applied power analysis to automatically power-off the IRON void MWORK_IRON::swTimeout(uint16_t temp, uint16_t temp_set, uint16_t temp_setH, uint32_t td, uint32_t pd, uint16_t ap) { DSPL* pD = &pCore->dspl; CFG* pCFG = &pCore->cfg; int ip = idle_pwr.read(); if ((temp <= temp_set) && (temp_set - temp <= 4) && (td <= 200) && (pd <= 25)) { // Evaluate the average power in the idle state ip = idle_pwr.average(ap); } // Check the IRON current status: idle or used if (abs(ap - ip) >= 150) { // The applied power is different than idle power. The IRON being used! time_to_return = HAL_GetTick() + pCFG->getOffTimeout() * 60000; auto_off_notified = false; // Initialize the idle state power pD->msgON(); } else { // The IRON is in its idle state if (time_to_return == 0) time_to_return = HAL_GetTick() + pCFG->getOffTimeout() * 60000; uint32_t to = (time_to_return - HAL_GetTick()) / 1000; if (to < 100) { pD->timeToOff(to); // Show the time remaining to switch off the IRON if (!auto_off_notified) { pCore->buzz.lowBeep(); auto_off_notified = true; } } else { pD->msgIdle(); } } } MODE* MWORK_IRON::loop(void) { DSPL* pD = &pCore->dspl; CFG* pCFG = &pCore->cfg; IRON* pIron = &pCore->iron; RENC* pEnc = &pCore->encoder; int temp_set_h = pEnc->read(); // The preset temperature in human readable units uint8_t button = pEnc->buttonStatus(); // Switch to Hot Air Gun mode when the Reed switch is open. if (gun_work && pCore->hotgun.isReedSwitch(true)) { gun_work->keepIronWorking(pCFG->isKeepIron()); // Keep IRON working if enabled return gun_work; } // In the Screen saver mode, any rotary encoder change should be ignored if ((button > 0 || temp_set_h != old_temp_set) && pCore->scrsaver.scrSaver()) { button = 0; pEnc->write(old_temp_set); pCore->scrsaver.reset(); update_screen = 0; } if (button == 1) { // The button pressed pCFG->saveConfig(); if (mode_spress) return mode_spress; } else if (button == 2) { // The button was pressed for a long time, turn the booster mode if (pCFG->boostTemp()) { if (mode_lpress) return mode_lpress; } } int16_t ambient = pIron->ambientTemp(); if (temp_set_h != old_temp_set) { // Encoder rotated, new preset temperature entered old_temp_set = temp_set_h; ready = false; time_to_return = 0; // Disable auto-off timeout auto_off_notified = false; update_screen = 0; // Update display uint16_t temp = pCFG->humanToTemp(temp_set_h, ambient); // Translate human readable temperature into internal value pIron->setTemp(temp); pCFG->savePresetTempHuman(temp_set_h); // Update the information in memory only, do not change the EEPROM idle_pwr.reset(); // Initialize the history for power in idle state (software turn-off) pCore->scrsaver.reset(); } if (HAL_GetTick() < update_screen) return this; update_screen = HAL_GetTick() + period; int temp = pIron->averageTemp(); int temp_set = pIron->presetTemp(); // Now the preset temperature in internal units!!! uint8_t p = pIron->avgPowerPcnt(); uint16_t temp_h = pCFG->tempToHuman(temp, ambient); uint32_t td = pIron->tmpDispersion(); // The temperature dispersion uint32_t pd = pIron->pwrDispersion(); // The power dispersion int ap = pIron->avgPower(); // Actually applied power to the IRON uint16_t gun_temp = pCore->hotgun.alternateTemp(); if (gun_temp > 0) gun_temp = pCFG->tempToHuman(gun_temp, ambient, DEV_GUN); bool low_power_enabled = pCFG->getLowTemp() > 0; bool tilt_active = false; if (low_power_enabled) // If low power mode enabled, check tilt switch status tilt_active = pIron->isReedSwitch(pCFG->isReedType()); // True if iron was used // Check the IRON reaches the preset temperature if ((abs(temp_set - temp) < 6) && (td <= 500) && (ap > 0)) { if (!ready) { ready = true; ready_clear = HAL_GetTick() + 2000; pD->msgReady(); pCore->buzz.shortBeep(); if (!pCore->scrsaver.scrSaver()) pD->mainShow(temp_set_h, temp_h, ambient, p, pCFG->isCelsius(), pCFG->isTipCalibrated(), gun_temp, 0, tilt_active); return this; } } // If the low power mode is enabled, check the IRON status if (ready && ready_clear == 0) { // The IRON has reaches the preset temperature and 'Ready' message is already cleared if (low_power_enabled) { // Use hardware tilt switch if low power mode enabled if (hwTimeout(tilt_active)) { if (low_power_mode) return low_power_mode; // Switch to low power mode } } else if (pCFG->getOffTimeout() > 0) { // Do not use tilt switch, use software auto-off feature swTimeout(temp, temp_set, temp_set_h, td, pd, ap); // Update time_to_return value based IRON status } } adjustPresetTemp(); if (ready && ready_clear > 0 && HAL_GetTick() >= ready_clear) { ready_clear = 0; pD->msgON(); } if (pCore->scrsaver.scrSaver()) { pD->scrSave(SCR_MODE_IRON_ON, temp_h, gun_temp); } else { pD->mainShow(temp_set_h, temp_h, ambient, p, pCFG->isCelsius(), pCFG->isTipCalibrated(), gun_temp, 0, tilt_active); } return this; } //-------------------- The iron low power mode, decrease iron temperature -------- void MLOW_POWER::init(void) { DSPL* pD = &pCore->dspl; CFG* pCFG = &pCore->cfg; IRON* pIron = &pCore->iron; RENC* pEnc = &pCore->encoder; old_enc = pEnc->read(); // Save current encoder position timeout_secs = pCFG->getOffTimeout() * 60; // Setup the timeout to return to standby mode resetTimeout(); // Update time to return uint16_t ambient = pIron->ambientTemp(); uint16_t temp = pCFG->lowTempInternal(ambient); pIron->switchPower(true); // When mode changed, the soldering iron powered off pIron->lowPowerMode(temp); // Activate low power mode auto_off_notified = false; pD->msgStandby(); update_screen = 0; pCore->buzz.lowBeep(); } MODE* MLOW_POWER::loop(void) { DSPL* pD = &pCore->dspl; CFG* pCFG = &pCore->cfg; IRON* pIron = &pCore->iron; RENC* pEnc = &pCore->encoder; uint16_t enc = pEnc->read(); // current encoder value uint8_t button = pEnc->buttonStatus(); // Check all conditions to return to the main working mode if (mode_spress) { // Be paranoid // Check if iron was used or Hot Air Gun activated if (pIron->isReedSwitch(pCFG->isReedType()) || pCore->hotgun.isReedSwitch(true)) { return mode_spress; // Return to main working mode } // Check if rotary encoder pressed or rotated if (button >= 1 || enc != old_enc) { pCore->scrsaver.reset(); // Disable screen saver mode return mode_spress; // Return to main working mode } } if (HAL_GetTick() < update_screen) return this; update_screen = HAL_GetTick() + period; int16_t ambient = pIron->ambientTemp(); uint16_t temp = pIron->averageTemp(); uint8_t p = pIron->avgPowerPcnt(); uint16_t tempH = pCFG->tempToHuman(temp, ambient); uint16_t low_tempH = pCFG->getLowTemp(); uint16_t gun_temp = pCore->hotgun.alternateTemp(); if (gun_temp > 0) gun_temp = pCFG->tempToHuman(gun_temp, ambient, DEV_GUN); // If the automatic power-off feature is enabled, check the IRON status if (time_to_return) { // Show the time remaining to switch off the IRON uint32_t to = (time_to_return - HAL_GetTick()) / 1000; if (to < 100) { pD->timeToOff(to); if (!auto_off_notified) { pCore->buzz.lowBeep(); auto_off_notified = true; } } } if (pCore->scrsaver.scrSaver()) { pD->scrSave(SCR_MODE_IRON_STBY, tempH, gun_temp); } else { pD->mainShow(low_tempH, tempH, ambient, p, pCFG->isCelsius(), pCFG->isTipCalibrated(), gun_temp, 0, false); } return this; } //---------------------- The boost mode, shortly increase the temperature -------- void MBOOST::init(void) { CFG* pCFG = &pCore->cfg; IRON* pIron = &pCore->iron; RENC* pEnc = &pCore->encoder; uint16_t temp_set = pIron->presetTemp(); bool celsius = pCFG->isCelsius(); uint16_t ambient = pIron->ambientTemp(); uint16_t tempH = pCFG->tempToHuman(temp_set, ambient); uint16_t delta = pCFG->boostTemp(); // The temperature increment in Celsius if (!celsius) delta = (delta * 9 + 3) / 5; tempH += delta; temp_set = pCFG->humanToTemp(tempH, ambient); pIron->setTemp(temp_set); uint32_t duration = pCFG->boostDuration(); // Boost duration time (sec) pIron->fixPower(0xffff); // Apply maximum value of fixed power, first phase time_to_return = HAL_GetTick() + duration * 1000; pEnc->reset(0, 0, 1, 1, 1, false); pCore->buzz.shortBeep(); old_pos = 0; update_screen = 0; phase = 0; // Start first phase: heating supplying fixed amount of power } MODE* MBOOST::loop(void) { DSPL* pD = &pCore->dspl; CFG* pCFG = &pCore->cfg; IRON* pIron = &pCore->iron; RENC* pEnc = &pCore->encoder; int pos = pEnc->read(); uint8_t button = pEnc->buttonStatus(); if (button || (old_pos != pos)) { // The button pressed or encoder rotated return mode_return; // Return to the main mode if button pressed } if (phase == 0) { // First phase, heating uint16_t temp = pIron->averageTemp(); uint16_t temp_set = pIron->presetTemp(); if (temp_set <= temp) { // Start second phase, prevent overheating pIron->switchPower(true); // Try to keep boost temperature phase = 1; } } else if (phase == 1) { // Second phase, cooling on automatic temperature mode uint16_t temp = pIron->averageTemp(); uint16_t temp_set = pIron->presetTemp(); if (temp_set >= temp) { // Start last phase, keep boost temperature pIron->switchPower(true); // Reset PID phase = 2; } } if (HAL_GetTick() < update_screen) return this; update_screen = HAL_GetTick() + 500; uint16_t ambient= pIron->ambientTemp(); int temp = pIron->averageTemp(); uint8_t p = pIron->avgPowerPcnt(); uint16_t tempH = pCFG->tempToHuman(temp, ambient); uint16_t tset = pIron->presetTemp(); uint16_t tsetH = pCFG->tempToHuman(tset, ambient); pD->msgBoost(); pD->mainShow(tsetH, tempH, ambient, p, pCFG->isCelsius(), pCFG->isTipCalibrated(), 0, 0, false); return this; } //---------------------- The tip selection mode ---------------------------------- void MSLCT::init(void) {; CFG* pCFG = &pCore->cfg; RENC* pEnc = &pCore->encoder; uint8_t tip_index = pCFG->currentTipIndex(); // Build list of the active tips; The current tip is the second element in the list uint8_t list_len = pCFG->tipList(tip_index, tip_list, 3, true); // The current tip could be inactive, so we should find nearest tip (by ID) in the list uint8_t closest = 0; // The index of the list of closest tip ID uint8_t diff = 0xff; for (uint8_t i = 0; i < list_len; ++i) { uint8_t delta; if ((delta = abs(tip_index - tip_list[i].tip_index)) < diff) { diff = delta; closest = i; } } pEnc->reset(closest, 0, list_len-1, 1, 1, false); tip_begin_select = HAL_GetTick(); // We stared the tip selection procedure old_index = 3; update_screen = 0; // Force to redraw the screen } MODE* MSLCT::loop(void) { DSPL* pD = &pCore->dspl; CFG* pCFG = &pCore->cfg; RENC* pEnc = &pCore->encoder; IRON* pIron = &pCore->iron; uint8_t index = pEnc->read(); if (index != old_index) { tip_begin_select = 0; update_screen = 0; } uint8_t button = pEnc->buttonStatus(); if (pIron->noAmbientSensor()) { return mode_return; } if (pIron->isConnected() || !isACsine()) { // See core.cpp for isACsine() // Prevent bouncing event, when the IRON connection restored back too quickly. if (tip_begin_select && (HAL_GetTick() - tip_begin_select) < 1000) { return 0; } uint8_t tip_index = tip_list[index].tip_index; pCFG->changeTip(tip_index); pIron->reset(); // Clear temperature history and switch iron mode to "power off" return mode_return; } if (button == 2) { // The button was pressed for a long time return mode_lpress; } if (HAL_GetTick() < update_screen) return this; update_screen = HAL_GetTick() + 20000; for (int8_t i = index; i >= 0; --i) { if (tip_list[(uint8_t)i].name[0]) { index = i; break; } } old_index = index; uint8_t tip_index = tip_list[index].tip_index; for (uint8_t i = 0; i < 3; ++i) tip_list[i].name[0] = '\0'; uint8_t list_len = pCFG->tipList(tip_index, tip_list, 3, true); if (list_len == 0) // There is no active tip in the list return mode_spress; // Activate tips mode for (uint8_t i = 0; i < list_len; ++i) { if (tip_index == tip_list[i].tip_index) { pEnc->write(i); } } pD->tipListShow("Select tip", tip_list, 3, tip_index, true); return this; } //---------------------- The Activate tip mode: select tips to use --------------- void MTACT::init(void) { CFG* pCFG = &pCore->cfg; RENC* pEnc = &pCore->encoder; uint8_t tip_index = pCFG->currentTipIndex(); pEnc->reset(tip_index, 1, pCFG->TIPS::loaded()-1, 1, 1, false); // Start from tip #1, because 0-th 'tip' is a Hot Air Gun old_tip_index = 255; update_screen = 0; } MODE* MTACT::loop(void) { DSPL* pD = &pCore->dspl; CFG* pCFG = &pCore->cfg; RENC* pEnc = &pCore->encoder; uint8_t tip_index = pEnc->read(); uint8_t button = pEnc->buttonStatus(); if (button == 1) { // The button pressed if (!pCFG->toggleTipActivation(tip_index)) { pD->errorMessage("EEPROM\nwrite\nerror"); return 0; } update_screen = 0; // Force redraw the screen } else if (button == 2) { return mode_lpress; } if (tip_index != old_tip_index) { old_tip_index = tip_index; update_screen = 0; } if (HAL_GetTick() >= update_screen) { TIP_ITEM tip_list[3]; uint8_t loaded = pCFG->tipList(tip_index, tip_list, 3, false); pD->tipListShow("Activate tip", tip_list, loaded, tip_index, false); update_screen = HAL_GetTick() + 60000; } return this; } //---------------------- The Menu mode ------------------------------------------- MMENU::MMENU(HW* pCore, MODE* m_boost, MODE* m_calib, MODE* m_act, MODE* m_tune, MODE* m_pid, MODE* m_gun_menu, MODE *m_about) : MODE(pCore) { mode_menu_boost = m_boost; mode_calibrate_menu = m_calib; mode_activate_tips = m_act; mode_tune = m_tune; mode_tune_pid = m_pid; mode_gun_menu = m_gun_menu; mode_about = m_about; } void MMENU::init(void) { CFG* pCFG = &pCore->cfg; RENC* pEnc = &pCore->encoder; off_timeout = pCFG->getOffTimeout(); low_temp = pCFG->getLowTemp(); low_to = pCFG->getLowTO(); buzzer = pCFG->isBuzzerEnabled(); celsius = pCFG->isCelsius(); keep_iron = pCFG->isKeepIron(); reed = pCFG->isReedType(); temp_step = pCFG->isBigTempStep(); auto_start = pCFG->isAutoStart(); scr_saver = pCFG->getScrTo(); set_param = 0; if (!pCFG->isTipCalibrated()) mode_menu_item = tip_calib_menu; // Index of 'calibrate tip' menu item pEnc->reset(mode_menu_item, 0, M_MENU_LENGTH-1, 1, 1, true); update_screen = 0; } MODE* MMENU::loop(void) { DSPL* pD = &pCore->dspl; CFG* pCFG = &pCore->cfg; RENC* pEnc = &pCore->encoder; uint8_t item = pEnc->read(); uint8_t button = pEnc->buttonStatus(); // Change the configuration parameters value in place if (mode_menu_item != item) { // The encoder has been rotated mode_menu_item = item; switch (set_param) { // Setup new value of the parameter in place case 7: // Setup auto off timeout if (item) { off_timeout = item + 2; } else { off_timeout = 0; } break; case 8: // Setup low power (standby) temperature if (item >= min_standby_C) { low_temp = item; } else { low_temp = 0; } break; case 9: // Setup low power (standby) timeout low_to = item; break; case 10: // Setup Screen saver timeout if (item) { scr_saver = item + 2; } else { scr_saver = 0; } break; default: break; } update_screen = 0; // Force to redraw the screen } // Going through the main menu if (!set_param) { // Menu item (parameter) to modify was not selected yet if (button > 0) { // The button was pressed, current menu item can be selected for modification switch (item) { // item is a menu item case 0: // Boost parameters pCFG->setup(off_timeout, buzzer, celsius, keep_iron, reed, temp_step, auto_start, low_temp, low_to, scr_saver); return mode_menu_boost; case 1: // units C/F celsius = !celsius; break; case 2: // buzzer ON/OFF buzzer = !buzzer; break; case 3: // Keep iron ON/OFF keep_iron =!keep_iron; break; case 4: // REED/TILT reed = !reed; break; case 5: // Preset temperature step (1/5) temp_step = !temp_step; break; case 6: // Automatic startup ON/OFF auto_start = !auto_start; break; case 7: // auto off timeout { set_param = item; uint8_t to = off_timeout; if (to > 2) to -=2; pEnc->reset(to, 0, 28, 1, 1, false); break; } case 8: // Standby temperature { set_param = item; uint16_t max_standby_C = pCFG->referenceTemp(0); // When encoder value is less than min_standby_C, disable low power mode pEnc->reset(low_temp, min_standby_C-1, max_standby_C, 1, 5, false); break; } case 9: // Standby timeout set_param = item; pEnc->reset(low_to, 1, 255, 1, 1, false); break; case 10: // Screen saver timeout { set_param = item; uint8_t to = scr_saver; if (to > 2) to -=2; pEnc->reset(to, 0, 58, 1, 1, false); break; } case 11: // save pCFG->setup(off_timeout, buzzer, celsius, keep_iron, reed, temp_step, auto_start, low_temp, low_to, scr_saver); pCFG->saveConfig(); pCore->buzz.activate(buzzer); pCore->scrsaver.init(pCFG->getScrTo()); // Reload screen saver timeout mode_menu_item = 0; return mode_return; case 13: // calibrate IRON tip mode_menu_item = 8; return mode_calibrate_menu; case 14: // activate tips mode_menu_item = 0; // We will not return from tip activation mode to this menu return mode_activate_tips; case 15: // tune the IRON potentiometer mode_menu_item = 0; // We will not return from tune mode to this menu mode_tune->ironMode(true); return mode_tune; case 16: // Hot Air Gun menu mode_menu_item = 11; // We will return from next level menu here return mode_gun_menu; case 17: // Initialize the configuration pCFG->initConfigArea(); mode_menu_item = 0; // We will not return from tune mode to this menu return mode_return; case 18: // Tune PID return mode_tune_pid; case 19: // About dialog mode_menu_item = 0; return mode_about; default: // cancel pCFG->restoreConfig(); mode_menu_item = 0; return mode_return; } } } else { // Finish modifying parameter, return to menu mode if (button == 1) { item = set_param; mode_menu_item = set_param; set_param = 0; pEnc->reset(mode_menu_item, 0, M_MENU_LENGTH-1, 1, 1, true); } } // Prepare to modify menu item in-place using built-in editor bool modify = false; if (set_param >= in_place_start && set_param <= in_place_end) { item = set_param; modify = true; } if (button > 0) { // Either short or long press update_screen = 0; // Force to redraw the screen } if (HAL_GetTick() < update_screen) return this; update_screen = HAL_GetTick() + 10000; // Build current menu item value char item_value[10]; item_value[1] = '\0'; switch (item) { case 1: // units: C/F item_value[0] = 'F'; if (celsius) item_value[0] = 'C'; break; case 2: // Buzzer setup if (buzzer) sprintf(item_value, "ON"); else sprintf(item_value, "OFF"); break; case 3: // Keep iron working while in Hot Air Gun Mode if (keep_iron) sprintf(item_value, "KEEP"); else sprintf(item_value, "OFF"); break; case 4: // TILT/REED if (reed) sprintf(item_value, "REED"); else sprintf(item_value, "TILT"); break; case 5: // Preset temperature step (1/5) sprintf(item_value, "%1d deg.", temp_step?5:1); break; case 6: // Auto start ON/OFF sprintf(item_value, auto_start?"ON":"OFF"); break; case 7: // auto off timeout if (off_timeout) { sprintf(item_value, "%2d min", off_timeout); } else { sprintf(item_value, "OFF"); } break; case 8: // Standby temperature if (low_temp) { if (celsius) { sprintf(item_value, "%3d C", low_temp); } else { sprintf(item_value, "%3d F", celsiusToFahrenheit(low_temp)); } } else { sprintf(item_value, "OFF"); } break; case 9: // Standby timeout (5 secs intervals) if (low_temp) { uint16_t to = (uint16_t)low_to * 5; // Timeout in seconds if (to < 60) { sprintf(item_value, "%2d sec", to); } else if (to %60) { sprintf(item_value, "%2dm %2ds", to/60, to % 60); } else { sprintf(item_value, "%2d min", to/60); } } else { sprintf(item_value, "OFF"); } break; case 10: if (scr_saver) { sprintf(item_value, "%2d min", scr_saver); } else { sprintf(item_value, "OFF"); } break; default: item_value[0] = '\0'; break; } pD->menuItemShow("setup", menu_name[item], item_value, modify); return this; } //---------------------- Calibrate tip menu -------------------------------------- MCALMENU::MCALMENU(HW* pCore, MODE* cal_auto, MODE* cal_manual) : MODE(pCore) { mode_calibrate_tip = cal_auto; mode_calibrate_tip_manual = cal_manual; } void MCALMENU::init(void) { RENC* pEnc = &pCore->encoder; pEnc->reset(0, 0, 3, 1, 1, true); old_item = 4; update_screen = 0; } MODE* MCALMENU::loop(void) { DSPL* pD = &pCore->dspl; CFG* pCFG = &pCore->cfg; RENC* pEnc = &pCore->encoder; uint8_t item = pEnc->read(); uint8_t button = pEnc->buttonStatus(); if (button == 1) { update_screen = 0; // Force to redraw the screen } else if (button == 2) { // The button was pressed for a long time return mode_lpress; } if (old_item != item) { old_item = item; update_screen = 0; // Force to redraw the screen } if (HAL_GetTick() < update_screen) return this; update_screen = HAL_GetTick() + 10000; if (button == 1) { // The button was pressed switch (item) { case 0: // Calibrate tip automatically mode_calibrate_tip->ironMode(true); return mode_calibrate_tip; case 1: // Calibrate tip manually mode_calibrate_tip_manual->ironMode(true); return mode_calibrate_tip_manual; case 2: // Initialize tip calibration data pCFG->resetTipCalibration(); return mode_return; default: // exit return mode_return; } } pD->menuItemShow("Calibrate", menu_list[item], 0, false); return this; } //---------------------- The automatic calibration tip mode ---------------------- /* * There are 4 temperature calibration points of the tip in the controller, * but during calibration procedure we will use more points to cover whole set * of the internal temperature values. */ void MCALIB::init(void) { CFG* pCFG = &pCore->cfg; IRON* pIron = &pCore->iron; RENC* pEnc = &pCore->encoder; // Prepare to enter real temperature uint16_t min_t = 50; uint16_t max_t = 600; if (!pCFG->isCelsius()) { min_t = 122; max_t = 1111; } PIDparam pp = pCFG->pidParamsSmooth(); // Load PID parameters to stabilize the temperature of unknown tip pIron->PID::load(pp); pEnc->reset(0, min_t, max_t, 1, 1, false); for (uint8_t i = 0; i < MCALIB_POINTS; ++i) { calib_temp[0][i] = 0; // Real temperature. 0 means not entered yet calib_temp[1][i] = map(i, 0, MCALIB_POINTS-1, start_int_temp, int_temp_max / 2); // Internal temperature } ref_temp_index = 0; ready = false; tuning = false; old_encoder = 3; update_screen = 0; tip_temp_max = int_temp_max / 2; // The maximum possible temperature defined in iron.h } /* * Calculate tip calibration parameter using linear approximation by Ordinary Least Squares method * Y = a * X + b, where * Y - internal temperature, X - real temperature. a and b are double coefficients * a = (N * sum(Xi*Yi) - sum(Xi) * sum(Yi)) / ( N * sum(Xi^2) - (sum(Xi))^2) * b = 1/N * (sum(Yi) - a * sum(Xi)) */ bool MCALIB::calibrationOLS(uint16_t* tip, uint16_t min_temp, uint16_t max_temp) { long sum_XY = 0; // sum(Xi * Yi) long sum_X = 0; // sum(Xi) long sum_Y = 0; // sum(Yi) long sum_X2 = 0; // sum(Xi^2) long N = 0; for (uint8_t i = 0; i < MCALIB_POINTS; ++i) { uint16_t X = calib_temp[0][i]; uint16_t Y = calib_temp[1][i]; if (X >= min_temp && X <= max_temp) { sum_XY += X * Y; sum_X += X; sum_Y += Y; sum_X2 += X * X; ++N; } } if (N <= 2) // Not enough real temperatures have been entered return false; double a = (double)N * (double)sum_XY - (double)sum_X * (double)sum_Y; a /= (double)N * (double)sum_X2 - (double)sum_X * (double)sum_X; double b = (double)sum_Y - a * (double)sum_X; b /= (double)N; for (uint8_t i = 0; i < 4; ++i) { double temp = a * (double)pCore->cfg.referenceTemp(i) + b; tip[i] = round(temp); } if (tip[3] > int_temp_max) tip[3] = int_temp_max; // Maximal possible temperature (main.h) return true; } // Find the index of the reference point with the closest temperature uint8_t MCALIB::closestIndex(uint16_t temp) { uint16_t diff = 1000; uint8_t index = MCALIB_POINTS; for (uint8_t i = 0; i < MCALIB_POINTS; ++i) { uint16_t X = calib_temp[0][i]; if (X > 0 && abs(X-temp) < diff) { diff = abs(X-temp); index = i; } } return index; } void MCALIB::updateReference(uint8_t indx) { // Update reference points CFG* pCFG = &pCore->cfg; uint16_t expected_temp = map(indx, 0, MCALIB_POINTS, pCFG->tempMinC(), pCFG->tempMaxC()); uint16_t r_temp = calib_temp[0][indx]; if (indx < 5 && r_temp > (expected_temp + expected_temp/4)) { // The real temperature is too high tip_temp_max -= tip_temp_max >> 2; // tip_temp_max *= 0.75; if (tip_temp_max < int_temp_max / 4) tip_temp_max = int_temp_max / 4; // Limit minimum possible value of the highest temperature } else if (r_temp > (expected_temp + expected_temp/8)) { // The real temperature is biger than expected tip_temp_max += tip_temp_max >> 3; // tip_temp_max *= 1.125; if (tip_temp_max > int_temp_max) tip_temp_max = int_temp_max; } else if (indx < 5 && r_temp < (expected_temp - expected_temp/4)) { // The real temperature is too low tip_temp_max += tip_temp_max >> 2; // tip_temp_max *= 1.25; if (tip_temp_max > int_temp_max) tip_temp_max = int_temp_max; } else if (r_temp < (expected_temp - expected_temp/8)) { // The real temperature is lower than expected tip_temp_max += tip_temp_max >> 3; // tip_temp_max *= 1.125; if (tip_temp_max > int_temp_max) tip_temp_max = int_temp_max; } else { return; } // rebuild the array of the reference temperatures for (uint8_t i = indx+1; i < MCALIB_POINTS; ++i) { calib_temp[1][i] = map(i, 0, MCALIB_POINTS-1, start_int_temp, tip_temp_max); } } void MCALIB::buildFinishCalibration(void) { CFG* pCFG = &pCore->cfg; IRON* pIron = &pCore->iron; uint16_t tip[4]; if (calibrationOLS(tip, 150, pCFG->referenceTemp(2))) { uint8_t near_index = closestIndex(pCFG->referenceTemp(3)); tip[3] = map(pCFG->referenceTemp(3), pCFG->referenceTemp(2), calib_temp[0][near_index], tip[2], calib_temp[1][near_index]); if (tip[3] > int_temp_max) tip[3] = int_temp_max; // Maximal possible temperature (main.h) uint8_t tip_index = pCFG->currentTipIndex(); int16_t ambient = pIron->ambientTemp(); pCFG->applyTipCalibtarion(tip, ambient); pCFG->saveTipCalibtarion(tip_index, tip, TIP_ACTIVE | TIP_CALIBRATED, ambient); } } MODE* MCALIB::loop(void) { DSPL* pD = &pCore->dspl; CFG* pCFG = &pCore->cfg; IRON* pIron = &pCore->iron; RENC* pEnc = &pCore->encoder; uint16_t encoder = pEnc->read(); uint8_t button = pEnc->buttonStatus(); if (encoder != old_encoder) { old_encoder = encoder; update_screen = 0; } if (button == 1) { // The button pressed if (tuning) { // New reference temperature was entered pIron->switchPower(false); if (ready) { // The temperature was stabilized and real data can be entered ready = false; uint16_t temp = pIron->averageTemp(); // The temperature of the IRON in internal units uint16_t r_temp = encoder; // The real temperature entered by the user if (!pCFG->isCelsius()) // Always save the human readable temperature in Celsius r_temp = fahrenheitToCelsius(r_temp); uint8_t ref = ref_temp_index; calib_temp[0][ref] = r_temp; calib_temp[1][ref] = temp; if (r_temp < pCFG->tempMaxC() - 20) { updateReference(ref_temp_index); // Update reference points ++ref_temp_index; // Try to update the current tip calibration uint16_t tip[4]; if (calibrationOLS(tip, 150, 600)) pCFG->applyTipCalibtarion(tip, pIron->ambientTemp()); } else { // Finish calibration ref_temp_index = MCALIB_POINTS; } } else { // Stop heating, return from tuning mode tuning = false; update_screen = 0; return this; } tuning = false; } if (!tuning) { if (ref_temp_index < MCALIB_POINTS) { tuning = true; uint16_t temp = calib_temp[1][ref_temp_index]; pIron->setTemp(temp); pIron->switchPower(true); } else { // All reference points are entered buildFinishCalibration(); PIDparam pp = pCFG->pidParams(use_iron); // Restore default PID parameters pIron->PID::load(pp); return mode_lpress; } } update_screen = 0; } else if (!tuning && button == 2) { // The button was pressed for a long time, save tip calibration buildFinishCalibration(); PIDparam pp = pCFG->pidParams(use_iron); // Restore default PID parameters pIron->PID::load(pp); return mode_lpress; } if (HAL_GetTick() < update_screen) return this; update_screen = HAL_GetTick() + 500; int16_t ambient = pIron->ambientTemp(); uint16_t real_temp = encoder; uint16_t temp_set = pIron->presetTemp(); uint16_t temp = pIron->averageTemp(); uint8_t power = pIron->avgPowerPcnt(); uint16_t tempH = pCFG->tempToHuman(temp, ambient); if (temp >= int_temp_max) { // Prevent soldering IRON overheat, save current calibration buildFinishCalibration(); PIDparam pp = pCFG->pidParams(use_iron); // Restore default PID parameters pIron->PID::load(pp); return mode_lpress; } if (tuning && (abs(temp_set - temp) <= 16) && (pIron->pwrDispersion() <= 200) && power > 1) { if (!ready) { pCore->buzz.shortBeep(); pEnc->write(tempH); ready = true; } } uint8_t int_temp_pcnt = 0; if (temp >= start_int_temp) int_temp_pcnt = map(temp, start_int_temp, int_temp_max, 0, 100); // int_temp_max defined in vars.cpp pD->calibShow(pCFG->tipName(), ref_temp_index+1, tempH, real_temp, pCFG->isCelsius(), power, tuning, ready, int_temp_pcnt); return this; } //---------------------- The manual calibration tip mode ------------------------- /* * Here the operator should 'guess' the internal temperature readings for desired temperature. * Rotate the encoder to change temperature preset in the internal units * and controller would keep that temperature. * This method is more accurate one, but it requires more time. */ void MCALIB_MANUAL::init(void) { CFG* pCFG = &pCore->cfg; PIDparam pp = pCFG->pidParamsSmooth(use_iron); if (use_iron) { pCore->iron.PID::load(pp); } else { pCore->hotgun.PID::load(pp); pCore->hotgun.setFan(fan_speed); } pCFG->activateGun(!use_iron); pCore->encoder.reset(0, 0, 3, 1, 1, true); // Select reference temperature point using Encoder pCFG->getTipCalibtarion(calib_temp); // Load current calibration data ref_temp_index = 0; ready = false; tuning = false; temp_setready_ms = 0; old_encoder = 4; update_screen = 0; } /* * Make sure the tip[0] < tip[1] < tip[2] < tip[3]; * And the difference between next points is greater than req_diff * Change neighborhood temperature data to keep this difference */ void MCALIB_MANUAL::buildCalibration(int8_t ablient, uint16_t tip[], uint8_t ref_point) { if (tip[3] > int_temp_max) tip[3] = int_temp_max; // int_temp_max is a maximum possible temperature (vars.cpp) const int req_diff = 200; if (ref_point <= 3) { // tip[0-3] - internal temperature readings for the tip at reference points (200-400) for (uint8_t i = ref_point; i <= 2; ++i) { // ref_point is 0 for 200 degrees and 3 for 400 degrees int diff = (int)tip[i+1] - (int)tip[i]; if (diff < req_diff) { tip[i+1] = tip[i] + req_diff; // Increase right neighborhood temperature to keep the difference } } if (tip[3] > int_temp_max) // The high temperature limit is exceeded, temp_max. Lower all calibration tip[3] = int_temp_max; for (int8_t i = 3; i > 0; --i) { int diff = (int)tip[i] - (int)tip[i-1]; if (diff < req_diff) { int t = (int)tip[i] - req_diff; // Decrease left neighborhood temperature to keep the difference if (t < 0) t = 0; tip[i-1] = t; } } } } void MCALIB_MANUAL::restorePIDconfig(CFG *pCFG, IRON* pIron, HOTGUN* pHG) { PIDparam pp = pCFG->pidParams(use_iron); if (use_iron) { pIron->PID::load(pp); } else { pHG->PID::load(pp); pCFG->activateGun(false); } } MODE* MCALIB_MANUAL::loop(void) { CFG* pCFG = &pCore->cfg; IRON* pIron = &pCore->iron; HOTGUN* pHG = &pCore->hotgun; RENC* pEnc = &pCore->encoder; uint16_t encoder = pEnc->read(); uint8_t button = pEnc->buttonStatus(); if (encoder != old_encoder) { old_encoder = encoder; if (tuning) { // Preset temperature (internal units) if (use_iron) { pIron->setTemp(encoder); } else { pHG->setTemp(encoder); } ready = false; temp_setready_ms = HAL_GetTick() + 5000; // Prevent beep just right the new temperature setup } update_screen = 0; } int16_t ambient = pIron->ambientTemp(); if (use_iron) { if (!pIron->isConnected()) { restorePIDconfig(pCFG, pIron, pHG); return 0; } } else if (temp_setready_ms && (HAL_GetTick() > temp_setready_ms) && !pHG->isConnected()) { restorePIDconfig(pCFG, pIron, pHG); return 0; } if (button == 1) { // The button pressed if (tuning) { // New reference temperature was confirmed pIron->switchPower(false); pHG->switchPower(false); if (ready) { // The temperature has been stabilized ready = false; uint16_t temp = 0; if (use_iron) temp = pIron->averageTemp(); // The temperature of the IRON in internal units else temp = pHG->averageTemp(); uint8_t ref = ref_temp_index; calib_temp[ref] = temp; uint16_t tip[4]; for (uint8_t i = 0; i < 4; ++i) { tip[i] = calib_temp[i]; } buildCalibration(ambient, tip, ref); // ref is 0 for 200 degrees and 3 for 400 degrees pCFG->applyTipCalibtarion(tip, ambient); } tuning = false; encoder = ref_temp_index; pEnc->reset(encoder, 0, 3, 1, 1, true); // Turn back to the reference temperature point selection mode } else { // Reference temperature index was selected from the list ref_temp_index = encoder; tuning = true; uint16_t tempH = pCFG->referenceTemp(encoder); // Read the preset temperature from encoder uint16_t temp = pCFG->humanToTemp(tempH, ambient); pEnc->reset(temp, 100, int_temp_max, 5, 10, false); // int_temp_max declared in vars.cpp if (use_iron) { pIron->setTemp(temp); pIron->switchPower(true); } else { pHG->setTemp(temp); pHG->switchPower(true); } } update_screen = 0; } else if (button == 2) { // The button was pressed for a long time, save tip calibration uint8_t tip_index = pCFG->currentTipIndex(); // IRON actual tip index buildCalibration(ambient, calib_temp, 10); // 10 is bigger then the last index in the reference temp. Means build final calibration pCFG->applyTipCalibtarion(calib_temp, ambient); pCFG->saveTipCalibtarion(tip_index, calib_temp, TIP_ACTIVE | TIP_CALIBRATED, ambient); restorePIDconfig(pCFG, pIron, pHG); return mode_lpress; } uint8_t rt_index = encoder; // rt_index is a reference temperature point index. Read it fron encoder if (tuning) { rt_index = ref_temp_index; } if (HAL_GetTick() < update_screen) return this; update_screen = HAL_GetTick() + 500; uint16_t temp_set = 0; // Prepare the parameters to be displayed uint16_t temp = 0; uint8_t power = 0; uint16_t pwr_disp = 0; uint16_t pwr_disp_max = 200; if (use_iron) { temp_set = pIron->presetTemp(); temp = pIron->averageTemp(); power = pIron->avgPowerPcnt(); pwr_disp = pIron->pwrDispersion(); } else { temp_set = pHG->presetTemp(); temp = pHG->averageTemp(); power = pHG->avgPowerPcnt(); pwr_disp = pHG->pwrDispersion(); pwr_disp_max = 40; } if (tuning && (abs(temp_set - temp) <= 16) && (pwr_disp <= pwr_disp_max) && power > 1) { if (!ready && temp_setready_ms && (HAL_GetTick() > temp_setready_ms)) { pCore->buzz.shortBeep(); ready = true; temp_setready_ms = 0; } } uint16_t temp_setup = temp_set; if (!tuning) { uint16_t tempH = pCFG->referenceTemp(encoder); temp_setup = pCFG->humanToTemp(tempH, ambient); } pCore->dspl.calibManualShow(pCFG->tipName(), pCFG->referenceTemp(rt_index), temp, temp_setup, pCFG->isCelsius(), power, tuning, ready); return this; } //---------------------- The Boost setup menu mode ------------------------------- void MMBST::init(void) { CFG* pCFG = &pCore->cfg; RENC* pEnc = &pCore->encoder; delta_temp = pCFG->boostTemp(); // The boost temp is in the internal units duration = pCFG->boostDuration(); mode = 0; pEnc->reset(0, 0, 2, 1, 1, true); // Select the boot menu item old_item = 0; update_screen = 0; } MODE* MMBST::loop(void) { DSPL* pD = &pCore->dspl; CFG* pCFG = &pCore->cfg; RENC* pEnc = &pCore->encoder; uint8_t item = pEnc->read(); uint8_t button = pEnc->buttonStatus(); if (button == 1) { update_screen = 0; // Force to redraw the screen } else if (button == 2) { // The button was pressed for a long time // Save the boost parameters to the current configuration. Do not write it to the EEPROM! pCFG->saveBoost(delta_temp, duration); return mode_lpress; } if (old_item != item) { old_item = item; switch (mode) { case 1: // New temperature increment delta_temp = item; break; case 2: // New duration period duration = item; break; } update_screen = 0; // Force to redraw the screen } if (HAL_GetTick() < update_screen) return this; update_screen = HAL_GetTick() + 10000; if (!mode) { // The boost menu item selection mode if (button == 1) { // The button was pressed switch (item) { case 0: // delta temperature { mode = 1; pEnc->reset(delta_temp, 0, 75, 5, 5, false); break; } case 1: // duration { mode = 2; pEnc->reset(duration, 20, 320, 20, 20, false); break; } case 2: // save default: // Save the boost parameters to the current configuration. Do not write it to the EEPROM! pCFG->saveBoost(delta_temp, duration); return mode_return; } } } else { // Return to the item selection mode if (button == 1) { pEnc->reset(mode-1, 0, 2, 1, 1, true); mode = 0; return this; } } // Show current menu item char item_value[10]; item_value[1] = '\0'; if (mode) { item = mode - 1; } switch (item) { case 0: // delta temperature if (delta_temp) { uint16_t delta_t = delta_temp; char sym = 'C'; if (!pCFG->isCelsius()) { delta_t = (delta_t * 9 + 3) / 5; sym = 'F'; } sprintf(item_value, "+%2d %c", delta_t, sym); } else { sprintf(item_value, "OFF"); } break; case 1: // duration (secs) sprintf(item_value, "%3d s.", duration); break; default: item_value[0] = '\0'; break; } pD->menuItemShow("Boost", boost_name[item], item_value, mode); return this; } //---------------------- The tune mode ------------------------------------------- void MTUNE::init(void) { RENC* pEnc = &pCore->encoder; uint16_t max_power = 0; if (use_iron) { max_power = pCore->iron.getMaxFixedPower(); check_delay = 0; // IRON connection can be checked any time } else { HOTGUN* pHG = &pCore->hotgun; max_power = pHG->getMaxFixedPower(); pHG->setFan(1500); // Make sure the fan will be blowing well. check_delay = HAL_GetTick() + 2000; // Wait 2 seconds before checking Hot Air Gun } pEnc->reset(max_power/3, 0, max_power, 1, 5, false); old_power = 0; powered = true; check_connected = false; pCore->dspl.mainInit(); // Clear power status message pCore->dspl.msgON(); } MODE* MTUNE::loop(void) { DSPL* pD = &pCore->dspl; IRON* pIron = &pCore->iron; HOTGUN* pHG = &pCore->hotgun; RENC* pEnc = &pCore->encoder; uint16_t power = pEnc->read(); uint8_t button = pEnc->buttonStatus(); if (!check_connected) { check_connected = HAL_GetTick() >= check_delay; } else { if (use_iron) { if (!pIron->isConnected()) return 0; } else { if (pHG->isFanWorking() && !pHG->isConnected()) return 0; } } if (button == 1) { // The button pressed powered = !powered; if (powered) pD->msgON(); else pD->msgOFF(); update_screen = 0; } else if (button == 2) { // The button was pressed for a long time pCore->buzz.shortBeep(); return mode_lpress; } if (!powered) power = 0; if (power != old_power) { if (use_iron) { pIron->fixPower(power); } else { pHG->fixPower(power); } old_power = power; update_screen = 0; } if (HAL_GetTick() < update_screen) return this; update_screen = HAL_GetTick() + 500; uint16_t tune_temp = gun_temp_maxC; // vars.cpp if (use_iron) tune_temp = iron_temp_maxC; uint16_t temp = 0; uint8_t p_pcnt = 0; if (use_iron) { temp = pIron->averageTemp(); p_pcnt = pIron->avgPowerPcnt(); } else { temp = pHG->averageTemp(); p_pcnt = pHG->avgPowerPcnt(); } pD->tuneShow(tune_temp, temp, p_pcnt); return this; } //---------------------- The PID coefficients tune mode -------------------------- void MTPID::init(void) { DSPL* pD = &pCore->dspl; RENC* pEnc = &pCore->encoder; pD->pidInit(); pD->pidSetLowerAxisLabel("Dp"); pEnc->reset(0, 0, 2, 1, 1, true); // Select the coefficient to be modified pCore->iron.setTemp(1200); // Use 'middle' temperature pCore->hotgun.setTemp(1200); pCore->hotgun.setFan(1500); data_update = 0; data_index = 0; modify = false; on = false; old_index = 3; temp_setready_ms = 0; update_screen = 0; } MODE* MTPID::loop(void) { DSPL* pD = &pCore->dspl; CFG* pCFG = &pCore->cfg; IRON* pIron = &pCore->iron; HOTGUN* pHG = &pCore->hotgun; RENC* pEnc = &pCore->encoder; uint16_t index = pEnc->read(); uint8_t button = pEnc->buttonStatus(); if (use_iron) { if (!pIron->isConnected()) return 0; } else if (temp_setready_ms && (HAL_GetTick() > temp_setready_ms) && !pHG->isConnected()) return 0; if(button || old_index != index) update_screen = 0; if (HAL_GetTick() >= data_update) { data_update = HAL_GetTick() + 100; int16_t temp = 0; uint32_t disp = 0; if (use_iron) { temp = pIron->averageTemp() - pIron->presetTemp(); disp = pIron->pwrDispersion(); } else { temp = pHG->averageTemp() - pHG->presetTemp(); disp = pHG->pwrDispersion(); } pD->pidPutData(temp, disp); } if (HAL_GetTick() < update_screen) return this; PID* pPID = pHG; if (use_iron) pPID = pIron; // Pointer to the PID class instance if (modify) { // The Coefficient is selected, start to show the Graphs update_screen = HAL_GetTick() + 100; if (button == 1) { // Short button press: select another PID coefficient modify = false; pEnc->reset(data_index, 0, 2, 1, 1, true); return this; // Restart the procedure } else if (button == 2) { // Long button press: toggle the power on = !on; if (use_iron) pIron->switchPower(on); else pHG->switchPower(on); if (on) pD->pidInit(); // Reset display graph history pCore->buzz.shortBeep(); } if (old_index != index) { old_index = index; pPID->changePID(data_index+1, index); pD->pidModify(data_index, index); } uint8_t pwr_pcnt = 0; if (use_iron) pwr_pcnt = pIron->avgPowerPcnt(); else pwr_pcnt = pHG->avgPowerPcnt(); pD->pidShowGraph(pwr_pcnt); } else { // Selecting the PID coefficient to be tuned update_screen = HAL_GetTick() + 1000; if (old_index != index) { old_index = index; data_index = index; } if (button == 1) { // Short button press: select another PID coefficient modify = true; data_index = index; // Prepare to change the coefficient [index] uint16_t k = 0; k = pPID->changePID(index+1, -1); // Read the PID coefficient from the IRON or Hot Air Gun pEnc->reset(k, 0, 20000, 1, 10, false); return this; // Restart the procedure } else if (button == 2) { // Long button press: save the parameters and return to menu PIDparam pp = pPID->dump(); pCFG->savePID(pp, use_iron); pCore->buzz.shortBeep(); return mode_lpress; } uint16_t pid_k[3]; for (uint8_t i = 0; i < 3; ++i) { pid_k[i] = pPID->changePID(i+1, -1); } pD->pidShowMenu(pid_k, data_index); } return this; } //---------------------- The Hot Air Gun main working mode ----------------------- void MWORK_GUN::init(void) { DSPL* pD = &pCore->dspl; CFG* pCFG = &pCore->cfg; HOTGUN* pHG = &pCore->hotgun; edit_temp = true; return_to_temp = 0; ready = false; ready_clear = 0; pCFG->activateGun(true); // Load the Hot Air Gun calibration data (like another tip) pD->mainInit(); uint16_t fan = pCFG->gunFanPreset(); pHG->setFan(fan); // Preset temperature will be set up in loop method pD->msgOFF(); int16_t ambient = pCore->iron.ambientTemp(); uint16_t temp_setH = pCFG->gunTempPreset(); uint16_t temp_set = pCFG->humanToTemp(temp_setH, ambient); pHG->setTemp(temp_set); pD->fanSpeed(pHG->presetFanPcnt()); pHG->switchPower(true); pD->msgON(); if (keep_iron) { // Turn on the IRON because we want to keep it running pCore->iron.switchPower(true); } old_param = 0; update_screen = 0; // Force to redraw the screen return_to_temp = 1; // Initialize Hot Air Gun configuration at the main loop fan_animate = 1; // Do spin the fan icon fan_angle = 0; SCRSAVER::init(pCFG->getScrTo()); } MODE* MWORK_GUN::loop(void) { DSPL* pD = &pCore->dspl; CFG* pCFG = &pCore->cfg; HOTGUN* pHG = &pCore->hotgun; RENC* pEnc = &pCore->encoder; int16_t ambient = pCore->iron.ambientTemp(); // The fan speed modification mode has 'return_to_temp' timeout if (return_to_temp && HAL_GetTick() >= return_to_temp) {// This reads the Hot Air Gun configuration Also bool celsius = pCFG->isCelsius(); uint16_t temp_setH = pCFG->gunTempPreset(); uint16_t t_min = pCFG->tempMinC(); // The minimum preset temperature, defined in iron.h uint16_t t_max = pCFG->tempMaxC(); // The maximum preset temperature if (!celsius) { // The preset temperature saved in selected units t_min = celsiusToFahrenheit(t_min); t_max = celsiusToFahrenheit(t_max); } if (pCFG->isBigTempStep()) { // The preset temperature step is 5 degrees temp_setH -= temp_setH % 5; // The preset temperature should be rounded to 5 pEnc->reset(temp_setH, t_min, t_max, 5, 5, false); } else { pEnc->reset(temp_setH, t_min, t_max, 1, 1, false); } edit_temp = true; return_to_temp = 0; old_param = temp_setH; } uint16_t param = pEnc->read(); uint8_t button = pEnc->buttonStatus(); if (iron_standby && !pHG->isReedSwitch(true)) { // If the REED switch is closed, return to iron standby mode pCFG->saveConfig(); // Save configuration into EEPROM pCFG->activateGun(false); // Load the current tip calibration data if (keep_iron && iron_working) { keep_iron = false; // Be paranoid, disable IRON return iron_working; } return iron_standby; } // In the Screen saver mode, any rotary encoder change should be ignored if ((button || param != old_param) && scrSaver()) { button = 0; pEnc->write(old_param); SCRSAVER::reset(); update_screen = 0; } if (pCFG->isKeepIron() && button == 2) { // Manage soldering iron if keep_iron is enabled if (keep_iron) { // Soldering iron is powered on. Turn-off the soldering iron pCore->iron.switchPower(false); pCore->buzz.lowBeep(); } else { // Turn the soldering iron ON pCore->iron.switchPower(true); pCore->buzz.shortBeep(); } keep_iron = !keep_iron; } else if (button) { // The button was pressed, toggle temp/fan update_screen = 0; if (edit_temp) { // Switch to edit fan speed uint16_t fan = pHG->presetFan(); uint16_t max = pHG->maxFanSpeed(); pEnc->reset(fan, 0, max, 5, 10, false); edit_temp = false; old_param = fan; return_to_temp = HAL_GetTick() + edit_fan_timeout; } else { return_to_temp = HAL_GetTick(); // Force to return to edit temperature return this; } } bool scr_saver_reset = (button > 0); if (param != old_param) { // Changed preset temperature or fan speed old_param = param; // In first loop the preset temperature will be setup for sure uint16_t t = pHG->presetTemp(); uint16_t f = pHG->presetFan(); if (edit_temp) { t = pCFG->humanToTemp(param, ambient); pHG->setTemp(t); } else { f = param; pHG->setFan(f); pD->fanSpeed(pHG->presetFanPcnt()); return_to_temp = HAL_GetTick() + edit_fan_timeout; } uint16_t temp_setH = pCFG->tempToHuman(t, ambient); pCFG->saveGunPreset(temp_setH, f); update_screen = 0; // Force to redraw the screen scr_saver_reset = true; } if (scr_saver_reset) SCRSAVER::reset(); if (fan_animate && HAL_GetTick() >= fan_animate && pHG->isConnected()) { pD->animateFan(fan_angle); ++fan_angle; fan_angle &= 0x3; fan_animate = HAL_GetTick() + 100; } if (HAL_GetTick() < update_screen) return this; update_screen = HAL_GetTick() + 500; int16_t temp_set = pHG->presetTemp(); int16_t temp = pHG->averageTemp(); uint16_t pd = pHG->pwrDispersion(); uint8_t pwr = pHG->avgPowerPcnt(); if (!ready && (abs(temp_set - temp) < 50) && (pd <= 7) && (pwr > 0)) { ready = true; ready_clear = HAL_GetTick() + 5000; pCore->buzz.shortBeep(); pD->msgReady(); } if (ready_clear && HAL_GetTick() >= ready_clear) { pD->msgON(); ready_clear = 0; } uint16_t temp_setH = pCFG->gunTempPreset(); uint16_t tempH = pCFG->tempToHuman(temp, ambient); uint16_t iron_temp = pCore->iron.alternateTemp(); // Average IRON temperature or 0 if IRON is powered off if (iron_temp > 0) iron_temp = pCFG->tempToHuman(iron_temp, ambient, DEV_IRON); if (scrSaver()) { pD->scrSave(SCR_MODE_GUN_ON, tempH, iron_temp); } else { pD->mainShow(temp_setH, tempH, ambient, pwr, pCFG->isCelsius(), pCFG->isTipCalibrated(), iron_temp, fan_angle+1, false); } return this; } //---------------------- Hot Air Gun setup menu ---------------------------------- MENU_GUN::MENU_GUN(HW* pCore, MODE* calib, MODE* pot_tune, MODE* pid_tune) : MODE(pCore) { mode_calibrate = calib; mode_tune = pot_tune; mode_pid = pid_tune; } void MENU_GUN::init(void) { pCore->encoder.reset(0, 0, 4, 1, 1, true); old_item = 5; update_screen = 0; } MODE* MENU_GUN::loop(void) { DSPL* pD = &pCore->dspl; CFG* pCFG = &pCore->cfg; RENC* pEnc = &pCore->encoder; uint8_t item = pEnc->read(); uint8_t button = pEnc->buttonStatus(); if (button == 1) { update_screen = 0; // Force to redraw the screen } else if (button == 2) { // The button was pressed for a long time return mode_lpress; } if (old_item != item) { old_item = item; update_screen = 0; // Force to redraw the screen } if (HAL_GetTick() < update_screen) return this; update_screen = HAL_GetTick() + 10000; if (button == 1) { // The button was pressed switch (item) { case 0: // Calibrate Hot Air Gun if (mode_calibrate) { mode_calibrate->ironMode(false); return mode_calibrate; } break; case 1: // Tune Hot air Gun potentiometer if (mode_tune) { mode_tune->ironMode(false); return mode_tune; } break; case 2: // Tune Hot Air Gun PID parameters if (mode_pid) { mode_pid->ironMode(false); return mode_pid; } break; case 3: // Initialize Hot Air Gun calibration data pCFG->resetTipCalibration(); return mode_return; default: // exit return mode_return; } } pD->menuItemShow("Hot Gun", menu_list[item], 0, false); return this; } //---------------------- The Fail mode: display error message -------------------- void MFAIL::init(void) { RENC* pEnc = &pCore->encoder; pEnc->reset(0, 0, 1, 1, 1, false); pCore->buzz.failedBeep(); update_screen = 0; } MODE* MFAIL::loop(void) { DSPL* pD = &pCore->dspl; RENC* pEnc = &pCore->encoder; if (pEnc->buttonStatus()) { return mode_return; } if (HAL_GetTick() < update_screen) return this; update_screen = HAL_GetTick() + 60000; pD->errorShow(); return this; } //---------------------- The About dialog mode. Show about message --------------- void MABOUT::init(void) { RENC* pEnc = &pCore->encoder; pEnc->reset(0, 0, 1, 1, 1, false); setTimeout(20); // Show version for 20 seconds resetTimeout(); update_screen = 0; } MODE* MABOUT::loop(void) { DSPL* pD = &pCore->dspl; RENC* pEnc = &pCore->encoder; uint8_t b_status = pEnc->buttonStatus(); if (b_status == 1) { // Short button press return mode_return; // Return to the main menu } else if (b_status == 2) { return mode_lpress; // Activate debug mode } if (HAL_GetTick() < update_screen) return this; update_screen = HAL_GetTick() + 60000; pD->showVersion(); return this; } //---------------------- The Debug mode: display internal parameters ------------ void MDEBUG::init(void) { gun_mode = false; pCore->encoder.reset(0, 0, max_iron_power, 1, 5, false); update_screen = 0; } MODE* MDEBUG::loop(void) { DSPL* pD = &pCore->dspl; IRON* pIron = &pCore->iron; HOTGUN* pHG = &pCore->hotgun; bool gun_active = pHG->isReedSwitch(true); if (gun_active != gun_mode) { // Current Mode has been changed gun_mode = gun_active; pIron->fixPower(0); pHG->fanFixed(0); old_power = 0; if (gun_mode) { // Switch to gun mode pCore->encoder.reset(min_fan_speed, min_fan_speed, max_fan_power, 1, 1, false); } else { pCore->encoder.reset(0, 0, max_iron_power, 1, 5, false); } } uint16_t pwr = pCore->encoder.read(); if (pwr != old_power) { old_power = pwr; update_screen = 0; if (gun_mode) { pHG->fanFixed(pwr); } else { pIron->fixPower(pwr); } } if (pCore->encoder.buttonStatus() == 2) { // The button was pressed for a long time return mode_lpress; } if (HAL_GetTick() < update_screen) return this; update_screen = HAL_GetTick() + 491; // The screen update period is a primary number to update TIM1 counter value uint16_t data[4]; data[2] = pIron->ambientInternal(); if (gun_mode) { data[0] = pHG->averageTemp(); data[1] = pHG->unitCurrent(); data[3] = TIM1->CNT; // TIM1 period is 99 if (isACsine()) data[3] += 100; // Show flag indicating that AC events are detected } else { data[0] = pIron->temp(); data[1] = pIron->unitCurrent(); data[3] = pIron->reedInternal(); } pD->debugShow(gun_mode, pwr, pIron->isConnected(), pHG->isConnected(), data); return this; } ================================================ FILE: Src/oled.cpp ================================================ /* * oled.c * * Created on: 31 . 2019 . * Author: Alex */ #include "oled.h" extern "C" uint8_t u8x8_gpio_and_delay_stm32(u8x8_t *u8x8, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch (msg) { case U8X8_MSG_DELAY_NANO: // delay arg_int * 1 nano second for (uint16_t i =0; i < arg_int; ++i); break; case U8X8_MSG_GPIO_AND_DELAY_INIT: HAL_Delay(1); break; case U8X8_MSG_DELAY_MILLI: HAL_Delay(arg_int); break; case U8X8_MSG_GPIO_DC: HAL_GPIO_WritePin(OLED_DC_GPIO_Port, OLED_DC_Pin, (GPIO_PinState)arg_int); break; case U8X8_MSG_GPIO_RESET: HAL_GPIO_WritePin(OLED_RESET_GPIO_Port, OLED_RESET_Pin, (GPIO_PinState)arg_int); break; default: break; } return 1; } extern "C" uint8_t u8x8_byte_stm32_hw_spi(u8x8_t *u8g2, uint8_t msg, uint8_t arg_int, void *arg_ptr) { switch (msg) { case U8X8_MSG_BYTE_SEND: while (HAL_SPI_STATE_READY != HAL_SPI_GetState(&SPI_HANDLER)) { } HAL_SPI_Transmit(&SPI_HANDLER, (uint8_t *)arg_ptr, arg_int, 100); break; case U8X8_MSG_BYTE_INIT: break; case U8X8_MSG_BYTE_SET_DC: HAL_GPIO_WritePin(OLED_DC_GPIO_Port, OLED_DC_Pin, arg_int?GPIO_PIN_SET:GPIO_PIN_RESET); break; case U8X8_MSG_BYTE_START_TRANSFER: HAL_GPIO_WritePin(OLED_CS_GPIO_Port, OLED_CS_Pin, (GPIO_PinState)(u8g2->display_info->chip_enable_level)); u8g2->gpio_and_delay_cb(u8g2, U8X8_MSG_DELAY_NANO, u8g2->display_info->post_chip_enable_wait_ns, NULL); break; case U8X8_MSG_BYTE_END_TRANSFER: u8g2->gpio_and_delay_cb(u8g2, U8X8_MSG_DELAY_NANO, u8g2->display_info->pre_chip_disable_wait_ns, NULL); HAL_GPIO_WritePin(OLED_CS_GPIO_Port, OLED_CS_Pin, (GPIO_PinState)(u8g2->display_info->chip_disable_level)); break; default: return 0; } return 1; } extern "C" uint8_t u8x8_byte_stm32_hw_i2c(u8x8_t *u8g2, uint8_t msg, uint8_t arg_int, void *arg_ptr) { static uint8_t dc = 0; switch(msg) { case U8X8_MSG_BYTE_SEND: while (HAL_I2C_STATE_READY != HAL_I2C_GetState(&I2C_HANDLER)) { } HAL_I2C_Mem_Write(&I2C_HANDLER, OLED_I2C_ADDR<<1, (dc == 0)?0:0x40, 1, (uint8_t *)arg_ptr, arg_int, HAL_MAX_DELAY); break; case U8X8_MSG_BYTE_INIT: u8g2->gpio_and_delay_cb(u8g2, U8X8_MSG_DELAY_NANO, u8g2->display_info->post_chip_enable_wait_ns, NULL); break; case U8X8_MSG_BYTE_SET_DC: dc = arg_int; break; case U8X8_MSG_BYTE_START_TRANSFER: break; case U8X8_MSG_BYTE_END_TRANSFER: break; default: return 0; } return 1; } ================================================ FILE: Src/pid.cpp ================================================ /* * pid.cpp * * 2023 FEB 19, v1.01 * Introduced the heating-up PID parameters: Kp_force and Ki_force * Changed the methods: PID::init(), PID::load(), PID::reqPower() * When the temperature is far lower than the preset one, the aggressive PID parameters are used */ #include "pid.h" #include "tools.h" #include PIDparam::PIDparam(int32_t Kp, int32_t Ki, int32_t Kd) { this->Kp = Kp; this->Ki = Ki; this->Kd = Kd; } PIDparam::PIDparam(const PIDparam &p) { Kp = p.Kp; Ki = p.Ki; Kd = p.Kd; } // When load the PID parameters, calculate aggressive heating mode parameter values also: // Increase the Kp in the aggressive mode in several times, // Decrease the Ki in the aggressive mode. The Kd is not used in the aggressive mode void PID::load(const PIDparam &p) { Kp = p.Kp; Ki = p.Ki; Kd = p.Kd; Kp_force = Kp * 5; Ki_force = Ki / 10; if (Ki_force < 5) Ki_force = 5; } void PID::init(uint16_t ms, uint8_t denominator_p, bool heat_force) { // PID parameters are initialized from EEPROM by call Kp = 10; Ki = 10; Kd = 0; T = ms; Kp_force = 10; Ki_force = 5; this->denominator_p = denominator_p; use_force = heat_force; } void PID::resetPID(uint16_t t) { temp_h0 = t; temp_h1 = t; power = 0; } int32_t PID::changePID(uint8_t p, int32_t k) { switch(p) { case 1: if (k >= 0) Kp = k; return Kp; case 2: if (k >= 0) Ki = k; return Ki; case 3: if (k >= 0) Kd = k; return Kd; default: break; } return 0; } /* * Ku = 4 * delta_power / (PI * SQRT(alpha^2-epsion^2), where * diff = alpha^2-epsion^2, * alpha - amplitude of temperature oscillation * epsilon - hysteresis (delta_temp) * * Pu = period - the oscillation period, ms * Kp = 0.6*Ku; Ti = 0.5*Pu; Td = 0.125*Pu; * Ki = Kp*T/Ti; * Kd = Kp*Td/T; */ void PID::newPIDparams(uint16_t delta_power, uint32_t diff, uint32_t period) { double Ku = 4 * delta_power; Ku /= M_PI * sqrt(diff); uint32_t denominator = 1 << denominator_p; Kp = round(Ku * 0.6 * denominator); // Translate Kp to the numerator of implemented PID Ki = (Kp * T * 2 + period/2) / period; Kd = (Kp * period) >> 3; // 1/8 = 0.125 Kd += T/2; Kd /= T; /* * The algorithm gives very big values for Kd * The big values of Kd gives us the big power dispersion * That is why it is better to limit the Kd value. */ if (Kd > 10000) Kd = Kp/2; } int32_t PID::reqPower(int16_t temp_set, int16_t temp_curr) { if (use_force && temp_curr + 100 < temp_set) { // Aggressive heat-up mode, use Kp_force and Ki_forse only if (temp_h0 == 0) { // Use direct formulae because do not know previous temperature int32_t i_summ = temp_set - temp_curr; power = Kp_force*(temp_set - temp_curr) + Ki_force * i_summ; } else { int32_t kp = Kp_force * (temp_h1 - temp_curr); int32_t ki = Ki_force * (temp_set - temp_curr); int32_t delta_p = kp + ki; power += delta_p; // Power is stored multiplied by denominator! } } else { // Use regular PID parameters near preset temperature if (temp_h0 == 0) { // Use direct formulae because do not know previous temperature int32_t i_summ = temp_set - temp_curr; power = Kp*(temp_set - temp_curr) + Ki * i_summ; } else { int32_t kp = Kp * (temp_h1 - temp_curr); int32_t ki = Ki * (temp_set - temp_curr); int32_t kd = Kd * (temp_h0 + temp_curr - 2 * temp_h1); int32_t delta_p = kp + ki + kd; power += delta_p; // Power is stored multiplied by denominator! } } temp_h0 = temp_h1; temp_h1 = temp_curr; int32_t pwr = power + (1 << (denominator_p-1)); // prepare the power to divide by denominator, round the result pwr >>= denominator_p; // divide by the denominator return pwr; } void PIDTUNE::start(uint16_t base_pwr, uint16_t delta_power, uint16_t base_temp, uint16_t delta_temp) { if (base_pwr && delta_power) { this->base_power = base_pwr; // The power required to keep the preset temperature this->delta_power = delta_power; // Apply +- delta power in relay method this->base_temp = base_temp; this->delta_temp = delta_temp; app_delta_power = false; pwr_change = 0; loops = 0; period.reset(); temp_min.reset(); temp_max.reset(); } } uint16_t PIDTUNE::run(uint32_t t) { if (app_delta_power) { // Applying extra power if (check_min && (int16_t)t > base_temp) { // Finish looking for minimum temperature check_min = false; temp_min.update(t_min); } if ((int16_t)t > base_temp + delta_temp) { // Crossed high temperature limit, decrease the power app_delta_power = false; if (pwr_change > 0) { uint32_t n = HAL_GetTick(); period.update(n-pwr_change); pwr_change = n; ++loops; } else { pwr_change = HAL_GetTick(); } check_min = false; // Be paranoid check_max = true; t_max = t; } } else { // Returning to preset temperature if (check_max && (int16_t)t < base_temp) { // Finish looking for maximum temperature check_max = false; temp_max.update(t_max); } if ((int16_t)t < base_temp - delta_temp) { // Crossed low temperature limit, increase the power app_delta_power = true; check_max = false; // Be paranoid check_min = true; t_min = t; } } if (check_max && t > t_max) t_max = t; // Update maximum temperature of this cycle if (check_min && t < t_min) t_min = t; // Update minimum temperature of this cycle uint16_t p = base_power; if (app_delta_power) p += delta_power; else p -= delta_power; return p; } bool PIDTUNE::periodStable(void) { uint32_t disp = period.dispersion() * 100; disp /= period.read(); // Relative dispersion, % return disp < 10; } ================================================ FILE: Src/stat.cpp ================================================ /* * stat.cpp * */ #include "stat.h" #include "tools.h" int32_t EMP_AVERAGE::average(int32_t value) { uint8_t round_v = emp_k >> 1; update(value); return (emp_data + round_v) / emp_k; } void EMP_AVERAGE::update(int32_t value) { uint8_t round_v = emp_k >> 1; emp_data += value - (emp_data + round_v) / emp_k; } int32_t EMP_AVERAGE::read(void) { uint8_t round_v = emp_k >> 1; return (emp_data + round_v) / emp_k; } int32_t HIST::read(void) { int32_t sum = 0; if (len == 0) return 0; if (len == 1) return queue[0]; for (uint8_t i = 0; i < len; ++i) sum += queue[i]; sum += len >> 1; // round the average sum /= len; return sum; } int32_t HIST::average(int32_t value) { update(value); return read(); } void HIST::update(int32_t value) { if (len < max_len) { queue[len++] = value; } else { queue[index] = value; if (++index >= max_len) index = 0; // Use ring buffer } } uint32_t HIST::dispersion(void) { if (len < 3) return 1000; uint32_t sum = 0; uint32_t avg = read(); for (uint8_t i = 0; i < len; ++i) { int32_t q = queue[i]; q -= avg; q *= q; sum += q; } sum += len >> 1; sum /= len; return sum; } void SWITCH::init(uint8_t h_len, uint16_t off, uint16_t on) { EMP_AVERAGE::length(h_len); if (on < off) on = off; on_val = on; off_val = off; mode = false; } bool SWITCH::changed(void) { if (sw_changed) { sw_changed = false; return true; } return false; } void SWITCH::update(uint16_t value) { uint16_t max_val = on_val + (on_val >> 1); uint16_t min_val = off_val - (off_val >> 1); value = constrain(value, min_val, max_val); uint16_t avg = EMP_AVERAGE::average(value); if (mode) { if (avg < off_val) { sw_changed = true; mode = false; } } else { if (avg > on_val) { sw_changed = true; mode = true; } } } ================================================ FILE: Src/stm32f1xx_hal_msp.c ================================================ /* USER CODE BEGIN Header */ /** ****************************************************************************** * File Name : stm32f1xx_hal_msp.c * Description : This file provides code for the MSP Initialization * and de-Initialization codes. ****************************************************************************** * @attention * *

© Copyright (c) 2019 STMicroelectronics. * All rights reserved.

* * This software component is licensed by ST under BSD 3-Clause license, * the "License"; You may not use this file except in compliance with the * License. You may obtain a copy of the License at: * opensource.org/licenses/BSD-3-Clause * ****************************************************************************** */ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include "main.h" /* USER CODE BEGIN Includes */ /* USER CODE END Includes */ extern DMA_HandleTypeDef hdma_adc1; /* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN TD */ /* USER CODE END TD */ /* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN Define */ /* USER CODE END Define */ /* Private macro -------------------------------------------------------------*/ /* USER CODE BEGIN Macro */ /* USER CODE END Macro */ /* Private variables ---------------------------------------------------------*/ /* USER CODE BEGIN PV */ /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ /* USER CODE BEGIN PFP */ /* USER CODE END PFP */ /* External functions --------------------------------------------------------*/ /* USER CODE BEGIN ExternalFunctions */ /* USER CODE END ExternalFunctions */ /* USER CODE BEGIN 0 */ /* USER CODE END 0 */ void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim); /** * Initializes the Global MSP. */ void HAL_MspInit(void) { /* USER CODE BEGIN MspInit 0 */ /* USER CODE END MspInit 0 */ __HAL_RCC_AFIO_CLK_ENABLE(); __HAL_RCC_PWR_CLK_ENABLE(); /* System interrupt init*/ /** NOJTAG: JTAG-DP Disabled and SW-DP Enabled */ __HAL_AFIO_REMAP_SWJ_NOJTAG(); /* USER CODE BEGIN MspInit 1 */ /* USER CODE END MspInit 1 */ } /** * @brief ADC MSP Initialization * This function configures the hardware resources used in this example * @param hadc: ADC handle pointer * @retval None */ void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc) { GPIO_InitTypeDef GPIO_InitStruct = {0}; if(hadc->Instance==ADC1) { /* USER CODE BEGIN ADC1_MspInit 0 */ /* USER CODE END ADC1_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_ADC1_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); /**ADC1 GPIO Configuration PA2 ------> ADC1_IN2 PA3 ------> ADC1_IN3 PA4 ------> ADC1_IN4 PA5 ------> ADC1_IN5 PA6 ------> ADC1_IN6 */ GPIO_InitStruct.Pin = IRON_CURRENT_Pin|FAN_CURRENT_Pin|IRON_TEMP_Pin|GUN_TEMP_Pin |AMBIENT_Pin; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* ADC1 DMA Init */ /* ADC1 Init */ hdma_adc1.Instance = DMA1_Channel1; hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY; hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE; hdma_adc1.Init.MemInc = DMA_MINC_ENABLE; hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD; hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_WORD; hdma_adc1.Init.Mode = DMA_NORMAL; hdma_adc1.Init.Priority = DMA_PRIORITY_LOW; if (HAL_DMA_Init(&hdma_adc1) != HAL_OK) { Error_Handler(); } __HAL_LINKDMA(hadc,DMA_Handle,hdma_adc1); /* USER CODE BEGIN ADC1_MspInit 1 */ /* USER CODE END ADC1_MspInit 1 */ } else if(hadc->Instance==ADC2) { /* USER CODE BEGIN ADC2_MspInit 0 */ /* USER CODE END ADC2_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_ADC2_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); /**ADC2 GPIO Configuration PA2 ------> ADC2_IN2 PA3 ------> ADC2_IN3 PA4 ------> ADC2_IN4 PA5 ------> ADC2_IN5 PA6 ------> ADC2_IN6 */ GPIO_InitStruct.Pin = IRON_CURRENT_Pin|FAN_CURRENT_Pin|IRON_TEMP_Pin|GUN_TEMP_Pin |AMBIENT_Pin; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* USER CODE BEGIN ADC2_MspInit 1 */ /* USER CODE END ADC2_MspInit 1 */ } } /** * @brief ADC MSP De-Initialization * This function freeze the hardware resources used in this example * @param hadc: ADC handle pointer * @retval None */ void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc) { if(hadc->Instance==ADC1) { /* USER CODE BEGIN ADC1_MspDeInit 0 */ /* USER CODE END ADC1_MspDeInit 0 */ /* Peripheral clock disable */ __HAL_RCC_ADC1_CLK_DISABLE(); /**ADC1 GPIO Configuration PA2 ------> ADC1_IN2 PA3 ------> ADC1_IN3 PA4 ------> ADC1_IN4 PA5 ------> ADC1_IN5 PA6 ------> ADC1_IN6 */ HAL_GPIO_DeInit(GPIOA, IRON_CURRENT_Pin|FAN_CURRENT_Pin|IRON_TEMP_Pin|GUN_TEMP_Pin |AMBIENT_Pin); /* ADC1 DMA DeInit */ HAL_DMA_DeInit(hadc->DMA_Handle); /* USER CODE BEGIN ADC1_MspDeInit 1 */ /* USER CODE END ADC1_MspDeInit 1 */ } else if(hadc->Instance==ADC2) { /* USER CODE BEGIN ADC2_MspDeInit 0 */ /* USER CODE END ADC2_MspDeInit 0 */ /* Peripheral clock disable */ __HAL_RCC_ADC2_CLK_DISABLE(); /**ADC2 GPIO Configuration PA2 ------> ADC2_IN2 PA3 ------> ADC2_IN3 PA4 ------> ADC2_IN4 PA5 ------> ADC2_IN5 PA6 ------> ADC2_IN6 */ HAL_GPIO_DeInit(GPIOA, IRON_CURRENT_Pin|FAN_CURRENT_Pin|IRON_TEMP_Pin|GUN_TEMP_Pin |AMBIENT_Pin); /* USER CODE BEGIN ADC2_MspDeInit 1 */ /* USER CODE END ADC2_MspDeInit 1 */ } } /** * @brief I2C MSP Initialization * This function configures the hardware resources used in this example * @param hi2c: I2C handle pointer * @retval None */ void HAL_I2C_MspInit(I2C_HandleTypeDef* hi2c) { GPIO_InitTypeDef GPIO_InitStruct = {0}; if(hi2c->Instance==I2C1) { /* USER CODE BEGIN I2C1_MspInit 0 */ /* USER CODE END I2C1_MspInit 0 */ __HAL_RCC_GPIOB_CLK_ENABLE(); /**I2C1 GPIO Configuration PB6 ------> I2C1_SCL PB7 ------> I2C1_SDA */ GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7; GPIO_InitStruct.Mode = GPIO_MODE_AF_OD; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /* Peripheral clock enable */ __HAL_RCC_I2C1_CLK_ENABLE(); /* USER CODE BEGIN I2C1_MspInit 1 */ /* USER CODE END I2C1_MspInit 1 */ } } /** * @brief I2C MSP De-Initialization * This function freeze the hardware resources used in this example * @param hi2c: I2C handle pointer * @retval None */ void HAL_I2C_MspDeInit(I2C_HandleTypeDef* hi2c) { if(hi2c->Instance==I2C1) { /* USER CODE BEGIN I2C1_MspDeInit 0 */ /* USER CODE END I2C1_MspDeInit 0 */ /* Peripheral clock disable */ __HAL_RCC_I2C1_CLK_DISABLE(); /**I2C1 GPIO Configuration PB6 ------> I2C1_SCL PB7 ------> I2C1_SDA */ HAL_GPIO_DeInit(GPIOB, GPIO_PIN_6); HAL_GPIO_DeInit(GPIOB, GPIO_PIN_7); /* USER CODE BEGIN I2C1_MspDeInit 1 */ /* USER CODE END I2C1_MspDeInit 1 */ } } /** * @brief SPI MSP Initialization * This function configures the hardware resources used in this example * @param hspi: SPI handle pointer * @retval None */ void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi) { GPIO_InitTypeDef GPIO_InitStruct = {0}; if(hspi->Instance==SPI2) { /* USER CODE BEGIN SPI2_MspInit 0 */ /* USER CODE END SPI2_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_SPI2_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); /**SPI2 GPIO Configuration PB13 ------> SPI2_SCK PB15 ------> SPI2_MOSI */ GPIO_InitStruct.Pin = OLED_SCK_Pin|OLED_SDA_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); /* USER CODE BEGIN SPI2_MspInit 1 */ /* USER CODE END SPI2_MspInit 1 */ } } /** * @brief SPI MSP De-Initialization * This function freeze the hardware resources used in this example * @param hspi: SPI handle pointer * @retval None */ void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi) { if(hspi->Instance==SPI2) { /* USER CODE BEGIN SPI2_MspDeInit 0 */ /* USER CODE END SPI2_MspDeInit 0 */ /* Peripheral clock disable */ __HAL_RCC_SPI2_CLK_DISABLE(); /**SPI2 GPIO Configuration PB13 ------> SPI2_SCK PB15 ------> SPI2_MOSI */ HAL_GPIO_DeInit(GPIOB, OLED_SCK_Pin|OLED_SDA_Pin); /* USER CODE BEGIN SPI2_MspDeInit 1 */ /* USER CODE END SPI2_MspDeInit 1 */ } } /** * @brief TIM_Base MSP Initialization * This function configures the hardware resources used in this example * @param htim_base: TIM_Base handle pointer * @retval None */ void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) { GPIO_InitTypeDef GPIO_InitStruct = {0}; if(htim_base->Instance==TIM1) { /* USER CODE BEGIN TIM1_MspInit 0 */ /* USER CODE END TIM1_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM1_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); /**TIM1 GPIO Configuration PA12 ------> TIM1_ETR */ GPIO_InitStruct.Pin = AC_ZERO_Pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLUP; HAL_GPIO_Init(AC_ZERO_GPIO_Port, &GPIO_InitStruct); /* TIM1 interrupt Init */ HAL_NVIC_SetPriority(TIM1_CC_IRQn, 0, 0); HAL_NVIC_EnableIRQ(TIM1_CC_IRQn); /* USER CODE BEGIN TIM1_MspInit 1 */ /* USER CODE END TIM1_MspInit 1 */ } else if(htim_base->Instance==TIM2) { /* USER CODE BEGIN TIM2_MspInit 0 */ /* USER CODE END TIM2_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM2_CLK_ENABLE(); /* TIM2 interrupt Init */ HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0); HAL_NVIC_EnableIRQ(TIM2_IRQn); /* USER CODE BEGIN TIM2_MspInit 1 */ /* USER CODE END TIM2_MspInit 1 */ } else if(htim_base->Instance==TIM4) { /* USER CODE BEGIN TIM4_MspInit 0 */ /* USER CODE END TIM4_MspInit 0 */ /* Peripheral clock enable */ __HAL_RCC_TIM4_CLK_ENABLE(); /* USER CODE BEGIN TIM4_MspInit 1 */ /* USER CODE END TIM4_MspInit 1 */ } } void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim) { GPIO_InitTypeDef GPIO_InitStruct = {0}; if(htim->Instance==TIM1) { /* USER CODE BEGIN TIM1_MspPostInit 0 */ /* USER CODE END TIM1_MspPostInit 0 */ __HAL_RCC_GPIOA_CLK_ENABLE(); /**TIM1 GPIO Configuration PA11 ------> TIM1_CH4 */ GPIO_InitStruct.Pin = GUN_POWER_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GUN_POWER_GPIO_Port, &GPIO_InitStruct); /* USER CODE BEGIN TIM1_MspPostInit 1 */ /* USER CODE END TIM1_MspPostInit 1 */ } else if(htim->Instance==TIM2) { /* USER CODE BEGIN TIM2_MspPostInit 0 */ /* USER CODE END TIM2_MspPostInit 0 */ __HAL_RCC_GPIOA_CLK_ENABLE(); /**TIM2 GPIO Configuration PA0-WKUP ------> TIM2_CH1 PA1 ------> TIM2_CH2 */ GPIO_InitStruct.Pin = IRON_POWER_Pin|FAN_POWER_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* USER CODE BEGIN TIM2_MspPostInit 1 */ /* USER CODE END TIM2_MspPostInit 1 */ } else if(htim->Instance==TIM4) { /* USER CODE BEGIN TIM4_MspPostInit 0 */ /* USER CODE END TIM4_MspPostInit 0 */ __HAL_RCC_GPIOB_CLK_ENABLE(); /**TIM4 GPIO Configuration PB9 ------> TIM4_CH4 */ GPIO_InitStruct.Pin = BUZZER_Pin; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(BUZZER_GPIO_Port, &GPIO_InitStruct); /* USER CODE BEGIN TIM4_MspPostInit 1 */ /* USER CODE END TIM4_MspPostInit 1 */ } } /** * @brief TIM_Base MSP De-Initialization * This function freeze the hardware resources used in this example * @param htim_base: TIM_Base handle pointer * @retval None */ void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base) { if(htim_base->Instance==TIM1) { /* USER CODE BEGIN TIM1_MspDeInit 0 */ /* USER CODE END TIM1_MspDeInit 0 */ /* Peripheral clock disable */ __HAL_RCC_TIM1_CLK_DISABLE(); /**TIM1 GPIO Configuration PA11 ------> TIM1_CH4 PA12 ------> TIM1_ETR */ HAL_GPIO_DeInit(GPIOA, GUN_POWER_Pin|AC_ZERO_Pin); /* TIM1 interrupt DeInit */ HAL_NVIC_DisableIRQ(TIM1_CC_IRQn); /* USER CODE BEGIN TIM1_MspDeInit 1 */ /* USER CODE END TIM1_MspDeInit 1 */ } else if(htim_base->Instance==TIM2) { /* USER CODE BEGIN TIM2_MspDeInit 0 */ /* USER CODE END TIM2_MspDeInit 0 */ /* Peripheral clock disable */ __HAL_RCC_TIM2_CLK_DISABLE(); /* TIM2 interrupt DeInit */ HAL_NVIC_DisableIRQ(TIM2_IRQn); /* USER CODE BEGIN TIM2_MspDeInit 1 */ /* USER CODE END TIM2_MspDeInit 1 */ } else if(htim_base->Instance==TIM4) { /* USER CODE BEGIN TIM4_MspDeInit 0 */ /* USER CODE END TIM4_MspDeInit 0 */ /* Peripheral clock disable */ __HAL_RCC_TIM4_CLK_DISABLE(); /* USER CODE BEGIN TIM4_MspDeInit 1 */ /* USER CODE END TIM4_MspDeInit 1 */ } } /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ ================================================ FILE: Src/stm32f1xx_it.c ================================================ /* USER CODE BEGIN Header */ /** ****************************************************************************** * @file stm32f1xx_it.c * @brief Interrupt Service Routines. ****************************************************************************** * @attention * *

© Copyright (c) 2019 STMicroelectronics. * All rights reserved.

* * This software component is licensed by ST under BSD 3-Clause license, * the "License"; You may not use this file except in compliance with the * License. You may obtain a copy of the License at: * opensource.org/licenses/BSD-3-Clause * ****************************************************************************** */ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include "main.h" #include "stm32f1xx_it.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN TD */ /* USER CODE END TD */ /* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD */ /* USER CODE END PD */ /* Private macro -------------------------------------------------------------*/ /* USER CODE BEGIN PM */ /* USER CODE END PM */ /* Private variables ---------------------------------------------------------*/ /* USER CODE BEGIN PV */ /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ /* USER CODE BEGIN PFP */ /* USER CODE END PFP */ /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ /* USER CODE END 0 */ /* External variables --------------------------------------------------------*/ extern DMA_HandleTypeDef hdma_adc1; extern TIM_HandleTypeDef htim1; extern TIM_HandleTypeDef htim2; /* USER CODE BEGIN EV */ /* USER CODE END EV */ /******************************************************************************/ /* Cortex-M3 Processor Interruption and Exception Handlers */ /******************************************************************************/ /** * @brief This function handles Non maskable interrupt. */ void NMI_Handler(void) { /* USER CODE BEGIN NonMaskableInt_IRQn 0 */ /* USER CODE END NonMaskableInt_IRQn 0 */ /* USER CODE BEGIN NonMaskableInt_IRQn 1 */ /* USER CODE END NonMaskableInt_IRQn 1 */ } /** * @brief This function handles Hard fault interrupt. */ void HardFault_Handler(void) { /* USER CODE BEGIN HardFault_IRQn 0 */ /* USER CODE END HardFault_IRQn 0 */ while (1) { /* USER CODE BEGIN W1_HardFault_IRQn 0 */ /* USER CODE END W1_HardFault_IRQn 0 */ } } /** * @brief This function handles Memory management fault. */ void MemManage_Handler(void) { /* USER CODE BEGIN MemoryManagement_IRQn 0 */ /* USER CODE END MemoryManagement_IRQn 0 */ while (1) { /* USER CODE BEGIN W1_MemoryManagement_IRQn 0 */ /* USER CODE END W1_MemoryManagement_IRQn 0 */ } } /** * @brief This function handles Prefetch fault, memory access fault. */ void BusFault_Handler(void) { /* USER CODE BEGIN BusFault_IRQn 0 */ /* USER CODE END BusFault_IRQn 0 */ while (1) { /* USER CODE BEGIN W1_BusFault_IRQn 0 */ /* USER CODE END W1_BusFault_IRQn 0 */ } } /** * @brief This function handles Undefined instruction or illegal state. */ void UsageFault_Handler(void) { /* USER CODE BEGIN UsageFault_IRQn 0 */ /* USER CODE END UsageFault_IRQn 0 */ while (1) { /* USER CODE BEGIN W1_UsageFault_IRQn 0 */ /* USER CODE END W1_UsageFault_IRQn 0 */ } } /** * @brief This function handles System service call via SWI instruction. */ void SVC_Handler(void) { /* USER CODE BEGIN SVCall_IRQn 0 */ /* USER CODE END SVCall_IRQn 0 */ /* USER CODE BEGIN SVCall_IRQn 1 */ /* USER CODE END SVCall_IRQn 1 */ } /** * @brief This function handles Debug monitor. */ void DebugMon_Handler(void) { /* USER CODE BEGIN DebugMonitor_IRQn 0 */ /* USER CODE END DebugMonitor_IRQn 0 */ /* USER CODE BEGIN DebugMonitor_IRQn 1 */ /* USER CODE END DebugMonitor_IRQn 1 */ } /** * @brief This function handles Pendable request for system service. */ void PendSV_Handler(void) { /* USER CODE BEGIN PendSV_IRQn 0 */ /* USER CODE END PendSV_IRQn 0 */ /* USER CODE BEGIN PendSV_IRQn 1 */ /* USER CODE END PendSV_IRQn 1 */ } /** * @brief This function handles System tick timer. */ void SysTick_Handler(void) { /* USER CODE BEGIN SysTick_IRQn 0 */ /* USER CODE END SysTick_IRQn 0 */ HAL_IncTick(); /* USER CODE BEGIN SysTick_IRQn 1 */ /* USER CODE END SysTick_IRQn 1 */ } /******************************************************************************/ /* STM32F1xx Peripheral Interrupt Handlers */ /* Add here the Interrupt Handlers for the used peripherals. */ /* For the available peripheral interrupt handler names, */ /* please refer to the startup file (startup_stm32f1xx.s). */ /******************************************************************************/ /** * @brief This function handles DMA1 channel1 global interrupt. */ void DMA1_Channel1_IRQHandler(void) { /* USER CODE BEGIN DMA1_Channel1_IRQn 0 */ /* USER CODE END DMA1_Channel1_IRQn 0 */ HAL_DMA_IRQHandler(&hdma_adc1); /* USER CODE BEGIN DMA1_Channel1_IRQn 1 */ /* USER CODE END DMA1_Channel1_IRQn 1 */ } /** * @brief This function handles TIM1 capture compare interrupt. */ void TIM1_CC_IRQHandler(void) { /* USER CODE BEGIN TIM1_CC_IRQn 0 */ /* USER CODE END TIM1_CC_IRQn 0 */ HAL_TIM_IRQHandler(&htim1); /* USER CODE BEGIN TIM1_CC_IRQn 1 */ /* USER CODE END TIM1_CC_IRQn 1 */ } /** * @brief This function handles TIM2 global interrupt. */ void TIM2_IRQHandler(void) { /* USER CODE BEGIN TIM2_IRQn 0 */ /* USER CODE END TIM2_IRQn 0 */ HAL_TIM_IRQHandler(&htim2); /* USER CODE BEGIN TIM2_IRQn 1 */ /* USER CODE END TIM2_IRQn 1 */ } /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ ================================================ FILE: Src/syscalls.c ================================================ /** ***************************************************************************** ** ** File : syscalls.c ** ** Abstract : System Workbench Minimal System calls file ** ** For more information about which c-functions ** need which of these lowlevel functions ** please consult the Newlib libc-manual ** ** Environment : System Workbench for MCU ** ** Distribution: The file is distributed as is, without any warranty ** of any kind. ** ***************************************************************************** ** **

© COPYRIGHT(c) 2014 Ac6

** ** Redistribution and use in source and binary forms, with or without modification, ** are permitted provided that the following conditions are met: ** 1. Redistributions of source code must retain the above copyright notice, ** this list of conditions and the following disclaimer. ** 2. Redistributions in binary form must reproduce the above copyright notice, ** this list of conditions and the following disclaimer in the documentation ** and/or other materials provided with the distribution. ** 3. Neither the name of Ac6 nor the names of its contributors ** may be used to endorse or promote products derived from this software ** without specific prior written permission. ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" ** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE ** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE ** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE ** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL ** DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR ** SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER ** CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, ** OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ** ***************************************************************************** */ /* Includes */ #include #include #include #include #include #include #include #include /* Variables */ //#undef errno extern int errno; extern int __io_putchar(int ch) __attribute__((weak)); extern int __io_getchar(void) __attribute__((weak)); register char * stack_ptr asm("sp"); char *__env[1] = { 0 }; char **environ = __env; /* Functions */ void initialise_monitor_handles() { } int _getpid(void) { return 1; } int _kill(int pid, int sig) { errno = EINVAL; return -1; } void _exit (int status) { _kill(status, -1); while (1) {} /* Make sure we hang here */ } __attribute__((weak)) int _read(int file, char *ptr, int len) { int DataIdx; for (DataIdx = 0; DataIdx < len; DataIdx++) { *ptr++ = __io_getchar(); } return len; } __attribute__((weak)) int _write(int file, char *ptr, int len) { int DataIdx; for (DataIdx = 0; DataIdx < len; DataIdx++) { __io_putchar(*ptr++); } return len; } caddr_t _sbrk(int incr) { extern char end asm("end"); static char *heap_end; char *prev_heap_end; if (heap_end == 0) heap_end = &end; prev_heap_end = heap_end; if (heap_end + incr > stack_ptr) { // write(1, "Heap and stack collision\n", 25); // abort(); errno = ENOMEM; return (caddr_t) -1; } heap_end += incr; return (caddr_t) prev_heap_end; } int _close(int file) { return -1; } int _fstat(int file, struct stat *st) { st->st_mode = S_IFCHR; return 0; } int _isatty(int file) { return 1; } int _lseek(int file, int ptr, int dir) { return 0; } int _open(char *path, int flags, ...) { /* Pretend like we always fail */ return -1; } int _wait(int *status) { errno = ECHILD; return -1; } int _unlink(char *name) { errno = ENOENT; return -1; } int _times(struct tms *buf) { return -1; } int _stat(char *file, struct stat *st) { st->st_mode = S_IFCHR; return 0; } int _link(char *old, char *new) { errno = EMLINK; return -1; } int _fork(void) { errno = EAGAIN; return -1; } int _execve(char *name, char **argv, char **env) { errno = ENOMEM; return -1; } ================================================ FILE: Src/system_stm32f1xx.c ================================================ /** ****************************************************************************** * @file system_stm32f1xx.c * @author MCD Application Team * @brief CMSIS Cortex-M3 Device Peripheral Access Layer System Source File. * * 1. This file provides two functions and one global variable to be called from * user application: * - SystemInit(): Setups the system clock (System clock source, PLL Multiplier * factors, AHB/APBx prescalers and Flash settings). * This function is called at startup just after reset and * before branch to main program. This call is made inside * the "startup_stm32f1xx_xx.s" file. * * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used * by the user application to setup the SysTick * timer or configure other parameters. * * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must * be called whenever the core clock is changed * during program execution. * * 2. After each device reset the HSI (8 MHz) is used as system clock source. * Then SystemInit() function is called, in "startup_stm32f1xx_xx.s" file, to * configure the system clock before to branch to main program. * * 4. The default value of HSE crystal is set to 8 MHz (or 25 MHz, depending on * the product used), refer to "HSE_VALUE". * When HSE is used as system clock source, directly or through PLL, and you * are using different crystal you have to adapt the HSE value to your own * configuration. * ****************************************************************************** * @attention * *

© Copyright (c) 2017 STMicroelectronics. * All rights reserved.

* * This software component is licensed by ST under BSD 3-Clause license, * the "License"; You may not use this file except in compliance with the * License. You may obtain a copy of the License at: * opensource.org/licenses/BSD-3-Clause * ****************************************************************************** */ /** @addtogroup CMSIS * @{ */ /** @addtogroup stm32f1xx_system * @{ */ /** @addtogroup STM32F1xx_System_Private_Includes * @{ */ #include "stm32f1xx.h" /** * @} */ /** @addtogroup STM32F1xx_System_Private_TypesDefinitions * @{ */ /** * @} */ /** @addtogroup STM32F1xx_System_Private_Defines * @{ */ #if !defined (HSE_VALUE) #define HSE_VALUE 8000000U /*!< Default value of the External oscillator in Hz. This value can be provided and adapted by the user application. */ #endif /* HSE_VALUE */ #if !defined (HSI_VALUE) #define HSI_VALUE 8000000U /*!< Default value of the Internal oscillator in Hz. This value can be provided and adapted by the user application. */ #endif /* HSI_VALUE */ /*!< Uncomment the following line if you need to use external SRAM */ #if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) /* #define DATA_IN_ExtSRAM */ #endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG */ /*!< Uncomment the following line if you need to relocate your vector Table in Internal SRAM. */ /* #define VECT_TAB_SRAM */ #define VECT_TAB_OFFSET 0x00000000U /*!< Vector Table base offset field. This value must be a multiple of 0x200. */ /** * @} */ /** @addtogroup STM32F1xx_System_Private_Macros * @{ */ /** * @} */ /** @addtogroup STM32F1xx_System_Private_Variables * @{ */ /* This variable is updated in three ways: 1) by calling CMSIS function SystemCoreClockUpdate() 2) by calling HAL API function HAL_RCC_GetHCLKFreq() 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency Note: If you use this function to configure the system clock; then there is no need to call the 2 first functions listed above, since SystemCoreClock variable is updated automatically. */ uint32_t SystemCoreClock = 16000000; const uint8_t AHBPrescTable[16U] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9}; const uint8_t APBPrescTable[8U] = {0, 0, 0, 0, 1, 2, 3, 4}; /** * @} */ /** @addtogroup STM32F1xx_System_Private_FunctionPrototypes * @{ */ #if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) #ifdef DATA_IN_ExtSRAM static void SystemInit_ExtMemCtl(void); #endif /* DATA_IN_ExtSRAM */ #endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG */ /** * @} */ /** @addtogroup STM32F1xx_System_Private_Functions * @{ */ /** * @brief Setup the microcontroller system * Initialize the Embedded Flash Interface, the PLL and update the * SystemCoreClock variable. * @note This function should be used only after reset. * @param None * @retval None */ void SystemInit (void) { /* Reset the RCC clock configuration to the default reset state(for debug purpose) */ /* Set HSION bit */ RCC->CR |= 0x00000001U; /* Reset SW, HPRE, PPRE1, PPRE2, ADCPRE and MCO bits */ #if !defined(STM32F105xC) && !defined(STM32F107xC) RCC->CFGR &= 0xF8FF0000U; #else RCC->CFGR &= 0xF0FF0000U; #endif /* STM32F105xC */ /* Reset HSEON, CSSON and PLLON bits */ RCC->CR &= 0xFEF6FFFFU; /* Reset HSEBYP bit */ RCC->CR &= 0xFFFBFFFFU; /* Reset PLLSRC, PLLXTPRE, PLLMUL and USBPRE/OTGFSPRE bits */ RCC->CFGR &= 0xFF80FFFFU; #if defined(STM32F105xC) || defined(STM32F107xC) /* Reset PLL2ON and PLL3ON bits */ RCC->CR &= 0xEBFFFFFFU; /* Disable all interrupts and clear pending bits */ RCC->CIR = 0x00FF0000U; /* Reset CFGR2 register */ RCC->CFGR2 = 0x00000000U; #elif defined(STM32F100xB) || defined(STM32F100xE) /* Disable all interrupts and clear pending bits */ RCC->CIR = 0x009F0000U; /* Reset CFGR2 register */ RCC->CFGR2 = 0x00000000U; #else /* Disable all interrupts and clear pending bits */ RCC->CIR = 0x009F0000U; #endif /* STM32F105xC */ #if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) #ifdef DATA_IN_ExtSRAM SystemInit_ExtMemCtl(); #endif /* DATA_IN_ExtSRAM */ #endif #ifdef VECT_TAB_SRAM SCB->VTOR = SRAM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM. */ #else SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH. */ #endif } /** * @brief Update SystemCoreClock variable according to Clock Register Values. * The SystemCoreClock variable contains the core clock (HCLK), it can * be used by the user application to setup the SysTick timer or configure * other parameters. * * @note Each time the core clock (HCLK) changes, this function must be called * to update SystemCoreClock variable value. Otherwise, any configuration * based on this variable will be incorrect. * * @note - The system frequency computed by this function is not the real * frequency in the chip. It is calculated based on the predefined * constant and the selected clock source: * * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*) * * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**) * * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**) * or HSI_VALUE(*) multiplied by the PLL factors. * * (*) HSI_VALUE is a constant defined in stm32f1xx.h file (default value * 8 MHz) but the real value may vary depending on the variations * in voltage and temperature. * * (**) HSE_VALUE is a constant defined in stm32f1xx.h file (default value * 8 MHz or 25 MHz, depending on the product used), user has to ensure * that HSE_VALUE is same as the real frequency of the crystal used. * Otherwise, this function may have wrong result. * * - The result of this function could be not correct when using fractional * value for HSE crystal. * @param None * @retval None */ void SystemCoreClockUpdate (void) { uint32_t tmp = 0U, pllmull = 0U, pllsource = 0U; #if defined(STM32F105xC) || defined(STM32F107xC) uint32_t prediv1source = 0U, prediv1factor = 0U, prediv2factor = 0U, pll2mull = 0U; #endif /* STM32F105xC */ #if defined(STM32F100xB) || defined(STM32F100xE) uint32_t prediv1factor = 0U; #endif /* STM32F100xB or STM32F100xE */ /* Get SYSCLK source -------------------------------------------------------*/ tmp = RCC->CFGR & RCC_CFGR_SWS; switch (tmp) { case 0x00U: /* HSI used as system clock */ SystemCoreClock = HSI_VALUE; break; case 0x04U: /* HSE used as system clock */ SystemCoreClock = HSE_VALUE; break; case 0x08U: /* PLL used as system clock */ /* Get PLL clock source and multiplication factor ----------------------*/ pllmull = RCC->CFGR & RCC_CFGR_PLLMULL; pllsource = RCC->CFGR & RCC_CFGR_PLLSRC; #if !defined(STM32F105xC) && !defined(STM32F107xC) pllmull = ( pllmull >> 18U) + 2U; if (pllsource == 0x00U) { /* HSI oscillator clock divided by 2 selected as PLL clock entry */ SystemCoreClock = (HSI_VALUE >> 1U) * pllmull; } else { #if defined(STM32F100xB) || defined(STM32F100xE) prediv1factor = (RCC->CFGR2 & RCC_CFGR2_PREDIV1) + 1U; /* HSE oscillator clock selected as PREDIV1 clock entry */ SystemCoreClock = (HSE_VALUE / prediv1factor) * pllmull; #else /* HSE selected as PLL clock entry */ if ((RCC->CFGR & RCC_CFGR_PLLXTPRE) != (uint32_t)RESET) {/* HSE oscillator clock divided by 2 */ SystemCoreClock = (HSE_VALUE >> 1U) * pllmull; } else { SystemCoreClock = HSE_VALUE * pllmull; } #endif } #else pllmull = pllmull >> 18U; if (pllmull != 0x0DU) { pllmull += 2U; } else { /* PLL multiplication factor = PLL input clock * 6.5 */ pllmull = 13U / 2U; } if (pllsource == 0x00U) { /* HSI oscillator clock divided by 2 selected as PLL clock entry */ SystemCoreClock = (HSI_VALUE >> 1U) * pllmull; } else {/* PREDIV1 selected as PLL clock entry */ /* Get PREDIV1 clock source and division factor */ prediv1source = RCC->CFGR2 & RCC_CFGR2_PREDIV1SRC; prediv1factor = (RCC->CFGR2 & RCC_CFGR2_PREDIV1) + 1U; if (prediv1source == 0U) { /* HSE oscillator clock selected as PREDIV1 clock entry */ SystemCoreClock = (HSE_VALUE / prediv1factor) * pllmull; } else {/* PLL2 clock selected as PREDIV1 clock entry */ /* Get PREDIV2 division factor and PLL2 multiplication factor */ prediv2factor = ((RCC->CFGR2 & RCC_CFGR2_PREDIV2) >> 4U) + 1U; pll2mull = ((RCC->CFGR2 & RCC_CFGR2_PLL2MUL) >> 8U) + 2U; SystemCoreClock = (((HSE_VALUE / prediv2factor) * pll2mull) / prediv1factor) * pllmull; } } #endif /* STM32F105xC */ break; default: SystemCoreClock = HSI_VALUE; break; } /* Compute HCLK clock frequency ----------------*/ /* Get HCLK prescaler */ tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4U)]; /* HCLK clock frequency */ SystemCoreClock >>= tmp; } #if defined(STM32F100xE) || defined(STM32F101xE) || defined(STM32F101xG) || defined(STM32F103xE) || defined(STM32F103xG) /** * @brief Setup the external memory controller. Called in startup_stm32f1xx.s * before jump to __main * @param None * @retval None */ #ifdef DATA_IN_ExtSRAM /** * @brief Setup the external memory controller. * Called in startup_stm32f1xx_xx.s/.c before jump to main. * This function configures the external SRAM mounted on STM3210E-EVAL * board (STM32 High density devices). This SRAM will be used as program * data memory (including heap and stack). * @param None * @retval None */ void SystemInit_ExtMemCtl(void) { __IO uint32_t tmpreg; /*!< FSMC Bank1 NOR/SRAM3 is used for the STM3210E-EVAL, if another Bank is required, then adjust the Register Addresses */ /* Enable FSMC clock */ RCC->AHBENR = 0x00000114U; /* Delay after an RCC peripheral clock enabling */ tmpreg = READ_BIT(RCC->AHBENR, RCC_AHBENR_FSMCEN); /* Enable GPIOD, GPIOE, GPIOF and GPIOG clocks */ RCC->APB2ENR = 0x000001E0U; /* Delay after an RCC peripheral clock enabling */ tmpreg = READ_BIT(RCC->APB2ENR, RCC_APB2ENR_IOPDEN); (void)(tmpreg); /* --------------- SRAM Data lines, NOE and NWE configuration ---------------*/ /*---------------- SRAM Address lines configuration -------------------------*/ /*---------------- NOE and NWE configuration --------------------------------*/ /*---------------- NE3 configuration ----------------------------------------*/ /*---------------- NBL0, NBL1 configuration ---------------------------------*/ GPIOD->CRL = 0x44BB44BBU; GPIOD->CRH = 0xBBBBBBBBU; GPIOE->CRL = 0xB44444BBU; GPIOE->CRH = 0xBBBBBBBBU; GPIOF->CRL = 0x44BBBBBBU; GPIOF->CRH = 0xBBBB4444U; GPIOG->CRL = 0x44BBBBBBU; GPIOG->CRH = 0x444B4B44U; /*---------------- FSMC Configuration ---------------------------------------*/ /*---------------- Enable FSMC Bank1_SRAM Bank ------------------------------*/ FSMC_Bank1->BTCR[4U] = 0x00001091U; FSMC_Bank1->BTCR[5U] = 0x00110212U; } #endif /* DATA_IN_ExtSRAM */ #endif /* STM32F100xE || STM32F101xE || STM32F101xG || STM32F103xE || STM32F103xG */ /** * @} */ /** * @} */ /** * @} */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ ================================================ FILE: Src/tools.cpp ================================================ /* * tools.cpp * * Created on: 13 . 2019 . * Author: Alex */ #include "tools.h" // Arduino IDE map() function: maps the value from v_ interval to r_ interval int32_t map(int32_t value, int32_t v_min, int32_t v_max, int32_t r_min, int32_t r_max) { if (v_min == v_max) return r_min; int32_t round = (v_max - v_min) >> 1; return ((value - v_min) * (r_max - r_min) + round) / (v_max - v_min) + r_min; } // Calculate non-linear power gauge. Translate p_middle percentage to gauge middle interval uint8_t gauge(uint8_t percent, uint8_t p_middle, uint8_t g_max) { if (percent > 100) percent = 100; if (p_middle > 70) p_middle = 70; if (g_max < 10) g_max = 10; if (percent <= p_middle) { return map(percent, 0, p_middle, 0, g_max >> 1); } else { return map(percent, p_middle+1, 100, (g_max >> 1)+1, g_max); } } // Arduino constrain() function: limits the value inside the required interval int32_t constrain(int32_t value, int32_t min, int32_t max) { if (value < min) return min; if (value > max) return max; return value; } //Convert integer Celsius temperature to the Fahrenheit int16_t celsiusToFahrenheit(int16_t cels) { return (cels *9 + 32*5 + 2)/5; } // Convert integer Fahrenheit temperature to the Celsius int16_t fahrenheitToCelsius(int16_t fahr) { return (fahr - 32*5 + 5) / 9; } ================================================ FILE: Src/unit.cpp ================================================ /* * unit.cpp * * Created on: 13 June 2022 * Author: Alex */ #include "unit.h" void UNIT::init(uint8_t c_len, uint16_t c_min, uint16_t c_max, uint8_t s_len, uint16_t s_min, uint16_t s_max) { current.init(c_len, c_min, c_max); sw.init(s_len, s_min, s_max); } bool UNIT::isReedSwitch(bool reed) { if (reed) return sw.status(); // TRUE if switch is open (IRON in use) return sw.changed(); // TRUE if tilt status has been changed } ================================================ FILE: Src/vars.cpp ================================================ /* * vars.cpp * * Created on: 23 . 2019 . * Author: Alex */ #include "vars.h" const uint16_t int_temp_max = 3700; // Maximum possible temperature in internal units const uint8_t auto_pid_hist_length = 16; // The history data length of PID tuner average values const uint8_t hot_gun_hist_length = 10; // The history data length of Hot Air Gun average values const uint8_t ec = 200; // Exponential average coefficient (default value) const uint16_t iron_temp_minC = 180; // Minimum IRON calibration temperature in degrees of Celsius const uint16_t iron_temp_maxC = 450; // Maximum IRON calibration temperature in degrees of Celsius const uint16_t gun_temp_minC = 80; // Minimum Hot Air Gun calibration temperature in degrees of Celsius const uint16_t gun_temp_maxC = 500; // Maximum Hot Air Gun calibration temperature in degrees of Celsius const uint8_t default_ambient = 25; ================================================ FILE: eagle/display_board.brd ================================================ <b>Resistors, Capacitors, Inductors</b><p> Based on the previous libraries: <ul> <li>r.lbr <li>cap.lbr <li>cap-fe.lbr <li>captant.lbr <li>polcap.lbr <li>ipc-smd.lbr </ul> All SMD packages are defined according to the IPC specifications and CECC<p> <author>Created by librarian@cadsoft.de</author><p> <p> for Electrolyt Capacitors see also :<p> www.bccomponents.com <p> www.panasonic.com<p> www.kemet.com<p> http://www.secc.co.jp/pdf/os_e/2004/e_os_all.pdf <b>(SANYO)</b> <p> for trimmer refence see : <u>www.electrospec-inc.com/cross_references/trimpotcrossref.asp</u><p> <table border=0 cellspacing=0 cellpadding=0 width="100%" cellpaddding=0> <tr valign="top"> <! <td width="10">&nbsp;</td> <td width="90%"> <b><font color="#0000FF" size="4">TRIM-POT CROSS REFERENCE</font></b> <P> <TABLE BORDER=0 CELLSPACING=1 CELLPADDING=2> <TR> <TD COLSPAN=8> <FONT SIZE=3 FACE=ARIAL><B>RECTANGULAR MULTI-TURN</B></FONT> </TD> </TR> <TR> <TD ALIGN=CENTER> <B> <FONT SIZE=3 FACE=ARIAL color="#FF0000">BOURNS</FONT> </B> </TD> <TD ALIGN=CENTER> <B> <FONT SIZE=3 FACE=ARIAL color="#FF0000">BI&nbsp;TECH</FONT> </B> </TD> <TD ALIGN=CENTER> <B> <FONT SIZE=3 FACE=ARIAL color="#FF0000">DALE-VISHAY</FONT> </B> </TD> <TD ALIGN=CENTER> <B> <FONT SIZE=3 FACE=ARIAL color="#FF0000">PHILIPS/MEPCO</FONT> </B> </TD> <TD ALIGN=CENTER> <B> <FONT SIZE=3 FACE=ARIAL color="#FF0000">MURATA</FONT> </B> </TD> <TD ALIGN=CENTER> <B> <FONT SIZE=3 FACE=ARIAL color="#FF0000">PANASONIC</FONT> </B> </TD> <TD ALIGN=CENTER> <B> <FONT SIZE=3 FACE=ARIAL color="#FF0000">SPECTROL</FONT> </B> </TD> <TD ALIGN=CENTER> <B> <FONT SIZE=3 FACE=ARIAL color="#FF0000">MILSPEC</FONT> </B> </TD><TD>&nbsp;</TD> </TR> <TR> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3 > 3005P<BR> 3006P<BR> 3006W<BR> 3006Y<BR> 3009P<BR> 3009W<BR> 3009Y<BR> 3057J<BR> 3057L<BR> 3057P<BR> 3057Y<BR> 3059J<BR> 3059L<BR> 3059P<BR> 3059Y<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> 89P<BR> 89W<BR> 89X<BR> 89PH<BR> 76P<BR> 89XH<BR> 78SLT<BR> 78L&nbsp;ALT<BR> 56P&nbsp;ALT<BR> 78P&nbsp;ALT<BR> T8S<BR> 78L<BR> 56P<BR> 78P<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> T18/784<BR> 783<BR> 781<BR> -<BR> -<BR> -<BR> 2199<BR> 1697/1897<BR> 1680/1880<BR> 2187<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> 8035EKP/CT20/RJ-20P<BR> -<BR> RJ-20X<BR> -<BR> -<BR> -<BR> 1211L<BR> 8012EKQ&nbsp;ALT<BR> 8012EKR&nbsp;ALT<BR> 1211P<BR> 8012EKJ<BR> 8012EKL<BR> 8012EKQ<BR> 8012EKR<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> 2101P<BR> 2101W<BR> 2101Y<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> 2102L<BR> 2102S<BR> 2102Y<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> EVMCOG<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> 43P<BR> 43W<BR> 43Y<BR> -<BR> -<BR> -<BR> -<BR> 40L<BR> 40P<BR> 40Y<BR> 70Y-T602<BR> 70L<BR> 70P<BR> 70Y<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> RT/RTR12<BR> RT/RTR12<BR> RT/RTR12<BR> -<BR> RJ/RJR12<BR> RJ/RJR12<BR> RJ/RJR12<BR></FONT> </TD> </TR> <TR> <TD COLSPAN=8>&nbsp; </TD> </TR> <TR> <TD COLSPAN=8> <FONT SIZE=4 FACE=ARIAL><B>SQUARE MULTI-TURN</B></FONT> </TD> </TR> <TR> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>BOURN</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>BI&nbsp;TECH</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>MURATA</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>SPECTROL</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>MILSPEC</B></FONT> </TD> </TR> <TR> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 3250L<BR> 3250P<BR> 3250W<BR> 3250X<BR> 3252P<BR> 3252W<BR> 3252X<BR> 3260P<BR> 3260W<BR> 3260X<BR> 3262P<BR> 3262W<BR> 3262X<BR> 3266P<BR> 3266W<BR> 3266X<BR> 3290H<BR> 3290P<BR> 3290W<BR> 3292P<BR> 3292W<BR> 3292X<BR> 3296P<BR> 3296W<BR> 3296X<BR> 3296Y<BR> 3296Z<BR> 3299P<BR> 3299W<BR> 3299X<BR> 3299Y<BR> 3299Z<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> 66P&nbsp;ALT<BR> 66W&nbsp;ALT<BR> 66X&nbsp;ALT<BR> 66P&nbsp;ALT<BR> 66W&nbsp;ALT<BR> 66X&nbsp;ALT<BR> -<BR> 64W&nbsp;ALT<BR> -<BR> 64P&nbsp;ALT<BR> 64W&nbsp;ALT<BR> 64X&nbsp;ALT<BR> 64P<BR> 64W<BR> 64X<BR> 66X&nbsp;ALT<BR> 66P&nbsp;ALT<BR> 66W&nbsp;ALT<BR> 66P<BR> 66W<BR> 66X<BR> 67P<BR> 67W<BR> 67X<BR> 67Y<BR> 67Z<BR> 68P<BR> 68W<BR> 68X<BR> 67Y&nbsp;ALT<BR> 67Z&nbsp;ALT<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 5050<BR> 5091<BR> 5080<BR> 5087<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> T63YB<BR> T63XB<BR> -<BR> -<BR> -<BR> 5887<BR> 5891<BR> 5880<BR> -<BR> -<BR> -<BR> T93Z<BR> T93YA<BR> T93XA<BR> T93YB<BR> T93XB<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> 8026EKP<BR> 8026EKW<BR> 8026EKM<BR> 8026EKP<BR> 8026EKB<BR> 8026EKM<BR> 1309X<BR> 1309P<BR> 1309W<BR> 8024EKP<BR> 8024EKW<BR> 8024EKN<BR> RJ-9P/CT9P<BR> RJ-9W<BR> RJ-9X<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> 3103P<BR> 3103Y<BR> 3103Z<BR> 3103P<BR> 3103Y<BR> 3103Z<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> 3105P/3106P<BR> 3105W/3106W<BR> 3105X/3106X<BR> 3105Y/3106Y<BR> 3105Z/3105Z<BR> 3102P<BR> 3102W<BR> 3102X<BR> 3102Y<BR> 3102Z<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> EVMCBG<BR> EVMCCG<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 55-1-X<BR> 55-4-X<BR> 55-3-X<BR> 55-2-X<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> 50-2-X<BR> 50-4-X<BR> 50-3-X<BR> -<BR> -<BR> -<BR> 64P<BR> 64W<BR> 64X<BR> 64Y<BR> 64Z<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> RT/RTR22<BR> RT/RTR22<BR> RT/RTR22<BR> RT/RTR22<BR> RJ/RJR22<BR> RJ/RJR22<BR> RJ/RJR22<BR> RT/RTR26<BR> RT/RTR26<BR> RT/RTR26<BR> RJ/RJR26<BR> RJ/RJR26<BR> RJ/RJR26<BR> RJ/RJR26<BR> RJ/RJR26<BR> RJ/RJR26<BR> RT/RTR24<BR> RT/RTR24<BR> RT/RTR24<BR> RJ/RJR24<BR> RJ/RJR24<BR> RJ/RJR24<BR> RJ/RJR24<BR> RJ/RJR24<BR> RJ/RJR24<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> </TR> <TR> <TD COLSPAN=8>&nbsp; </TD> </TR> <TR> <TD COLSPAN=8> <FONT SIZE=4 FACE=ARIAL><B>SINGLE TURN</B></FONT> </TD> </TR> <TR> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>BOURN</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>BI&nbsp;TECH</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>MURATA</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>SPECTROL</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>MILSPEC</B></FONT> </TD> </TR> <TR> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 3323P<BR> 3323S<BR> 3323W<BR> 3329H<BR> 3329P<BR> 3329W<BR> 3339H<BR> 3339P<BR> 3339W<BR> 3352E<BR> 3352H<BR> 3352K<BR> 3352P<BR> 3352T<BR> 3352V<BR> 3352W<BR> 3362H<BR> 3362M<BR> 3362P<BR> 3362R<BR> 3362S<BR> 3362U<BR> 3362W<BR> 3362X<BR> 3386B<BR> 3386C<BR> 3386F<BR> 3386H<BR> 3386K<BR> 3386M<BR> 3386P<BR> 3386S<BR> 3386W<BR> 3386X<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 25P<BR> 25S<BR> 25RX<BR> 82P<BR> 82M<BR> 82PA<BR> -<BR> -<BR> -<BR> 91E<BR> 91X<BR> 91T<BR> 91B<BR> 91A<BR> 91V<BR> 91W<BR> 25W<BR> 25V<BR> 25P<BR> -<BR> 25S<BR> 25U<BR> 25RX<BR> 25X<BR> 72XW<BR> 72XL<BR> 72PM<BR> 72RX<BR> -<BR> 72PX<BR> 72P<BR> 72RXW<BR> 72RXL<BR> 72X<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> T7YB<BR> T7YA<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> TXD<BR> TYA<BR> TYP<BR> -<BR> TYD<BR> TX<BR> -<BR> 150SX<BR> 100SX<BR> 102T<BR> 101S<BR> 190T<BR> 150TX<BR> 101<BR> -<BR> -<BR> 101SX<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> ET6P<BR> ET6S<BR> ET6X<BR> RJ-6W/8014EMW<BR> RJ-6P/8014EMP<BR> RJ-6X/8014EMX<BR> TM7W<BR> TM7P<BR> TM7X<BR> -<BR> 8017SMS<BR> -<BR> 8017SMB<BR> 8017SMA<BR> -<BR> -<BR> CT-6W<BR> CT-6H<BR> CT-6P<BR> CT-6R<BR> -<BR> CT-6V<BR> CT-6X<BR> -<BR> -<BR> 8038EKV<BR> -<BR> 8038EKX<BR> -<BR> -<BR> 8038EKP<BR> 8038EKZ<BR> 8038EKW<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> 3321H<BR> 3321P<BR> 3321N<BR> 1102H<BR> 1102P<BR> 1102T<BR> RVA0911V304A<BR> -<BR> RVA0911H413A<BR> RVG0707V100A<BR> RVA0607V(H)306A<BR> RVA1214H213A<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> 3104B<BR> 3104C<BR> 3104F<BR> 3104H<BR> -<BR> 3104M<BR> 3104P<BR> 3104S<BR> 3104W<BR> 3104X<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> EVMQ0G<BR> EVMQIG<BR> EVMQ3G<BR> EVMS0G<BR> EVMQ0G<BR> EVMG0G<BR> -<BR> -<BR> -<BR> EVMK4GA00B<BR> EVM30GA00B<BR> EVMK0GA00B<BR> EVM38GA00B<BR> EVMB6<BR> EVLQ0<BR> -<BR> EVMMSG<BR> EVMMBG<BR> EVMMAG<BR> -<BR> -<BR> EVMMCS<BR> -<BR> -<BR> -<BR> -<BR> -<BR> EVMM1<BR> -<BR> -<BR> EVMM0<BR> -<BR> -<BR> EVMM3<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> 62-3-1<BR> 62-1-2<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> 67R<BR> -<BR> 67P<BR> -<BR> -<BR> -<BR> -<BR> 67X<BR> 63V<BR> 63S<BR> 63M<BR> -<BR> -<BR> 63H<BR> 63P<BR> -<BR> -<BR> 63X<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> RJ/RJR50<BR> RJ/RJR50<BR> RJ/RJR50<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> </TR> </TABLE> <P>&nbsp;<P> <TABLE BORDER=0 CELLSPACING=1 CELLPADDING=3> <TR> <TD COLSPAN=7> <FONT color="#0000FF" SIZE=4 FACE=ARIAL><B>SMD TRIM-POT CROSS REFERENCE</B></FONT> <P> <FONT SIZE=4 FACE=ARIAL><B>MULTI-TURN</B></FONT> </TD> </TR> <TR> <TD> <FONT SIZE=3 FACE=ARIAL><B>BOURNS</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>BI&nbsp;TECH</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>TOCOS</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>AUX/KYOCERA</B></FONT> </TD> </TR> <TR> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 3224G<BR> 3224J<BR> 3224W<BR> 3269P<BR> 3269W<BR> 3269X<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 44G<BR> 44J<BR> 44W<BR> 84P<BR> 84W<BR> 84X<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> ST63Z<BR> ST63Y<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> ST5P<BR> ST5W<BR> ST5X<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> </TR> <TR> <TD COLSPAN=7>&nbsp; </TD> </TR> <TR> <TD COLSPAN=7> <FONT SIZE=4 FACE=ARIAL><B>SINGLE TURN</B></FONT> </TD> </TR> <TR> <TD> <FONT SIZE=3 FACE=ARIAL><B>BOURNS</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>BI&nbsp;TECH</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>TOCOS</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>AUX/KYOCERA</B></FONT> </TD> </TR> <TR> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 3314G<BR> 3314J<BR> 3364A/B<BR> 3364C/D<BR> 3364W/X<BR> 3313G<BR> 3313J<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 23B<BR> 23A<BR> 21X<BR> 21W<BR> -<BR> 22B<BR> 22A<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> ST5YL/ST53YL<BR> ST5YJ/5T53YJ<BR> ST-23A<BR> ST-22B<BR> ST-22<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> ST-4B<BR> ST-4A<BR> -<BR> -<BR> -<BR> ST-3B<BR> ST-3A<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> EVM-6YS<BR> EVM-1E<BR> EVM-1G<BR> EVM-1D<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> G4B<BR> G4A<BR> TR04-3S1<BR> TRG04-2S1<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> DVR-43A<BR> CVR-42C<BR> CVR-42A/C<BR> -<BR> -<BR></FONT> </TD> </TR> </TABLE> <P> <FONT SIZE=4 FACE=ARIAL><B>ALT =&nbsp;ALTERNATE</B></FONT> <P> &nbsp; <P> </td> </tr> </table> <b>CAPACITOR</b> >NAME >VALUE CAPACITOR <b>Pin Headers</b><p> Naming:<p> MA = male<p> # contacts - # rows<p> W = angled<p> <author>Created by librarian@cadsoft.de</author> <b>PIN HEADER</b> 1 >NAME >VALUE 10 PIN HEADER ALPS Switch from Markus Faust &lt;mfaust@htwm.de&gt;<p> Source: EC12E.scr from eagle.support.ger on news.cadsoft.de at 08.10.2007 ALPS rotary encoder<br> EC12E series with push-on switch >NAME >VALUE ALPS rotary encoder EC12E series with push-on switch <b>DIY Modules for Arduino, Raspberry Pi, CubieBoard etc.</b> <br><br> The library contains a list of symbols and footprints for popular, cheap and easy-to-use electronic modules.<br> The modules are intend to work with microprocessor-based platforms such as <a href="http://arduino.cc">Arduino</a>, <a href="http://raspberrypi.org/">Raspberry Pi</a>, <a href="http://cubieboard.org/">CubieBoard</a>, <a href="http://beagleboard.org/">BeagleBone</a> and many others. There are many manufacturers of the modules in the world. Almost all of them can be bought on <a href="ebay.com">ebay.com</a>.<br> <br> By using this library, you can design a PCB for devices created with usage of modules. Even if you do not need to create PCB design, you can also use the library to quickly document your work by drawing schematics of devices built by you.<br> <br> The latest version, examples, photos and much more can be found at: <b><a href="http://diymodules.org/eagle">diymodules.org/eagle</a></b><br><br> Comments, suggestions and bug reports please send to: <b><a href="mailto:eagle@diymodules.org">eagle@diymodules.org</b></a><br><br> <i>Version: 1.8.0 (2017-Jul-02)</i><br> <i>Created by: Miroslaw Brudnowski</i><br><br> <i>Released under the Creative Commons Attribution 4.0 International License: <a href="http://creativecommons.org/licenses/by/4.0">http://creativecommons.org/licenses/by/4.0</a></i> <br><br> <center> <a href="http://diymodules.org/eagle"><img src="http://www.diymodules.org/img/diymodules-lbr-image.php?v=1.8.0" alt="DIYmodules.org"></a> </center> <b>128x64 Dot Matrix OLED Module</b><br /> Variant with SPI interface >NAME >VALUE <b>EAGLE Design Rules</b> <p> Die Standard-Design-Rules sind so gewählt, dass sie für die meisten Anwendungen passen. Sollte ihre Platine besondere Anforderungen haben, treffen Sie die erforderlichen Einstellungen hier und speichern die Design Rules unter einem neuen Namen ab. <b>EAGLE Design Rules</b> <p> The default Design Rules have been set to cover a wide range of applications. Your particular design may have different requirements, so please make the necessary adjustments and save your customized design rules under a new name. Since Version 8.2, EAGLE supports online libraries. The ids of those online libraries will not be understood (or retained) with this version. Since Version 8.3, EAGLE supports URNs for individual library assets (packages, symbols, and devices). The URNs of those assets will not be understood (or retained) with this version. Since Version 8.3, EAGLE supports the association of 3D packages with devices in libraries, schematics, and board files. Those 3D packages will not be understood (or retained) with this version. ================================================ FILE: eagle/display_board.sch ================================================ ALPS Switch from Markus Faust &lt;mfaust@htwm.de&gt;<p> Source: EC12E.scr from eagle.support.ger on news.cadsoft.de at 08.10.2007 ALPS rotary encoder<br> EC12E series with push-on switch >NAME >VALUE ALPS rotary encoder EC12E series with push-on switch >PART >VALUE >PART >VALUE ALPS rotary Encoder EC12E series with switch <b>DIY Modules for Arduino, Raspberry Pi, CubieBoard etc.</b> <br><br> The library contains a list of symbols and footprints for popular, cheap and easy-to-use electronic modules.<br> The modules are intend to work with microprocessor-based platforms such as <a href="http://arduino.cc">Arduino</a>, <a href="http://raspberrypi.org/">Raspberry Pi</a>, <a href="http://cubieboard.org/">CubieBoard</a>, <a href="http://beagleboard.org/">BeagleBone</a> and many others. There are many manufacturers of the modules in the world. Almost all of them can be bought on <a href="ebay.com">ebay.com</a>.<br> <br> By using this library, you can design a PCB for devices created with usage of modules. Even if you do not need to create PCB design, you can also use the library to quickly document your work by drawing schematics of devices built by you.<br> <br> The latest version, examples, photos and much more can be found at: <b><a href="http://diymodules.org/eagle">diymodules.org/eagle</a></b><br><br> Comments, suggestions and bug reports please send to: <b><a href="mailto:eagle@diymodules.org">eagle@diymodules.org</b></a><br><br> <i>Version: 1.8.0 (2017-Jul-02)</i><br> <i>Created by: Miroslaw Brudnowski</i><br><br> <i>Released under the Creative Commons Attribution 4.0 International License: <a href="http://creativecommons.org/licenses/by/4.0">http://creativecommons.org/licenses/by/4.0</a></i> <br><br> <center> <a href="http://diymodules.org/eagle"><img src="http://www.diymodules.org/img/diymodules-lbr-image.php?v=1.8.0" alt="DIYmodules.org"></a> </center> <b>128x64 Dot Matrix OLED Module</b><br /> Variant with SPI interface >NAME >VALUE <b>128x64 Dot Matrix OLED Module</b> >NAME >VALUE 128x64 OLED <b>128x64 Dot Matrix OLED Module</b> based on <b>SSD1306</b> chip<br /> Variant with <b>SPI interface</b> <p>More details available here:<br /> <a href="http://www.instructables.com/id/How-to-use-OLED-display-arduino-module/">http://www.instructables.com/id/How-to-use-OLED-display-arduino-module/</a></p> <p><b>SSD1306</b> datasheet:<br> <a href="https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf">https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf</a></p> <p><b><a href="http://www.ebay.com/sch/oled+display+128x64">Click here to find device on ebay.com</a></b><br /> <b>Note:</b> There are two variants: I2C and SPI. Search for the proper version.</p> <p><img alt="photo" src="http://www.diymodules.org/img/device-photo.php?name=DISPLAY-OLED-128X64"></p> <b>Pin Headers</b><p> Naming:<p> MA = male<p> # contacts - # rows<p> W = angled<p> <author>Created by librarian@cadsoft.de</author> <b>PIN HEADER</b> 1 >NAME >VALUE 10 PIN HEADER >VALUE >NAME <b>PIN HEADER</b> <b>Resistors, Capacitors, Inductors</b><p> Based on the previous libraries: <ul> <li>r.lbr <li>cap.lbr <li>cap-fe.lbr <li>captant.lbr <li>polcap.lbr <li>ipc-smd.lbr </ul> All SMD packages are defined according to the IPC specifications and CECC<p> <author>Created by librarian@cadsoft.de</author><p> <p> for Electrolyt Capacitors see also :<p> www.bccomponents.com <p> www.panasonic.com<p> www.kemet.com<p> http://www.secc.co.jp/pdf/os_e/2004/e_os_all.pdf <b>(SANYO)</b> <p> for trimmer refence see : <u>www.electrospec-inc.com/cross_references/trimpotcrossref.asp</u><p> <table border=0 cellspacing=0 cellpadding=0 width="100%" cellpaddding=0> <tr valign="top"> <! <td width="10">&nbsp;</td> <td width="90%"> <b><font color="#0000FF" size="4">TRIM-POT CROSS REFERENCE</font></b> <P> <TABLE BORDER=0 CELLSPACING=1 CELLPADDING=2> <TR> <TD COLSPAN=8> <FONT SIZE=3 FACE=ARIAL><B>RECTANGULAR MULTI-TURN</B></FONT> </TD> </TR> <TR> <TD ALIGN=CENTER> <B> <FONT SIZE=3 FACE=ARIAL color="#FF0000">BOURNS</FONT> </B> </TD> <TD ALIGN=CENTER> <B> <FONT SIZE=3 FACE=ARIAL color="#FF0000">BI&nbsp;TECH</FONT> </B> </TD> <TD ALIGN=CENTER> <B> <FONT SIZE=3 FACE=ARIAL color="#FF0000">DALE-VISHAY</FONT> </B> </TD> <TD ALIGN=CENTER> <B> <FONT SIZE=3 FACE=ARIAL color="#FF0000">PHILIPS/MEPCO</FONT> </B> </TD> <TD ALIGN=CENTER> <B> <FONT SIZE=3 FACE=ARIAL color="#FF0000">MURATA</FONT> </B> </TD> <TD ALIGN=CENTER> <B> <FONT SIZE=3 FACE=ARIAL color="#FF0000">PANASONIC</FONT> </B> </TD> <TD ALIGN=CENTER> <B> <FONT SIZE=3 FACE=ARIAL color="#FF0000">SPECTROL</FONT> </B> </TD> <TD ALIGN=CENTER> <B> <FONT SIZE=3 FACE=ARIAL color="#FF0000">MILSPEC</FONT> </B> </TD><TD>&nbsp;</TD> </TR> <TR> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3 > 3005P<BR> 3006P<BR> 3006W<BR> 3006Y<BR> 3009P<BR> 3009W<BR> 3009Y<BR> 3057J<BR> 3057L<BR> 3057P<BR> 3057Y<BR> 3059J<BR> 3059L<BR> 3059P<BR> 3059Y<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> 89P<BR> 89W<BR> 89X<BR> 89PH<BR> 76P<BR> 89XH<BR> 78SLT<BR> 78L&nbsp;ALT<BR> 56P&nbsp;ALT<BR> 78P&nbsp;ALT<BR> T8S<BR> 78L<BR> 56P<BR> 78P<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> T18/784<BR> 783<BR> 781<BR> -<BR> -<BR> -<BR> 2199<BR> 1697/1897<BR> 1680/1880<BR> 2187<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> 8035EKP/CT20/RJ-20P<BR> -<BR> RJ-20X<BR> -<BR> -<BR> -<BR> 1211L<BR> 8012EKQ&nbsp;ALT<BR> 8012EKR&nbsp;ALT<BR> 1211P<BR> 8012EKJ<BR> 8012EKL<BR> 8012EKQ<BR> 8012EKR<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> 2101P<BR> 2101W<BR> 2101Y<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> 2102L<BR> 2102S<BR> 2102Y<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> EVMCOG<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> 43P<BR> 43W<BR> 43Y<BR> -<BR> -<BR> -<BR> -<BR> 40L<BR> 40P<BR> 40Y<BR> 70Y-T602<BR> 70L<BR> 70P<BR> 70Y<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> RT/RTR12<BR> RT/RTR12<BR> RT/RTR12<BR> -<BR> RJ/RJR12<BR> RJ/RJR12<BR> RJ/RJR12<BR></FONT> </TD> </TR> <TR> <TD COLSPAN=8>&nbsp; </TD> </TR> <TR> <TD COLSPAN=8> <FONT SIZE=4 FACE=ARIAL><B>SQUARE MULTI-TURN</B></FONT> </TD> </TR> <TR> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>BOURN</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>BI&nbsp;TECH</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>MURATA</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>SPECTROL</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>MILSPEC</B></FONT> </TD> </TR> <TR> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 3250L<BR> 3250P<BR> 3250W<BR> 3250X<BR> 3252P<BR> 3252W<BR> 3252X<BR> 3260P<BR> 3260W<BR> 3260X<BR> 3262P<BR> 3262W<BR> 3262X<BR> 3266P<BR> 3266W<BR> 3266X<BR> 3290H<BR> 3290P<BR> 3290W<BR> 3292P<BR> 3292W<BR> 3292X<BR> 3296P<BR> 3296W<BR> 3296X<BR> 3296Y<BR> 3296Z<BR> 3299P<BR> 3299W<BR> 3299X<BR> 3299Y<BR> 3299Z<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> 66P&nbsp;ALT<BR> 66W&nbsp;ALT<BR> 66X&nbsp;ALT<BR> 66P&nbsp;ALT<BR> 66W&nbsp;ALT<BR> 66X&nbsp;ALT<BR> -<BR> 64W&nbsp;ALT<BR> -<BR> 64P&nbsp;ALT<BR> 64W&nbsp;ALT<BR> 64X&nbsp;ALT<BR> 64P<BR> 64W<BR> 64X<BR> 66X&nbsp;ALT<BR> 66P&nbsp;ALT<BR> 66W&nbsp;ALT<BR> 66P<BR> 66W<BR> 66X<BR> 67P<BR> 67W<BR> 67X<BR> 67Y<BR> 67Z<BR> 68P<BR> 68W<BR> 68X<BR> 67Y&nbsp;ALT<BR> 67Z&nbsp;ALT<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 5050<BR> 5091<BR> 5080<BR> 5087<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> T63YB<BR> T63XB<BR> -<BR> -<BR> -<BR> 5887<BR> 5891<BR> 5880<BR> -<BR> -<BR> -<BR> T93Z<BR> T93YA<BR> T93XA<BR> T93YB<BR> T93XB<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> 8026EKP<BR> 8026EKW<BR> 8026EKM<BR> 8026EKP<BR> 8026EKB<BR> 8026EKM<BR> 1309X<BR> 1309P<BR> 1309W<BR> 8024EKP<BR> 8024EKW<BR> 8024EKN<BR> RJ-9P/CT9P<BR> RJ-9W<BR> RJ-9X<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> 3103P<BR> 3103Y<BR> 3103Z<BR> 3103P<BR> 3103Y<BR> 3103Z<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> 3105P/3106P<BR> 3105W/3106W<BR> 3105X/3106X<BR> 3105Y/3106Y<BR> 3105Z/3105Z<BR> 3102P<BR> 3102W<BR> 3102X<BR> 3102Y<BR> 3102Z<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> EVMCBG<BR> EVMCCG<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 55-1-X<BR> 55-4-X<BR> 55-3-X<BR> 55-2-X<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> 50-2-X<BR> 50-4-X<BR> 50-3-X<BR> -<BR> -<BR> -<BR> 64P<BR> 64W<BR> 64X<BR> 64Y<BR> 64Z<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> RT/RTR22<BR> RT/RTR22<BR> RT/RTR22<BR> RT/RTR22<BR> RJ/RJR22<BR> RJ/RJR22<BR> RJ/RJR22<BR> RT/RTR26<BR> RT/RTR26<BR> RT/RTR26<BR> RJ/RJR26<BR> RJ/RJR26<BR> RJ/RJR26<BR> RJ/RJR26<BR> RJ/RJR26<BR> RJ/RJR26<BR> RT/RTR24<BR> RT/RTR24<BR> RT/RTR24<BR> RJ/RJR24<BR> RJ/RJR24<BR> RJ/RJR24<BR> RJ/RJR24<BR> RJ/RJR24<BR> RJ/RJR24<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> </TR> <TR> <TD COLSPAN=8>&nbsp; </TD> </TR> <TR> <TD COLSPAN=8> <FONT SIZE=4 FACE=ARIAL><B>SINGLE TURN</B></FONT> </TD> </TR> <TR> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>BOURN</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>BI&nbsp;TECH</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>MURATA</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>SPECTROL</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>MILSPEC</B></FONT> </TD> </TR> <TR> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 3323P<BR> 3323S<BR> 3323W<BR> 3329H<BR> 3329P<BR> 3329W<BR> 3339H<BR> 3339P<BR> 3339W<BR> 3352E<BR> 3352H<BR> 3352K<BR> 3352P<BR> 3352T<BR> 3352V<BR> 3352W<BR> 3362H<BR> 3362M<BR> 3362P<BR> 3362R<BR> 3362S<BR> 3362U<BR> 3362W<BR> 3362X<BR> 3386B<BR> 3386C<BR> 3386F<BR> 3386H<BR> 3386K<BR> 3386M<BR> 3386P<BR> 3386S<BR> 3386W<BR> 3386X<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 25P<BR> 25S<BR> 25RX<BR> 82P<BR> 82M<BR> 82PA<BR> -<BR> -<BR> -<BR> 91E<BR> 91X<BR> 91T<BR> 91B<BR> 91A<BR> 91V<BR> 91W<BR> 25W<BR> 25V<BR> 25P<BR> -<BR> 25S<BR> 25U<BR> 25RX<BR> 25X<BR> 72XW<BR> 72XL<BR> 72PM<BR> 72RX<BR> -<BR> 72PX<BR> 72P<BR> 72RXW<BR> 72RXL<BR> 72X<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> T7YB<BR> T7YA<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> TXD<BR> TYA<BR> TYP<BR> -<BR> TYD<BR> TX<BR> -<BR> 150SX<BR> 100SX<BR> 102T<BR> 101S<BR> 190T<BR> 150TX<BR> 101<BR> -<BR> -<BR> 101SX<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> ET6P<BR> ET6S<BR> ET6X<BR> RJ-6W/8014EMW<BR> RJ-6P/8014EMP<BR> RJ-6X/8014EMX<BR> TM7W<BR> TM7P<BR> TM7X<BR> -<BR> 8017SMS<BR> -<BR> 8017SMB<BR> 8017SMA<BR> -<BR> -<BR> CT-6W<BR> CT-6H<BR> CT-6P<BR> CT-6R<BR> -<BR> CT-6V<BR> CT-6X<BR> -<BR> -<BR> 8038EKV<BR> -<BR> 8038EKX<BR> -<BR> -<BR> 8038EKP<BR> 8038EKZ<BR> 8038EKW<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> 3321H<BR> 3321P<BR> 3321N<BR> 1102H<BR> 1102P<BR> 1102T<BR> RVA0911V304A<BR> -<BR> RVA0911H413A<BR> RVG0707V100A<BR> RVA0607V(H)306A<BR> RVA1214H213A<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> 3104B<BR> 3104C<BR> 3104F<BR> 3104H<BR> -<BR> 3104M<BR> 3104P<BR> 3104S<BR> 3104W<BR> 3104X<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> EVMQ0G<BR> EVMQIG<BR> EVMQ3G<BR> EVMS0G<BR> EVMQ0G<BR> EVMG0G<BR> -<BR> -<BR> -<BR> EVMK4GA00B<BR> EVM30GA00B<BR> EVMK0GA00B<BR> EVM38GA00B<BR> EVMB6<BR> EVLQ0<BR> -<BR> EVMMSG<BR> EVMMBG<BR> EVMMAG<BR> -<BR> -<BR> EVMMCS<BR> -<BR> -<BR> -<BR> -<BR> -<BR> EVMM1<BR> -<BR> -<BR> EVMM0<BR> -<BR> -<BR> EVMM3<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> 62-3-1<BR> 62-1-2<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> 67R<BR> -<BR> 67P<BR> -<BR> -<BR> -<BR> -<BR> 67X<BR> 63V<BR> 63S<BR> 63M<BR> -<BR> -<BR> 63H<BR> 63P<BR> -<BR> -<BR> 63X<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> RJ/RJR50<BR> RJ/RJR50<BR> RJ/RJR50<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> </TR> </TABLE> <P>&nbsp;<P> <TABLE BORDER=0 CELLSPACING=1 CELLPADDING=3> <TR> <TD COLSPAN=7> <FONT color="#0000FF" SIZE=4 FACE=ARIAL><B>SMD TRIM-POT CROSS REFERENCE</B></FONT> <P> <FONT SIZE=4 FACE=ARIAL><B>MULTI-TURN</B></FONT> </TD> </TR> <TR> <TD> <FONT SIZE=3 FACE=ARIAL><B>BOURNS</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>BI&nbsp;TECH</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>TOCOS</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>AUX/KYOCERA</B></FONT> </TD> </TR> <TR> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 3224G<BR> 3224J<BR> 3224W<BR> 3269P<BR> 3269W<BR> 3269X<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 44G<BR> 44J<BR> 44W<BR> 84P<BR> 84W<BR> 84X<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> ST63Z<BR> ST63Y<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> ST5P<BR> ST5W<BR> ST5X<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> </TR> <TR> <TD COLSPAN=7>&nbsp; </TD> </TR> <TR> <TD COLSPAN=7> <FONT SIZE=4 FACE=ARIAL><B>SINGLE TURN</B></FONT> </TD> </TR> <TR> <TD> <FONT SIZE=3 FACE=ARIAL><B>BOURNS</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>BI&nbsp;TECH</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>TOCOS</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>AUX/KYOCERA</B></FONT> </TD> </TR> <TR> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 3314G<BR> 3314J<BR> 3364A/B<BR> 3364C/D<BR> 3364W/X<BR> 3313G<BR> 3313J<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 23B<BR> 23A<BR> 21X<BR> 21W<BR> -<BR> 22B<BR> 22A<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> ST5YL/ST53YL<BR> ST5YJ/5T53YJ<BR> ST-23A<BR> ST-22B<BR> ST-22<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> ST-4B<BR> ST-4A<BR> -<BR> -<BR> -<BR> ST-3B<BR> ST-3A<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> EVM-6YS<BR> EVM-1E<BR> EVM-1G<BR> EVM-1D<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> G4B<BR> G4A<BR> TR04-3S1<BR> TRG04-2S1<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> DVR-43A<BR> CVR-42C<BR> CVR-42A/C<BR> -<BR> -<BR></FONT> </TD> </TR> </TABLE> <P> <FONT SIZE=4 FACE=ARIAL><B>ALT =&nbsp;ALTERNATE</B></FONT> <P> &nbsp; <P> </td> </tr> </table> <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b><p> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b><p> grid 2.5 mm, outline 2.4 x 4.4 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 2.5 mm, outline 2.5 x 5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 2.5 mm, outline 3 x 5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 2.5 mm, outline 4 x 5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 2.5 mm, outline 5 x 5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 2.5 mm, outline 6 x 5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 2.5 mm + 5 mm, outline 2.4 x 7 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 2.5 + 5 mm, outline 2.5 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 2.5 + 5 mm, outline 3.5 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 2.5 + 5 mm, outline 4.5 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 2.5 + 5 mm, outline 5.5 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 5 mm, outline 2.4 x 4.4 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 5 mm, outline 2.5 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 5 mm, outline 4.5 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 5 mm, outline 3 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 5 mm, outline 5 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 5 mm, outline 5.5 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 5 mm, outline 7.5 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> Horizontal, grid 5 mm, outline 7.5 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 7.5 mm, outline 3.2 x 10.3 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 7.5 mm, outline 4.2 x 10.3 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 7.5 mm, outline 5.2 x 10.6 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 10.2 mm, outline 4.3 x 13.3 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 10.2 mm, outline 5.4 x 13.3 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 10.2 mm, outline 6.4 x 13.3 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 10.2 mm + 15.2 mm, outline 6.2 x 18.4 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 15 mm, outline 5.4 x 18.3 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 15 mm, outline 6.4 x 18.3 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 15 mm, outline 7.2 x 18.3 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 15 mm, outline 8.4 x 18.3 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 15 mm, outline 9.1 x 18.2 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 22.5 mm, outline 6.2 x 26.8 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 22.5 mm, outline 7.4 x 26.8 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 22.5 mm, outline 8.7 x 26.8 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 22.5 mm, outline 10.8 x 26.8 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 22.5 mm, outline 11.3 x 26.8 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 27.5 mm, outline 9.3 x 31.6 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 27.5 mm, outline 11.3 x 31.6 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 27.5 mm, outline 13.4 x 31.6 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 27.5 mm, outline 20.5 x 31.6 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 32.5 mm, outline 13.7 x 37.4 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 32.5 mm, outline 16.2 x 37.4 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 32.5 mm, outline 18.2 x 37.4 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 37.5 mm, outline 19.2 x 41.8 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 37.5 mm, outline 20.3 x 41.8 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 5 mm, outline 3.5 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 37.5 mm, outline 15.5 x 41.8 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 7.5 mm, outline 6.3 x 10.6 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 27.5 mm, outline 15.4 x 31.6 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 27.5 mm, outline 17.3 x 31.6 mm >NAME >VALUE <b>Ceramic Chip Capacitor KEMET 0204 reflow solder</b><p> Metric Code Size 1005 >NAME >VALUE <b>Ceramic Chip Capacitor KEMET 0603 reflow solder</b><p> Metric Code Size 1608 >NAME >VALUE <b>Ceramic Chip Capacitor KEMET 0805 reflow solder</b><p> Metric Code Size 2012 >NAME >VALUE <b>Ceramic Chip Capacitor KEMET 1206 reflow solder</b><p> Metric Code Size 3216 >NAME >VALUE <b>Ceramic Chip Capacitor KEMET 1210 reflow solder</b><p> Metric Code Size 3225 >NAME >VALUE <b>Ceramic Chip Capacitor KEMET 1812 reflow solder</b><p> Metric Code Size 4532 >NAME >VALUE <b>Ceramic Chip Capacitor KEMET 1825 reflow solder</b><p> Metric Code Size 4564 >NAME >VALUE <b>Ceramic Chip Capacitor KEMET 2220 reflow solder</b><p>Metric Code Size 5650 >NAME >VALUE <b>Ceramic Chip Capacitor KEMET 2225 reflow solder</b><p>Metric Code Size 5664 >NAME >VALUE <b> </b><p> Source: http://www.vishay.com/docs/10129/hpc0201a.pdf >NAME >VALUE Source: http://www.avxcorp.com/docs/catalogs/cx5r.pdf >NAME >VALUE <b>CAPACITOR</b><p> Source: AVX .. aphvc.pdf >NAME >VALUE <b>CAPACITOR</b><p> Source: AVX .. aphvc.pdf >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE Chip, 1.00 X 0.50 X 0.60 mm body <p>Chip package with body size 1.00 X 0.50 X 0.60 mm</p> CAPACITOR CAPACITOR CAPACITOR CAPACITOR CAPACITOR CAPACITOR CAPACITOR CAPACITOR CAPACITOR CAPACITOR CAPACITOR CAPACITOR CAPACITOR CAPACITOR CAPACITOR grid 2.5 mm, outline 2.4 x 4.4 mm CAPACITOR grid 2.5 mm, outline 2.5 x 5 mm CAPACITOR grid 2.5 mm, outline 3 x 5 mm CAPACITOR grid 2.5 mm, outline 4 x 5 mm CAPACITOR grid 2.5 mm, outline 5 x 5 mm CAPACITOR grid 2.5 mm, outline 6 x 5 mm CAPACITOR grid 2.5 mm + 5 mm, outline 2.4 x 7 mm CAPACITOR grid 2.5 + 5 mm, outline 2.5 x 7.5 mm CAPACITOR grid 2.5 + 5 mm, outline 3.5 x 7.5 mm CAPACITOR grid 2.5 + 5 mm, outline 4.5 x 7.5 mm CAPACITOR grid 2.5 + 5 mm, outline 5.5 x 7.5 mm CAPACITOR grid 5 mm, outline 2.4 x 4.4 mm CAPACITOR grid 5 mm, outline 2.5 x 7.5 mm CAPACITOR grid 5 mm, outline 4.5 x 7.5 mm CAPACITOR grid 5 mm, outline 3 x 7.5 mm CAPACITOR grid 5 mm, outline 5 x 7.5 mm CAPACITOR grid 5 mm, outline 5.5 x 7.5 mm CAPACITOR grid 5 mm, outline 7.5 x 7.5 mm CAPACITOR Horizontal, grid 5 mm, outline 7.5 x 7.5 mm CAPACITOR grid 7.5 mm, outline 3.2 x 10.3 mm CAPACITOR grid 7.5 mm, outline 4.2 x 10.3 mm CAPACITOR grid 7.5 mm, outline 5.2 x 10.6 mm CAPACITOR grid 10.2 mm, outline 4.3 x 13.3 mm CAPACITOR grid 10.2 mm, outline 5.4 x 13.3 mm CAPACITOR grid 10.2 mm, outline 6.4 x 13.3 mm CAPACITOR grid 10.2 mm + 15.2 mm, outline 6.2 x 18.4 mm CAPACITOR grid 15 mm, outline 5.4 x 18.3 mm CAPACITOR grid 15 mm, outline 6.4 x 18.3 mm CAPACITOR grid 15 mm, outline 7.2 x 18.3 mm CAPACITOR grid 15 mm, outline 8.4 x 18.3 mm CAPACITOR grid 15 mm, outline 9.1 x 18.2 mm CAPACITOR grid 22.5 mm, outline 6.2 x 26.8 mm CAPACITOR grid 22.5 mm, outline 7.4 x 26.8 mm CAPACITOR grid 22.5 mm, outline 8.7 x 26.8 mm CAPACITOR grid 22.5 mm, outline 10.8 x 26.8 mm CAPACITOR grid 22.5 mm, outline 11.3 x 26.8 mm CAPACITOR grid 27.5 mm, outline 9.3 x 31.6 mm CAPACITOR grid 27.5 mm, outline 11.3 x 31.6 mm CAPACITOR grid 27.5 mm, outline 13.4 x 31.6 mm CAPACITOR grid 27.5 mm, outline 20.5 x 31.6 mm CAPACITOR grid 32.5 mm, outline 13.7 x 37.4 mm CAPACITOR grid 32.5 mm, outline 16.2 x 37.4 mm CAPACITOR grid 32.5 mm, outline 18.2 x 37.4 mm CAPACITOR grid 37.5 mm, outline 19.2 x 41.8 mm CAPACITOR grid 37.5 mm, outline 20.3 x 41.8 mm CAPACITOR grid 5 mm, outline 3.5 x 7.5 mm CAPACITOR grid 37.5 mm, outline 15.5 x 41.8 mm CAPACITOR grid 7.5 mm, outline 6.3 x 10.6 mm CAPACITOR grid 27.5 mm, outline 15.4 x 31.6 mm CAPACITOR grid 27.5 mm, outline 17.3 x 31.6 mm Ceramic Chip Capacitor KEMET 0204 reflow solder Metric Code Size 1005 Ceramic Chip Capacitor KEMET 0603 reflow solder Metric Code Size 1608 Ceramic Chip Capacitor KEMET 0805 reflow solder Metric Code Size 2012 Ceramic Chip Capacitor KEMET 1206 reflow solder Metric Code Size 3216 Ceramic Chip Capacitor KEMET 1210 reflow solder Metric Code Size 3225 Ceramic Chip Capacitor KEMET 1812 reflow solder Metric Code Size 4532 Ceramic Chip Capacitor KEMET 1825 reflow solder Metric Code Size 4564 Ceramic Chip Capacitor KEMET 2220 reflow solderMetric Code Size 5650 Ceramic Chip Capacitor KEMET 2225 reflow solderMetric Code Size 5664 Source: http://www.vishay.com/docs/10129/hpc0201a.pdf Source: http://www.avxcorp.com/docs/catalogs/cx5r.pdf CAPACITOR Source: AVX .. aphvc.pdf CAPACITOR Source: AVX .. aphvc.pdf CAPACITOR >NAME >VALUE <B>CAPACITOR</B>, European symbol Since Version 8.2, EAGLE supports online libraries. The ids of those online libraries will not be understood (or retained) with this version. Since Version 8.3, EAGLE supports URNs for individual library assets (packages, symbols, and devices). The URNs of those assets will not be understood (or retained) with this version. Since Version 8.3, EAGLE supports the association of 3D packages with devices in libraries, schematics, and board files. Those 3D packages will not be understood (or retained) with this version. Since Version 8.4, EAGLE supports properties for SPICE simulation. Probes in schematics and SPICE mapping objects found in parts and library devices will not be understood with this version. Update EAGLE to the latest version for full support of SPICE simulation. ================================================ FILE: eagle/stm32_T12+858D.sch ================================================ STM32 STM32 BOOT0 BOOT1 0 1 <b>Linear Devices</b><p> Operational amplifiers, comparators, voltage regulators, ADCs, DACs, etc.<p> <author>Created by librarian@cadsoft.de</author> <b>Dual In Line Package</b> >NAME >VALUE <b>Small Outline Package 8</b><br> NS Package M08A >NAME >VALUE <b>Thin Shrink Small Outline Plastic 8</b> 3 x 4.4 mm<p> >NAME >VALUE Dual In Line Package Small Outline Package 8 NS Package M08A Thin Shrink Small Outline Plastic 8 3 x 4.4 mm >NAME >VALUE V+ V- <b>Single Op Amp</b> 2.7V to 6.0V Single Supply CMOS<p> Source: http://ww1.microchip.com/downloads/en/DeviceDoc/21314g.pdf <b>Atmel Memory Devices</b><p> <p>THIS LIBRARY IS PROVIDED AS IS AND WITHOUT WARRANTY OF ANY KIND, EXPRESSED OR IMPLIED.<br> USE AT YOUR OWN RISK!<p> <author>Copyright (C) 2008, Bob Starr<br> http://www.bobstarr.net<br></author> <b>SMALL OUTLINE INTEGRATED CIRCUIT</b><p> 8S1, body 3.9 mm/JEDEC MS-012AA >NAME >VALUE <b>SMALL OUTLINE INTEGRATED CIRCUIT</b><p> 8S2 Package (EIAJ), 5.4 mm body >NAME >VALUE >NAME >VALUE <b>EEPROM</b><p> I2C serial bus <b>Diodes</b><p> Based on the following sources: <ul> <li>Motorola : www.onsemi.com <li>Fairchild : www.fairchildsemi.com <li>Philips : www.semiconductors.com <li>Vishay : www.vishay.de </ul> <author>Created by librarian@cadsoft.de</author> <B>DIODE</B><p> diameter 2 mm, horizontal, grid 10.16mm >NAME >VALUE <B>DIODE</B><p> diameter 2.54 mm, horizontal, grid 10.16 mm >NAME >VALUE <B>DIODE</B><p> diameter 3.5 mm, horizontal, grid 15.24 mm >NAME >VALUE <B>DIODE</B><p> diameter 6.35 mm metall, horizontal, grid 20.32 mm >NAME >VALUE <B>DIODE</B><p> diameter 4 mm, vertical, grid 10.16 mm >NAME >VALUE <B>DIODE</B><p> diameter 1.8 mm, horizontal, grid 7.62 mm >NAME >VALUE <B>DIODE</B><p> diameter 4.8 mm, vertical, grid 10.16 mm >NAME >VALUE <B>DIODE</B><p> diameter 4.8 mm, vertical, grid 12.7 mm >NAME >VALUE <B>DIODE</B><p> 3-lead smd >NAME >VALUE <B>DIODE</B><p> diameter 3 mm, horizontal, grid 10.16 mm >NAME >VALUE <B>DIODE</B><p> diameter 3 mm, horizontal, grid 12.7 mm >NAME >VALUE <b>Z DIODE</b> >NAME >VALUE <b>Z DIODE</b> >NAME >VALUE <b>Z DIODE</b> >NAME >VALUE <b>Z DIODE</b> >NAME >VALUE <b>Z DIODE</b> >NAME >VALUE <B>DIODE</B><p> diameter 3 mm, horizontal, grid 12.7 mm >NAME >VALUE <B>DIODE</B> >NAME >VALUE <B>DIODE</B> >NAME >VALUE <b>Small Outline Transistor</b> >NAME >VALUE <B>DIODE</B> >NAME >VALUE <B>DIODE</B><p> diameter 2.54 mm, horizontal, grid 10.16 mm >NAME >VALUE DIODE diameter 2 mm, horizontal, grid 10.16mm DIODE diameter 2.54 mm, horizontal, grid 10.16 mm DIODE diameter 3.5 mm, horizontal, grid 15.24 mm DIODE diameter 6.35 mm metall, horizontal, grid 20.32 mm DIODE diameter 4 mm, vertical, grid 10.16 mm DIODE diameter 1.8 mm, horizontal, grid 7.62 mm DIODE diameter 4.8 mm, vertical, grid 10.16 mm DIODE diameter 4.8 mm, vertical, grid 12.7 mm DIODE 3-lead smd DIODE diameter 3 mm, horizontal, grid 10.16 mm DIODE diameter 3 mm, horizontal, grid 12.7 mm Z DIODE Z DIODE Z DIODE Z DIODE Z DIODE DIODE diameter 3 mm, horizontal, grid 12.7 mm DIODE DIODE Small Outline Transistor DIODE DIODE diameter 2.54 mm, horizontal, grid 10.16 mm >NAME >VALUE >NAME >VALUE SpiceOrder 1 SpiceOrder 2 Z-Diode <B>DIODE</B><p> general purpose rectifier, 1 A <b>Field Effect Transistors</b><p> <author>Created by librarian@cadsoft.de</author><p> <p> Symbols changed according to IEC617<p> All types, packages and assignment to symbols and pins checked<p> Package outlines partly checked<p> <p> JFET = junction FET<p> IGBT-x = insulated gate bipolar transistor<p> x=N: NPN; x=P: PNP<p> IGFET-mc-nnn; (IGFET=insulated gate field effect transistor)<P> m=D: depletion mode (Verdr&auml;ngungstyp)<p> m=E: enhancement mode (Anreicherungstyp)<p> c: N=N-channel; P=P-Channel<p> GDSB: gate, drain, source, bulk<p> <p> by R. Vogg 15.March.2002 <b>TO 220 horizontal</b> >NAME >VALUE A17,5mm 1 2 3 TO 220 horizontal >VALUE >NAME <b>P-Channel Enhancement MOSFET</b> (HEXFET); -100V; -12A; 0,3Ohm <b>Transistors</b><p> <author>Created by librarian@cadsoft.de</author> <b>TO 18</b> >NAME >VALUE 1 2 3 TO 18 >NAME >VALUE <b>NPN TRANSISTOR</b> <b>Resistors, Capacitors, Inductors</b><p> Based on the previous libraries: <ul> <li>r.lbr <li>cap.lbr <li>cap-fe.lbr <li>captant.lbr <li>polcap.lbr <li>ipc-smd.lbr </ul> All SMD packages are defined according to the IPC specifications and CECC<p> <author>Created by librarian@cadsoft.de</author><p> <p> for Electrolyt Capacitors see also :<p> www.bccomponents.com <p> www.panasonic.com<p> www.kemet.com<p> http://www.secc.co.jp/pdf/os_e/2004/e_os_all.pdf <b>(SANYO)</b> <p> for trimmer refence see : <u>www.electrospec-inc.com/cross_references/trimpotcrossref.asp</u><p> <table border=0 cellspacing=0 cellpadding=0 width="100%" cellpaddding=0> <tr valign="top"> <! <td width="10">&nbsp;</td> <td width="90%"> <b><font color="#0000FF" size="4">TRIM-POT CROSS REFERENCE</font></b> <P> <TABLE BORDER=0 CELLSPACING=1 CELLPADDING=2> <TR> <TD COLSPAN=8> <FONT SIZE=3 FACE=ARIAL><B>RECTANGULAR MULTI-TURN</B></FONT> </TD> </TR> <TR> <TD ALIGN=CENTER> <B> <FONT SIZE=3 FACE=ARIAL color="#FF0000">BOURNS</FONT> </B> </TD> <TD ALIGN=CENTER> <B> <FONT SIZE=3 FACE=ARIAL color="#FF0000">BI&nbsp;TECH</FONT> </B> </TD> <TD ALIGN=CENTER> <B> <FONT SIZE=3 FACE=ARIAL color="#FF0000">DALE-VISHAY</FONT> </B> </TD> <TD ALIGN=CENTER> <B> <FONT SIZE=3 FACE=ARIAL color="#FF0000">PHILIPS/MEPCO</FONT> </B> </TD> <TD ALIGN=CENTER> <B> <FONT SIZE=3 FACE=ARIAL color="#FF0000">MURATA</FONT> </B> </TD> <TD ALIGN=CENTER> <B> <FONT SIZE=3 FACE=ARIAL color="#FF0000">PANASONIC</FONT> </B> </TD> <TD ALIGN=CENTER> <B> <FONT SIZE=3 FACE=ARIAL color="#FF0000">SPECTROL</FONT> </B> </TD> <TD ALIGN=CENTER> <B> <FONT SIZE=3 FACE=ARIAL color="#FF0000">MILSPEC</FONT> </B> </TD><TD>&nbsp;</TD> </TR> <TR> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3 > 3005P<BR> 3006P<BR> 3006W<BR> 3006Y<BR> 3009P<BR> 3009W<BR> 3009Y<BR> 3057J<BR> 3057L<BR> 3057P<BR> 3057Y<BR> 3059J<BR> 3059L<BR> 3059P<BR> 3059Y<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> 89P<BR> 89W<BR> 89X<BR> 89PH<BR> 76P<BR> 89XH<BR> 78SLT<BR> 78L&nbsp;ALT<BR> 56P&nbsp;ALT<BR> 78P&nbsp;ALT<BR> T8S<BR> 78L<BR> 56P<BR> 78P<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> T18/784<BR> 783<BR> 781<BR> -<BR> -<BR> -<BR> 2199<BR> 1697/1897<BR> 1680/1880<BR> 2187<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> 8035EKP/CT20/RJ-20P<BR> -<BR> RJ-20X<BR> -<BR> -<BR> -<BR> 1211L<BR> 8012EKQ&nbsp;ALT<BR> 8012EKR&nbsp;ALT<BR> 1211P<BR> 8012EKJ<BR> 8012EKL<BR> 8012EKQ<BR> 8012EKR<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> 2101P<BR> 2101W<BR> 2101Y<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> 2102L<BR> 2102S<BR> 2102Y<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> EVMCOG<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> 43P<BR> 43W<BR> 43Y<BR> -<BR> -<BR> -<BR> -<BR> 40L<BR> 40P<BR> 40Y<BR> 70Y-T602<BR> 70L<BR> 70P<BR> 70Y<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> RT/RTR12<BR> RT/RTR12<BR> RT/RTR12<BR> -<BR> RJ/RJR12<BR> RJ/RJR12<BR> RJ/RJR12<BR></FONT> </TD> </TR> <TR> <TD COLSPAN=8>&nbsp; </TD> </TR> <TR> <TD COLSPAN=8> <FONT SIZE=4 FACE=ARIAL><B>SQUARE MULTI-TURN</B></FONT> </TD> </TR> <TR> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>BOURN</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>BI&nbsp;TECH</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>MURATA</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>SPECTROL</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>MILSPEC</B></FONT> </TD> </TR> <TR> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 3250L<BR> 3250P<BR> 3250W<BR> 3250X<BR> 3252P<BR> 3252W<BR> 3252X<BR> 3260P<BR> 3260W<BR> 3260X<BR> 3262P<BR> 3262W<BR> 3262X<BR> 3266P<BR> 3266W<BR> 3266X<BR> 3290H<BR> 3290P<BR> 3290W<BR> 3292P<BR> 3292W<BR> 3292X<BR> 3296P<BR> 3296W<BR> 3296X<BR> 3296Y<BR> 3296Z<BR> 3299P<BR> 3299W<BR> 3299X<BR> 3299Y<BR> 3299Z<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> 66P&nbsp;ALT<BR> 66W&nbsp;ALT<BR> 66X&nbsp;ALT<BR> 66P&nbsp;ALT<BR> 66W&nbsp;ALT<BR> 66X&nbsp;ALT<BR> -<BR> 64W&nbsp;ALT<BR> -<BR> 64P&nbsp;ALT<BR> 64W&nbsp;ALT<BR> 64X&nbsp;ALT<BR> 64P<BR> 64W<BR> 64X<BR> 66X&nbsp;ALT<BR> 66P&nbsp;ALT<BR> 66W&nbsp;ALT<BR> 66P<BR> 66W<BR> 66X<BR> 67P<BR> 67W<BR> 67X<BR> 67Y<BR> 67Z<BR> 68P<BR> 68W<BR> 68X<BR> 67Y&nbsp;ALT<BR> 67Z&nbsp;ALT<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 5050<BR> 5091<BR> 5080<BR> 5087<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> T63YB<BR> T63XB<BR> -<BR> -<BR> -<BR> 5887<BR> 5891<BR> 5880<BR> -<BR> -<BR> -<BR> T93Z<BR> T93YA<BR> T93XA<BR> T93YB<BR> T93XB<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> 8026EKP<BR> 8026EKW<BR> 8026EKM<BR> 8026EKP<BR> 8026EKB<BR> 8026EKM<BR> 1309X<BR> 1309P<BR> 1309W<BR> 8024EKP<BR> 8024EKW<BR> 8024EKN<BR> RJ-9P/CT9P<BR> RJ-9W<BR> RJ-9X<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> 3103P<BR> 3103Y<BR> 3103Z<BR> 3103P<BR> 3103Y<BR> 3103Z<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> 3105P/3106P<BR> 3105W/3106W<BR> 3105X/3106X<BR> 3105Y/3106Y<BR> 3105Z/3105Z<BR> 3102P<BR> 3102W<BR> 3102X<BR> 3102Y<BR> 3102Z<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> EVMCBG<BR> EVMCCG<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 55-1-X<BR> 55-4-X<BR> 55-3-X<BR> 55-2-X<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> 50-2-X<BR> 50-4-X<BR> 50-3-X<BR> -<BR> -<BR> -<BR> 64P<BR> 64W<BR> 64X<BR> 64Y<BR> 64Z<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> RT/RTR22<BR> RT/RTR22<BR> RT/RTR22<BR> RT/RTR22<BR> RJ/RJR22<BR> RJ/RJR22<BR> RJ/RJR22<BR> RT/RTR26<BR> RT/RTR26<BR> RT/RTR26<BR> RJ/RJR26<BR> RJ/RJR26<BR> RJ/RJR26<BR> RJ/RJR26<BR> RJ/RJR26<BR> RJ/RJR26<BR> RT/RTR24<BR> RT/RTR24<BR> RT/RTR24<BR> RJ/RJR24<BR> RJ/RJR24<BR> RJ/RJR24<BR> RJ/RJR24<BR> RJ/RJR24<BR> RJ/RJR24<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> </TR> <TR> <TD COLSPAN=8>&nbsp; </TD> </TR> <TR> <TD COLSPAN=8> <FONT SIZE=4 FACE=ARIAL><B>SINGLE TURN</B></FONT> </TD> </TR> <TR> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>BOURN</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>BI&nbsp;TECH</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>MURATA</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>SPECTROL</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>MILSPEC</B></FONT> </TD> </TR> <TR> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 3323P<BR> 3323S<BR> 3323W<BR> 3329H<BR> 3329P<BR> 3329W<BR> 3339H<BR> 3339P<BR> 3339W<BR> 3352E<BR> 3352H<BR> 3352K<BR> 3352P<BR> 3352T<BR> 3352V<BR> 3352W<BR> 3362H<BR> 3362M<BR> 3362P<BR> 3362R<BR> 3362S<BR> 3362U<BR> 3362W<BR> 3362X<BR> 3386B<BR> 3386C<BR> 3386F<BR> 3386H<BR> 3386K<BR> 3386M<BR> 3386P<BR> 3386S<BR> 3386W<BR> 3386X<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 25P<BR> 25S<BR> 25RX<BR> 82P<BR> 82M<BR> 82PA<BR> -<BR> -<BR> -<BR> 91E<BR> 91X<BR> 91T<BR> 91B<BR> 91A<BR> 91V<BR> 91W<BR> 25W<BR> 25V<BR> 25P<BR> -<BR> 25S<BR> 25U<BR> 25RX<BR> 25X<BR> 72XW<BR> 72XL<BR> 72PM<BR> 72RX<BR> -<BR> 72PX<BR> 72P<BR> 72RXW<BR> 72RXL<BR> 72X<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> T7YB<BR> T7YA<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> TXD<BR> TYA<BR> TYP<BR> -<BR> TYD<BR> TX<BR> -<BR> 150SX<BR> 100SX<BR> 102T<BR> 101S<BR> 190T<BR> 150TX<BR> 101<BR> -<BR> -<BR> 101SX<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> ET6P<BR> ET6S<BR> ET6X<BR> RJ-6W/8014EMW<BR> RJ-6P/8014EMP<BR> RJ-6X/8014EMX<BR> TM7W<BR> TM7P<BR> TM7X<BR> -<BR> 8017SMS<BR> -<BR> 8017SMB<BR> 8017SMA<BR> -<BR> -<BR> CT-6W<BR> CT-6H<BR> CT-6P<BR> CT-6R<BR> -<BR> CT-6V<BR> CT-6X<BR> -<BR> -<BR> 8038EKV<BR> -<BR> 8038EKX<BR> -<BR> -<BR> 8038EKP<BR> 8038EKZ<BR> 8038EKW<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> 3321H<BR> 3321P<BR> 3321N<BR> 1102H<BR> 1102P<BR> 1102T<BR> RVA0911V304A<BR> -<BR> RVA0911H413A<BR> RVG0707V100A<BR> RVA0607V(H)306A<BR> RVA1214H213A<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> 3104B<BR> 3104C<BR> 3104F<BR> 3104H<BR> -<BR> 3104M<BR> 3104P<BR> 3104S<BR> 3104W<BR> 3104X<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> EVMQ0G<BR> EVMQIG<BR> EVMQ3G<BR> EVMS0G<BR> EVMQ0G<BR> EVMG0G<BR> -<BR> -<BR> -<BR> EVMK4GA00B<BR> EVM30GA00B<BR> EVMK0GA00B<BR> EVM38GA00B<BR> EVMB6<BR> EVLQ0<BR> -<BR> EVMMSG<BR> EVMMBG<BR> EVMMAG<BR> -<BR> -<BR> EVMMCS<BR> -<BR> -<BR> -<BR> -<BR> -<BR> EVMM1<BR> -<BR> -<BR> EVMM0<BR> -<BR> -<BR> EVMM3<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> 62-3-1<BR> 62-1-2<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> 67R<BR> -<BR> 67P<BR> -<BR> -<BR> -<BR> -<BR> 67X<BR> 63V<BR> 63S<BR> 63M<BR> -<BR> -<BR> 63H<BR> 63P<BR> -<BR> -<BR> 63X<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> RJ/RJR50<BR> RJ/RJR50<BR> RJ/RJR50<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> </TR> </TABLE> <P>&nbsp;<P> <TABLE BORDER=0 CELLSPACING=1 CELLPADDING=3> <TR> <TD COLSPAN=7> <FONT color="#0000FF" SIZE=4 FACE=ARIAL><B>SMD TRIM-POT CROSS REFERENCE</B></FONT> <P> <FONT SIZE=4 FACE=ARIAL><B>MULTI-TURN</B></FONT> </TD> </TR> <TR> <TD> <FONT SIZE=3 FACE=ARIAL><B>BOURNS</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>BI&nbsp;TECH</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>TOCOS</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>AUX/KYOCERA</B></FONT> </TD> </TR> <TR> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 3224G<BR> 3224J<BR> 3224W<BR> 3269P<BR> 3269W<BR> 3269X<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 44G<BR> 44J<BR> 44W<BR> 84P<BR> 84W<BR> 84X<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> ST63Z<BR> ST63Y<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> ST5P<BR> ST5W<BR> ST5X<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> </TR> <TR> <TD COLSPAN=7>&nbsp; </TD> </TR> <TR> <TD COLSPAN=7> <FONT SIZE=4 FACE=ARIAL><B>SINGLE TURN</B></FONT> </TD> </TR> <TR> <TD> <FONT SIZE=3 FACE=ARIAL><B>BOURNS</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>BI&nbsp;TECH</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>TOCOS</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>AUX/KYOCERA</B></FONT> </TD> </TR> <TR> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 3314G<BR> 3314J<BR> 3364A/B<BR> 3364C/D<BR> 3364W/X<BR> 3313G<BR> 3313J<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 23B<BR> 23A<BR> 21X<BR> 21W<BR> -<BR> 22B<BR> 22A<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> ST5YL/ST53YL<BR> ST5YJ/5T53YJ<BR> ST-23A<BR> ST-22B<BR> ST-22<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> ST-4B<BR> ST-4A<BR> -<BR> -<BR> -<BR> ST-3B<BR> ST-3A<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> EVM-6YS<BR> EVM-1E<BR> EVM-1G<BR> EVM-1D<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> G4B<BR> G4A<BR> TR04-3S1<BR> TRG04-2S1<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> DVR-43A<BR> CVR-42C<BR> CVR-42A/C<BR> -<BR> -<BR></FONT> </TD> </TR> </TABLE> <P> <FONT SIZE=4 FACE=ARIAL><B>ALT =&nbsp;ALTERNATE</B></FONT> <P> &nbsp; <P> </td> </tr> </table> <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b><p> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b><p> grid 2.5 mm, outline 2.4 x 4.4 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 2.5 mm, outline 2.5 x 5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 2.5 mm, outline 3 x 5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 2.5 mm, outline 4 x 5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 2.5 mm, outline 5 x 5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 2.5 mm, outline 6 x 5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 2.5 mm + 5 mm, outline 2.4 x 7 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 2.5 + 5 mm, outline 2.5 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 2.5 + 5 mm, outline 3.5 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 2.5 + 5 mm, outline 4.5 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 2.5 + 5 mm, outline 5.5 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 5 mm, outline 2.4 x 4.4 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 5 mm, outline 2.5 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 5 mm, outline 4.5 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 5 mm, outline 3 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 5 mm, outline 5 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 5 mm, outline 5.5 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 5 mm, outline 7.5 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> Horizontal, grid 5 mm, outline 7.5 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 7.5 mm, outline 3.2 x 10.3 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 7.5 mm, outline 4.2 x 10.3 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 7.5 mm, outline 5.2 x 10.6 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 10.2 mm, outline 4.3 x 13.3 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 10.2 mm, outline 5.4 x 13.3 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 10.2 mm, outline 6.4 x 13.3 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 10.2 mm + 15.2 mm, outline 6.2 x 18.4 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 15 mm, outline 5.4 x 18.3 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 15 mm, outline 6.4 x 18.3 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 15 mm, outline 7.2 x 18.3 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 15 mm, outline 8.4 x 18.3 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 15 mm, outline 9.1 x 18.2 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 22.5 mm, outline 6.2 x 26.8 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 22.5 mm, outline 7.4 x 26.8 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 22.5 mm, outline 8.7 x 26.8 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 22.5 mm, outline 10.8 x 26.8 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 22.5 mm, outline 11.3 x 26.8 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 27.5 mm, outline 9.3 x 31.6 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 27.5 mm, outline 11.3 x 31.6 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 27.5 mm, outline 13.4 x 31.6 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 27.5 mm, outline 20.5 x 31.6 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 32.5 mm, outline 13.7 x 37.4 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 32.5 mm, outline 16.2 x 37.4 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 32.5 mm, outline 18.2 x 37.4 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 37.5 mm, outline 19.2 x 41.8 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 37.5 mm, outline 20.3 x 41.8 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 5 mm, outline 3.5 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 37.5 mm, outline 15.5 x 41.8 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 7.5 mm, outline 6.3 x 10.6 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 27.5 mm, outline 15.4 x 31.6 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 27.5 mm, outline 17.3 x 31.6 mm >NAME >VALUE <b>Ceramic Chip Capacitor KEMET 0204 reflow solder</b><p> Metric Code Size 1005 >NAME >VALUE <b>Ceramic Chip Capacitor KEMET 0603 reflow solder</b><p> Metric Code Size 1608 >NAME >VALUE <b>Ceramic Chip Capacitor KEMET 0805 reflow solder</b><p> Metric Code Size 2012 >NAME >VALUE <b>Ceramic Chip Capacitor KEMET 1206 reflow solder</b><p> Metric Code Size 3216 >NAME >VALUE <b>Ceramic Chip Capacitor KEMET 1210 reflow solder</b><p> Metric Code Size 3225 >NAME >VALUE <b>Ceramic Chip Capacitor KEMET 1812 reflow solder</b><p> Metric Code Size 4532 >NAME >VALUE <b>Ceramic Chip Capacitor KEMET 1825 reflow solder</b><p> Metric Code Size 4564 >NAME >VALUE <b>Ceramic Chip Capacitor KEMET 2220 reflow solder</b><p>Metric Code Size 5650 >NAME >VALUE <b>Ceramic Chip Capacitor KEMET 2225 reflow solder</b><p>Metric Code Size 5664 >NAME >VALUE <b> </b><p> Source: http://www.vishay.com/docs/10129/hpc0201a.pdf >NAME >VALUE Source: http://www.avxcorp.com/docs/catalogs/cx5r.pdf >NAME >VALUE <b>CAPACITOR</b><p> Source: AVX .. aphvc.pdf >NAME >VALUE <b>CAPACITOR</b><p> Source: AVX .. aphvc.pdf >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>Chip RESISTOR 0402 EIA (1005 Metric)</b> >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b><p> >NAME >VALUE <b>RESISTOR</b> wave soldering<p> >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b><p> wave soldering >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b><p> wave soldering >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b><p> wave soldering >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b><p> wave soldering >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b><p> wave soldering >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b><p> wave soldering >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b><p> wave soldering >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b><p> wave soldering >NAME >VALUE <b>RESISTOR</b><p> Source: http://download.siliconexpert.com/pdfs/2005/02/24/Semi_Ap/2/VSH/Resistor/dcrcwfre.pdf >NAME >VALUE <b>RESISTOR</b> wave soldering<p> Source: http://download.siliconexpert.com/pdfs/2005/02/24/Semi_Ap/2/VSH/Resistor/dcrcwfre.pdf >NAME >VALUE <b>RESISTOR</b><p> MELF 0.10 W >NAME >VALUE <b>RESISTOR</b><p> MELF 0.25 W >NAME >VALUE <b>RESISTOR</b><p> MELF 0.12 W >NAME >VALUE <b>RESISTOR</b><p> MELF 0.10 W >NAME >VALUE <b>RESISTOR</b><p> MELF 0.25 W >NAME >VALUE <b>RESISTOR</b><p> MELF 0.25 W >NAME >VALUE <b>RESISTOR</b><p> MELF 0.12 W >NAME >VALUE <b>RESISTOR</b><p> MELF 0.25 W >NAME >VALUE <b>RESISTOR</b><p> type 0204, grid 5 mm >NAME >VALUE <b>RESISTOR</b><p> type 0204, grid 7.5 mm >NAME >VALUE <b>RESISTOR</b><p> type 0207, grid 10 mm >NAME >VALUE <b>RESISTOR</b><p> type 0207, grid 12 mm >NAME >VALUE <b>RESISTOR</b><p> type 0207, grid 15mm >NAME >VALUE <b>RESISTOR</b><p> type 0207, grid 2.5 mm >NAME >VALUE <b>RESISTOR</b><p> type 0207, grid 5 mm >NAME >VALUE <b>RESISTOR</b><p> type 0207, grid 7.5 mm >NAME >VALUE <b>RESISTOR</b><p> type 0309, grid 10mm >NAME >VALUE <b>RESISTOR</b><p> type 0309, grid 12.5 mm >NAME >VALUE <b>RESISTOR</b><p> type 0411, grid 12.5 mm >NAME >VALUE <b>RESISTOR</b><p> type 0411, grid 15 mm >NAME >VALUE <b>RESISTOR</b><p> type 0411, grid 3.81 mm >NAME >VALUE <b>RESISTOR</b><p> type 0414, grid 15 mm >NAME >VALUE <b>RESISTOR</b><p> type 0414, grid 5 mm >NAME >VALUE <b>RESISTOR</b><p> type 0617, grid 17.5 mm >NAME >VALUE <b>RESISTOR</b><p> type 0617, grid 22.5 mm >NAME >VALUE <b>RESISTOR</b><p> type 0617, grid 5 mm >NAME >VALUE <b>RESISTOR</b><p> type 0922, grid 22.5 mm >NAME >VALUE <b>RESISTOR</b><p> type 0613, grid 5 mm >NAME >VALUE <b>RESISTOR</b><p> type 0613, grid 15 mm >NAME >VALUE <b>RESISTOR</b><p> type 0817, grid 22.5 mm >NAME >VALUE 0817 <b>RESISTOR</b><p> type 0817, grid 6.35 mm >NAME >VALUE 0817 <b>RESISTOR</b><p> type V234, grid 12.5 mm >NAME >VALUE <b>RESISTOR</b><p> type V235, grid 17.78 mm >NAME >VALUE <b>RESISTOR</b><p> type V526-0, grid 2.5 mm >NAME >VALUE <b>Mini MELF 0102 Axial</b> >NAME >VALUE <b>RESISTOR</b><p> type 0922, grid 7.5 mm >NAME >VALUE 0922 <b>CECC Size RC2211</b> Reflow Soldering<p> source Beyschlag >NAME >VALUE <b>CECC Size RC2211</b> Wave Soldering<p> source Beyschlag >NAME >VALUE <b>CECC Size RC3715</b> Reflow Soldering<p> source Beyschlag >NAME >VALUE <b>CECC Size RC3715</b> Wave Soldering<p> source Beyschlag >NAME >VALUE <b>CECC Size RC6123</b> Reflow Soldering<p> source Beyschlag >NAME >VALUE <b>CECC Size RC6123</b> Wave Soldering<p> source Beyschlag >NAME >VALUE <b>RESISTOR</b><p> type RDH, grid 15 mm >NAME >VALUE RDH <b>RESISTOR</b><p> type 0204, grid 2.5 mm >NAME >VALUE <b>RESISTOR</b><p> type 0309, grid 2.5 mm >NAME >VALUE <b>RESISTOR</b> chip<p> Source: http://www.vishay.com/docs/20008/dcrcw.pdf >NAME >VALUE <b>Bulk Metal® Foil Technology</b>, Tubular Axial Lead Resistors, Meets or Exceeds MIL-R-39005 Requirements<p> MIL SIZE RNC55<br> Source: VISHAY .. vta56.pdf >NAME >VALUE <b>Bulk Metal® Foil Technology</b>, Tubular Axial Lead Resistors, Meets or Exceeds MIL-R-39005 Requirements<p> MIL SIZE RNC60<br> Source: VISHAY .. vta56.pdf >NAME >VALUE <b>Bulk Metal® Foil Technology</b>, Tubular Axial Lead Resistors, Meets or Exceeds MIL-R-39005 Requirements<p> MIL SIZE RBR52<br> Source: VISHAY .. vta56.pdf >NAME >VALUE <b>Bulk Metal® Foil Technology</b>, Tubular Axial Lead Resistors, Meets or Exceeds MIL-R-39005 Requirements<p> MIL SIZE RBR53<br> Source: VISHAY .. vta56.pdf >NAME >VALUE <b>Bulk Metal® Foil Technology</b>, Tubular Axial Lead Resistors, Meets or Exceeds MIL-R-39005 Requirements<p> MIL SIZE RBR54<br> Source: VISHAY .. vta56.pdf >NAME >VALUE <b>Bulk Metal® Foil Technology</b>, Tubular Axial Lead Resistors, Meets or Exceeds MIL-R-39005 Requirements<p> MIL SIZE RBR55<br> Source: VISHAY .. vta56.pdf >NAME >VALUE <b>Bulk Metal® Foil Technology</b>, Tubular Axial Lead Resistors, Meets or Exceeds MIL-R-39005 Requirements<p> MIL SIZE RBR56<br> Source: VISHAY .. vta56.pdf >NAME >VALUE <b>Package 4527</b><p> Source: http://www.vishay.com/docs/31059/wsrhigh.pdf >NAME >VALUE <b>Wirewound Resistors, Precision Power</b><p> Source: VISHAY wscwsn.pdf >NAME >VALUE <b>Wirewound Resistors, Precision Power</b><p> Source: VISHAY wscwsn.pdf >NAME >VALUE <b>Wirewound Resistors, Precision Power</b><p> Source: VISHAY wscwsn.pdf >NAME >VALUE <b>Wirewound Resistors, Precision Power</b><p> Source: VISHAY wscwsn.pdf >NAME >VALUE <b>Wirewound Resistors, Precision Power</b><p> Source: VISHAY wscwsn.pdf >NAME >VALUE <b>Wirewound Resistors, Precision Power</b><p> Source: VISHAY wscwsn.pdf >NAME >VALUE <b>CRCW1218 Thick Film, Rectangular Chip Resistors</b><p> Source: http://www.vishay.com .. dcrcw.pdf >NAME >VALUE <b>Chip Monolithic Ceramic Capacitors</b> Medium Voltage High Capacitance for General Use<p> Source: http://www.murata.com .. GRM43DR72E224KW01.pdf >NAME >VALUE >NAME >VALUE <b>PRL1632 are realized as 1W for 3.2 × 1.6mm(1206)</b><p> Source: http://www.mouser.com/ds/2/392/products_18-2245.pdf >NAME >VALUE CAPACITOR CAPACITOR CAPACITOR CAPACITOR CAPACITOR CAPACITOR CAPACITOR CAPACITOR CAPACITOR CAPACITOR CAPACITOR CAPACITOR CAPACITOR CAPACITOR CAPACITOR CAPACITOR grid 2.5 mm, outline 2.4 x 4.4 mm CAPACITOR grid 2.5 mm, outline 2.5 x 5 mm CAPACITOR grid 2.5 mm, outline 3 x 5 mm CAPACITOR grid 2.5 mm, outline 4 x 5 mm CAPACITOR grid 2.5 mm, outline 5 x 5 mm CAPACITOR grid 2.5 mm, outline 6 x 5 mm CAPACITOR grid 2.5 mm + 5 mm, outline 2.4 x 7 mm CAPACITOR grid 2.5 + 5 mm, outline 2.5 x 7.5 mm CAPACITOR grid 2.5 + 5 mm, outline 3.5 x 7.5 mm CAPACITOR grid 2.5 + 5 mm, outline 4.5 x 7.5 mm CAPACITOR grid 2.5 + 5 mm, outline 5.5 x 7.5 mm CAPACITOR grid 5 mm, outline 2.4 x 4.4 mm CAPACITOR grid 5 mm, outline 2.5 x 7.5 mm CAPACITOR grid 5 mm, outline 4.5 x 7.5 mm CAPACITOR grid 5 mm, outline 3 x 7.5 mm CAPACITOR grid 5 mm, outline 5 x 7.5 mm CAPACITOR grid 5 mm, outline 5.5 x 7.5 mm CAPACITOR grid 5 mm, outline 7.5 x 7.5 mm CAPACITOR Horizontal, grid 5 mm, outline 7.5 x 7.5 mm CAPACITOR grid 7.5 mm, outline 3.2 x 10.3 mm CAPACITOR grid 7.5 mm, outline 4.2 x 10.3 mm CAPACITOR grid 7.5 mm, outline 5.2 x 10.6 mm CAPACITOR grid 10.2 mm, outline 4.3 x 13.3 mm CAPACITOR grid 10.2 mm, outline 5.4 x 13.3 mm CAPACITOR grid 10.2 mm, outline 6.4 x 13.3 mm CAPACITOR grid 10.2 mm + 15.2 mm, outline 6.2 x 18.4 mm CAPACITOR grid 15 mm, outline 5.4 x 18.3 mm CAPACITOR grid 15 mm, outline 6.4 x 18.3 mm CAPACITOR grid 15 mm, outline 7.2 x 18.3 mm CAPACITOR grid 15 mm, outline 8.4 x 18.3 mm CAPACITOR grid 15 mm, outline 9.1 x 18.2 mm CAPACITOR grid 22.5 mm, outline 6.2 x 26.8 mm CAPACITOR grid 22.5 mm, outline 7.4 x 26.8 mm CAPACITOR grid 22.5 mm, outline 8.7 x 26.8 mm CAPACITOR grid 22.5 mm, outline 10.8 x 26.8 mm CAPACITOR grid 22.5 mm, outline 11.3 x 26.8 mm CAPACITOR grid 27.5 mm, outline 9.3 x 31.6 mm CAPACITOR grid 27.5 mm, outline 11.3 x 31.6 mm CAPACITOR grid 27.5 mm, outline 13.4 x 31.6 mm CAPACITOR grid 27.5 mm, outline 20.5 x 31.6 mm CAPACITOR grid 32.5 mm, outline 13.7 x 37.4 mm CAPACITOR grid 32.5 mm, outline 16.2 x 37.4 mm CAPACITOR grid 32.5 mm, outline 18.2 x 37.4 mm CAPACITOR grid 37.5 mm, outline 19.2 x 41.8 mm CAPACITOR grid 37.5 mm, outline 20.3 x 41.8 mm CAPACITOR grid 5 mm, outline 3.5 x 7.5 mm CAPACITOR grid 37.5 mm, outline 15.5 x 41.8 mm CAPACITOR grid 7.5 mm, outline 6.3 x 10.6 mm CAPACITOR grid 27.5 mm, outline 15.4 x 31.6 mm CAPACITOR grid 27.5 mm, outline 17.3 x 31.6 mm Ceramic Chip Capacitor KEMET 0204 reflow solder Metric Code Size 1005 Ceramic Chip Capacitor KEMET 0603 reflow solder Metric Code Size 1608 Ceramic Chip Capacitor KEMET 0805 reflow solder Metric Code Size 2012 Ceramic Chip Capacitor KEMET 1206 reflow solder Metric Code Size 3216 Ceramic Chip Capacitor KEMET 1210 reflow solder Metric Code Size 3225 Ceramic Chip Capacitor KEMET 1812 reflow solder Metric Code Size 4532 Ceramic Chip Capacitor KEMET 1825 reflow solder Metric Code Size 4564 Ceramic Chip Capacitor KEMET 2220 reflow solderMetric Code Size 5650 Ceramic Chip Capacitor KEMET 2225 reflow solderMetric Code Size 5664 Source: http://www.vishay.com/docs/10129/hpc0201a.pdf Source: http://www.avxcorp.com/docs/catalogs/cx5r.pdf CAPACITOR Source: AVX .. aphvc.pdf CAPACITOR Source: AVX .. aphvc.pdf CAPACITOR Chip RESISTOR 0402 EIA (1005 Metric) RESISTOR RESISTOR RESISTOR wave soldering RESISTOR RESISTOR wave soldering RESISTOR RESISTOR wave soldering RESISTOR RESISTOR wave soldering RESISTOR RESISTOR wave soldering RESISTOR RESISTOR wave soldering RESISTOR RESISTOR wave soldering RESISTOR RESISTOR wave soldering RESISTOR RESISTOR wave soldering RESISTOR Source: http://download.siliconexpert.com/pdfs/2005/02/24/Semi_Ap/2/VSH/Resistor/dcrcwfre.pdf RESISTOR wave soldering Source: http://download.siliconexpert.com/pdfs/2005/02/24/Semi_Ap/2/VSH/Resistor/dcrcwfre.pdf RESISTOR MELF 0.10 W RESISTOR MELF 0.25 W RESISTOR MELF 0.12 W RESISTOR MELF 0.10 W RESISTOR MELF 0.25 W RESISTOR MELF 0.25 W RESISTOR MELF 0.12 W RESISTOR MELF 0.25 W RESISTOR type 0204, grid 5 mm RESISTOR type 0204, grid 7.5 mm RESISTOR type 0207, grid 10 mm RESISTOR type 0207, grid 12 mm RESISTOR type 0207, grid 15mm RESISTOR type 0207, grid 2.5 mm RESISTOR type 0207, grid 5 mm RESISTOR type 0207, grid 7.5 mm RESISTOR type 0309, grid 10mm RESISTOR type 0309, grid 12.5 mm RESISTOR type 0411, grid 12.5 mm RESISTOR type 0411, grid 15 mm RESISTOR type 0411, grid 3.81 mm RESISTOR type 0414, grid 15 mm RESISTOR type 0414, grid 5 mm RESISTOR type 0617, grid 17.5 mm RESISTOR type 0617, grid 22.5 mm RESISTOR type 0617, grid 5 mm RESISTOR type 0922, grid 22.5 mm RESISTOR type 0613, grid 5 mm RESISTOR type 0613, grid 15 mm RESISTOR type 0817, grid 22.5 mm RESISTOR type 0817, grid 6.35 mm RESISTOR type V234, grid 12.5 mm RESISTOR type V235, grid 17.78 mm RESISTOR type V526-0, grid 2.5 mm Mini MELF 0102 Axial RESISTOR type 0922, grid 7.5 mm CECC Size RC2211 Reflow Soldering source Beyschlag CECC Size RC2211 Wave Soldering source Beyschlag CECC Size RC3715 Reflow Soldering source Beyschlag CECC Size RC3715 Wave Soldering source Beyschlag CECC Size RC6123 Reflow Soldering source Beyschlag CECC Size RC6123 Wave Soldering source Beyschlag RESISTOR type RDH, grid 15 mm RESISTOR type 0204, grid 2.5 mm RESISTOR type 0309, grid 2.5 mm RESISTOR chip Source: http://www.vishay.com/docs/20008/dcrcw.pdf Bulk Metal® Foil Technology, Tubular Axial Lead Resistors, Meets or Exceeds MIL-R-39005 Requirements MIL SIZE RNC55 Source: VISHAY .. vta56.pdf Bulk Metal® Foil Technology, Tubular Axial Lead Resistors, Meets or Exceeds MIL-R-39005 Requirements MIL SIZE RNC60 Source: VISHAY .. vta56.pdf Bulk Metal® Foil Technology, Tubular Axial Lead Resistors, Meets or Exceeds MIL-R-39005 Requirements MIL SIZE RBR52 Source: VISHAY .. vta56.pdf Bulk Metal® Foil Technology, Tubular Axial Lead Resistors, Meets or Exceeds MIL-R-39005 Requirements MIL SIZE RBR53 Source: VISHAY .. vta56.pdf Bulk Metal® Foil Technology, Tubular Axial Lead Resistors, Meets or Exceeds MIL-R-39005 Requirements MIL SIZE RBR54 Source: VISHAY .. vta56.pdf Bulk Metal® Foil Technology, Tubular Axial Lead Resistors, Meets or Exceeds MIL-R-39005 Requirements MIL SIZE RBR55 Source: VISHAY .. vta56.pdf Bulk Metal® Foil Technology, Tubular Axial Lead Resistors, Meets or Exceeds MIL-R-39005 Requirements MIL SIZE RBR56 Source: VISHAY .. vta56.pdf Package 4527 Source: http://www.vishay.com/docs/31059/wsrhigh.pdf Wirewound Resistors, Precision Power Source: VISHAY wscwsn.pdf Wirewound Resistors, Precision Power Source: VISHAY wscwsn.pdf Wirewound Resistors, Precision Power Source: VISHAY wscwsn.pdf Wirewound Resistors, Precision Power Source: VISHAY wscwsn.pdf Wirewound Resistors, Precision Power Source: VISHAY wscwsn.pdf Wirewound Resistors, Precision Power Source: VISHAY wscwsn.pdf CRCW1218 Thick Film, Rectangular Chip Resistors Source: http://www.vishay.com .. dcrcw.pdf Chip Monolithic Ceramic Capacitors Medium Voltage High Capacitance for General Use Source: http://www.murata.com .. GRM43DR72E224KW01.pdf PRL1632 are realized as 1W for 3.2 × 1.6mm(1206) Source: http://www.mouser.com/ds/2/392/products_18-2245.pdf >NAME >VALUE >NAME >VALUE <B>CAPACITOR</B>, European symbol <B>RESISTOR</B>, European symbol <b>DIY Modules for Arduino, Raspberry Pi, CubieBoard etc.</b> <br><br> The library contains a list of symbols and footprints for popular, cheap and easy-to-use electronic modules.<br> The modules are intend to work with microprocessor-based platforms such as <a href="http://arduino.cc">Arduino</a>, <a href="http://raspberrypi.org/">Raspberry Pi</a>, <a href="http://cubieboard.org/">CubieBoard</a>, <a href="http://beagleboard.org/">BeagleBone</a> and many others. There are many manufacturers of the modules in the world. Almost all of them can be bought on <a href="ebay.com">ebay.com</a>.<br> <br> By using this library, you can design a PCB for devices created with usage of modules. Even if you do not need to create PCB design, you can also use the library to quickly document your work by drawing schematics of devices built by you.<br> <br> The latest version, examples, photos and much more can be found at: <b><a href="http://diymodules.org/eagle">diymodules.org/eagle</a></b><br><br> Comments, suggestions and bug reports please send to: <b><a href="mailto:eagle@diymodules.org">eagle@diymodules.org</b></a><br><br> <i>Version: 1.8.0 (2017-Jul-02)</i><br> <i>Created by: Miroslaw Brudnowski</i><br><br> <i>Released under the Creative Commons Attribution 4.0 International License: <a href="http://creativecommons.org/licenses/by/4.0">http://creativecommons.org/licenses/by/4.0</a></i> <br><br> <center> <a href="http://diymodules.org/eagle"><img src="http://www.diymodules.org/img/diymodules-lbr-image.php?v=1.8.0" alt="DIYmodules.org"></a> </center> <b>128x64 Dot Matrix OLED Module</b><br /> Variant with SPI interface >NAME >VALUE <b>DC/DC Step-Down Regulator</b> based on <b>MP2307DN</b> chip >NAME >VALUE IN OUT <b>128x64 Dot Matrix OLED Module</b><br /> Variant with I2C interface >NAME >VALUE GND VCC SCL SDA <b>128x64 Dot Matrix OLED Module</b> >NAME >VALUE 128x64 OLED <b>DC/DC Step-Down Regulator</b> based on <b>MP2307DN</b> chip >NAME >VALUE <b>128x64 Dot Matrix OLED Module</b><br /> Variant with I2C interface >NAME >VALUE 128x64 OLED <b>128x64 Dot Matrix OLED Module</b> based on <b>SSD1306</b> chip<br /> Variant with <b>SPI interface</b> <p>More details available here:<br /> <a href="http://www.instructables.com/id/How-to-use-OLED-display-arduino-module/">http://www.instructables.com/id/How-to-use-OLED-display-arduino-module/</a></p> <p><b>SSD1306</b> datasheet:<br> <a href="https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf">https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf</a></p> <p><b><a href="http://www.ebay.com/sch/oled+display+128x64">Click here to find device on ebay.com</a></b><br /> <b>Note:</b> There are two variants: I2C and SPI. Search for the proper version.</p> <p><img alt="photo" src="http://www.diymodules.org/img/device-photo.php?name=DISPLAY-OLED-128X64"></p> <b>DC/DC Step-Down Regulator</b> based on <b>MP2307DN</b> chip <p><b>MP2307</b> datasheet available here:<br> <a href="https://cdn-shop.adafruit.com/datasheets/MP2307_r1.9.pdf">https://cdn-shop.adafruit.com/datasheets/MP2307_r1.9.pdf</a></p> <p><b><a href="http://www.ebay.com/sch/dc+dc+3a+mini+converter">Click here to find device on ebay.com</a></b></p> <p><img alt="photo" src="http://www.diymodules.org/img/device-photo.php?name=DC-DC-STEP-DOWN-MP2307"></p> <b>128x64 Dot Matrix OLED Module</b> based on <b>SSD1306</b> chip<br /> Variant with <b>I2C interface</b> <p>More details available here:<br /> <a href="http://www.instructables.com/id/Monochrome-096-i2c-OLED-display-with-arduino-SSD13/">http://www.instructables.com/id/Monochrome-096-i2c-OLED-display-with-arduino-SSD13/</a></p> <p><b>SSD1306</b> datasheet:<br> <a href="https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf">https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf</a></p> <p><b><a href="http://www.ebay.com/sch/oled+display+128x64+iic">Click here to find device on ebay.com</a></b><br /> <b>Note:</b> There are two variants: I2C and SPI. Search for the proper version.</p> <p><img alt="photo" src="http://www.diymodules.org/img/device-photo.php?name=DISPLAY-OLED-128X64-I2C"></p> <b>Potentiometers</b><p> Beckman, Copal, Piher, Spectrol, Schukat<p> <author>Created by librarian@cadsoft.de</author> <b>POTENTIOMETER</b><p> Beckman Helitrim 25 >NAME >VALUE 3 1 <b>POTENTIOMETER</b><p> Beckman Helitrim 25 >NAME >VALUE 3 1 <b>POTENTIOMETER</b><p> Beckman Helitrim 25 >NAME >VALUE 3 1 3 <b>POTENTIOMETER</b><p> Beckman Helitrim 25 >NAME >VALUE 3 1 3 <b>POTENTIOMETER</b><p> Beckman Helitrim 64 >NAME >VALUE 3 1 3 <b>POTENTIOMETER</b><p> Beckman Helitrim 64 >NAME >VALUE 1 3 <b>POTENTIOMETER</b> >NAME >VALUE 1 3 2 3 1 <b>POTENTIOMETER</b><p> distributor Schukat >NAME >VALUE <b>POTENTIOMETER</b><p> distributor Schukat >NAME >VALUE <b>POTENTIOMETER</b><p> distributor Schukat >NAME >VALUE <b>POTENTIOMETER</b><p> distributor Schukat >NAME >VALUE <b>POTENTIOMETER</b><p> distributor Schukat >NAME >VALUE <b>POTENTIOMETER</b><p> distributor Schukat >NAME >VALUE <b>POTENTIOMETER</b><p> Copal >NAME >VALUE 3 1 <b>POTENTIOMETER</b> >NAME >VALUE <b>POTENTIOMETER</b> >NAME >VALUE <b>POTENTIOMETER</b><p> Piher >NAME >VALUE <b>POTENTIOMETER</b><p> Piher >NAME >VALUE <b>POTENTIOMETER</b><p> Copal 3 1 >NAME >VALUE <b>POTENTIOMETER</b><p> Copal >NAME >VALUE 3 1 3 <b>POTENTIOMETER</b><p> Copal >NAME >VALUE 1 3 3 <b>POTENTIOMETER</b><p> Copal >NAME >VALUE 1 3 <b>POTENTIOMETER</b><p> Spectrol >NAME >VALUE 63P 1 3 3 <b>POTENTIOMETER</b><p> Spectrol >NAME >VALUE 3 1 3 <b>POTENTIOMETER</b><p> Spectrol >NAME >VALUE 3 1 3 <b>POTENTIOMETER</b><p> Spectrol >NAME >VALUE 3 1 3 <b>POTENTIOMETER</b><p> Spectrol >NAME >VALUE 3 1 3 <b>POTENTIOMETER</b> 3 1 >NAME >VALUE <b>POTENTIOMETER</b> >NAME >VALUE 3 1 <b>POTENTIOMETER</b><p> Piher >NAME >VALUE <b>POTENTIOMETER</b><p> Piher >NAME >VALUE <b>POTENTIOMETER</b> >NAME >VALUE 1 3 2 1 3 <b>POTENTIOMETER</b> >NAME >VALUE <b>POTENTIOMETER</b> >NAME >VALUE <b>POTENTIOMETER</b> >NAME >VALUE <b>Carbon Rotary Potentiometers - 20 mm size</b><p> Source: Radiohm .. RAD.pdf >NAME >VALUE <b>Carbon Rotary Potentiometers - 20 mm size</b><p> Source: Radiohm .. RAD.pdf >NAME >VALUE <b>COPAL ELECTRONICS SM-42/43 SURFACE MOUNT TRIMMERS</b> Side adjustmet<p> Source: smt-pots.pdf >NAME >VALUE <b>COPAL ELECTRONICS SM-42/43 SURFACE MOUNT TRIMMERS</b> Side adjustmet<p> Source: smt-pots.pdf >NAME >VALUE <b>COPAL ELECTRONICS SM-42/43 SURFACE MOUNT TRIMMERS</b> Top adjustmet<p> Source: smt-pots.pdf >NAME >VALUE <b>COPAL ELECTRONICS SM-42/43 SURFACE MOUNT TRIMMERS</b> Top adjustmet<p> Source: smt-pots.pdf >NAME >VALUE <b>3 mm SMD Trimming Potentiometer</b> Side Adjust<p> Source: http://www.bourns.com/data/global/PDFs/3223.PDF >NAME >VALUE <b>3 mm SMD Trimming Potentiometer</b> Side Adjust<p> Source: http://www.bourns.com/data/global/PDFs/3223.PDF >NAME >VALUE <b>3 mm SMD Trimming Potentiometer</b> Top Adjust<p> Source: http://www.bourns.com/data/global/PDFs/3223.PDF >NAME >VALUE POTENTIOMETER Beckman Helitrim 25 POTENTIOMETER Beckman Helitrim 25 POTENTIOMETER Beckman Helitrim 25 POTENTIOMETER Beckman Helitrim 25 POTENTIOMETER Beckman Helitrim 64 POTENTIOMETER Beckman Helitrim 64 POTENTIOMETER POTENTIOMETER distributor Schukat POTENTIOMETER distributor Schukat POTENTIOMETER distributor Schukat POTENTIOMETER distributor Schukat POTENTIOMETER distributor Schukat POTENTIOMETER distributor Schukat POTENTIOMETER Copal POTENTIOMETER POTENTIOMETER POTENTIOMETER Piher POTENTIOMETER Piher POTENTIOMETER Copal POTENTIOMETER Copal POTENTIOMETER Copal POTENTIOMETER Copal POTENTIOMETER Spectrol POTENTIOMETER Spectrol POTENTIOMETER Spectrol POTENTIOMETER Spectrol POTENTIOMETER Spectrol POTENTIOMETER POTENTIOMETER POTENTIOMETER Piher POTENTIOMETER Piher POTENTIOMETER POTENTIOMETER POTENTIOMETER POTENTIOMETER Carbon Rotary Potentiometers - 20 mm size Source: Radiohm .. RAD.pdf Carbon Rotary Potentiometers - 20 mm size Source: Radiohm .. RAD.pdf COPAL ELECTRONICS SM-42/43 SURFACE MOUNT TRIMMERS Side adjustmet Source: smt-pots.pdf COPAL ELECTRONICS SM-42/43 SURFACE MOUNT TRIMMERS Side adjustmet Source: smt-pots.pdf COPAL ELECTRONICS SM-42/43 SURFACE MOUNT TRIMMERS Top adjustmet Source: smt-pots.pdf COPAL ELECTRONICS SM-42/43 SURFACE MOUNT TRIMMERS Top adjustmet Source: smt-pots.pdf 3 mm SMD Trimming Potentiometer Side Adjust Source: http://www.bourns.com/data/global/PDFs/3223.PDF 3 mm SMD Trimming Potentiometer Side Adjust Source: http://www.bourns.com/data/global/PDFs/3223.PDF 3 mm SMD Trimming Potentiometer Top Adjust Source: http://www.bourns.com/data/global/PDFs/3223.PDF >NAME >VALUE <b>POTENTIOMETER</b> <b>Speakers and Buzzers</b><p> <ul>Distributors: <li>Buerklin <li>Spoerle <li>Schukat </ul> <author>Created by librarian@cadsoft.de</author> <b>BUZZER</b> >NAME >VALUE BUZZER >NAME >VALUE <b>BUZZER</b><p> Source: Buerklin <b>Supply Symbols</b><p> GND, VCC, 0V, +5V, -5V, etc.<p> Please keep in mind, that these devices are necessary for the automatic wiring of the supply signals.<p> The pin name defined in the symbol is identical to the net which is to be wired automatically.<p> In this library the device names are the same as the pin names of the symbols, therefore the correct signal names appear next to the supply symbols in the schematic.<p> <author>Created by librarian@cadsoft.de</author> >VALUE >VALUE >VALUE >VALUE <b>SUPPLY SYMBOL</b> <b>SUPPLY SYMBOL</b> <b>SUPPLY SYMBOL</b> <b>SUPPLY SYMBOL</b> <b>Pin Headers</b><p> Naming:<p> MA = male<p> # contacts - # rows<p> W = angled<p> <author>Created by librarian@cadsoft.de</author> <b>PIN HEADER</b> >NAME 1 >VALUE 4 PIN HEADER >VALUE >NAME <b>PIN HEADER</b> <b>Pin Header Connectors</b><p> <author>Created by librarian@cadsoft.de</author> <b>PIN HEADER</b> >NAME >VALUE <b>PIN HEADER</b> >NAME >VALUE <b>PIN HEADER</b> >NAME >VALUE <b>PIN HEADER</b> >NAME >VALUE CON-M-1X5-200 >NAME >VALUE <b>PIN HEADER</b> >NAME >VALUE <b>PIN HEADER</b> >NAME >VALUE PIN HEADER PIN HEADER PIN HEADER PIN HEADER CON-M-1X5-200 PIN HEADER PIN HEADER >NAME >VALUE >NAME >VALUE >NAME >VALUE <b>PIN HEADER</b> <b>PIN HEADER</b> <b>PIN HEADER</b> <b>Varistors/Thermistors</b><p> Block, Siemens and generic<p> <author>Created by librarian@cadsoft.de</author> <b>VARISTOR</b> >VALUE >NAME <b>VARISTOR</b> >VALUE >NAME <b>VARISTOR</b> >NAME >VALUE VARISTOR VARISTOR VARISTOR >NAME >VALUE <b>THERMISTOR</b> SignalQuest Sensors<p> <author>Bob Starr rtzaudio@mindspring.com</author> SQ-SEN-200<p> Omnidirectional Tilt and Vibration Sensor >NAME >VALUE >NAME >VALUE TILT AND VIBRATION SENSOR<p> OMNIDIRECTIONAL <b>Burr-Brown Components</b><p> <author>Created by librarian@cadsoft.de</author> <b>Smal Outline Transistor</b> >NAME >VALUE <b>DPAC</b> >NAME >VALUE Smal Outline Transistor DPAC >NAME >VALUE <b>800mA and 1A Low Dropout (LDO) Positive Regulator</b><p> 1.8V, 2.5V, 2.85V, 3.3V, 5V, and Adj <b>Opto Couplers</b><p> Siemens, Hewlett-Packard, Texas Instuments, Sharp, Motorola<p> <author>Created by librarian@cadsoft.de</author> <b>DIL 6 SMD</b><p> Source: http://www.fairchildsemi.com/pf/4N/4N35-M.html >NAME >VALUE <b>Dual In Line Package</b> >VALUE >NAME <b>DIL 6 0.4 Inch</b><p> Source: http://www.fairchildsemi.com/pf/4N/4N35-M.html >VALUE >NAME DIL 6 SMD Source: http://www.fairchildsemi.com/pf/4N/4N35-M.html Dual In Line Package DIL 6 0.4 Inch Source: http://www.fairchildsemi.com/pf/4N/4N35-M.html >NAME >VALUE >NAME >VALUE <b>General Purpose 6-Pin Phototransistor Optocouplers</b><p> Source: http://www.fairchildsemi.com/ds/4N/4N35-M.pdf <b>RANDOM-PHASE OPTOISOLATORS TRIAC DRIVER OUTPUT</b><p> Source: http://www.fairchildsemi.com<br> MOC3020-M.pdf <b>Thyristors, Triacs, Trigger Diodes</b><p> <author>Created by librarian@cadsoft.de</author> <b>TOP 3</b> horizontal (Anode1; Anode2; Gate) >NAME >VALUE A20,3mm <b>TOP 3</b> vertical (Anode1; Anode2; Gate) >NAME >VALUE TOP 3 horizontal (Anode1; Anode2; Gate) TOP 3 vertical (Anode1; Anode2; Gate) >NAME >VALUE <b>25A TRIAC</b><p> Source: http://www.st.com/stonline/products/literature/ds/7470.pdf Default symbols for import LTspice schematics<p> 2012-10-29 alf@cadsoft.de<br> <b>RESISTOR</b><p> type 0204, grid 7.5 mm >NAME >VALUE <b>RESISTOR</b><p> type 0207, grid 10 mm >NAME >VALUE <b>RESISTOR</b> chip<p> Source: http://www.vishay.com/docs/20008/dcrcw.pdf >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b><p> >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>CRCW1218 Thick Film, Rectangular Chip Resistors</b><p> Source: http://www.vishay.com .. dcrcw.pdf >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>Package 4527</b><p> Source: http://www.vishay.com/docs/31059/wsrhigh.pdf >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b><p> Source: http://download.siliconexpert.com/pdfs/2005/02/24/Semi_Ap/2/VSH/Resistor/dcrcwfre.pdf >NAME >VALUE RESISTOR type 0204, grid 7.5 mm RESISTOR type 0207, grid 10 mm RESISTOR chip Source: http://www.vishay.com/docs/20008/dcrcw.pdf RESISTOR RESISTOR RESISTOR RESISTOR RESISTOR RESISTOR CRCW1218 Thick Film, Rectangular Chip Resistors Source: http://www.vishay.com .. dcrcw.pdf RESISTOR RESISTOR RESISTOR RESISTOR RESISTOR Package 4527 Source: http://www.vishay.com/docs/31059/wsrhigh.pdf RESISTOR RESISTOR Source: http://download.siliconexpert.com/pdfs/2005/02/24/Semi_Ap/2/VSH/Resistor/dcrcwfre.pdf >NAME >VALUE SpiceOrder 1 SpiceOrder 2 <B>RESISTOR</B>, European symbol <b>Rectifiers</b><p> General Instrument, Semikron, Diotec, Fagor<p> <author>Created by librarian@cadsoft.de</author> <b>RECTIFIER</b> >VALUE >NAME RECTIFIER >VALUE >NAME <b>RECTIFIER</b> <h3>SparkFun Switches, Buttons, Encoders</h3> In this library you'll find switches, buttons, joysticks, and anything that moves to create or disrupt an electrical connection. <br> <br> We've spent an enormous amount of time creating and checking these footprints and parts, but it is <b> the end user's responsibility</b> to ensure correctness and suitablity for a given componet or application. <br> <br>If you enjoy using this library, please buy one of our products at <a href=" www.sparkfun.com">SparkFun.com</a>. <br> <br> <b>Licensing:</b> Creative Commons ShareAlike 4.0 International - https://creativecommons.org/licenses/by-sa/4.0/ <br> <br> You are welcome to use this library for commercial purposes. For attribution, we ask that when you begin to sell your device using our footprint, you email us with a link to the product being sold. We want bragging rights that we helped (in a very small part) to create your 8th world wonder. We would like the opportunity to feature your device on our homepage. <h3>Reed Switch - Glass case - PTH</h3> <p>A reed switch is a magnetically-actuated switch. When the device is exposed to a magnetic field, the two ferrous materials inside the switch pull together and the switch closes.</p> <p><a href="https://www.sparkfun.com/datasheets/Components/Buttons/MDSR-4.pdf">Datasheet</a></p> >Name >Value <h3>Reed Switch - Insulated Case - PTH</h3> <p>A reed switch is a magnetically-actuated switch. When the device is exposed to a magnetic field, the two ferrous materials inside the switch pull together and the switch closes.</p> <p><a href="https://cdn.sparkfun.com/datasheets/Dev/LilyPad/RS-01C.jpg">Datasheet</a> (RS-01C)</p> >Name >Value <h3>Reed Switch</h3> <p>A reed switch is a magnetically-actuated switch. When the device is exposed to a magnetic field, the two ferrous materials inside the switch pull together and the switch closes.</p> >NAME >VALUE <h3>Reed Switch</h3> <p>A reed switch is a magnetically-actuated switch. When the device is exposed to a magnetic field, the two ferrous materials inside the switch pull together and the switch closes.</p> <h4>Variant Overview</h4> <h5>PTH-GLASS</h5> <ul> <li><a href="https://www.sparkfun.com/products/8642">Reed Switch</a> (COM-08642) - PTH reed switch w/ glass body (6.0 x 0.9 mm)</li> </ul> <h5>PTH-INSULATED</h5> <ul> <li><a href="https://www.sparkfun.com/products/10601">Reed Switch - Insulated</a> (COM-10601) - PTH reed switch w/ insulated body (15.1 x 4.2 mm)</li> </ul> <b>Switches</b><p> Marquardt, Siemens, C&K, ITT, and others<p> <author>Created by librarian@cadsoft.de</author> <b>TOGGLE SWITCH</b> >NAME >VALUE TOGGLE SWITCH >NAME >VALUE <b>TOGGLE SWITCH</b> <b>Fuses and Fuse Holders</b><p> <author>Created by librarian@cadsoft.de</author> <b>FUSE</b><p> Wickmann >NAME >VALUE FUSE Wickmann >NAME >VALUE <b>FUSE</b><p> Wickmann Since Version 8.2, EAGLE supports online libraries. The ids of those online libraries will not be understood (or retained) with this version. Since Version 8.3, EAGLE supports URNs for individual library assets (packages, symbols, and devices). The URNs of those assets will not be understood (or retained) with this version. Since Version 8.3, EAGLE supports the association of 3D packages with devices in libraries, schematics, and board files. Those 3D packages will not be understood (or retained) with this version. Since Version 8.4, EAGLE supports properties for SPICE simulation. Probes in schematics and SPICE mapping objects found in parts and library devices will not be understood with this version. Update EAGLE to the latest version for full support of SPICE simulation. ================================================ FILE: eagle/stm32_T12+858D_v4.sch ================================================ STM32 STM32 BOOT0 BOOT1 0 1 <b>Linear Devices</b><p> Operational amplifiers, comparators, voltage regulators, ADCs, DACs, etc.<p> <author>Created by librarian@cadsoft.de</author> <b>Dual In Line Package</b> >NAME >VALUE <b>Small Outline Package 8</b><br> NS Package M08A >NAME >VALUE <b>Thin Shrink Small Outline Plastic 8</b> 3 x 4.4 mm<p> >NAME >VALUE Dual In Line Package Small Outline Package 8 NS Package M08A Thin Shrink Small Outline Plastic 8 3 x 4.4 mm >NAME >VALUE V+ V- <b>Single Op Amp</b> 2.7V to 6.0V Single Supply CMOS<p> Source: http://ww1.microchip.com/downloads/en/DeviceDoc/21314g.pdf <b>Atmel Memory Devices</b><p> <p>THIS LIBRARY IS PROVIDED AS IS AND WITHOUT WARRANTY OF ANY KIND, EXPRESSED OR IMPLIED.<br> USE AT YOUR OWN RISK!<p> <author>Copyright (C) 2008, Bob Starr<br> http://www.bobstarr.net<br></author> <b>SMALL OUTLINE INTEGRATED CIRCUIT</b><p> 8S1, body 3.9 mm/JEDEC MS-012AA >NAME >VALUE <b>SMALL OUTLINE INTEGRATED CIRCUIT</b><p> 8S2 Package (EIAJ), 5.4 mm body >NAME >VALUE >NAME >VALUE <b>EEPROM</b><p> I2C serial bus <b>Diodes</b><p> Based on the following sources: <ul> <li>Motorola : www.onsemi.com <li>Fairchild : www.fairchildsemi.com <li>Philips : www.semiconductors.com <li>Vishay : www.vishay.de </ul> <author>Created by librarian@cadsoft.de</author> <B>DIODE</B><p> diameter 2 mm, horizontal, grid 10.16mm >NAME >VALUE <B>DIODE</B><p> diameter 2.54 mm, horizontal, grid 10.16 mm >NAME >VALUE <B>DIODE</B><p> diameter 3.5 mm, horizontal, grid 15.24 mm >NAME >VALUE <B>DIODE</B><p> diameter 6.35 mm metall, horizontal, grid 20.32 mm >NAME >VALUE <B>DIODE</B><p> diameter 4 mm, vertical, grid 10.16 mm >NAME >VALUE <B>DIODE</B><p> diameter 1.8 mm, horizontal, grid 7.62 mm >NAME >VALUE <B>DIODE</B><p> diameter 4.8 mm, vertical, grid 10.16 mm >NAME >VALUE <B>DIODE</B><p> diameter 4.8 mm, vertical, grid 12.7 mm >NAME >VALUE <B>DIODE</B><p> 3-lead smd >NAME >VALUE <B>DIODE</B><p> diameter 3 mm, horizontal, grid 10.16 mm >NAME >VALUE <B>DIODE</B><p> diameter 3 mm, horizontal, grid 12.7 mm >NAME >VALUE <b>Z DIODE</b> >NAME >VALUE <b>Z DIODE</b> >NAME >VALUE <b>Z DIODE</b> >NAME >VALUE <b>Z DIODE</b> >NAME >VALUE <b>Z DIODE</b> >NAME >VALUE <B>DIODE</B><p> diameter 3 mm, horizontal, grid 12.7 mm >NAME >VALUE <B>DIODE</B> >NAME >VALUE <B>DIODE</B> >NAME >VALUE <b>Small Outline Transistor</b> >NAME >VALUE <B>DIODE</B> >NAME >VALUE <B>DIODE</B><p> diameter 2.54 mm, horizontal, grid 10.16 mm >NAME >VALUE DIODE diameter 2 mm, horizontal, grid 10.16mm DIODE diameter 2.54 mm, horizontal, grid 10.16 mm DIODE diameter 3.5 mm, horizontal, grid 15.24 mm DIODE diameter 6.35 mm metall, horizontal, grid 20.32 mm DIODE diameter 4 mm, vertical, grid 10.16 mm DIODE diameter 1.8 mm, horizontal, grid 7.62 mm DIODE diameter 4.8 mm, vertical, grid 10.16 mm DIODE diameter 4.8 mm, vertical, grid 12.7 mm DIODE 3-lead smd DIODE diameter 3 mm, horizontal, grid 10.16 mm DIODE diameter 3 mm, horizontal, grid 12.7 mm Z DIODE Z DIODE Z DIODE Z DIODE Z DIODE DIODE diameter 3 mm, horizontal, grid 12.7 mm DIODE DIODE Small Outline Transistor DIODE DIODE diameter 2.54 mm, horizontal, grid 10.16 mm >NAME >VALUE >NAME >VALUE SpiceOrder 1 SpiceOrder 2 Z-Diode <B>DIODE</B><p> general purpose rectifier, 1 A <b>Field Effect Transistors</b><p> <author>Created by librarian@cadsoft.de</author><p> <p> Symbols changed according to IEC617<p> All types, packages and assignment to symbols and pins checked<p> Package outlines partly checked<p> <p> JFET = junction FET<p> IGBT-x = insulated gate bipolar transistor<p> x=N: NPN; x=P: PNP<p> IGFET-mc-nnn; (IGFET=insulated gate field effect transistor)<P> m=D: depletion mode (Verdr&auml;ngungstyp)<p> m=E: enhancement mode (Anreicherungstyp)<p> c: N=N-channel; P=P-Channel<p> GDSB: gate, drain, source, bulk<p> <p> by R. Vogg 15.March.2002 <b>TO 220 horizontal</b> >NAME >VALUE A17,5mm 1 2 3 TO 220 horizontal >VALUE >NAME <b>P-Channel Enhancement MOSFET</b> (HEXFET); -100V; -12A; 0,3Ohm <b>Transistors</b><p> <author>Created by librarian@cadsoft.de</author> <b>TO 18</b> >NAME >VALUE 1 2 3 TO 18 >NAME >VALUE <b>NPN TRANSISTOR</b> <b>Resistors, Capacitors, Inductors</b><p> Based on the previous libraries: <ul> <li>r.lbr <li>cap.lbr <li>cap-fe.lbr <li>captant.lbr <li>polcap.lbr <li>ipc-smd.lbr </ul> All SMD packages are defined according to the IPC specifications and CECC<p> <author>Created by librarian@cadsoft.de</author><p> <p> for Electrolyt Capacitors see also :<p> www.bccomponents.com <p> www.panasonic.com<p> www.kemet.com<p> http://www.secc.co.jp/pdf/os_e/2004/e_os_all.pdf <b>(SANYO)</b> <p> for trimmer refence see : <u>www.electrospec-inc.com/cross_references/trimpotcrossref.asp</u><p> <table border=0 cellspacing=0 cellpadding=0 width="100%" cellpaddding=0> <tr valign="top"> <! <td width="10">&nbsp;</td> <td width="90%"> <b><font color="#0000FF" size="4">TRIM-POT CROSS REFERENCE</font></b> <P> <TABLE BORDER=0 CELLSPACING=1 CELLPADDING=2> <TR> <TD COLSPAN=8> <FONT SIZE=3 FACE=ARIAL><B>RECTANGULAR MULTI-TURN</B></FONT> </TD> </TR> <TR> <TD ALIGN=CENTER> <B> <FONT SIZE=3 FACE=ARIAL color="#FF0000">BOURNS</FONT> </B> </TD> <TD ALIGN=CENTER> <B> <FONT SIZE=3 FACE=ARIAL color="#FF0000">BI&nbsp;TECH</FONT> </B> </TD> <TD ALIGN=CENTER> <B> <FONT SIZE=3 FACE=ARIAL color="#FF0000">DALE-VISHAY</FONT> </B> </TD> <TD ALIGN=CENTER> <B> <FONT SIZE=3 FACE=ARIAL color="#FF0000">PHILIPS/MEPCO</FONT> </B> </TD> <TD ALIGN=CENTER> <B> <FONT SIZE=3 FACE=ARIAL color="#FF0000">MURATA</FONT> </B> </TD> <TD ALIGN=CENTER> <B> <FONT SIZE=3 FACE=ARIAL color="#FF0000">PANASONIC</FONT> </B> </TD> <TD ALIGN=CENTER> <B> <FONT SIZE=3 FACE=ARIAL color="#FF0000">SPECTROL</FONT> </B> </TD> <TD ALIGN=CENTER> <B> <FONT SIZE=3 FACE=ARIAL color="#FF0000">MILSPEC</FONT> </B> </TD><TD>&nbsp;</TD> </TR> <TR> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3 > 3005P<BR> 3006P<BR> 3006W<BR> 3006Y<BR> 3009P<BR> 3009W<BR> 3009Y<BR> 3057J<BR> 3057L<BR> 3057P<BR> 3057Y<BR> 3059J<BR> 3059L<BR> 3059P<BR> 3059Y<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> 89P<BR> 89W<BR> 89X<BR> 89PH<BR> 76P<BR> 89XH<BR> 78SLT<BR> 78L&nbsp;ALT<BR> 56P&nbsp;ALT<BR> 78P&nbsp;ALT<BR> T8S<BR> 78L<BR> 56P<BR> 78P<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> T18/784<BR> 783<BR> 781<BR> -<BR> -<BR> -<BR> 2199<BR> 1697/1897<BR> 1680/1880<BR> 2187<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> 8035EKP/CT20/RJ-20P<BR> -<BR> RJ-20X<BR> -<BR> -<BR> -<BR> 1211L<BR> 8012EKQ&nbsp;ALT<BR> 8012EKR&nbsp;ALT<BR> 1211P<BR> 8012EKJ<BR> 8012EKL<BR> 8012EKQ<BR> 8012EKR<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> 2101P<BR> 2101W<BR> 2101Y<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> 2102L<BR> 2102S<BR> 2102Y<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> EVMCOG<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> 43P<BR> 43W<BR> 43Y<BR> -<BR> -<BR> -<BR> -<BR> 40L<BR> 40P<BR> 40Y<BR> 70Y-T602<BR> 70L<BR> 70P<BR> 70Y<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> RT/RTR12<BR> RT/RTR12<BR> RT/RTR12<BR> -<BR> RJ/RJR12<BR> RJ/RJR12<BR> RJ/RJR12<BR></FONT> </TD> </TR> <TR> <TD COLSPAN=8>&nbsp; </TD> </TR> <TR> <TD COLSPAN=8> <FONT SIZE=4 FACE=ARIAL><B>SQUARE MULTI-TURN</B></FONT> </TD> </TR> <TR> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>BOURN</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>BI&nbsp;TECH</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>MURATA</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>SPECTROL</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>MILSPEC</B></FONT> </TD> </TR> <TR> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 3250L<BR> 3250P<BR> 3250W<BR> 3250X<BR> 3252P<BR> 3252W<BR> 3252X<BR> 3260P<BR> 3260W<BR> 3260X<BR> 3262P<BR> 3262W<BR> 3262X<BR> 3266P<BR> 3266W<BR> 3266X<BR> 3290H<BR> 3290P<BR> 3290W<BR> 3292P<BR> 3292W<BR> 3292X<BR> 3296P<BR> 3296W<BR> 3296X<BR> 3296Y<BR> 3296Z<BR> 3299P<BR> 3299W<BR> 3299X<BR> 3299Y<BR> 3299Z<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> 66P&nbsp;ALT<BR> 66W&nbsp;ALT<BR> 66X&nbsp;ALT<BR> 66P&nbsp;ALT<BR> 66W&nbsp;ALT<BR> 66X&nbsp;ALT<BR> -<BR> 64W&nbsp;ALT<BR> -<BR> 64P&nbsp;ALT<BR> 64W&nbsp;ALT<BR> 64X&nbsp;ALT<BR> 64P<BR> 64W<BR> 64X<BR> 66X&nbsp;ALT<BR> 66P&nbsp;ALT<BR> 66W&nbsp;ALT<BR> 66P<BR> 66W<BR> 66X<BR> 67P<BR> 67W<BR> 67X<BR> 67Y<BR> 67Z<BR> 68P<BR> 68W<BR> 68X<BR> 67Y&nbsp;ALT<BR> 67Z&nbsp;ALT<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 5050<BR> 5091<BR> 5080<BR> 5087<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> T63YB<BR> T63XB<BR> -<BR> -<BR> -<BR> 5887<BR> 5891<BR> 5880<BR> -<BR> -<BR> -<BR> T93Z<BR> T93YA<BR> T93XA<BR> T93YB<BR> T93XB<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> 8026EKP<BR> 8026EKW<BR> 8026EKM<BR> 8026EKP<BR> 8026EKB<BR> 8026EKM<BR> 1309X<BR> 1309P<BR> 1309W<BR> 8024EKP<BR> 8024EKW<BR> 8024EKN<BR> RJ-9P/CT9P<BR> RJ-9W<BR> RJ-9X<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> 3103P<BR> 3103Y<BR> 3103Z<BR> 3103P<BR> 3103Y<BR> 3103Z<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> 3105P/3106P<BR> 3105W/3106W<BR> 3105X/3106X<BR> 3105Y/3106Y<BR> 3105Z/3105Z<BR> 3102P<BR> 3102W<BR> 3102X<BR> 3102Y<BR> 3102Z<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> EVMCBG<BR> EVMCCG<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 55-1-X<BR> 55-4-X<BR> 55-3-X<BR> 55-2-X<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> 50-2-X<BR> 50-4-X<BR> 50-3-X<BR> -<BR> -<BR> -<BR> 64P<BR> 64W<BR> 64X<BR> 64Y<BR> 64Z<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> RT/RTR22<BR> RT/RTR22<BR> RT/RTR22<BR> RT/RTR22<BR> RJ/RJR22<BR> RJ/RJR22<BR> RJ/RJR22<BR> RT/RTR26<BR> RT/RTR26<BR> RT/RTR26<BR> RJ/RJR26<BR> RJ/RJR26<BR> RJ/RJR26<BR> RJ/RJR26<BR> RJ/RJR26<BR> RJ/RJR26<BR> RT/RTR24<BR> RT/RTR24<BR> RT/RTR24<BR> RJ/RJR24<BR> RJ/RJR24<BR> RJ/RJR24<BR> RJ/RJR24<BR> RJ/RJR24<BR> RJ/RJR24<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> </TR> <TR> <TD COLSPAN=8>&nbsp; </TD> </TR> <TR> <TD COLSPAN=8> <FONT SIZE=4 FACE=ARIAL><B>SINGLE TURN</B></FONT> </TD> </TR> <TR> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>BOURN</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>BI&nbsp;TECH</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>MURATA</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>SPECTROL</B></FONT> </TD> <TD ALIGN=CENTER> <FONT SIZE=3 FACE=ARIAL><B>MILSPEC</B></FONT> </TD> </TR> <TR> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 3323P<BR> 3323S<BR> 3323W<BR> 3329H<BR> 3329P<BR> 3329W<BR> 3339H<BR> 3339P<BR> 3339W<BR> 3352E<BR> 3352H<BR> 3352K<BR> 3352P<BR> 3352T<BR> 3352V<BR> 3352W<BR> 3362H<BR> 3362M<BR> 3362P<BR> 3362R<BR> 3362S<BR> 3362U<BR> 3362W<BR> 3362X<BR> 3386B<BR> 3386C<BR> 3386F<BR> 3386H<BR> 3386K<BR> 3386M<BR> 3386P<BR> 3386S<BR> 3386W<BR> 3386X<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 25P<BR> 25S<BR> 25RX<BR> 82P<BR> 82M<BR> 82PA<BR> -<BR> -<BR> -<BR> 91E<BR> 91X<BR> 91T<BR> 91B<BR> 91A<BR> 91V<BR> 91W<BR> 25W<BR> 25V<BR> 25P<BR> -<BR> 25S<BR> 25U<BR> 25RX<BR> 25X<BR> 72XW<BR> 72XL<BR> 72PM<BR> 72RX<BR> -<BR> 72PX<BR> 72P<BR> 72RXW<BR> 72RXL<BR> 72X<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> T7YB<BR> T7YA<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> TXD<BR> TYA<BR> TYP<BR> -<BR> TYD<BR> TX<BR> -<BR> 150SX<BR> 100SX<BR> 102T<BR> 101S<BR> 190T<BR> 150TX<BR> 101<BR> -<BR> -<BR> 101SX<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> ET6P<BR> ET6S<BR> ET6X<BR> RJ-6W/8014EMW<BR> RJ-6P/8014EMP<BR> RJ-6X/8014EMX<BR> TM7W<BR> TM7P<BR> TM7X<BR> -<BR> 8017SMS<BR> -<BR> 8017SMB<BR> 8017SMA<BR> -<BR> -<BR> CT-6W<BR> CT-6H<BR> CT-6P<BR> CT-6R<BR> -<BR> CT-6V<BR> CT-6X<BR> -<BR> -<BR> 8038EKV<BR> -<BR> 8038EKX<BR> -<BR> -<BR> 8038EKP<BR> 8038EKZ<BR> 8038EKW<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> 3321H<BR> 3321P<BR> 3321N<BR> 1102H<BR> 1102P<BR> 1102T<BR> RVA0911V304A<BR> -<BR> RVA0911H413A<BR> RVG0707V100A<BR> RVA0607V(H)306A<BR> RVA1214H213A<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> 3104B<BR> 3104C<BR> 3104F<BR> 3104H<BR> -<BR> 3104M<BR> 3104P<BR> 3104S<BR> 3104W<BR> 3104X<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> EVMQ0G<BR> EVMQIG<BR> EVMQ3G<BR> EVMS0G<BR> EVMQ0G<BR> EVMG0G<BR> -<BR> -<BR> -<BR> EVMK4GA00B<BR> EVM30GA00B<BR> EVMK0GA00B<BR> EVM38GA00B<BR> EVMB6<BR> EVLQ0<BR> -<BR> EVMMSG<BR> EVMMBG<BR> EVMMAG<BR> -<BR> -<BR> EVMMCS<BR> -<BR> -<BR> -<BR> -<BR> -<BR> EVMM1<BR> -<BR> -<BR> EVMM0<BR> -<BR> -<BR> EVMM3<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> 62-3-1<BR> 62-1-2<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> 67R<BR> -<BR> 67P<BR> -<BR> -<BR> -<BR> -<BR> 67X<BR> 63V<BR> 63S<BR> 63M<BR> -<BR> -<BR> 63H<BR> 63P<BR> -<BR> -<BR> 63X<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> RJ/RJR50<BR> RJ/RJR50<BR> RJ/RJR50<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> </TR> </TABLE> <P>&nbsp;<P> <TABLE BORDER=0 CELLSPACING=1 CELLPADDING=3> <TR> <TD COLSPAN=7> <FONT color="#0000FF" SIZE=4 FACE=ARIAL><B>SMD TRIM-POT CROSS REFERENCE</B></FONT> <P> <FONT SIZE=4 FACE=ARIAL><B>MULTI-TURN</B></FONT> </TD> </TR> <TR> <TD> <FONT SIZE=3 FACE=ARIAL><B>BOURNS</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>BI&nbsp;TECH</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>TOCOS</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>AUX/KYOCERA</B></FONT> </TD> </TR> <TR> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 3224G<BR> 3224J<BR> 3224W<BR> 3269P<BR> 3269W<BR> 3269X<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 44G<BR> 44J<BR> 44W<BR> 84P<BR> 84W<BR> 84X<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> ST63Z<BR> ST63Y<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> ST5P<BR> ST5W<BR> ST5X<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> -<BR> -<BR> -<BR> -<BR></FONT> </TD> </TR> <TR> <TD COLSPAN=7>&nbsp; </TD> </TR> <TR> <TD COLSPAN=7> <FONT SIZE=4 FACE=ARIAL><B>SINGLE TURN</B></FONT> </TD> </TR> <TR> <TD> <FONT SIZE=3 FACE=ARIAL><B>BOURNS</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>BI&nbsp;TECH</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>DALE-VISHAY</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>PHILIPS/MEPCO</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>PANASONIC</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>TOCOS</B></FONT> </TD> <TD> <FONT SIZE=3 FACE=ARIAL><B>AUX/KYOCERA</B></FONT> </TD> </TR> <TR> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 3314G<BR> 3314J<BR> 3364A/B<BR> 3364C/D<BR> 3364W/X<BR> 3313G<BR> 3313J<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> 23B<BR> 23A<BR> 21X<BR> 21W<BR> -<BR> 22B<BR> 22A<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> ST5YL/ST53YL<BR> ST5YJ/5T53YJ<BR> ST-23A<BR> ST-22B<BR> ST-22<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> ST-4B<BR> ST-4A<BR> -<BR> -<BR> -<BR> ST-3B<BR> ST-3A<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> EVM-6YS<BR> EVM-1E<BR> EVM-1G<BR> EVM-1D<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> G4B<BR> G4A<BR> TR04-3S1<BR> TRG04-2S1<BR> -<BR> -<BR> -<BR></FONT> </TD> <TD BGCOLOR="#cccccc" ALIGN=CENTER><FONT FACE=ARIAL SIZE=3> -<BR> -<BR> DVR-43A<BR> CVR-42C<BR> CVR-42A/C<BR> -<BR> -<BR></FONT> </TD> </TR> </TABLE> <P> <FONT SIZE=4 FACE=ARIAL><B>ALT =&nbsp;ALTERNATE</B></FONT> <P> &nbsp; <P> </td> </tr> </table> <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b><p> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>CAPACITOR</b><p> grid 2.5 mm, outline 2.4 x 4.4 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 2.5 mm, outline 2.5 x 5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 2.5 mm, outline 3 x 5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 2.5 mm, outline 4 x 5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 2.5 mm, outline 5 x 5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 2.5 mm, outline 6 x 5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 2.5 mm + 5 mm, outline 2.4 x 7 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 2.5 + 5 mm, outline 2.5 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 2.5 + 5 mm, outline 3.5 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 2.5 + 5 mm, outline 4.5 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 2.5 + 5 mm, outline 5.5 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 5 mm, outline 2.4 x 4.4 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 5 mm, outline 2.5 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 5 mm, outline 4.5 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 5 mm, outline 3 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 5 mm, outline 5 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 5 mm, outline 5.5 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 5 mm, outline 7.5 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> Horizontal, grid 5 mm, outline 7.5 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 7.5 mm, outline 3.2 x 10.3 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 7.5 mm, outline 4.2 x 10.3 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 7.5 mm, outline 5.2 x 10.6 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 10.2 mm, outline 4.3 x 13.3 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 10.2 mm, outline 5.4 x 13.3 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 10.2 mm, outline 6.4 x 13.3 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 10.2 mm + 15.2 mm, outline 6.2 x 18.4 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 15 mm, outline 5.4 x 18.3 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 15 mm, outline 6.4 x 18.3 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 15 mm, outline 7.2 x 18.3 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 15 mm, outline 8.4 x 18.3 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 15 mm, outline 9.1 x 18.2 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 22.5 mm, outline 6.2 x 26.8 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 22.5 mm, outline 7.4 x 26.8 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 22.5 mm, outline 8.7 x 26.8 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 22.5 mm, outline 10.8 x 26.8 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 22.5 mm, outline 11.3 x 26.8 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 27.5 mm, outline 9.3 x 31.6 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 27.5 mm, outline 11.3 x 31.6 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 27.5 mm, outline 13.4 x 31.6 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 27.5 mm, outline 20.5 x 31.6 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 32.5 mm, outline 13.7 x 37.4 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 32.5 mm, outline 16.2 x 37.4 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 32.5 mm, outline 18.2 x 37.4 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 37.5 mm, outline 19.2 x 41.8 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 37.5 mm, outline 20.3 x 41.8 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 5 mm, outline 3.5 x 7.5 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 37.5 mm, outline 15.5 x 41.8 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 7.5 mm, outline 6.3 x 10.6 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 27.5 mm, outline 15.4 x 31.6 mm >NAME >VALUE <b>CAPACITOR</b><p> grid 27.5 mm, outline 17.3 x 31.6 mm >NAME >VALUE <b>Ceramic Chip Capacitor KEMET 0204 reflow solder</b><p> Metric Code Size 1005 >NAME >VALUE <b>Ceramic Chip Capacitor KEMET 0603 reflow solder</b><p> Metric Code Size 1608 >NAME >VALUE <b>Ceramic Chip Capacitor KEMET 0805 reflow solder</b><p> Metric Code Size 2012 >NAME >VALUE <b>Ceramic Chip Capacitor KEMET 1206 reflow solder</b><p> Metric Code Size 3216 >NAME >VALUE <b>Ceramic Chip Capacitor KEMET 1210 reflow solder</b><p> Metric Code Size 3225 >NAME >VALUE <b>Ceramic Chip Capacitor KEMET 1812 reflow solder</b><p> Metric Code Size 4532 >NAME >VALUE <b>Ceramic Chip Capacitor KEMET 1825 reflow solder</b><p> Metric Code Size 4564 >NAME >VALUE <b>Ceramic Chip Capacitor KEMET 2220 reflow solder</b><p>Metric Code Size 5650 >NAME >VALUE <b>Ceramic Chip Capacitor KEMET 2225 reflow solder</b><p>Metric Code Size 5664 >NAME >VALUE <b> </b><p> Source: http://www.vishay.com/docs/10129/hpc0201a.pdf >NAME >VALUE Source: http://www.avxcorp.com/docs/catalogs/cx5r.pdf >NAME >VALUE <b>CAPACITOR</b><p> Source: AVX .. aphvc.pdf >NAME >VALUE <b>CAPACITOR</b><p> Source: AVX .. aphvc.pdf >NAME >VALUE <b>CAPACITOR</b> >NAME >VALUE <b>Chip RESISTOR 0402 EIA (1005 Metric)</b> >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b><p> >NAME >VALUE <b>RESISTOR</b> wave soldering<p> >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b><p> wave soldering >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b><p> wave soldering >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b><p> wave soldering >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b><p> wave soldering >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b><p> wave soldering >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b><p> wave soldering >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b><p> wave soldering >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b><p> wave soldering >NAME >VALUE <b>RESISTOR</b><p> Source: http://download.siliconexpert.com/pdfs/2005/02/24/Semi_Ap/2/VSH/Resistor/dcrcwfre.pdf >NAME >VALUE <b>RESISTOR</b> wave soldering<p> Source: http://download.siliconexpert.com/pdfs/2005/02/24/Semi_Ap/2/VSH/Resistor/dcrcwfre.pdf >NAME >VALUE <b>RESISTOR</b><p> MELF 0.10 W >NAME >VALUE <b>RESISTOR</b><p> MELF 0.25 W >NAME >VALUE <b>RESISTOR</b><p> MELF 0.12 W >NAME >VALUE <b>RESISTOR</b><p> MELF 0.10 W >NAME >VALUE <b>RESISTOR</b><p> MELF 0.25 W >NAME >VALUE <b>RESISTOR</b><p> MELF 0.25 W >NAME >VALUE <b>RESISTOR</b><p> MELF 0.12 W >NAME >VALUE <b>RESISTOR</b><p> MELF 0.25 W >NAME >VALUE <b>RESISTOR</b><p> type 0204, grid 5 mm >NAME >VALUE <b>RESISTOR</b><p> type 0204, grid 7.5 mm >NAME >VALUE <b>RESISTOR</b><p> type 0207, grid 10 mm >NAME >VALUE <b>RESISTOR</b><p> type 0207, grid 12 mm >NAME >VALUE <b>RESISTOR</b><p> type 0207, grid 15mm >NAME >VALUE <b>RESISTOR</b><p> type 0207, grid 2.5 mm >NAME >VALUE <b>RESISTOR</b><p> type 0207, grid 5 mm >NAME >VALUE <b>RESISTOR</b><p> type 0207, grid 7.5 mm >NAME >VALUE <b>RESISTOR</b><p> type 0309, grid 10mm >NAME >VALUE <b>RESISTOR</b><p> type 0309, grid 12.5 mm >NAME >VALUE <b>RESISTOR</b><p> type 0411, grid 12.5 mm >NAME >VALUE <b>RESISTOR</b><p> type 0411, grid 15 mm >NAME >VALUE <b>RESISTOR</b><p> type 0411, grid 3.81 mm >NAME >VALUE <b>RESISTOR</b><p> type 0414, grid 15 mm >NAME >VALUE <b>RESISTOR</b><p> type 0414, grid 5 mm >NAME >VALUE <b>RESISTOR</b><p> type 0617, grid 17.5 mm >NAME >VALUE <b>RESISTOR</b><p> type 0617, grid 22.5 mm >NAME >VALUE <b>RESISTOR</b><p> type 0617, grid 5 mm >NAME >VALUE <b>RESISTOR</b><p> type 0922, grid 22.5 mm >NAME >VALUE <b>RESISTOR</b><p> type 0613, grid 5 mm >NAME >VALUE <b>RESISTOR</b><p> type 0613, grid 15 mm >NAME >VALUE <b>RESISTOR</b><p> type 0817, grid 22.5 mm >NAME >VALUE 0817 <b>RESISTOR</b><p> type 0817, grid 6.35 mm >NAME >VALUE 0817 <b>RESISTOR</b><p> type V234, grid 12.5 mm >NAME >VALUE <b>RESISTOR</b><p> type V235, grid 17.78 mm >NAME >VALUE <b>RESISTOR</b><p> type V526-0, grid 2.5 mm >NAME >VALUE <b>Mini MELF 0102 Axial</b> >NAME >VALUE <b>RESISTOR</b><p> type 0922, grid 7.5 mm >NAME >VALUE 0922 <b>CECC Size RC2211</b> Reflow Soldering<p> source Beyschlag >NAME >VALUE <b>CECC Size RC2211</b> Wave Soldering<p> source Beyschlag >NAME >VALUE <b>CECC Size RC3715</b> Reflow Soldering<p> source Beyschlag >NAME >VALUE <b>CECC Size RC3715</b> Wave Soldering<p> source Beyschlag >NAME >VALUE <b>CECC Size RC6123</b> Reflow Soldering<p> source Beyschlag >NAME >VALUE <b>CECC Size RC6123</b> Wave Soldering<p> source Beyschlag >NAME >VALUE <b>RESISTOR</b><p> type RDH, grid 15 mm >NAME >VALUE RDH <b>RESISTOR</b><p> type 0204, grid 2.5 mm >NAME >VALUE <b>RESISTOR</b><p> type 0309, grid 2.5 mm >NAME >VALUE <b>RESISTOR</b> chip<p> Source: http://www.vishay.com/docs/20008/dcrcw.pdf >NAME >VALUE <b>Bulk Metal® Foil Technology</b>, Tubular Axial Lead Resistors, Meets or Exceeds MIL-R-39005 Requirements<p> MIL SIZE RNC55<br> Source: VISHAY .. vta56.pdf >NAME >VALUE <b>Bulk Metal® Foil Technology</b>, Tubular Axial Lead Resistors, Meets or Exceeds MIL-R-39005 Requirements<p> MIL SIZE RNC60<br> Source: VISHAY .. vta56.pdf >NAME >VALUE <b>Bulk Metal® Foil Technology</b>, Tubular Axial Lead Resistors, Meets or Exceeds MIL-R-39005 Requirements<p> MIL SIZE RBR52<br> Source: VISHAY .. vta56.pdf >NAME >VALUE <b>Bulk Metal® Foil Technology</b>, Tubular Axial Lead Resistors, Meets or Exceeds MIL-R-39005 Requirements<p> MIL SIZE RBR53<br> Source: VISHAY .. vta56.pdf >NAME >VALUE <b>Bulk Metal® Foil Technology</b>, Tubular Axial Lead Resistors, Meets or Exceeds MIL-R-39005 Requirements<p> MIL SIZE RBR54<br> Source: VISHAY .. vta56.pdf >NAME >VALUE <b>Bulk Metal® Foil Technology</b>, Tubular Axial Lead Resistors, Meets or Exceeds MIL-R-39005 Requirements<p> MIL SIZE RBR55<br> Source: VISHAY .. vta56.pdf >NAME >VALUE <b>Bulk Metal® Foil Technology</b>, Tubular Axial Lead Resistors, Meets or Exceeds MIL-R-39005 Requirements<p> MIL SIZE RBR56<br> Source: VISHAY .. vta56.pdf >NAME >VALUE <b>Package 4527</b><p> Source: http://www.vishay.com/docs/31059/wsrhigh.pdf >NAME >VALUE <b>Wirewound Resistors, Precision Power</b><p> Source: VISHAY wscwsn.pdf >NAME >VALUE <b>Wirewound Resistors, Precision Power</b><p> Source: VISHAY wscwsn.pdf >NAME >VALUE <b>Wirewound Resistors, Precision Power</b><p> Source: VISHAY wscwsn.pdf >NAME >VALUE <b>Wirewound Resistors, Precision Power</b><p> Source: VISHAY wscwsn.pdf >NAME >VALUE <b>Wirewound Resistors, Precision Power</b><p> Source: VISHAY wscwsn.pdf >NAME >VALUE <b>Wirewound Resistors, Precision Power</b><p> Source: VISHAY wscwsn.pdf >NAME >VALUE <b>CRCW1218 Thick Film, Rectangular Chip Resistors</b><p> Source: http://www.vishay.com .. dcrcw.pdf >NAME >VALUE <b>Chip Monolithic Ceramic Capacitors</b> Medium Voltage High Capacitance for General Use<p> Source: http://www.murata.com .. GRM43DR72E224KW01.pdf >NAME >VALUE >NAME >VALUE <b>PRL1632 are realized as 1W for 3.2 × 1.6mm(1206)</b><p> Source: http://www.mouser.com/ds/2/392/products_18-2245.pdf >NAME >VALUE CAPACITOR CAPACITOR CAPACITOR CAPACITOR CAPACITOR CAPACITOR CAPACITOR CAPACITOR CAPACITOR CAPACITOR CAPACITOR CAPACITOR CAPACITOR CAPACITOR CAPACITOR CAPACITOR grid 2.5 mm, outline 2.4 x 4.4 mm CAPACITOR grid 2.5 mm, outline 2.5 x 5 mm CAPACITOR grid 2.5 mm, outline 3 x 5 mm CAPACITOR grid 2.5 mm, outline 4 x 5 mm CAPACITOR grid 2.5 mm, outline 5 x 5 mm CAPACITOR grid 2.5 mm, outline 6 x 5 mm CAPACITOR grid 2.5 mm + 5 mm, outline 2.4 x 7 mm CAPACITOR grid 2.5 + 5 mm, outline 2.5 x 7.5 mm CAPACITOR grid 2.5 + 5 mm, outline 3.5 x 7.5 mm CAPACITOR grid 2.5 + 5 mm, outline 4.5 x 7.5 mm CAPACITOR grid 2.5 + 5 mm, outline 5.5 x 7.5 mm CAPACITOR grid 5 mm, outline 2.4 x 4.4 mm CAPACITOR grid 5 mm, outline 2.5 x 7.5 mm CAPACITOR grid 5 mm, outline 4.5 x 7.5 mm CAPACITOR grid 5 mm, outline 3 x 7.5 mm CAPACITOR grid 5 mm, outline 5 x 7.5 mm CAPACITOR grid 5 mm, outline 5.5 x 7.5 mm CAPACITOR grid 5 mm, outline 7.5 x 7.5 mm CAPACITOR Horizontal, grid 5 mm, outline 7.5 x 7.5 mm CAPACITOR grid 7.5 mm, outline 3.2 x 10.3 mm CAPACITOR grid 7.5 mm, outline 4.2 x 10.3 mm CAPACITOR grid 7.5 mm, outline 5.2 x 10.6 mm CAPACITOR grid 10.2 mm, outline 4.3 x 13.3 mm CAPACITOR grid 10.2 mm, outline 5.4 x 13.3 mm CAPACITOR grid 10.2 mm, outline 6.4 x 13.3 mm CAPACITOR grid 10.2 mm + 15.2 mm, outline 6.2 x 18.4 mm CAPACITOR grid 15 mm, outline 5.4 x 18.3 mm CAPACITOR grid 15 mm, outline 6.4 x 18.3 mm CAPACITOR grid 15 mm, outline 7.2 x 18.3 mm CAPACITOR grid 15 mm, outline 8.4 x 18.3 mm CAPACITOR grid 15 mm, outline 9.1 x 18.2 mm CAPACITOR grid 22.5 mm, outline 6.2 x 26.8 mm CAPACITOR grid 22.5 mm, outline 7.4 x 26.8 mm CAPACITOR grid 22.5 mm, outline 8.7 x 26.8 mm CAPACITOR grid 22.5 mm, outline 10.8 x 26.8 mm CAPACITOR grid 22.5 mm, outline 11.3 x 26.8 mm CAPACITOR grid 27.5 mm, outline 9.3 x 31.6 mm CAPACITOR grid 27.5 mm, outline 11.3 x 31.6 mm CAPACITOR grid 27.5 mm, outline 13.4 x 31.6 mm CAPACITOR grid 27.5 mm, outline 20.5 x 31.6 mm CAPACITOR grid 32.5 mm, outline 13.7 x 37.4 mm CAPACITOR grid 32.5 mm, outline 16.2 x 37.4 mm CAPACITOR grid 32.5 mm, outline 18.2 x 37.4 mm CAPACITOR grid 37.5 mm, outline 19.2 x 41.8 mm CAPACITOR grid 37.5 mm, outline 20.3 x 41.8 mm CAPACITOR grid 5 mm, outline 3.5 x 7.5 mm CAPACITOR grid 37.5 mm, outline 15.5 x 41.8 mm CAPACITOR grid 7.5 mm, outline 6.3 x 10.6 mm CAPACITOR grid 27.5 mm, outline 15.4 x 31.6 mm CAPACITOR grid 27.5 mm, outline 17.3 x 31.6 mm Ceramic Chip Capacitor KEMET 0204 reflow solder Metric Code Size 1005 Ceramic Chip Capacitor KEMET 0603 reflow solder Metric Code Size 1608 Ceramic Chip Capacitor KEMET 0805 reflow solder Metric Code Size 2012 Ceramic Chip Capacitor KEMET 1206 reflow solder Metric Code Size 3216 Ceramic Chip Capacitor KEMET 1210 reflow solder Metric Code Size 3225 Ceramic Chip Capacitor KEMET 1812 reflow solder Metric Code Size 4532 Ceramic Chip Capacitor KEMET 1825 reflow solder Metric Code Size 4564 Ceramic Chip Capacitor KEMET 2220 reflow solderMetric Code Size 5650 Ceramic Chip Capacitor KEMET 2225 reflow solderMetric Code Size 5664 Source: http://www.vishay.com/docs/10129/hpc0201a.pdf Source: http://www.avxcorp.com/docs/catalogs/cx5r.pdf CAPACITOR Source: AVX .. aphvc.pdf CAPACITOR Source: AVX .. aphvc.pdf CAPACITOR Chip RESISTOR 0402 EIA (1005 Metric) RESISTOR RESISTOR RESISTOR wave soldering RESISTOR RESISTOR wave soldering RESISTOR RESISTOR wave soldering RESISTOR RESISTOR wave soldering RESISTOR RESISTOR wave soldering RESISTOR RESISTOR wave soldering RESISTOR RESISTOR wave soldering RESISTOR RESISTOR wave soldering RESISTOR RESISTOR wave soldering RESISTOR Source: http://download.siliconexpert.com/pdfs/2005/02/24/Semi_Ap/2/VSH/Resistor/dcrcwfre.pdf RESISTOR wave soldering Source: http://download.siliconexpert.com/pdfs/2005/02/24/Semi_Ap/2/VSH/Resistor/dcrcwfre.pdf RESISTOR MELF 0.10 W RESISTOR MELF 0.25 W RESISTOR MELF 0.12 W RESISTOR MELF 0.10 W RESISTOR MELF 0.25 W RESISTOR MELF 0.25 W RESISTOR MELF 0.12 W RESISTOR MELF 0.25 W RESISTOR type 0204, grid 5 mm RESISTOR type 0204, grid 7.5 mm RESISTOR type 0207, grid 10 mm RESISTOR type 0207, grid 12 mm RESISTOR type 0207, grid 15mm RESISTOR type 0207, grid 2.5 mm RESISTOR type 0207, grid 5 mm RESISTOR type 0207, grid 7.5 mm RESISTOR type 0309, grid 10mm RESISTOR type 0309, grid 12.5 mm RESISTOR type 0411, grid 12.5 mm RESISTOR type 0411, grid 15 mm RESISTOR type 0411, grid 3.81 mm RESISTOR type 0414, grid 15 mm RESISTOR type 0414, grid 5 mm RESISTOR type 0617, grid 17.5 mm RESISTOR type 0617, grid 22.5 mm RESISTOR type 0617, grid 5 mm RESISTOR type 0922, grid 22.5 mm RESISTOR type 0613, grid 5 mm RESISTOR type 0613, grid 15 mm RESISTOR type 0817, grid 22.5 mm RESISTOR type 0817, grid 6.35 mm RESISTOR type V234, grid 12.5 mm RESISTOR type V235, grid 17.78 mm RESISTOR type V526-0, grid 2.5 mm Mini MELF 0102 Axial RESISTOR type 0922, grid 7.5 mm CECC Size RC2211 Reflow Soldering source Beyschlag CECC Size RC2211 Wave Soldering source Beyschlag CECC Size RC3715 Reflow Soldering source Beyschlag CECC Size RC3715 Wave Soldering source Beyschlag CECC Size RC6123 Reflow Soldering source Beyschlag CECC Size RC6123 Wave Soldering source Beyschlag RESISTOR type RDH, grid 15 mm RESISTOR type 0204, grid 2.5 mm RESISTOR type 0309, grid 2.5 mm RESISTOR chip Source: http://www.vishay.com/docs/20008/dcrcw.pdf Bulk Metal® Foil Technology, Tubular Axial Lead Resistors, Meets or Exceeds MIL-R-39005 Requirements MIL SIZE RNC55 Source: VISHAY .. vta56.pdf Bulk Metal® Foil Technology, Tubular Axial Lead Resistors, Meets or Exceeds MIL-R-39005 Requirements MIL SIZE RNC60 Source: VISHAY .. vta56.pdf Bulk Metal® Foil Technology, Tubular Axial Lead Resistors, Meets or Exceeds MIL-R-39005 Requirements MIL SIZE RBR52 Source: VISHAY .. vta56.pdf Bulk Metal® Foil Technology, Tubular Axial Lead Resistors, Meets or Exceeds MIL-R-39005 Requirements MIL SIZE RBR53 Source: VISHAY .. vta56.pdf Bulk Metal® Foil Technology, Tubular Axial Lead Resistors, Meets or Exceeds MIL-R-39005 Requirements MIL SIZE RBR54 Source: VISHAY .. vta56.pdf Bulk Metal® Foil Technology, Tubular Axial Lead Resistors, Meets or Exceeds MIL-R-39005 Requirements MIL SIZE RBR55 Source: VISHAY .. vta56.pdf Bulk Metal® Foil Technology, Tubular Axial Lead Resistors, Meets or Exceeds MIL-R-39005 Requirements MIL SIZE RBR56 Source: VISHAY .. vta56.pdf Package 4527 Source: http://www.vishay.com/docs/31059/wsrhigh.pdf Wirewound Resistors, Precision Power Source: VISHAY wscwsn.pdf Wirewound Resistors, Precision Power Source: VISHAY wscwsn.pdf Wirewound Resistors, Precision Power Source: VISHAY wscwsn.pdf Wirewound Resistors, Precision Power Source: VISHAY wscwsn.pdf Wirewound Resistors, Precision Power Source: VISHAY wscwsn.pdf Wirewound Resistors, Precision Power Source: VISHAY wscwsn.pdf CRCW1218 Thick Film, Rectangular Chip Resistors Source: http://www.vishay.com .. dcrcw.pdf Chip Monolithic Ceramic Capacitors Medium Voltage High Capacitance for General Use Source: http://www.murata.com .. GRM43DR72E224KW01.pdf PRL1632 are realized as 1W for 3.2 × 1.6mm(1206) Source: http://www.mouser.com/ds/2/392/products_18-2245.pdf >NAME >VALUE >NAME >VALUE <B>CAPACITOR</B>, European symbol <B>RESISTOR</B>, European symbol <b>DIY Modules for Arduino, Raspberry Pi, CubieBoard etc.</b> <br><br> The library contains a list of symbols and footprints for popular, cheap and easy-to-use electronic modules.<br> The modules are intend to work with microprocessor-based platforms such as <a href="http://arduino.cc">Arduino</a>, <a href="http://raspberrypi.org/">Raspberry Pi</a>, <a href="http://cubieboard.org/">CubieBoard</a>, <a href="http://beagleboard.org/">BeagleBone</a> and many others. There are many manufacturers of the modules in the world. Almost all of them can be bought on <a href="ebay.com">ebay.com</a>.<br> <br> By using this library, you can design a PCB for devices created with usage of modules. Even if you do not need to create PCB design, you can also use the library to quickly document your work by drawing schematics of devices built by you.<br> <br> The latest version, examples, photos and much more can be found at: <b><a href="http://diymodules.org/eagle">diymodules.org/eagle</a></b><br><br> Comments, suggestions and bug reports please send to: <b><a href="mailto:eagle@diymodules.org">eagle@diymodules.org</b></a><br><br> <i>Version: 1.8.0 (2017-Jul-02)</i><br> <i>Created by: Miroslaw Brudnowski</i><br><br> <i>Released under the Creative Commons Attribution 4.0 International License: <a href="http://creativecommons.org/licenses/by/4.0">http://creativecommons.org/licenses/by/4.0</a></i> <br><br> <center> <a href="http://diymodules.org/eagle"><img src="http://www.diymodules.org/img/diymodules-lbr-image.php?v=1.8.0" alt="DIYmodules.org"></a> </center> <b>128x64 Dot Matrix OLED Module</b><br /> Variant with SPI interface >NAME >VALUE <b>DC/DC Step-Down Regulator</b> based on <b>MP2307DN</b> chip >NAME >VALUE IN OUT <b>128x64 Dot Matrix OLED Module</b><br /> Variant with I2C interface >NAME >VALUE GND VCC SCL SDA <b>128x64 Dot Matrix OLED Module</b> >NAME >VALUE 128x64 OLED <b>DC/DC Step-Down Regulator</b> based on <b>MP2307DN</b> chip >NAME >VALUE <b>128x64 Dot Matrix OLED Module</b><br /> Variant with I2C interface >NAME >VALUE 128x64 OLED <b>128x64 Dot Matrix OLED Module</b> based on <b>SSD1306</b> chip<br /> Variant with <b>SPI interface</b> <p>More details available here:<br /> <a href="http://www.instructables.com/id/How-to-use-OLED-display-arduino-module/">http://www.instructables.com/id/How-to-use-OLED-display-arduino-module/</a></p> <p><b>SSD1306</b> datasheet:<br> <a href="https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf">https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf</a></p> <p><b><a href="http://www.ebay.com/sch/oled+display+128x64">Click here to find device on ebay.com</a></b><br /> <b>Note:</b> There are two variants: I2C and SPI. Search for the proper version.</p> <p><img alt="photo" src="http://www.diymodules.org/img/device-photo.php?name=DISPLAY-OLED-128X64"></p> <b>DC/DC Step-Down Regulator</b> based on <b>MP2307DN</b> chip <p><b>MP2307</b> datasheet available here:<br> <a href="https://cdn-shop.adafruit.com/datasheets/MP2307_r1.9.pdf">https://cdn-shop.adafruit.com/datasheets/MP2307_r1.9.pdf</a></p> <p><b><a href="http://www.ebay.com/sch/dc+dc+3a+mini+converter">Click here to find device on ebay.com</a></b></p> <p><img alt="photo" src="http://www.diymodules.org/img/device-photo.php?name=DC-DC-STEP-DOWN-MP2307"></p> <b>128x64 Dot Matrix OLED Module</b> based on <b>SSD1306</b> chip<br /> Variant with <b>I2C interface</b> <p>More details available here:<br /> <a href="http://www.instructables.com/id/Monochrome-096-i2c-OLED-display-with-arduino-SSD13/">http://www.instructables.com/id/Monochrome-096-i2c-OLED-display-with-arduino-SSD13/</a></p> <p><b>SSD1306</b> datasheet:<br> <a href="https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf">https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf</a></p> <p><b><a href="http://www.ebay.com/sch/oled+display+128x64+iic">Click here to find device on ebay.com</a></b><br /> <b>Note:</b> There are two variants: I2C and SPI. Search for the proper version.</p> <p><img alt="photo" src="http://www.diymodules.org/img/device-photo.php?name=DISPLAY-OLED-128X64-I2C"></p> <b>Potentiometers</b><p> Beckman, Copal, Piher, Spectrol, Schukat<p> <author>Created by librarian@cadsoft.de</author> <b>POTENTIOMETER</b><p> Beckman Helitrim 25 >NAME >VALUE 3 1 <b>POTENTIOMETER</b><p> Beckman Helitrim 25 >NAME >VALUE 3 1 <b>POTENTIOMETER</b><p> Beckman Helitrim 25 >NAME >VALUE 3 1 3 <b>POTENTIOMETER</b><p> Beckman Helitrim 25 >NAME >VALUE 3 1 3 <b>POTENTIOMETER</b><p> Beckman Helitrim 64 >NAME >VALUE 3 1 3 <b>POTENTIOMETER</b><p> Beckman Helitrim 64 >NAME >VALUE 1 3 <b>POTENTIOMETER</b> >NAME >VALUE 1 3 2 3 1 <b>POTENTIOMETER</b><p> distributor Schukat >NAME >VALUE <b>POTENTIOMETER</b><p> distributor Schukat >NAME >VALUE <b>POTENTIOMETER</b><p> distributor Schukat >NAME >VALUE <b>POTENTIOMETER</b><p> distributor Schukat >NAME >VALUE <b>POTENTIOMETER</b><p> distributor Schukat >NAME >VALUE <b>POTENTIOMETER</b><p> distributor Schukat >NAME >VALUE <b>POTENTIOMETER</b><p> Copal >NAME >VALUE 3 1 <b>POTENTIOMETER</b> >NAME >VALUE <b>POTENTIOMETER</b> >NAME >VALUE <b>POTENTIOMETER</b><p> Piher >NAME >VALUE <b>POTENTIOMETER</b><p> Piher >NAME >VALUE <b>POTENTIOMETER</b><p> Copal 3 1 >NAME >VALUE <b>POTENTIOMETER</b><p> Copal >NAME >VALUE 3 1 3 <b>POTENTIOMETER</b><p> Copal >NAME >VALUE 1 3 3 <b>POTENTIOMETER</b><p> Copal >NAME >VALUE 1 3 <b>POTENTIOMETER</b><p> Spectrol >NAME >VALUE 63P 1 3 3 <b>POTENTIOMETER</b><p> Spectrol >NAME >VALUE 3 1 3 <b>POTENTIOMETER</b><p> Spectrol >NAME >VALUE 3 1 3 <b>POTENTIOMETER</b><p> Spectrol >NAME >VALUE 3 1 3 <b>POTENTIOMETER</b><p> Spectrol >NAME >VALUE 3 1 3 <b>POTENTIOMETER</b> 3 1 >NAME >VALUE <b>POTENTIOMETER</b> >NAME >VALUE 3 1 <b>POTENTIOMETER</b><p> Piher >NAME >VALUE <b>POTENTIOMETER</b><p> Piher >NAME >VALUE <b>POTENTIOMETER</b> >NAME >VALUE 1 3 2 1 3 <b>POTENTIOMETER</b> >NAME >VALUE <b>POTENTIOMETER</b> >NAME >VALUE <b>POTENTIOMETER</b> >NAME >VALUE <b>Carbon Rotary Potentiometers - 20 mm size</b><p> Source: Radiohm .. RAD.pdf >NAME >VALUE <b>Carbon Rotary Potentiometers - 20 mm size</b><p> Source: Radiohm .. RAD.pdf >NAME >VALUE <b>COPAL ELECTRONICS SM-42/43 SURFACE MOUNT TRIMMERS</b> Side adjustmet<p> Source: smt-pots.pdf >NAME >VALUE <b>COPAL ELECTRONICS SM-42/43 SURFACE MOUNT TRIMMERS</b> Side adjustmet<p> Source: smt-pots.pdf >NAME >VALUE <b>COPAL ELECTRONICS SM-42/43 SURFACE MOUNT TRIMMERS</b> Top adjustmet<p> Source: smt-pots.pdf >NAME >VALUE <b>COPAL ELECTRONICS SM-42/43 SURFACE MOUNT TRIMMERS</b> Top adjustmet<p> Source: smt-pots.pdf >NAME >VALUE <b>3 mm SMD Trimming Potentiometer</b> Side Adjust<p> Source: http://www.bourns.com/data/global/PDFs/3223.PDF >NAME >VALUE <b>3 mm SMD Trimming Potentiometer</b> Side Adjust<p> Source: http://www.bourns.com/data/global/PDFs/3223.PDF >NAME >VALUE <b>3 mm SMD Trimming Potentiometer</b> Top Adjust<p> Source: http://www.bourns.com/data/global/PDFs/3223.PDF >NAME >VALUE POTENTIOMETER Beckman Helitrim 25 POTENTIOMETER Beckman Helitrim 25 POTENTIOMETER Beckman Helitrim 25 POTENTIOMETER Beckman Helitrim 25 POTENTIOMETER Beckman Helitrim 64 POTENTIOMETER Beckman Helitrim 64 POTENTIOMETER POTENTIOMETER distributor Schukat POTENTIOMETER distributor Schukat POTENTIOMETER distributor Schukat POTENTIOMETER distributor Schukat POTENTIOMETER distributor Schukat POTENTIOMETER distributor Schukat POTENTIOMETER Copal POTENTIOMETER POTENTIOMETER POTENTIOMETER Piher POTENTIOMETER Piher POTENTIOMETER Copal POTENTIOMETER Copal POTENTIOMETER Copal POTENTIOMETER Copal POTENTIOMETER Spectrol POTENTIOMETER Spectrol POTENTIOMETER Spectrol POTENTIOMETER Spectrol POTENTIOMETER Spectrol POTENTIOMETER POTENTIOMETER POTENTIOMETER Piher POTENTIOMETER Piher POTENTIOMETER POTENTIOMETER POTENTIOMETER POTENTIOMETER Carbon Rotary Potentiometers - 20 mm size Source: Radiohm .. RAD.pdf Carbon Rotary Potentiometers - 20 mm size Source: Radiohm .. RAD.pdf COPAL ELECTRONICS SM-42/43 SURFACE MOUNT TRIMMERS Side adjustmet Source: smt-pots.pdf COPAL ELECTRONICS SM-42/43 SURFACE MOUNT TRIMMERS Side adjustmet Source: smt-pots.pdf COPAL ELECTRONICS SM-42/43 SURFACE MOUNT TRIMMERS Top adjustmet Source: smt-pots.pdf COPAL ELECTRONICS SM-42/43 SURFACE MOUNT TRIMMERS Top adjustmet Source: smt-pots.pdf 3 mm SMD Trimming Potentiometer Side Adjust Source: http://www.bourns.com/data/global/PDFs/3223.PDF 3 mm SMD Trimming Potentiometer Side Adjust Source: http://www.bourns.com/data/global/PDFs/3223.PDF 3 mm SMD Trimming Potentiometer Top Adjust Source: http://www.bourns.com/data/global/PDFs/3223.PDF >NAME >VALUE <b>POTENTIOMETER</b> <b>Speakers and Buzzers</b><p> <ul>Distributors: <li>Buerklin <li>Spoerle <li>Schukat </ul> <author>Created by librarian@cadsoft.de</author> <b>BUZZER</b> >NAME >VALUE BUZZER >NAME >VALUE <b>BUZZER</b><p> Source: Buerklin <b>Supply Symbols</b><p> GND, VCC, 0V, +5V, -5V, etc.<p> Please keep in mind, that these devices are necessary for the automatic wiring of the supply signals.<p> The pin name defined in the symbol is identical to the net which is to be wired automatically.<p> In this library the device names are the same as the pin names of the symbols, therefore the correct signal names appear next to the supply symbols in the schematic.<p> <author>Created by librarian@cadsoft.de</author> >VALUE >VALUE >VALUE >VALUE >VALUE >VALUE <b>SUPPLY SYMBOL</b> <b>SUPPLY SYMBOL</b> <b>SUPPLY SYMBOL</b> <b>SUPPLY SYMBOL</b> <b>SUPPLY SYMBOL</b> <b>SUPPLY SYMBOL</b> <b>Pin Headers</b><p> Naming:<p> MA = male<p> # contacts - # rows<p> W = angled<p> <author>Created by librarian@cadsoft.de</author> <b>PIN HEADER</b> >NAME 1 >VALUE 4 PIN HEADER >VALUE >NAME <b>PIN HEADER</b> <b>Pin Header Connectors</b><p> <author>Created by librarian@cadsoft.de</author> <b>PIN HEADER</b> >NAME >VALUE <b>PIN HEADER</b> >NAME >VALUE <b>PIN HEADER</b> >NAME >VALUE <b>PIN HEADER</b> >NAME >VALUE CON-M-1X5-200 >NAME >VALUE PIN HEADER PIN HEADER PIN HEADER PIN HEADER CON-M-1X5-200 >NAME >VALUE >NAME >VALUE <b>PIN HEADER</b> <b>PIN HEADER</b> <b>Varistors/Thermistors</b><p> Block, Siemens and generic<p> <author>Created by librarian@cadsoft.de</author> <b>VARISTOR</b> >VALUE >NAME <b>VARISTOR</b> >VALUE >NAME <b>VARISTOR</b> >NAME >VALUE VARISTOR VARISTOR VARISTOR >NAME >VALUE <b>THERMISTOR</b> SignalQuest Sensors<p> <author>Bob Starr rtzaudio@mindspring.com</author> SQ-SEN-200<p> Omnidirectional Tilt and Vibration Sensor >NAME >VALUE >NAME >VALUE TILT AND VIBRATION SENSOR<p> OMNIDIRECTIONAL <b>Burr-Brown Components</b><p> <author>Created by librarian@cadsoft.de</author> <b>Smal Outline Transistor</b> >NAME >VALUE <b>DPAC</b> >NAME >VALUE Smal Outline Transistor DPAC >NAME >VALUE <b>800mA and 1A Low Dropout (LDO) Positive Regulator</b><p> 1.8V, 2.5V, 2.85V, 3.3V, 5V, and Adj <b>Opto Couplers</b><p> Siemens, Hewlett-Packard, Texas Instuments, Sharp, Motorola<p> <author>Created by librarian@cadsoft.de</author> <b>DIL 6 SMD</b><p> Source: http://www.fairchildsemi.com/pf/4N/4N35-M.html >NAME >VALUE <b>Dual In Line Package</b> >VALUE >NAME <b>DIL 6 0.4 Inch</b><p> Source: http://www.fairchildsemi.com/pf/4N/4N35-M.html >VALUE >NAME DIL 6 SMD Source: http://www.fairchildsemi.com/pf/4N/4N35-M.html Dual In Line Package DIL 6 0.4 Inch Source: http://www.fairchildsemi.com/pf/4N/4N35-M.html >NAME >VALUE >NAME >VALUE <b>General Purpose 6-Pin Phototransistor Optocouplers</b><p> Source: http://www.fairchildsemi.com/ds/4N/4N35-M.pdf <b>RANDOM-PHASE OPTOISOLATORS TRIAC DRIVER OUTPUT</b><p> Source: http://www.fairchildsemi.com<br> MOC3020-M.pdf <b>Thyristors, Triacs, Trigger Diodes</b><p> <author>Created by librarian@cadsoft.de</author> <b>TOP 3</b> horizontal (Anode1; Anode2; Gate) >NAME >VALUE A20,3mm <b>TOP 3</b> vertical (Anode1; Anode2; Gate) >NAME >VALUE TOP 3 horizontal (Anode1; Anode2; Gate) TOP 3 vertical (Anode1; Anode2; Gate) >NAME >VALUE <b>25A TRIAC</b><p> Source: http://www.st.com/stonline/products/literature/ds/7470.pdf Default symbols for import LTspice schematics<p> 2012-10-29 alf@cadsoft.de<br> <b>RESISTOR</b><p> type 0204, grid 7.5 mm >NAME >VALUE <b>RESISTOR</b><p> type 0207, grid 10 mm >NAME >VALUE <b>RESISTOR</b> chip<p> Source: http://www.vishay.com/docs/20008/dcrcw.pdf >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b><p> >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>CRCW1218 Thick Film, Rectangular Chip Resistors</b><p> Source: http://www.vishay.com .. dcrcw.pdf >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>Package 4527</b><p> Source: http://www.vishay.com/docs/31059/wsrhigh.pdf >NAME >VALUE <b>RESISTOR</b> >NAME >VALUE <b>RESISTOR</b><p> Source: http://download.siliconexpert.com/pdfs/2005/02/24/Semi_Ap/2/VSH/Resistor/dcrcwfre.pdf >NAME >VALUE RESISTOR type 0204, grid 7.5 mm RESISTOR type 0207, grid 10 mm RESISTOR chip Source: http://www.vishay.com/docs/20008/dcrcw.pdf RESISTOR RESISTOR RESISTOR RESISTOR RESISTOR RESISTOR CRCW1218 Thick Film, Rectangular Chip Resistors Source: http://www.vishay.com .. dcrcw.pdf RESISTOR RESISTOR RESISTOR RESISTOR RESISTOR Package 4527 Source: http://www.vishay.com/docs/31059/wsrhigh.pdf RESISTOR RESISTOR Source: http://download.siliconexpert.com/pdfs/2005/02/24/Semi_Ap/2/VSH/Resistor/dcrcwfre.pdf >NAME >VALUE SpiceOrder 1 SpiceOrder 2 <B>RESISTOR</B>, European symbol <b>Rectifiers</b><p> General Instrument, Semikron, Diotec, Fagor<p> <author>Created by librarian@cadsoft.de</author> <b>RECTIFIER</b> >VALUE >NAME RECTIFIER >VALUE >NAME <b>RECTIFIER</b> <h3>SparkFun Switches, Buttons, Encoders</h3> In this library you'll find switches, buttons, joysticks, and anything that moves to create or disrupt an electrical connection. <br> <br> We've spent an enormous amount of time creating and checking these footprints and parts, but it is <b> the end user's responsibility</b> to ensure correctness and suitablity for a given componet or application. <br> <br>If you enjoy using this library, please buy one of our products at <a href=" www.sparkfun.com">SparkFun.com</a>. <br> <br> <b>Licensing:</b> Creative Commons ShareAlike 4.0 International - https://creativecommons.org/licenses/by-sa/4.0/ <br> <br> You are welcome to use this library for commercial purposes. For attribution, we ask that when you begin to sell your device using our footprint, you email us with a link to the product being sold. We want bragging rights that we helped (in a very small part) to create your 8th world wonder. We would like the opportunity to feature your device on our homepage. <h3>Reed Switch - Glass case - PTH</h3> <p>A reed switch is a magnetically-actuated switch. When the device is exposed to a magnetic field, the two ferrous materials inside the switch pull together and the switch closes.</p> <p><a href="https://www.sparkfun.com/datasheets/Components/Buttons/MDSR-4.pdf">Datasheet</a></p> >Name >Value <h3>Reed Switch - Insulated Case - PTH</h3> <p>A reed switch is a magnetically-actuated switch. When the device is exposed to a magnetic field, the two ferrous materials inside the switch pull together and the switch closes.</p> <p><a href="https://cdn.sparkfun.com/datasheets/Dev/LilyPad/RS-01C.jpg">Datasheet</a> (RS-01C)</p> >Name >Value <h3>Reed Switch</h3> <p>A reed switch is a magnetically-actuated switch. When the device is exposed to a magnetic field, the two ferrous materials inside the switch pull together and the switch closes.</p> >NAME >VALUE <h3>Reed Switch</h3> <p>A reed switch is a magnetically-actuated switch. When the device is exposed to a magnetic field, the two ferrous materials inside the switch pull together and the switch closes.</p> <h4>Variant Overview</h4> <h5>PTH-GLASS</h5> <ul> <li><a href="https://www.sparkfun.com/products/8642">Reed Switch</a> (COM-08642) - PTH reed switch w/ glass body (6.0 x 0.9 mm)</li> </ul> <h5>PTH-INSULATED</h5> <ul> <li><a href="https://www.sparkfun.com/products/10601">Reed Switch - Insulated</a> (COM-10601) - PTH reed switch w/ insulated body (15.1 x 4.2 mm)</li> </ul> <b>Switches</b><p> Marquardt, Siemens, C&K, ITT, and others<p> <author>Created by librarian@cadsoft.de</author> <b>TOGGLE SWITCH</b> >NAME >VALUE TOGGLE SWITCH >NAME >VALUE <b>TOGGLE SWITCH</b> <b>Fuses and Fuse Holders</b><p> <author>Created by librarian@cadsoft.de</author> <b>FUSE</b><p> Wickmann >NAME >VALUE FUSE Wickmann >NAME >VALUE <b>FUSE</b><p> Wickmann <b>Relays</b><p> <ul> <li>Eichhoff <li>Finder <li>Fujitsu <li>HAMLIN <li>OMRON <li>Matsushita <li>NAiS <li>Siemens <li>Schrack </ul> <author>Created by librarian@cadsoft.de</author> <b>RELAY</b><p> 2 x switch, same as G5 V-2, Omron >NAME 351 >VALUE RELAY 2 x switch, same as G5 V-2, Omron >VALUE >PART >PART <b>RELAY</b><p> 2 x switch, Omron <h3>SparkFun Electronics' preferred foot prints</h3> We've spent an enormous amount of time creating and checking these footprints and parts. If you enjoy using this library, please buy one of our products at www.sparkfun.com. <br><br> <b>Licensing:</b> CC v3.0 Share-Alike You are welcome to use this library for commercial purposes. For attribution, we ask that when you begin to sell your device using our footprint, you email us with a link to the product being sold. We want bragging rights that we helped (in a very small part) to create your 8th world wonder. We would like the opportunity to feature your device on our homepage. <B>LED</B><p> 5 mm, round >NAME >VALUE <B>LED</B><p> 3 mm, round >NAME >VALUE >NAME >VALUE >NAME >VALUE L S >NAME >VALUE <h3>LED 3MM - No Silk</h3> 3 mm, round >NAME >VALUE <h3>LED5MM-KIT</h3> 5MM Through-hole LED<br> <br> <b>Warning:</b> This is the KIT version of this package. This package has a smaller diameter top stop mask, which doesn't cover the diameter of the pad. This means only the bottom side of the pads' copper will be exposed. You'll only be able to solder to the bottom side. >NAME >VALUE >NAME >VALUE <b>LEDs</b> Standard schematic elements and footprints for 5mm, 3mm, 1206, and 0603 sized LEDs. 5mm - Spark Fun Electronics SKU : COM-00529 (and others) Since Version 8.2, EAGLE supports online libraries. The ids of those online libraries will not be understood (or retained) with this version. Since Version 8.3, EAGLE supports URNs for individual library assets (packages, symbols, and devices). The URNs of those assets will not be understood (or retained) with this version. Since Version 8.3, EAGLE supports the association of 3D packages with devices in libraries, schematics, and board files. Those 3D packages will not be understood (or retained) with this version. Since Version 8.4, EAGLE supports properties for SPICE simulation. Probes in schematics and SPICE mapping objects found in parts and library devices will not be understood with this version. Update EAGLE to the latest version for full support of SPICE simulation.