Instantly share code, notes, and snippets.

Embed
What would you like to do?
:100000000C94D50D0C94FD0D0C94FD0D0C94FD0D70
:100010000C94FD0D0C94FD0D0C94FD0D0C94FD0D38
:100020000C94FD0D0C94FD0D0C941F140C94911464
:100030000C94FD0D0C94FD0D0C94FD0D0C94FD0D18
:100040000C94FD0D0C94FD0D0C94FD0D0C94FD0D08
:100050000C94FD0D0C94FD0D0C94FD0D0C945E0E96
:100060000C94FD0D0C94FD0D0C94FD0D0C94FD0DE8
:100070000C94FD0D0C94FD0D0C94FD0D0C94FD0DD8
:100080000C94FD0D0C94FD0D0C94FD0D0C94FD0DC8
:100090000C94FD0D0C94FD0D0C94FD0D0C94FD0DB8
:1000A0000C94FD0D0C94FD0D0C94FD0DD218F81858
:1000B0001419361962196C1979198D199C19AE1910
:1000C000B819CF19D519E319F0191E1A361A421AA0
:1000D0006B1A30208E1AA11AB61AFD1A4B1B7B1B05
:1000E000B81BCE1BDD1BEC1B1E1C211C301C541C22
:1000F000781C8A1C911C961CC91CCB1CCD1CCF1CC7
:10010000D71CDB1CDF1C141D171D231D501D761D65
:10011000911D961D9D1DD91D2A1E4D1E871E921EC6
:100120009A1EA21ED5F08D14A1C881CFD9F1AF209F
:1001300000210480284F000000000000284F00002C
:1001400000000000284F00000000000029300000DF
:1001500000000000284F000000000000284F0000B1
:1001600000000000284F000000000000284F0000A1
:1001700000000000284F000000000000D84ED94EBB
:10018000B0000000000000000000000000000000BF
:10019000000000000000000000000000000000005F
:1001A000000000000000000000000000000000004F
:1001B000000000000000000000000000000000003F
:1001C000000000000000000000000000000000002F
:1001D000000000000000000000000000000000001F
:1001E000000000000000000000000000000000000F
:1001F00000000000000000000000000000000000FF
:1002000000000000000000000000000000000000EE
:1002100000000000000000000000000000000000DE
:1002200000000000000000000000000000000000CE
:1002300000000000000000000000000000000000BE
:1002400000000000000000000000000000000000AE
:10025000000000000000000000000000000000009E
:10026000006108DF08B80D2101307108B0000000FE
:10027000000000000000000000000000000000007E
:10028000000000000000000000000000000000006E
:10029000000000000000000000000000000000005E
:1002A000000000000000000000000000000000004E
:1002B000000000000000000000000000000000003E
:1002C000000000000000000000000000000000002E
:1002D000000000000000000000000000000000001E
:1002E000000000000000000000000000000000000E
:1002F00000000000000000000000000000000000FE
:1003000000000000000000000000000000000000ED
:1003100000000000000000000000000000000000DD
:1003200000B80D2101F000000000000000000000F6
:10033000002D492D444F2D2D552D444F2D2020208B
:1003400020687474703A2F2F7777772E6A756D70E6
:1003500073746174696F6E2E636F2E756B2020202D
:10036000200000000000000000000000000000006D
:100370000001000A00000000000000000000000072
:10038000000000000000000000000000000000006D
:1003900000FBFFF7FFF0FFD0FDA0FA90F913F71074
:1003A000F421F374F674F386F375F0A8F1CAF6FF3E
:1003B000FF000000001000011111122222334444FA
:1003C0004400000000100011111122222334444483
:1003D000450000000000011111122223334444445F
:1003E00055000000000011111122223344444445FD
:1003F000550066666602111116667774444788894F
:1004000055006666620211112677777744788899DD
:1004100095000066120211122277347744885559EC
:10042000A500006612031222227744774488555AA9
:10043000A500006613032222237744784589555A84
:10044000A500016613042223337744885599555A31
:10045000B50066233404433337777888559AAAABBE
:10046000B51100000022000000111111111122220B
:1004700022112223342443333444555555555555C0
:1004800055111112230334444445555555555555BE
:10049000551112222303444444555555555555557D
:1004A000551122222303444445555555555555555C
:1004B00055666677770777888999AAAABBCCCCCC92
:1004C000DD66677777077888999AAAABBCCCCCCDE4
:1004D000DD6677777707888999AAABBBCCCCCCDD72
:1004E000DD72377747078899555555CCCC555BBD9C
:1004F000DD733777470789995555555CC555BBBBA3
:10050000DD7347774408999AA55BC55CC55DDDBB83
:10051000DD74477845099AAAA55CC55CC5BDDDBBFD
:10052000DD7447885519AAAAB55CC55CDBBDDDB989
:10053000DE744888551AAAABB55CC55DDBBDDD9994
:10054000EE744455551AABBB555555BDDBBBB99937
:10055000EE7855555A1ABBCC55555BDDDDBB999EDF
:10056000EE888999AA1BBCCCCCCCDDDDDDDDEEEEBE
:10057000EE88999AAA1BCCCCCCDDDDDDDDDEEEEE7B
:10058000EE899AAAAB2CCCCCCDDDDDDDDDEEEEEE36
:10059000EE99AAAABB2CCCCCDDDDDDDDDEEEEEEEE5
:1005A000EE9AAAABBC2CCCCDDDDDDDDEEEEEEEEEC0
:1005B000EE230EA1232009232780D84EDF44234CAD
:1005C000FF222997222A01222B080E0A194F2231D5
:1005D000002233000FED0CFE0E48223400223201BF
:1005E00023047A2305141AB60F210DB9220135020E
:1005F00001823412010512280D2590140CFE62347C
:1006000002334234D82232020F210DB9196A01C8CF
:100610000CFE22320323047A2305141AB60F210D8F
:10062000B9196A196A196A196A199A1869019F61D0
:1006300000D901021DF901980004FF010102DF0148
:100640000229F012297100A0610005C04180032336
:100650000008157100A02018A898000B9900269A90
:1006600000419B005E015A2232012304BA23051681
:100670001AB60F210DB92018A89800FA02284100D7
:1006800060F300016422320123047A2305171AB6AD
:100690000F210DB92018A89900FA0228410142F350
:1006A00000014622320123043A2305151AB60F2110
:1006B0000DB92018A89A00FA0228410224F300017B
:1006C0002801232232012304FA2305151AB60F212B
:1006D0000DB92018A89B00FA0228410304F3000179
:1006E000082300FF0103116EFFA018E0DD0E61007A
:1006F0006102610360026125616361646165FC639D
:10070000236480220280F3001325D8650366160354
:10071000649011220280236480F865982502010804
:10072000F82501E8620201E4716571647163712565
:100730007002710371027100FD0EA018E0DD0E6100
:100740000061026103FC63236480F30013651302FC
:100750002303810231136673030303900F23038184
:10076000236480F8656302030231020201E571032C
:1007700071027100DC63FD0EA062330F6E0E4FA09C
:100780006100600122013522320022340023047A04
:100790002305141AB60F210DB92201350201823446
:1007A00012010531000B31011C31022331030C0110
:1007B000352304BA2305161AB6011E2304FA2305AD
:1007C000151AB6011423047A2305171AB6010A2351
:1007D000043A2305151AB601000F210DB9196A62F2
:1007E0003402334234A770017100A018E0DD0E61BD
:1007F0000080052227140103222702222600022757
:10080000195613640226C1130223002018A883641A
:10081000136403021366030380066364F3661366BE
:1008200062260227195613640226C11302230028E8
:1008300018A88364136403021366030380066364C9
:10084000F36613666227622602264116B17100FD27
:100850000EA018E0023241000D23000023043A23C9
:1008600005180EBA01382300002304502305180E82
:10087000BA023241010D2300012304662305180E3C
:10088000BA011B41020D23000223047C2305180E2C
:10089000BA010B2300022304922305180EBAA018F4
:1008A000E0022A41010C0229E22A422A0523020021
:1008B000015441020C0229E22A422A0523020101C5
:1008C0004541040C0229E22A422A0523020201368C
:1008D00041080C0229E22A422A05230203012722A9
:1008E000012B0D17022B41080523020001184104BA
:1008F0000523020101104102052302020108410102
:100900000523020301002201350201823373001224
:1009100001C302156201250422012A0D17A0201827
:10092000A89C00FA23047E23050B1AB60DB9196A98
:10093000196A196A196A2302052304FA23050A1A97
:100940004D0DB9196A2018A89C004E23047E23057A
:100950000B1AB60DB9196A2018A89C003C73020343
:1009600002800401D401B723047E23050B222D004D
:10097000197E2018A89C00211AB60DB9030481061F
:100980001304030591001305622D022D41ADE119F9
:100990006A196A196A196A01CCA023044623051052
:1009A0001AB60DB9196A196A196A196A2018A87C49
:1009B00000FA2304FA23050A1A4D0DB9196A201802
:1009C000A89C00142304462305101AB60DB9196A11
:1009D0002018A89C000201DAA061021302DF01D0F6
:1009E000DF01D0DF01D01303DF01F0DF01F0DF0111
:1009F000F0C302A302710261032303008010C3024B
:100A0000DF01D0C303D0C303C302730001EE710042
:100A1000A061006102034C325524C3022201550239
:100A20002531641A6225020182251201025531FF27
:100A30000715C30212550106C30212557225710231
:100A40007100A018E0022531000B31010C22015683
:100A500005192F010A02550106220156057225A02B
:100A60006100222701022732251162272201550247
:100A700001822712010572011501EA72257100A099
:100A80002255FF222500A0E0E0E09B0002A1022306
:100A900065009F00032365FFD180A0610023000152
:100AA00019747100A06102197E5300FB7102A061EC
:100AB000002300FF5300FD18E07100A0230300A3F2
:100AC000027F0104630301F78302A00E0A19CB0D14
:100AD000B9196A196A196A196A2304FA23050A1AE4
:100AE0004D0DB9196A2018A89C00100E0A19CB0DDB
:100AF000B9196A2018A89C000201DEA00233230263
:100B00000A198BC3032304862305128014C302032E
:100B10000481321304030591001305C3027300011D
:100B2000EA2230011A19C303230486230512801414
:100B3000C302030481321304030591001305C302A9
:100B4000730001EA2230031A19A01302222D002299
:100B50002F00222E00230004822D1956822F82306E
:100B600013640302822EC1F3661366022FF1011291
:100B70002F9002622D622E230032422ED8A018E060
:100B80006163DC63610061032364D0F300136513C8
:100B900003C1E366136663640364E10F410C0E0353
:100BA000648104136490062365FF23648063030358
:100BB000034142DD2364D0F30013650303C1D36610
:100BC000136663640364E10F410C0E036481041334
:100BD0006490062365FF236480630303034184DD7F
:100BE000710371007163A06163DC63DD0E610061FC
:100BF0006561036164236480F300D8651303C11346
:100C00006663640364E10F410C0D036481041364A3
:100C10009005F8652364806303030341C0E07164B9
:100C2000710371657100FD0E7163A0FE000000008C
:100C30007FFC000000003FF8000000001FF00000F3
:100C400000000FF0000000000FF0000000000FF0A7
:100C5000000000000FF0000000000FF00000000096
:100C60000FF0000000000FF0000000000F00000077
:100C700000000001FFFFFFFF8002000000004004B1
:100C8000F73CE703200494A10804A004F738C60742
:100C9000A00485202104A00484BDCE04A00400008B
:100CA00000002007FFFFFFFFE0000000000000F849
:100CB0000000000000E00000000000E00000000074
:100CC0000090000000000083FFFFFFFF8003FFFF94
:100CD000FFFF800381FC0F07800381FC0603800374
:100CE000E7FE66738003E7FE66738003E7FE6673C4
:100CF0008003E7FE6673800381FC0603800381FCAA
:100D00000F078003FFFFFFFF8003FFFFFFFF80FC53
:100D1000000000007FFC6303F0F87FFC6303F9FC34
:100D20007FFC6301998C7FFC6301998C7FFC6301DC
:100D3000998C7FFC6301998C7FFC7F03F9FC7FFC1D
:100D40003E03F0F87FFC000000007FFC0000000084
:100D50007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF23
:100D6000FFFFFFFFFE0001FFFFFFFF3FF3FFFF005C
:100D70000000000000000000000000000000000073
:100D80000000000000000000000000000000000063
:100D900000000000002F40000000000000000000E4
:100DA000000000000000000000000001CCE781927C
:100DB000E0021254025A5002125703DA500212543F
:100DC00002565001CCE78252E00000000000000013
:100DD0000000000000003BA83940000042281540F8
:100DE00000005B10188000004A28148000003A2898
:100DF000388000000000000000000000000000003B
:100E000000000000000000000000000000000000E2
:100E100000039DE4514BE0025096514880025096E9
:100E2000514880039895517880029094D14880026F
:100E30005094D14880025DE44E48800000000000DC
:100E400000000000000000000000000000000000A2
:100E500000000003FFFFFFFFE000000000000000B3
:100E60000000000000000000000000000000000082
:100E700000000000000000089122000000089122FC
:100E80000000000891220000000A952A6000000579
:100E90000A146000000000000000000000000000D4
:100EA00000007A52E0000000125E90000000125232
:100EB000E0000000525280000000219280000000FB
:100EC000000000000000000000000001DE67BCC957
:100ED00000020491092D000184F1092D00004491C4
:100EE000092B300384913CC9300000000000000051
:100EF0000000000000000000000000000007302596
:100F000020800008482540800008482580C000084F
:100F10004B2541E00007331923E00000000003B037
:100F20000000000007F8000000000FFC00000000B7
:100F30001FFF000000007FFF80000000FBDFC000FB
:100F40000001FFFFF0000007FFFFF800000FDFFFC8
:100F5000FF00007FBFFDFFF007FFFFFFF9FFFFFF6E
:100F6000FFFFFEFFFFFFFFFFFFFEEFFFFFBFFFFFE3
:100F7000FFFFFFFFEFFFFFFFFFFBFFBFFFBFFFFF15
:100F8000FFFFFBFFFFFFFFFFFFFFFDFFEFFFFFFF87
:100F9000FFFFFFF6F7FFF7FFFFFFFFFFFBFFF3CFBA
:100FA0003CB34FFFE9A69A69A5FFF3CF3CF3CFFE10
:100FB000EDB6DB4DB7FFBEDFFFBFFF7FF3CF3CB326
:100FC000BFFFE5965965FFFFF3CF3CF3FBDFF34F1F
:100FD0003CF3FFFFFFFFFD7FDFFFF3CF1FF3FFFFBA
:100FE000E9A69FE9FBF573CF3FF3FFF7EDA6DFED31
:100FF000FFFBFFFFF77FFFEEFFFFFFFFDFFF5BF76A
:10100000FFFFBFFFFFE3FFFFFFF7FFEAFFFFFEFF6A
:10101000FFFFBFFFFFFFF7FFFFFBFFFFFDFBFBBF76
:10102000FFFFFFFFFFBDFFFFEFFFFFBFEFFFFFD79A
:10103000FFFFFFFFF3E3EFFFFDFFFFC1DFFFFFFB5C
:10104000FFD5FFFFFFFFDDFFFFFBFFFFFFFDEFFB16
:10105000FFEFFFFFEBFFEFFFFBFFFFFFFFFFBFFB1C
:10106000BFEFFFFFFFFFFFFFFFF7FFFFFFFFF7FFF0
:10107000FFFDFFFFFFFFFFFFFFFFFFFFFFFFF7FF8A
:10108000FFFFDFFFFFFDFFEFFFDFFFFFFFFFFFFFC2
:10109000FFFFFFFFFFFFFF7FEFFFFEFF7FFFFFFF71
:1010A000FFFFFFFFFFFFDF7FFFBFFFFFFFFFFFFD32
:1010B000FFFFFFFFFFFFFD07FFFFFFFFFF1FFFFF1A
:1010C000FFFFFF1FFFFFFFFFFF6FFFFFFFFFFF7C23
:1010D000000000007FFC000000007FFC7E03F0F8B1
:1010E0007FFC7E03F9FC7FFC1801998C7FFC1801C2
:1010F000998C7FFC1801998C7FFC1801998C7FFCDE
:101100007E03F9FC7FFC7E03F0F87FFC000000000A
:101110007FFC000000007F03FFFFFFFF80039CFCBB
:101120000F0780039CFC060380039CFE667380030C
:101130009CFE667380039CFE667380039CFE667350
:10114000800380FC06038003C1FC0F078003FFFFC0
:10115000FFFF8003FFFFFFFF800000000000000092
:1011600000000000000000000000000001FFFE0081
:10117000000000C00C00009FFFFFFF9FF3C7F3F9C2
:10118000FF7FC3C0FDF07FFF07E03FE00FFC07F0EB
:1011900007C003F00FF0018300C00EF8F803C00091
:1011A0001EFD0007F8001D7E64FFFEE1FF9C9B030F
:1011B00091061FE9FE6780089FF904E7089033F95C
:1011C000CCC6019067F88C8491818FFC0C21938CA4
:1011D0003DF39FFFFFF3FEE0FFFFFFE0FE800C3FCB
:1011E000FFE07F00311FFFFDFFE04391F8721FFF1A
:1011F00093899230CFFF8F8920C107FF9F242182DE
:1012000003FF8E446627C1C7E0BC90E1FF3F9F7B90
:101210000F99FFFF81FC0FC1F7FF07DC1EE0F7FF0E
:101220000FDC1F70FBDE39FE1F78FFDE77FE3FBE4E
:101230007FBDFFFF3FFF7F60000000600C380C06A1
:1012400000803C3F020F8000F81FC01FF003F80F22
:10125000F83FFC0FF00FFE7CFF3FF10707FC3FFF5C
:10126000E102FFF807FFE2819B00011E006364FCBE
:101270006EF9E01601987FF76006FB18F76FCC0651
:101280003339FE6F9807737B6E7E7003F3DE6C73E9
:10129000C20C6000000C011F0000001F017FF3C0A2
:1012A000001F80FFCEE00002001FBC6E078DE00033
:1012B0006C766DCF30007076DF3EF80060DBDE7D4F
:1012C000FC0071BB99D83E381F436F1E00C060847C
:1012D000F06600007E03F03E0800F823E11F0800DE
:1012E000F023E08F0421C601E08700218801C0417E
:1012F00080420000C000809FFFFFFF9FF3C7F3F90B
:10130000FF7FC3C0FDF07FFF07E03FE00FFC07F069
:1013100007C003F00FF0018300C00EF8F803C0000F
:101320001EFD0007F8001D7E64FFFEE1FF9C9B038D
:1013300091061FE9FE6780089FF904E7089033F9DA
:10134000CCC6019067F88C8491818FFC0C21938C22
:101350003DF39FFFFFF3FEE0FFFFFFE0FE800C3F49
:10136000FFE07F00311FFFFDFFE04391F8721FFF98
:1013700093899230CFFF8F8920C107FF9F2421825C
:1013800003FF8E446627C1C7E0BC90E1FF3F9F7B0F
:101390000F99FFFF81FC0FC1F7FF07DC1EE0F7FF8D
:1013A0000FDC1F70FBDE39FE1F78FFDE77FE3FBECD
:1013B0007FBDFFFF3FFF7F3FF07FF81FE04008E069
:1013C0001CE01CE01CE01CE01CE01CC00C40080001
:1013D000004008C00CE01CE01CE01CE01CE01CE02D
:1013E0001C40081FE07FF83FF000000000000000F4
:1013F00008001C001C001C001C001C001C000C0031
:101400000800000008000C001C001C001C001C0050
:101410001C001C00080000000000003FF07FF81FC7
:10142000E00008001C001C001C001C001C001C002C
:101430000C0FC81FE04FC0C000E000E000E000E07B
:1014400000E000E00040001FE07FF83FF03FF07F49
:10145000F81FE00008001C001C001C001C001C0001
:101460001C000C0FC81FE00FC8000C001C001C0063
:101470001C001C001C001C00081FE07FF83FF0004F
:1014800000000000004008E01CE01CE01CE01CE044
:101490001CE01CC00C4FC81FE00FC8000C001C0053
:1014A0001C001C001C001C001C00080000000000A8
:1014B000003FF07FF81FE04000E000E000E000E0C7
:1014C00000E000E000C0004FC01FE00FC8000C00AB
:1014D0001C001C001C001C001C001C00081FE07FDE
:1014E000F83FF03FF07FF81FE04000E000E000E050
:1014F00000E000E000E000C0004FC01FE04FC8C0A7
:101500000CE01CE01CE01CE01CE01CE01C40081F80
:10151000E07FF83FF03FF07FF81FE00008001C007C
:101520001C001C001C001C001C000C00080000001B
:1015300008000C001C001C001C001C001C001C00EF
:10154000080000000000003FF07FF81FE04008E0C6
:101550001CE01CE01CE01CE01CE01CC00C4FC81F81
:10156000E04FC8C00CE01CE01CE01CE01CE01CE0EC
:101570001C40081FE07FF83FF03FF07FF81FE0407D
:1015800008E01CE01CE01CE01CE01CE01CC00C4F50
:10159000C81FE00FC8000C001C001C001C001C0031
:1015A0001C001C00081FE07FF83FF0000FF0000057
:1015B0000000700E00000001A00580000002200461
:1015C0004000000420042000000820041000001047
:1015D00040020800002040020400002040020400F5
:1015E00000438001C200007C00003E00004000007B
:1015F0000200008000000100008000000100008067
:1016000001800100008002400100008002400100D2
:1016100000800180010000800000010000800000C7
:101620000100004000000200007C00003E0000437A
:101630008001C2000020400204000020400204009B
:1016400000104002080000082004100000042004DC
:1016500020000002200440000001A00580000000DE
:10166000700E000000000FF0000000000FF00000FE
:1016700000007C0E00000001B80980000002240870
:10168000400000043808200000082808100000105E
:101690006404080000207804040000206E040400A4
:1016A0000043F003C200007FCC003E00007FFA0040
:1016B000020000FFD500010000FFFA00010000FF5A
:1016C000CD80010000FFF3C0010000FFFF400100DA
:1016D00000FFDB80010000FFE400010000FFF900D3
:1016E0000100007FFE000200007FE0003E0000439A
:1016F000FC03C20000205A0404000020440404003B
:1017000000107804080000082C08100000042008CD
:10171000200000023C0840000001B00980000000E9
:101720007C0E000000000FF0000000000FF0000031
:101730000000703E00000001900D80000002103C8F
:1017400040000004100420000008103410000010B5
:10175000201E08000020202204000020205A04003F
:101760000043C03FC200007C0007FE000040007F35
:10177000FE000080009FFF0000800027FF00008027
:1017800001DBFF000080027FFF000080034FFF00AD
:10179000008001B3FF000080005FFF00008000AB0D
:1017A000FF000040005FFE00007C0033FE000043AD
:1017B000C00FC2000020207604000020201E04007C
:1017C0000010202608000008101410000004101C4F
:1017D00020000002102440000001901D8000000045
:1017E000703E000000000FF0000000000FF000004D
:1017F00000007FFE00000001BFFD800000023FFCF2
:10180000400000043FFC200000083FFC10000010D6
:101810007FFE080000207FFE040000207FFE040001
:101820000043FFFFC200007E7DABFE000072DBBA0A
:10183000960000D6DB6DB70000D555554B000080F3
:1018400093A9010000800BD001000080034001003B
:101850000080018001000080000001000080000085
:101860000100007C00003E0000438001C2000040F7
:101870004002020000204002040000204002040058
:10188000001040020800000820041000000420049A
:1018900020000002200440000001A005800000009C
:1018A000700E000000000FF0000000000FF00000BC
:1018B0000000700E00000001A0058000000220045E
:1018C0004000000420042000000820041000001044
:1018D00040020800002040020400002040020400F2
:1018E00000404002020000438001C200007C000072
:1018F0003E00008000000100008000000100008028
:101900000180010000800340010000800A500100B6
:10191000008095C9010000D2AAAAAB0000EDB6DB99
:101920006B0000695DDB4E00007FD5BE7E0000438A
:10193000FFFFC20000207FFE040000207FFE0400A5
:1019400000107FFE080000083FFC100000043FFC70
:10195000200000023FFC40000001BFFD80000000AD
:101960007FFE000000000FF0000000747C860287FC
:1019700002878287C287E287C287828702860274D3
:101980007C701C838287C28FE29FF29FF29FF28F4E
:10199000E287C28382701C7FFC800280028002800A
:1019A00002800280028002800280027FFC7F8480AD
:1019B000128032806280C291829B029E028E0284DB
:1019C0000270FC066CB0C2BDC29F828F028F028F74
:1019D000C29DE2B872B0320784785C0A2009129E78
:1019E00000049F0004A02101F0F8079F4CFB23276F
:1019F00000F807785CF07F4CF8232780F8079F4CAD
:101A0000FB01D60000000000000000000000000004
:101A100000000000000000000000000000000000C6
:101A200000000000000000000000000000000000B6
:101A300000000000000000000000000000000000A6
:101A40000000000000000000000000000000000096
:101A50000000000000000000000000000000000086
:101A60000000000000000000000000000000000076
:101A70000000000000000000000000000000000066
:101A80000000000000000000000000000000000056
:101A90000000000000000000000000000000000046
:101AA0000000000000000000000000000000000036
:101AB0000000000000000000000000000000000026
:101AC0000000000000000000000000000000000016
:101AD0000000000000000000000000000000000006
:101AE00000000000000000000000000000000000F6
:101AF00000000000000000000000000000000000E6
:101B000000000000000000000000000000000000D5
:101B100000000000000000000000000000000000C5
:101B200000000000000000000000000000000000B5
:101B30000000080B0002020201000904000001027B
:101B40000200000524001001052401010104240203
:101B50000605240600010705810310004009040161
:101B600000020A000000070502024000000705838A
:101B7000024000000403090412010002EF020140C8
:101B80004123368000010102030141726475696ED0
:101B90006F204C4C430041726475696E6F204C6538
:101BA0006F6E6172646F00003F2411241FBECFEF7F
:101BB000DAE0DEBFCDBF11E0A0E0B1E0E6E5F9E498
:101BC00002C005900D92A632B107D9F728E0A6E22F
:101BD000B1E001C01D92A233B207E1F71DE0C5EDEF
:101BE000DDE004C02197FE010E949E24C43DD10780
:101BF000C9F70E94FC160C94A9240C9400003FB76E
:101C0000F8948091C8079091C907A091CA07B09134
:101C1000CB0726B5A89B05C02F3F19F00196A11D43
:101C2000B11D3FBFBA2FA92F982F8827820F911D72
:101C3000A11DB11DBC01CD0142E0660F771F881FB9
:101C4000991F4A95D1F708958F929F92AF92BF92B4
:101C5000CF92DF92EF92FF926B017C010E94FF0D09
:101C60004B015C01C114D104E104F104F1F00E94C4
:101C7000FF0DDC01CB0188199909AA09BB09883E2F
:101C80009340A105B10570F321E0C21AD108E10823
:101C9000F10888EE880E83E0981EA11CB11CC114C7
:101CA000D104E104F10419F7DDCFFF90EF90DF904C
:101CB000CF90BF90AF909F908F9008951F920F92FA
:101CC0000FB60F9211242F933F938F939F93AF934F
:101CD000BF938091260190912701A0912801B09196
:101CE00029013091C70723E0230F2D3720F40196F7
:101CF000A11DB11D05C026E8230F0296A11DB11D2F
:101D00002093C7078093260190932701A093280171
:101D1000B09329018091C8079091C907A091CA0783
:101D2000B091CB070196A11DB11D8093C807909378
:101D3000C907A093CA07B093CB07BF91AF919F91FA
:101D40008F913F912F910F900FBE0F901F9018957C
:101D50008EBD00000DB407FEFDCF08952F923F9277
:101D60004F925F926F927F928F929F92AF92BF92AB
:101D7000CF92DF92EF92FF920F931F93CF93DF9357
:101D8000CDB7DEB7EC970FB6F894DEBF0FBECDBF70
:101D9000CE0101964C0180E3D4011D928A95E9F7AA
:101DA0001091D906133808F01358012F02950695A3
:101DB000069503701F73110F90E0792F7370872FB2
:101DC000880FB0902A016401FE013896612F56E019
:101DD0001F5F20E8029FD0011124A60FB11DA55D51
:101DE000BC4F4C91B11001C040E0342F331F33275A
:101DF000331F082E01C0330F0A94EAF7D6012C9145
:101E0000232B2C93DF01169746FBFF24F0F8F9AA49
:101E10001AAAE9A8FAA8082E01C0EE0C0A94EAF75B
:101E20003C91E32AEC92119645FBFF24F0F8FBAAC3
:101E30001CAAEBA8FCA8082E01C0EE0C0A94EAF735
:101E40003C91E32AEC92119644FBFF24F0F8FDAAA2
:101E50001EAAEDA8FEA8082E01C0EE0C0A94EAF70F
:101E60003C91E32AEC92119643FBFF24F0F8FFAA81
:101E700018AEEFA8F8AC082E01C0EE0C0A94EAF7F1
:101E80003C91E32AEC92119642FBFF24F0F8F9AE64
:101E90001AAEE9ACFAAC082E01C0EE0C0A94EAF7CF
:101EA0003C91E32AEC92DF0141FB222420F8312C03
:101EB0009101082E01C0220F0A94EAF73E91232BCC
:101EC0002C9340FB662460F8712C9301082E01C00E
:101ED000220F0A94EAF73081232B2083212F2F70C1
:101EE0002C3010F015E0160F17FF02C00F5F1058CE
:101EF000023021F4163010F0165000E0515028E066
:101F0000C20ED11C3896552311F0612F61CF73306A
:101F100071F5412C512C620183E0CC0CDD1C8A95BB
:101F2000E1F7A12CB12C7501EC28FD28E80CF91C77
:101F3000D7018C91282F220F282B822F2BAF9CAFFB
:101F40000E94A80E2BAD822F0E94A80EF7011082CE
:101F5000FFEFAF1ABF0A9CAD28E0A216B10419F733
:101F60008FEF481A580AA6E04A165104A1F69F5F5F
:101F7000903209F022CF1092B707EC960FB6F89482
:101F8000DEBF0FBECDBFDF91CF911F910F91FF90AC
:101F9000EF90DF90CF90BF90AF909F908F907F9009
:101FA0006F905F904F903F902F9008950F931F93E5
:101FB000CF93DF931F92CDB7DEB78C01803891406D
:101FC000F0F08091DC06833008F040C1823029F4C3
:101FD000063891E0190708F039C1F80120E8829F1E
:101FE000E00DF11D1124E555FE4F608380912A011B
:101FF000882309F426C181E08093B70722C1053107
:1020000081E0180709F4B0C000F50E3021E0120796
:1020100009F468C050F4011591E01907B9F10D30C9
:1020200021E0120709F444C00CC1013181E0180716
:1020300009F482C0033191E0190709F48AC0003124
:1020400021E0120709F0FDC069C00D3181E01807D9
:1020500009F4AEC058F4083121E0120709F48FC02A
:102060000B3181E0180709F498C0EBC0073291E00A
:10207000190709F4A8C0063621E0120709F4B6C012
:10208000023281E0180709F0DCC0B0CF862F8295BC
:102090008F708627982F969596958927982F9695D5
:1020A00089279091B80680FB90F99093B806C9C033
:1020B0008091C406862780FFC4C08091BA079091A2
:1020C000BB078E3F2FEF920708F0BBC04091BC07C3
:1020D0005091BD07FA01E80FF91FE491E13209F0D0
:1020E000B0C09DC0862F807A803271F028F48111B3
:1020F000A8C088EB9BE00AC0803869F0803A09F0FC
:10210000A0C088E491E002C084EA90E09093B9070F
:102110008093B80796C080E797E1F8CF66FD07C0C7
:102120008091CA0690E09093B2068093B10667FD55
:1021300088C08091CC061DC080E091E0861B91098B
:102140009093B4068093B3061092B6061092B5062B
:1021500078C08091C70686FD74C0862F90E090936A
:10216000B2068093B1066DC08091C70687FD69C035
:10217000862F90E09093B0068093AF0662C066FD14
:1021800007C08091D20690E09093AE068093AD0692
:1021900067FD57C08091D40610C08091CF0686FDA0
:1021A00050C0862F90E09093AE068093AD0649C054
:1021B0008091CF0687FD45C0862F90E09093AC06B6
:1021C0008093AB063EC0262F221F2227221F422FBC
:1021D00050E080912A0190E04817590791F120932F
:1021E0002A0169830E94AE0E69812BC090911C0761
:1021F00080911B07E82FF0E0F92BF170E55DFE4FB1
:10220000608320911A0724FF21C08F5F80931B07F2
:1022100081111CC081E0892780931C0717C09C0195
:102220002F5F3F4FFA01E20FF31F24910296FA014C
:10223000E80FF91FE491F0E0F22BF093BB07E09375
:10224000BA071127F801E954F94F60830F90DF9125
:10225000CF911F910F910895A7EBB6E016969C9130
:102260001697E92FF0E0E555FB4F808191501696C7
:102270009C9308958F3F910509F068F42091B8066A
:1022800026952170F22FE0E08E0F9F1FFC01E5558F
:10229000FB4F608308950C94D60F8F3F910509F092
:1022A00060F42091B80626952170F22FE0E08E0FA1
:1022B0009F1FFC01E555FB4F11C0803821E09207BC
:1022C00078F02091DC06233008F056C030E8239FD8
:1022D000800D911D1124FC01E555FE4F808108956C
:1022E0008D3121E0920719F178F4843121E09207D1
:1022F000C1F08B3131E09307B9F0823121E09207D0
:10230000B1F58091B1060895853631E0930791F0DB
:10231000863621E0920791F08C3531E0930739F54C
:102320002DC08091AF0608958091AD0608958091EB
:10233000AB06089580911C078E6F089520911C07AD
:1023400090911B07E92FF0E0F22BF170E55DFE4F55
:10235000808130911A0734FF12C09F5F90931B0752
:1023600091110DC091E0922790931C070895992731
:10237000FC01E954F94FB2CF8FEF089582E0089540
:10238000A7EBB6E01696EC911697EF5F1696EC93D6
:10239000F0E0E555FB4F808308958B3121E09207F3
:1023A00041F08D3121E0920721F00E944D1190E023
:1023B00008958FEF90E0089521E030E001C0220FF2
:1023C0008A95EAF780910307282B209303078091D1
:1023D000050782FF03C0826080930507089521E00E
:1023E00030E001C0220F8A95EAF72095809103071B
:1023F0002823209303078091050782FF03C0826092
:10240000809305070895FC018091D407811103C0D2
:102410008FEF9FEF08959FB7F89482E08093E900D3
:102420002091F20030E01216130614F421E030E09F
:102430002115310559F0289884E68093D3078091BF
:10244000F10080838091F200882319F09FBFC901B9
:1024500008958BE68093E800F9CF2FB7F89483E0D6
:102460008093E9009091E800892F807295FF04C065
:102470009091F20080E4891B2FBF0895CF92DF92E4
:10248000EF92FF920F931F93CF93DF936C017A012A
:102490008B01C0E0D0E0CE15DF0589F0D8016D9149
:1024A0008D01D601ED91FC910190F081E02DC601E6
:1024B0000995892B11F47E0102C02196ECCFC7014A
:1024C000DF91CF911F910F91FF90EF90DF90CF9010
:1024D000089580912A0881110DC082E0809326081A
:1024E00084E080932708109229081092280881E040
:1024F00080932A0886E298E00895CF93DF931F9295
:10250000CDB7DEB76983DC01ED91FC910280F381E8
:10251000E02D41E050E0BE016F5F7F4F09950F90C5
:10252000DF91CF91089583E08093E9008091F200DC
:10253000882319F08AE38093E80008950E942D1201
:1025400090E00895CF93DF931F92CDB7DEB7FC01E3
:102550008485958597FD05C02FEF3FEF358724874C
:102560000BC0CE0101960E940312019719F48981D4
:1025700090E002C08FEF9FEF0F90DF91CF91089511
:102580000F931F93CF93DF931F92CDB7DEB78C01CC
:10259000FC018485958597FF0EC0CE0101960E94AF
:1025A0000312019719F4298130E002C02FEF3FEFA9
:1025B000F80135872487F801848595850F90DF9190
:1025C000CF911F910F910895FC018485958597FD0A
:1025D0000BC09FB7F89482E08093E9008091F200ED
:1025E0009FBF90E0019608959FB7F89482E0809392
:1025F000E9008091F2009FBF90E00895089580E087
:1026000090E008950E94A4248F929F92AF92BF926F
:10261000CF92DF92EF92FF920F931F93CF93DF93AE
:102620005C016B017A0180910B01882309F45BC086
:102630008091D407882309F456C08091D20780FF87
:1026400005C08091E00082608093E000E70110E027
:102650000AEF83E0882E9AE3992E2097D9F10E9401
:102660002D1281110AC0015009F43DC061E070E0F3
:1026700080E090E00E94240EF0CF282F30E0C217B7
:10268000D3070CF48C2F4FB7F8948092E900909107
:10269000E80095FF1DC0282F30E0C21BD30BF601C8
:1026A000982F915020F081918093F100FACFC20EC3
:1026B000D31E112319F09092E80009C08091E80020
:1026C00085FD06C09092E80011E0209709F010E027
:1026D0004FBFC3CF1111C3CF5D9884E68093D50758
:1026E0001E141F0444F081E090E0F501938382837F
:1026F00080E090E001C0C701DF91CF911F910F9161
:10270000FF90EF90DF90CF90BF90AF909F908F9011
:102710000895CF92DF92EF92FF920F931F93CF9382
:10272000DF931F92CDB7DEB7182F062FE42E862F2A
:10273000880F8E5F99830E94C11683E00E94C116A4
:10274000F12EC12E9981D92E8C2D8F19801798F4D6
:10275000F601E7FE02C0849101C080810E94C1168B
:10276000182F80E00E94C1168123FFEFCF1ADF0AE5
:102770008111EACF01C081E00F90DF91CF911F91CD
:102780000F91FF90EF90DF90CF900895DF92EF923E
:10279000FF920F931F93CF93DF93D82E8A017B0173
:1027A000E40EF51EEB01CE15DF0571F0D7FE03C078
:1027B000FE01849101C088810E94C1162196811179
:1027C000F2CF8FEF9FEF01C0C801DF91CF911F9132
:1027D0000F91FF90EF90DF9008950F931F93CF9389
:1027E000DF931F92CDB7DEB782E0898342E450E0E9
:1027F00062E37BE180E80E94C6130E946912DC015B
:1028000012960D911C9113970115110569F0D801CD
:10281000ED91FC910280F381E02DBE016F5F7F4F4F
:10282000C801099597FF07C089810F90DF91CF916B
:102830001F910F910895F80100851185E5CF1F9232
:102840000F920FB60F9211248F939F938091E10006
:102850009091E100937F9093E10083FF0FC010926D
:10286000E90091E09093EB001092EC0092E39093DA
:10287000ED001092D40798E09093F00082FF20C002
:1028800093E09093E9009091F200992319F09AE374
:102890009093E8009091D507992339F09091D5074E
:1028A00091509093D507992389F19091D30799235B
:1028B00039F09091D30791509093D307992341F128
:1028C00084FF10C08091E2008E7E81608093E200E0
:1028D0008091E1008F7E8093E1008091D2078E7E0F
:1028E000806111C080FF16C08091E2008E7E806101
:1028F0008093E2008091E1008E7E8093E1008091E0
:10290000D2078E7E81608093D20704C05D9ACDCFBE
:10291000289AD6CF9F918F910F900FBE0F901F9046
:1029200018951F920F920FB60F921124CF92DF923B
:10293000EF92FF920F931F932F933F934F935F93C9
:102940006F937F938F939F93AF93BF93EF93FF9377
:10295000CF93DF93CDB7DEB76C97DEBFCDBF1092BC
:10296000E9008091E80083FFEDC168E0CE01459663
:102970000E94EF1682EF8093E8008D8987FF05C0E3
:102980009091E80090FFFCCF03C09EEF9093E80089
:10299000982F907609F0C6C09E892F89188D9111C5
:1029A0000CC0803829F48091D1078093F10002C0D7
:1029B0001092F1001092F10048C1422F50E0512BCB
:1029C000913051F4811141C14130510509F03DC1AF
:1029D0008091D1078D7F0BC0933061F4811135C197
:1029E0004130510509F031C18091D1078260809357
:1029F000D1072BC1953041F48091E80080FFFCCFD6
:102A000020682093E30021C1963009F05FC0EB8C71
:102A1000FC8C1092E9001092CF071092CE07123072
:102A200091F51092CD071092CC070E94ED1399E01A
:102A3000BE016F5F7F4FDB01E92F1D92EA95E9F739
:102A400099831A8391E09E8390EA98879AEF9987F9
:102A50002091CE073091CF07275F3F4F3C832B83D8
:102A60008D831092E9001092CF071092CE07F0925A
:102A7000CD07E092CC0749E050E080E00E94C61309
:102A80000E94ED13E2C0F092CD07E092CC070E94C5
:102A90006912DC011296ED90FC901397E114F10499
:102AA00009F4C0C0D701ED91FC910480F581E02DBF
:102AB000BE016B5E7F4FC7010995009719F00CF0BE
:102AC000C4C0C7C0F701E084F184E8CF973009F4AF
:102AD000C0C0983021F481E08093F100B6C09930F5
:102AE00009F0B3C0837009F0B4C0EDE0F1E081E01B
:102AF00021E036E39081992361F08093E9002093EF
:102B0000EB0091919093EC003093ED008F5F873054
:102B100089F78EE78093EA001092EA008F8980930C
:102B2000D40793C08B8D9C8D1092E9001092CF0733
:102B30001092CE079093CD078093CC07898D811199
:102B400056C08E899D89913A59F4813209F081C02D
:102B500047E050E064E071E080E00E94C61375C079
:102B6000913209F076C0833289F4888D90E0982FF5
:102B700088272F89822BA0E0B0E0809300019093FA
:102B80000101A0930201B09303015FC0803269F498
:102B90008091E80082FFFCCF67E084E091E00E9432
:102BA000EF168BEF8093E80006C0823209F04DC02B
:102BB0008F8980930B018091D007882319F0EEEF65
:102BC000FAE002C0E0E0F8E0809104019091050194
:102BD000A0910601B0910701803B9440A105B10589
:102BE00009F07BC080910B0180FF93C076C00E94EA
:102BF0006912DC0112960D911C91139701151105B4
:102C000041F1D801ED91FC910190F081E02DBE01E0
:102C10006B5E7F4FC8010995811117C0F8010085CF
:102C20001185ECCF113009F44EC0133091F48F8927
:102C3000882309F445C0823081F440E860E186E9E8
:102C40009BE10E948913882321F08EEF8093E80096
:102C500079C081E28093EB0075C0813029F440E8AF
:102C60006BE08AE89BE1EDCF833099F70E9469120F
:102C7000DC011296ED90FC9013978E010F5F1F4FB1
:102C80006801E114F10479F0D701ED91FC9106801F
:102C9000F781E02DB801C7010995080F111DF70153
:102CA000E084F184EECFD8011C92F601019000205F
:102CB000E9F73197BF016C197D0940E0C601C1CF2A
:102CC00064E77BE102C068E77BE16115710509F209
:102CD000FB01449150E080E840CF0FB6F894A895EE
:102CE00080916000886180936000109260000FBE48
:102CF000A895EE3F2AE0F20739F08091FE0A909104
:102D0000FF0A91838083A1CF1092FF0A1092FE0ADE
:102D10009CCFEE3F8AE0F80731F08081918190935B
:102D2000FF0A8093FE0A87E797E7918380839BE001
:102D300088E10FB6F894A895809360000FBE909339
:102D4000600083CF6C960FB6F894DEBF0FBECDBF88
:102D5000DF91CF91FF91EF91BF91AF919F918F91B3
:102D60007F916F915F914F913F912F911F910F91A3
:102D7000FF90EF90DF90CF900F900FBE0F901F90BD
:102D800018954091CE075091CF072091CC073091F4
:102D9000CD0742175307B4F49091E8009570E1F322
:102DA0009091E80092FD19C08093F1008091CE07C8
:102DB0009091CF0701968F739927892B19F48EEF85
:102DC0008093E8008091CE079091CF070196909371
:102DD000CF078093CE0781E0089580E00895615089
:102DE00030F02091F100FC0120830196F8CF289863
:102DF00084E68093D3070895CF93DF9300D000D06B
:102E00001F92CDB7DEB7789484B5826084BD84B557
:102E1000816084BD85B5826085BD85B5816085BDD5
:102E200080916E00816080936E001092810080918D
:102E30008100826080938100809181008160809315
:102E4000810080918000816080938000809191005A
:102E500082608093910080919100816080939100C5
:102E6000809190008160809390008091C100846087
:102E70008093C1008091C10082608093C1008091E5
:102E8000C10081608093C1008091C3008160809304
:102E9000C3008091C00082608093C0008091C20016
:102EA00081608093C20080917A00846080937A0070
:102EB00080917A00826080937A0080917A008160AC
:102EC00080937A0080917A00806880937A001092D3
:102ED000D4071092D1071092D2078091D700816059
:102EE0008093D70080EA8093D80089B5806189BD3E
:102EF00089B5826089BD09B400FEFDCF61E070E054
:102F000080E090E00E94240E8091D8008F7C806148
:102F10008093D8008091E000807F8093E0008091D2
:102F2000E1008E7E8093E1008DE08093E200559A6F
:102F3000209AEEEFFFE7859194918B3F9C4D19F419
:102F400081E08093D00785B1806F85B9249884B1E2
:102F5000866E84B95E9A5F988AB1806D8AB9769AD6
:102F60006E9881B3806F81BB899880B38D7080BB70
:102F700080E58CBD81E08DBD65E070E080E090E093
:102F80000E94240E5F9A65E070E080E090E00E946D
:102F9000240E5E985C9874E2E72E71E0F72E1DE037
:102FA0001E0DF70184910E94A80EFFEFEF1AFF0A91
:102FB0001E11F7CF5C9A5C9881E20E94A80E80E116
:102FC0000E94A80E8FE60E94A80E82E20E94A80E20
:102FD00080E00E94A80E87E00E94A80E5C9A2FB79E
:102FE000F8946091260170912701809128019091B9
:102FF00029012FBF40E052E0EBEAF4E0DF018A0153
:103000001D9201501040E1F720E831E0EBE2F3E0DF
:10301000DF0189011D9201501040E1F7EBE2F1E080
:10302000DF018A011D9201501040E1F740E051E0BC
:10303000E7EBF6E0DF018A011D9201501040E1F755
:103040002FE72093BD061FEF1093030702E00093C4
:10305000B8061092B2061092B1061092B006109205
:10306000AF061092AE061092AD061092AC0610920A
:10307000AB061092B6061092B5065093B406409374
:10308000B30620E22093BB0427E12093BC04FF2475
:10309000F394F092BD04F092BE04F092BF0427E0D6
:1030A0002093C20421EE2093C304F092C404F09252
:1030B000C504F092C60428EE33E040E050E00E94E0
:1030C0007C242093C8041093DC0480E88093BF061E
:1030D00061E88EE091E00E94D60F1092B70710923F
:1030E0002A011092C6071092C5071092C0071092CD
:1030F000BF07F092C40681E391E09093BD078093EF
:10310000BC071092BB071092BA070093DC0660E17F
:1031100082E891E00E94D60F1092DC0660E887E218
:1031200091E00E94D60FCC24C394D12C50EA452EB6
:103130005FE0552E66246394712C0091BC071091BA
:10314000BD07E090BA07F090BB07F801EE0DFF1D38
:103150002491B7016F5F7F4F7093BB076093BA07ED
:10316000822F8F70843048F4823008F044C3882363
:1031700041F0813009F441C1F1C5883008F423C41D
:10318000EDC5E22FF0E034E0F595E7953A95E1F7EB
:103190003197EF30F10510F00C943220EA5AFF4FCE
:1031A0000C949E2482E0860F0E94C0118091BA0781
:1031B0009091BB070296892F0E94C0118091BA0797
:1031C0009091BB07F801E80FF91F34910196F801BF
:1031D000E80FF91F2491830F911DE22FF0E0FE2FDD
:1031E000EE27E80FF91FF093BB07E093BA073CC145
:1031F00082E0860F0E94C0118091BA079091BB07B0
:103200000296892F0E94C0118091BA079091BB0746
:10321000F801E80FF91F2491FC013196E00FF11F2E
:10322000E491F0E0F22B63C62091B9068091B706D5
:1032300090E0982F88273091BA06832B289F700141
:10324000299FF00C11248091B8068B778093B806E3
:10325000E092BA066F2D80E091E00E94D60FC70180
:10326000FF0CAA0BBB0BB093B9062AC06091B9063C
:1032700070E08091BA066115710541F02091B706A2
:1032800090E0922B0E9468247C0105C0682F70E0BA
:103290007F6FE12CF12C8091B8068B77E114F1045B
:1032A00011F494E001C090E0892B8093B8066093FC
:1032B000BA06672F80E091E00E94D60FE092B9062F
:1032C00087E0D1C6E091BC06F0E0FE2FEE278091AA
:1032D000BB06E80FF11D5AC222E0E20EF11CF0928B
:1032E000BB07E092BA07F801E60FF71F849190E060
:1032F00023C10E942C11E091BA07F091BB079F01F6
:103300002F5F3F4F3093BB072093BA07E00FF11FA9
:10331000E491682F8E2F90E0A0C22091B706C701DC
:1033200002962111F9C3F801E60FF71F249127FF38
:1033300016C6E491EE2ED9C22091B706C7010296B7
:10334000222309F4E9C3F801E60FF71F249127FFB0
:1033500006C6E491EE2EF12CFA9404C60E942C11BC
:10336000E82EF12CFE2CEE240E942C11E82AFCC53C
:103370000E942C11E82EF12CFE2CEE240E942C1120
:10338000E82AF092BB07E092BA078091C5079091B6
:10339000C60701979093C6078093C50761C66091E1
:1033A000B70660FB679567F9D4C48091B70690E0D3
:1033B0006091B806262F80FB27F92093B8069595D3
:1033C000879560780BC06091B706962F9078892F0B
:1033D00090E0880F892F881F990B660F682BB9C45E
:1033E0006091B7068091B806262F2078982F9F7796
:1033F000922B9093B8068078EBCFE22FF0E044E078
:10340000F595E7954A95E1F73197EF30F10520F40E
:10341000EB59FF4F0C949E24F801E60FF71F84919F
:1034200087FF04C0E491F0E0FA9502C0E491F0E077
:1034300052E0E50EF11CEE0DFF1D59C5F801E60F37
:10344000F71F949162E0E60EF11CF801EE0DFF1DEE
:10345000E491E90EF11CF0E0FE2FEE27EE0EFF1EC8
:10346000F092BB07E092BA0784E0FDC5F801E60FD1
:10347000F71F8491F7013296E00FF11FE491F0E01D
:10348000F82B35C52091B70630E04091B8064F774C
:10349000F801E60FF71F849190E02817390714F020
:1034A00080E001C080E8482B4093B806A7014E5F3A
:1034B0005F4FE491F0E0C70103962E173F0709F034
:1034C0002BC3F801E40FF51F249127FF48C5E490B2
:1034D000F12CFA9447C52091B70630E04091B80628
:1034E0004F77F801E60FF71F849190E0281739070E
:1034F00014F080E001C080E8482B4093B806A70193
:103500004E5F5F4FE491F0E0C70103962E173F072F
:1035100009F402C3F801E40FF51FBBC2B2E0EB0EE1
:10352000F11CF092BB07E092BA07F801E60FF71F13
:10353000E4918E2F90E091600E944D110E94C01185
:103540008FC50E942C11E091BA07F091BB079F0133
:103550002F5F3F4F3093BB072093BA07E00FF11F57
:10356000E491F0E0682FCF01916077C13090B70609
:10357000A32CB12CE2E0EE0EF11CF092BB07E0921E
:10358000BA07F801E60FF71F2490E22CF12C622D08
:10359000630D80E091E00E94D60F2091B8062B7356
:1035A000C5018E0D9F1D8F3F910509F014F430E089
:1035B00001C030E8232B332D3F70422D4F7050E077
:1035C000430F511D4031510514F430E001C030E487
:1035D000232BA094B094AE24BF24F0E8AF22BB24E8
:1035E000E826F926AE20BF20AB2811F480E001C008
:1035F00084E0282B2093B80635C53090B706A32C5D
:10360000B12C22E0E20EF11CF092BB07E092BA0767
:10361000F801E60FF71F2490E22CF12C2091B80658
:10362000221F2227221F622F630D620D80E091E08E
:103630002D830E94D60F8091B8068B732D8130E0C8
:10364000A5014E0D5F1D420F531F4F3F510509F05D
:1036500014F490E001C090E8892B932D9F70E22D27
:10366000EF70F0E0E90FF11DE20FF31F709714F413
:1036700090E001C090E4892BA094B094AE24BF24C4
:1036800030E8A322BB24E426F526AE20BF20AB28D9
:1036900009F08DC28AC2B090B70642E0E40EF11C78
:1036A000F092BB07E092BA07F801E60FF71FF4901B
:1036B0006B2D6F1980E091E00E94D60F8091B806C3
:1036C0008B732B2D30E02F19310937FD02C020E01C
:1036D00001C020E8282B8B2D8F7090E03F2D3F708C
:1036E000831B9109991F9927991F9295990F990FFB
:1036F000907C822F08C3B090B70652E0E50EF11C13
:10370000F092BB07E092BA07F801E60FF71FF490BA
:103710004091B806E42EEE1CEE24EE1C6B2D6F19C2
:103720006E1980E091E00E94D60F8091B8068B73ED
:103730004E2D50E02B2D30E02F193109241B350B75
:1037400037FD02C090E001C090E8892B2B2D2F702F
:1037500030E09F2D9F70291B3109241B350B932FBF
:10376000991F9927991F9295990F990F907CCBC219
:103770008091B706E091BB06F0E0E80FF11D809163
:10378000BC0690E0982F8827E80FF91FE00FF11F83
:10379000649180E091E00E94D60F62C49091B706D8
:1037A00082E0E80EF11CF092BB07E092BA07F80144
:1037B000E60FF71F6491692BCCC29091B706A2E087
:1037C000EA0EF11CF092BB07E092BA07F801E60F8F
:1037D000F71F64916923BDC29091B706B2E0EB0E6A
:1037E000F11CF092BB07E092BA07F801E60FF71F51
:1037F00064916927AEC25701E2E0AE0EB11CB092EF
:10380000BB07A092BA07F801E60FF71FE491822FD9
:103810008170982E812C14012E2AE22FF0E084E092
:10382000F595E7958A95E1F73197EF30F10520F4AA
:10383000EC58FF4F0C949E24C101F2C06091B70672
:103840006EC0F3E0EF0EF11CF092BB07E092BA07F6
:10385000F801EA0DFB1D6491C1010E943A1100C4F8
:10386000C1010E944D11282F30E04091B70650E071
:103870008091B8068F774217530714F090E001C08B
:1038800090E8892B8093B806C70103964217530727
:1038900009F042C1F801EA0DFB1D249127FF5FC327
:1038A000E490F12CFA945EC3C1010E944D11282FBF
:1038B00030E04091B70650E08091B8068F7742170C
:1038C000530714F090E001C090E8892B8093B8066C
:1038D000C70103964217530709F41EC1F801EA0D08
:1038E000FB1D249127FF3BC3E490F12CFA943AC3CB
:1038F000C1010E94CD1101977C01FF246E2DC101F1
:103900000E943A118091BA079091BB07EF2809F401
:1039100002C1DEC2C1010E94CD1161E0680FC10188
:103920009CC3C1010E94CD116FEFF8CFC1010E946D
:103930004D11B82EE82EF12CA090B7062A2C312C70
:10394000682F6A0D80E091E00E94D60F8091B80642
:103950008B7391012E0D3F1D2F3F310509F014F49B
:1039600050E001C050E8582B4A2D4F708B2D8F70BE
:1039700090E0840F911D409714F480E001C080E432
:10398000852B209430942E243F2440E82422332495
:1039900006C1C1010FC1C1015EC1C1017FC1C10129
:1039A0000E944D11F82E6091B706C101B7C1F09089
:1039B000B706C101BAC1F090B706C101BEC1F0900F
:1039C000B706C101C2C18091B80690E09595879570
:1039D0008C709927322F3370832B2D8369837C83DE
:1039E0000E944D1190E02D8169817C8121FD03C0F1
:1039F00040E050E002C040E051E05A01A82AB92A54
:103A0000E22FF0E0A4E0F595E795AA95E1F731976C
:103A1000EF30F10520F4ED57FF4F0C949E24C501C3
:103A20000E944D11682F95C16091B70684C082E055
:103A3000E80EF11CF092BB07E092BA07F801E60F1E
:103A4000F71F649178C0C50169837C830E944D1182
:103A5000482F50E097012E5F3F4F69817C81F8012C
:103A6000E60FF71FE491F0E08091B8068F774E17CC
:103A70005F0714F090E001C090E8892B8093B806AE
:103A8000C7010396E417F50709F046C0F801E20FF5
:103A9000F31F249127FF63C2E490F12CFA9462C2D1
:103AA000C50169837C830E944D11482F50E0970126
:103AB0002E5F3F4F69817C81F801E60FF71FE4918B
:103AC000F0E08091B8068F774E175F0714F090E012
:103AD00001C090E8892B8093B806C7010396E417CC
:103AE000F507D1F0F801E20FF31F6BC2C5010E9488
:103AF000CD1101977C01FF246E2DC5010E943A1162
:103B00008091BA079091BB07EF2829F0E091BC079C
:103B1000F091BD07DEC101969093BB078093BA0771
:103B20009FC2C5010E94CD1161E004C0C5010E9481
:103B3000CD116FEF680FC50190C2C5010E944D11F4
:103B4000B82EE82EF12CA090B7062A2C312C682F25
:103B50006A0D80E091E00E94D60F8091B8068B73C9
:103B600091012E0D3F1D2F3F310509F014F450E057
:103B700001C050E8582B4A2D4F708B2D8F7090E06C
:103B8000840F911D409714F480E001C080E4852BE0
:103B9000209430942E243F24E0E82E223324E22681
:103BA000F326E220F320EF2811F490E0ACC094E07B
:103BB000AAC0C5010E944D11A82EE82EF12CB0908C
:103BC000B7062B2D30E03B832A832091B806322E96
:103BD000331C3324331C632D6B0D680F80E091E0A0
:103BE0000E94D60F6091B8066B73232D30E04A8196
:103BF0005B814E0D5F1D420F531F4F3F510509F072
:103C000014F480E001C080E8682B7B2D7F708A2D42
:103C10008F7090E0870F911D280F391F20313105DB
:103C200014F480E001C080E4682B8A819B81809538
:103C300090958E259F2580789927E426F5268E215C
:103C40009F21892B11F480E001C084E0682B6093F0
:103C5000B80608C2C5010E944D11F82EE090B706C3
:103C60006E2D681B80E091E00E94D60F8091B8060F
:103C70008B732E2D30E02F19310937FD02C040E043
:103C800001C040E8482B2E2D2F7030E08F2D8F7013
:103C9000B901681B7109CB012EC0C5010E944D11ED
:103CA000E82EB090B7066091B806F62EFF1CFF24F0
:103CB000FF1C6B2D681B6F1980E091E00E94D60FEE
:103CC0008091B8068B736F2D70E02B2D30E02E198C
:103CD0003109261B370B37FD02C040E001C040E828
:103CE000482B2B2D2F7030E08E2D8F70281B310923
:103CF000261B370B932F991F9927991F9295990F80
:103D0000990F907C842F892B8093B806ABC1C50195
:103D10000E944D11F82E6091B706C5010E943A111C
:103D20006F2D17C0F090B706C5010E944D11682F86
:103D30006F290FC0F090B706C5010E944D11682F82
:103D40006F2107C0F090B706C5010E944D11682F82
:103D50006F2580E091E00E94D60F84C1822F807E83
:103D6000803609F4CDC088F5803209F45EC0803415
:103D700009F479C0811176C1C70102969093BB07FF
:103D80008093BA07F801E60FF71FE491922F907124
:103D9000A92EB12CB694BA2CAA24B794A794277054
:103DA000B22AAE2A0E94C0118091BB070E94C011A6
:103DB0008091BA079091BB078827907FA82AB92ADB
:103DC000B092BB07A092BA074BC1803A09F400C178
:103DD00020F4803809F4CDC045C1803C09F41AC1F3
:103DE000803E09F03FC132E0E30EF11CF092BB07C8
:103DF000E092BA07F801E60FF71FE491822F807175
:103E000090E074E0880F991F7A95E1F77C01EE2A23
:103E1000C7012D830E94CD112D812770B60101C0ED
:103E2000660F2A95EAF7682B17C1F801E60FF71F0E
:103E3000E491422F407150E05695542F44275795F6
:103E400047952770CA01922B9C012E2B92E0E90E18
:103E5000F11CEE24A0EFFA222E293F293093BB0754
:103E60002093BA07FDC0C70102969093BB078093C9
:103E7000BA07F801E60FF71FE491822F807190E0F6
:103E800044E0880F991F4A95E1F75C01AE2AC5010D
:103E90002D830E944D112D812770482F50E0022E56
:103EA00002C0559547950A94E2F740FF25C0F601F8
:103EB00002C0EE0FFF1F2A95E2F79F012095682FA1
:103EC0006223C5010E943A118091BA079091BB0705
:103ED000F801E80FF91F249127FF04C0E491F0E0F6
:103EE000FA9502C0E491F0E00196E80FF91FF09313
:103EF000BB07E093BA07B4C0F3E0EF0EF11C34C087
:103F0000570132E0A30EB11CB092BB07A092BA07D2
:103F1000F801E60FF71FE491822F807190E034E002
:103F2000880F991F3A95E1F78E2B2D830E944D1132
:103F300090E02D812770AC0102C0559547952A95D8
:103F4000E2F7C701039640FFE7CDF801EA0DFB1D3C
:103F5000249127FF04C0E490F12CFA9403C0E4916B
:103F6000EE2EF12CE80EF91EF092BB07E092BA0794
:103F700077C0570182E0A80EB11CB092BB07A09297
:103F8000BA07F801E60FF71FE491822F807190E0E5
:103F9000B4E0880F991FBA95E1F78E2B2D830E940C
:103FA0004D1190E02D812770DC0102C0B595A795D9
:103FB0002A95E2F7C7010396A0FDAECDF801EA0D00
:103FC000FB1D249127FFCBCFE490F12CFA94CACFAC
:103FD000E2E0EE0EF11CF092BB07E092BA07F801A6
:103FE000E60FF71FE491822F807190E0A4E0880F24
:103FF000991FAA95E1F77C01EE2AC7012D830E9443
:10400000CD112D812770B60101C0660F2A95EAF700
:10401000682722C0F2E0EF0EF11CF092BB07E0929D
:10402000BA07F801E60FF71FE491822F807190E044
:10403000F4E0880F991FFA95E1F77C01EE2AC70199
:104040002D830E94CD112D812770B60101C0660F0E
:104050002A95EAF760956823C7010E943A1102C0C9
:1040600082E001C081E0482F50E05B834A83E0900A
:10407000C307F090C407E40EF51EF092C407E09267
:10408000C307A090B807B090B907EA14FB0408F47E
:10409000CDC08091B70781110E94AE0E4FB12CB1F7
:1040A00093B130E0209530952074332753E0359557
:1040B00027955A95E1F7892F90E08095909580712A
:1040C00099279595879595958795822B4095407F63
:1040D000382E342A8091BE0737FE0AC080FD11C0F9
:1040E00081608093BE0780E090E00E94EF1109C0DC
:1040F00080FF07C08E7F8093BE0780E090E00E9423
:10410000DC118091BE0734FE0AC081FD11C08260BF
:104110008093BE0781E090E00E94EF1109C081FF0B
:1041200007C08D7F8093BE0781E090E00E94DC1184
:104130008091BE0735FE0AC082FD11C08460809365
:10414000BE0782E090E00E94EF1109C082FF07C025
:104150008B7F8093BE0782E090E00E94DC1180910B
:10416000BE0736FE0AC083FD11C088608093BE077B
:1041700083E090E00E94EF1109C083FF07C0877FB2
:104180008093BE0783E090E00E94DC118091BE071F
:1041900033FE0AC084FD11C080618093BE0784E0B5
:1041A00090E00E94EF1109C084FF07C08F7E8093CA
:1041B000BE0784E090E00E94DC118091BE0732FED1
:1041C0000AC085FD11C080628093BE0785E090E043
:1041D0000E94EF1109C085FF07C08F7D8093BE0745
:1041E00085E090E00E94DC11EA18FB08F092C40719
:1041F000E092C3078091C1079091C2079C012F5F95
:104200003F4F3093C2072093C1072233310570F02E
:104210002091BF073091C00728603093C0072093DA
:10422000BF07C1979093C2078093C107E091C7066B
:104230008E2F807CA1F18091B5069091B6066A819F
:104240007B81860F971F9093B6068093B5062091C9
:10425000B3063091B4068217930708F140E050E0AE
:104260004F5F5F4F821B930B82179307C8F79093A2
:10427000B6068093B5068E2F807E803E09F095C2EB
:104280008091B1069091B206480F591F4F3F5105DA
:1042900011F008F03FC25093B2064093B10660910E
:1042A000CF06862F807C09F4CDC0862F807E803E8D
:1042B00009F05CC08091AD069091AE062A813B81E9
:1042C000820F931F8F3F910509F028F49093AE065B
:1042D0008093AD06B7C0AC015A955093AE0640939B
:1042E000AD068091AB069091AC069C012F5F3F4FCD
:1042F0002F3F310509F028F43093AC062093AB062C
:10430000A1C08F5F91099093AC068093AB0620917A
:10431000D20630E0420F531F4F3F510509F028F4F9
:104320005093AE064093AD061AC05A955093AE0610
:104330004093AD064091D40650E0840F951F9093B2
:10434000AC068093AB068F3F910549F040F0309367
:10435000AE062093AD065093AC064093AB06862F75
:104360008A608093CF0662FF6DC063C066FF33C072
:104370008091AD069091AE064A815B81840F951FB6
:104380009093AE068093AD068F3F910521F118F111
:104390002091D20630E0A9015A95840F951F8F3FD6
:1043A000910509F028F49093AE068093AD0604C001
:1043B0003093AE062093AD06862F82608093CF06A1
:1043C00060FF09C08091BF079091C0078062909301
:1043D000C0078093BF074091CF0647FF33C080914D
:1043E000AB069091AC066A817B81680F791F709350
:1043F000AC066093AB066F3F710521F118F1809117
:10440000D40690E09C013A95260F371F2F3F3105C7
:1044100009F028F43093AC062093AB0604C09093C7
:10442000AC068093AB06842F88608093CF0642FF52
:1044300009C08091BF079091C00780629093C00728
:104440008093BF078091C40680FD0DC18091BA079B
:104450009091BB07803151E0950739F124F4811523
:10446000914059F0F2C08032A1E09A0709F445C0AA
:104470008033914009F461C0E8C08091290690E042
:10448000982F882720912A06822B81309A412CF47C
:1044900060E080E091E00E94D60F6FEF80E091E055
:1044A0000E94D60F85E091E0D2C08091290690E06D
:1044B000982F882720912A06822B20E030E0AC013B
:1044C0004427B901680F791FFA01E62BE00FF11FAD
:1044D0006491D901A55DB94F7C91672739F42F5FAD
:1044E0003F4F2038310569F760E070E080E091E0EF
:1044F0000E94D60F85E191E0AAC08091290690E044
:10450000982F882720912A06822B20E030E0AC01EA
:104510004427B901680F791FFA01E62BE00FF11F5C
:10452000E491D901A55DB94FEC932F5F3F4F20383F
:10453000310579F785E291E08AC09091C90481E064
:1045400089278093C90480FD7DC08091C8048F5F56
:104550008C3318F48093C80475C01092C8048091FD
:10456000C7048F5F8C3318F48093C7046BC010921C
:10457000C7048091C6048F5F883118F48093C60405
:1045800061C01092C604E091C504EF5FE093C504DA
:104590004091C404423049F52091C20430E0322FEA
:1045A00022278091C304282BC90183709927892B66
:1045B00041F5C901B2010E945424892B01F1C901BE
:1045C00068EE73E00E945424892BD9F0C90160E998
:1045D00071E00E945424892B91F0C90164E670E0D7
:1045E0000E945424892B69F00AC0842F81704830BE
:1045F00018F0811108C009C0811107C004C08DE105
:1046000005C08CE103C08EE101C08FE18E17D0F4AC
:1046100091E09093C50481E0840F8093C4048D30B1
:1046200088F09093C4048091C3048F3F41F41092AA
:10463000C3048091C2048F5F8093C20403C08F5F64
:104640008093C30489E391E002C080E090E09093FE
:10465000BB078093BA07892B09F452C08091C40626
:1046600081608093C406809105078370833079F45C
:104670008091C5079091C607892B49F48091BF07A7
:104680009091C00792609093C0078093BF0780917C
:10469000BF079091C007009799F12091C50730910D
:1046A000C607232B69F52091BF0627FF29C020E00C
:1046B00030E0A601022E02C0440F551F0A94E2F713
:1046C00048235923452BE1F42F5F3F4F2A30310512
:1046D00081F79B7F9093C0078093BF078091BA07B3
:1046E0000E94C0118091BB070E94C0117092C60742
:1046F0006092C50703E510E01093BB070093BA076B
:1047000020E030E0232B11F40C949D180E9400004F
:104710000C949D18CA019A959093B2068093B106A5
:104720002091AF063091B006A9014F5F5F4F4F3F18
:10473000510509F028F45093B0064093AF06AFCD71
:104740002F5F31093093B0062093AF066091CA06FF
:1047500070E0860F971F8F3F910509F028F4909322
:10476000B2068093B1061AC09A959093B2068093D0
:10477000B1068091CC0690E0280F391F3093B00627
:104780002093AF062F3F310549F040F07093B206F9
:104790006093B1069093B0068093AF068E2F8A6027
:1047A0008093C706E2FF7BCD60C0E6FF31C0209159
:1047B000B1063091B206240F351F3093B206209314
:1047C000B1062F3F310521F118F18091CA0690E022
:1047D000BC017A95260F371F2F3F310509F028F4C9
:1047E0003093B2062093B10604C09093B206809332
:1047F000B1068E2F82608093C706E0FF09C08091CA
:10480000BF079091C00784609093C0078093BF0753
:104810006091C70667FF43CD8091AF069091B006C7
:10482000480F591F5093B0064093AF064F3F5105B4
:1048300009F008F434CD2091CC0630E0C9019A95F6
:10484000480F591F4F3F510509F028F45093B00607
:104850004093AF0604C03093B0062093AF06862F76
:1048600088608093C70662FF1ACD8091BF07909140
:10487000C00780619093C0078093BF0710CDE6ED1D
:10488000F7E01382128288EE93E0A0E0B0E0848328
:104890009583A683B78387E191E0918380838FEF2F
:1048A0009FEF958784870895AA1BBB1B51E107C022
:1048B000AA1FBB1FA617B70710F0A61BB70B881FB0
:1048C000991F5A95A9F780959095BC01CD0108953F
:1048D00097FB072E16F4009407D077FD09D00E94AD
:1048E000542407FC05D03EF4909581959F4F089580
:1048F000709561957F4F0895A1E21A2EAA1BBB1BEC
:10490000FD010DC0AA1FBB1FEE1FFF1FA217B3079B
:10491000E407F50720F0A21BB30BE40BF50B661FB1
:10492000771F881F991F1A9469F760957095809575
:1049300090959B01AC01BD01CF010895EE0FFF1FC3
:104940000590F491E02D099481E090E0F8940C94A6
:06495000A924F894FFCF3A
:10495600FFFFFFFF00E100000000000000C18081B2
:10496600000000000000007D1204139E129312E462
:0649760012A212C01200A3
:00000001FF
// IDOUDO - game by Rednuht (jumpstation.co.uk)
// SoftVMS - emulator by Marcus Comstedt
// Port to Arduboy - Felipe Manga
#define WIDTH 128
#define HEIGHT 64
#define BUFFER_SIZE (WIDTH*HEIGHT/8)
#define SSD1306_COLUMNADDR 0x21
#define SSD1306_PAGEADDR 0x22
// ----- Arduboy pins -----
#define PIN_CS 12 // Display CS Arduino pin number
#define CS_PORT PORTD // Display CS port
#define CS_BIT PORTD6 // Display CS physical bit number
#define PIN_DC 4 // Display D/C Arduino pin number
#define DC_PORT PORTD // Display D/C port
#define DC_BIT PORTD4 // Display D/C physical bit number
#define PIN_RST 6 // Display reset Arduino pin number
#define RST_PORT PORTD // Display reset port
#define RST_BIT PORTD7 // Display reset physical bit number
#define SPI_MOSI_PORT PORTB
#define SPI_MOSI_BIT PORTB2
#define SPI_SCK_PORT PORTB
#define SPI_SCK_BIT PORTB1
#define RED_LED 10 /**< The pin number for the red color in the RGB LED. */
#define GREEN_LED 11 /**< The pin number for the greem color in the RGB LED. */
#define BLUE_LED 9 /**< The pin number for the blue color in the RGB LED. */
#define RED_LED_PORT PORTB
#define RED_LED_BIT PORTB6
#define GREEN_LED_PORT PORTB
#define GREEN_LED_BIT PORTB7
#define BLUE_LED_PORT PORTB
#define BLUE_LED_BIT PORTB5
// bit values for button states
// these are determined by the buttonsState() function
#define LEFT_BUTTON _BV(5) /**< The Left button value for functions requiring a bitmask */
#define RIGHT_BUTTON _BV(6) /**< The Right button value for functions requiring a bitmask */
#define UP_BUTTON _BV(7) /**< The Up button value for functions requiring a bitmask */
#define DOWN_BUTTON _BV(4) /**< The Down button value for functions requiring a bitmask */
#define A_BUTTON _BV(3) /**< The A button value for functions requiring a bitmask */
#define B_BUTTON _BV(2) /**< The B button value for functions requiring a bitmask */
#define PIN_LEFT_BUTTON A2
#define LEFT_BUTTON_PORT PORTF
#define LEFT_BUTTON_BIT PORTF5
#define PIN_RIGHT_BUTTON A1
#define RIGHT_BUTTON_PORT PORTF
#define RIGHT_BUTTON_BIT PORTF6
#define PIN_UP_BUTTON A0
#define UP_BUTTON_PORT PORTF
#define UP_BUTTON_BIT PORTF7
#define PIN_DOWN_BUTTON A3
#define DOWN_BUTTON_PORT PORTF
#define DOWN_BUTTON_BIT PORTF4
#define PIN_A_BUTTON 7
#define A_BUTTON_PORT PORTE
#define A_BUTTON_BIT PORTE6
#define PIN_B_BUTTON 8
#define B_BUTTON_PORT PORTB
#define B_BUTTON_BIT PORTB4
#define PIN_SPEAKER_1 5 /**< The pin number of the first lead of the speaker */
#define PIN_SPEAKER_2 13 /**< The pin number of the second lead of the speaker */
#define SPEAKER_1_PORT PORTC
#define SPEAKER_1_DDR DDRC
#define SPEAKER_1_BIT PORTC6
#define SPEAKER_2_PORT PORTC
#define SPEAKER_2_DDR DDRC
#define SPEAKER_2_BIT PORTC7
#define RAND_SEED_IN A4 // Open analog input used for noise by initRandomSeed()
#define RAND_SEED_IN_PORTF
#define RAND_SEED_IN_BIT PORTF1
// Value for ADMUX to read the random seed pin: 2.56V reference, ADC1
#define RAND_SEED_IN_ADMUX (_BV(REFS0) | _BV(REFS1) | _BV(MUX0))
// -----------------------
// #include "vmu.hpp"
// VMU.HPP ////////////////////////////////////////////////////////////////////
#define SGNEXT(n) ((n)&0x80? (n)-0x100:(n))
#ifndef BIG
#define BIG
#endif
#ifndef O_BINARY
#define O_BINARY 0
#endif
unsigned char ram[2][0x100]; // 512 bytes
unsigned char sfr[0x100]; // 256 bytes
#ifdef TRACE
unsigned char xram[2][0x80]; // third page is for BIOS only
#else
unsigned char xram[3][0x80]; // 384 bytes
#endif
unsigned char wram[0x200]; // 512 bytes
// BIG unsigned char flash[0x20000];
// BIG unsigned char bios[0x10000];
extern const unsigned char flash[];
extern const unsigned char bios[];
// this is a LUT. If the number of bits in ACC is odd, this returns 1. Zero otherwise.
//unsigned char parity[0x100]; // 256 bytes
// total: 1920 bytes
inline uint8_t parity( uint8_t v ){
v ^= v>>4;
v ^= v>>2;
v ^= v>>1;
return v & 1;
}
const unsigned char * rom;
#define ROM(x) (pgm_read_byte(rom + (x)))
#define sound(x)
inline void keypress(int i)
{
sfr[0x4c]&=~(1<<i);
if(sfr[0x4e]&4)
sfr[0x4e]|=2;
}
inline void keyrelease(int i)
{
sfr[0x4c]|=(1<<i);
if(sfr[0x4e]&4)
sfr[0x4e]|=2;
}
uint16_t pc, intreq, imask;
uint8_t lcd_updated, lcdon;
const uint8_t hasbios=0;
uint16_t spd;
uint16_t t0h, t0l, t0base, t0scale;
uint16_t t1h, t1l;
extern const int gamesize;
struct tm {
uint16_t tm_year,
tm_mon,
tm_mday,
tm_hour,
tm_min,
tm_sec;
};
inline struct tm localtime(){
uint32_t t = millis();
tm tt;
tt.tm_year = 117;
tt.tm_mon = 0;
tt.tm_mday = 1;
tt.tm_hour = 1;
tt.tm_min = 0;
tt.tm_sec = t / 1000;
return tt;
}
inline int tobcd(int n)
{
return ((n/10)<<4)|(n%10);
}
void writemem(uint16_t addr, uint8_t value)
{
value &= 0xff;
if(addr<0x100) {
ram[(sfr[0x01]&2)>>1][addr] = value;
return;
}
if(addr>=0x180) {
uint8_t b = sfr[0x25];
if(b>2 || (b==2 && addr>=0x186))
return;
xram[b][addr-0x180]=value;
if(lcdon)
lcd_updated = 1;
} else switch(addr) {
case 0x100:
sfr[0x01] = (sfr[0x01]&0xfe)|parity(value);
break;
case 0x10d:
if((value&1) != (sfr[0x0d]&1)) {
if(pc>0xfffd || ROM(pc)!=0x21){
// error_msg("EXT 0 changed without following JMPF. pc = %04x", pc&0xffff);
}else
pc = (ROM(pc+1)<<8)|ROM(pc+2);
if(hasbios)
rom = ((value&1)? flash : bios);
}
break;
case 0x10e:
switch(value&0xa0) {
case 0x00: spd = 3000; break;
case 0x20: spd = 164; break;
case 0x80: spd = 6000; break;
case 0xa0: spd = 328; break;
}
break;
case 0x110:
if(!(value&0x40))
t0l = sfr[0x13];
if(!(value&0x80))
t0h = sfr[0x15];
break;
case 0x111:
t0scale = 256-value;
t0base = 0;
break;
case 0x113:
if(!(sfr[0x10]&0x40))
t0l = value;
break;
case 0x115:
if(!(sfr[0x10]&0x80))
t0h = value;
break;
case 0x118:
if(!(value&0x40))
t1l = sfr[0x1b];
if(!(value&0x80))
t1h = sfr[0x1d];
break;
case 0x11b:
if(!(sfr[0x18]&0x40))
t1l = value;
break;
case 0x11d:
if(!(sfr[0x18]&0x80))
t1h = value;
break;
case 0x122:
if(lcdon)
lcd_updated = 1;
break;
case 0x127:
if((!!(value&0x80)) != lcdon) {
lcdon = !!(value&0x80);
lcdrefresh();
}
break;
case 0x166:
wram[0x1ff&((sfr[0x65]<<8)|sfr[0x64])] = value;
if(sfr[0x63]&0x10)
if(!++sfr[0x64])
sfr[0x65]^=1;
return;
}
/*
if(addr>0x10e && addr<0x120 && addr != 0x118)
fprintf(stderr, "%04x: Write to %03x: %02x\n", pc, addr, value);
*/
sfr[addr&0xff] = value;
if(addr == 0x118 || addr == 0x11b) {
/* Check for sound... */
if(sfr[0x18]&0x40)
sound(32768/((256-sfr[0x1b])*6));
else
sound(-1);
}
}
uint8_t readmem(uint16_t addr)
{
uint8_t r;
if(addr<0x100)
return ram[(sfr[0x01]&2)>>1][addr];
if(addr>=0x180) {
uint8_t b = sfr[0x25];
if(b>2)
return 0xff;
return xram[b][addr-0x180];
} else switch(addr) {
case 0x112:
return t0l;
case 0x114:
return t0h;
case 0x11b:
return t1l;
case 0x11d:
return t1h;
case 0x15c:
return 2;
case 0x165:
return 0xfe|(sfr[0x65]&1);
case 0x166:
r = wram[0x1ff&((sfr[0x65]<<8)|sfr[0x64])];
if(sfr[0x63]&0x10)
if(!++sfr[0x64])
sfr[0x65]^=1;
return r;
}
/*
if(addr>0x106 && addr<0x180)
fprintf(stderr, "%04x: Read from %03x: %02x\n", pc, addr, sfr[addr&0xff]);
*/
return sfr[addr&0xff];
}
uint16_t readlatch( uint16_t addr)
{
switch(addr) {
case 0x11b:
case 0x11d:
return 0xff;
default:
return readmem(addr);
}
}
void push(uint8_t n)
{
writemem(0x106, readmem(0x106)+1);
ram[0][readmem(0x106)]=n;
}
uint8_t pop()
{
uint8_t r = ram[0][readmem(0x106)];
writemem(0x106, readmem(0x106)-1);
return r;
}
void resetcpu()
{
int i;
struct tm tm_ = localtime();
tm *tm = &tm_;
memset(ram, 0, sizeof(ram));
memset(xram, 0, sizeof(xram));
memset(wram, 0, sizeof(wram));
memset(sfr, 0, sizeof(sfr));
sfr[0x06] = 0x7f;
sfr[0x4c] = 0xff;
sfr[0x01] = 0x02;
t0h = t0l = 0;
t1h = t1l = 0;
t0base = 0;
t0scale = 256;
ram[0][0x10] = tobcd(tm->tm_year/100+19);
ram[0][0x11] = tobcd(tm->tm_year%100);
ram[0][0x12] = tobcd(tm->tm_mon+1);
ram[0][0x13] = tobcd(tm->tm_mday);
ram[0][0x14] = tobcd(tm->tm_hour);
ram[0][0x15] = tobcd(tm->tm_min);
ram[0][0x17] = (tm->tm_year+1900)>>8;
ram[0][0x18] = (tm->tm_year+1900)&0xff;
ram[0][0x19] = tm->tm_mon+1;
ram[0][0x1a] = tm->tm_mday;
ram[0][0x1b] = tm->tm_hour;
ram[0][0x1c] = tm->tm_min;
ram[0][0x1d] = tm->tm_sec;
ram[0][0x31] = 0xff;
sfr[0x08] = 0x80;
writemem(0x10e, 0x81);
lcd_updated = 0;
lcdon = 0;
imask = 0;
intreq = 0;
if(hasbios) {
sfr[0x0d] = 0;
rom = bios;
pc = 0x1f0;
} else {
sfr[0x0d] = 1;
rom = flash;
pc = 0;
writemem(0x125, 2);
writemem(0x182, 0x10);
writemem(0x125, 0);
writemem(0x127, 0x80);
}
sound(-1);
}
uint8_t month_days()
{
uint8_t m = ram[0][0x19];
if(m==2) {
uint16_t y = ram[0][0x18] | (ram[0][0x17] << 8);
if(y&3)
return 28;
if(!(y%4000))
return 29;
if(!(y%1000))
return 28;
if(!(y%400))
return 29;
if(!(y%100))
return 28;
return 29;
} else return (m>7? ((m&1)? 30:31) : ((m&1)? 31:30));
}
int handle_fwcall(int pc)
{
switch(pc) {
case 0x100:
{
int i, a = ((ram[1][0x7d]<<16)|(ram[1][0x7e]<<8)|ram[1][0x7f])&0x1ffff;
if(a>=gamesize)
writemem(0x100, 0xff);
else {
writemem(0x100, 0x00);
// for(i=0; i<0x80; i++)
// flash[(a&~0xff)|((a+i)&0xff)] = ram[1][i+0x80];
//#ifdef __DC__
// if(!flash_written(a))
writemem(0x100, 0xff);
//#endif
}
/*
fprintf(stderr, "ROM write @ %05x:\n", a);
for(i=0; i<0x80; i++)
fprintf(stderr, " %02x", ram[1][i+0x80]);
fprintf(stderr, "\n");
*/
}
return 0x105;
case 0x110:
{
int i, a = ((ram[1][0x7d]<<16)|(ram[1][0x7e]<<8)|ram[1][0x7f])&0x1ffff;
int r = 0;
for(i=0; i<0x80; i++)
if((r = (ROM((a&~0xff)|((a+i)&0xff)) ^ ram[1][i+0x80])) != 0)
break;
writemem(0x100, r);
}
return 0x115;
case 0x120:
{
int i, a = ((ram[1][0x7d]<<16)|(ram[1][0x7e]<<8)|ram[1][0x7f])&0x1ffff;
for(i=0; i<0x80; i++)
ram[1][i+0x80] = ROM( (a&~0xff)|((a+i)&0xff) );
/*
fprintf(stderr, "ROM read @ %05x\n", a);
*/
}
return 0x125;
case 0x130:
if(!((ram[0][0x1e]^=1)&1))
if(++ram[0][0x1d]>=60) {
ram[0][0x1d] = 0;
if(++ram[0][0x1c]>=60) {
ram[0][0x1c] = 0;
if(++ram[0][0x1b]>=24) {
ram[0][0x1b] = 0;
if(++ram[0][0x1a]>month_days()) {
ram[0][0x1a] = 1;
if(++ram[0][0x19]>=13) {
ram[0][0x19] = 1;
if(ram[0][0x18]==0xff) {
ram[0][0x18]=0;
ram[0][0x17]++;
} else
ram[0][0x18]++;
}
}
}
}
}
return 0x139;
case 0x1f0:
return 0;
default:
// error_msg("Firmware entered at unknown vector %04x!", pc);
return 0;
}
}
uint16_t mcy, tick;
void run_cpu()
{
// struct timeval epoch;
// GETTIMEOFDAY(&epoch);
// for(;;) {
int r, s;
uint8_t c;
uint8_t cy = 1;
uint8_t i = ROM(pc);
/* * /
#ifdef TRACE
{
char tmp[20];
snprintf(tmp, 20, "%04x: %02x", pc, i );
Serial.println( tmp );
delay(50);
}
#endif
/* */
pc++;
pc &= 0xffff;
switch(i&0xf) {
case 0:
switch(i>>4) {
case 0:
break;
case 1:
cy = 4;
push((pc+2)&0xff);
push(((pc+2)&0xff00)>>8);
pc = 0xffff&(pc+1+ROM(pc)+((ROM((pc+1)&0xffff))<<8));
break;
case 2:
cy = 2;
push((pc+2)&0xff);
push(((pc+2)&0xff00)>>8);
pc = (ROM(pc)<<8)|ROM((pc+1)&0xffff);
break;
case 3:
cy = 7;
{
int r32 = readmem(0x102)*((readmem(0x100)<<8)|readmem(0x103));
writemem(0x101, (readmem(0x101)&0x7b)|(r>65535? 4:0));
writemem(0x103, r32&0xff);
writemem(0x100, (r32&0xff00)>>8);
writemem(0x102, (r32&0xff0000)>>16);
}
break;
case 4:
cy = 7;
r = readmem(0x102);
if(r) {
int v = (readmem(0x100)<<8)|readmem(0x103);
s = v%r;
r = v/r;
} else {
r = 0xff00|readmem(0x103);
s = 0;
}
writemem(0x101, (readmem(0x101)&0x7b)|(s? 0:4));
writemem(0x103, r&0xff);
writemem(0x100, (r&0xff00)>>8);
writemem(0x102, s);
break;
case 5:
cy = 2; /* ? */
writemem(0x100, ROM( 0x1ffff&(uint16_t(readmem(0x104))+(uint16_t(readmem(0x105))<<8)+
uint16_t((readmem(0x154))<<16)) ));
break;
case 6:
cy = 2;
push(readmem(ROM(pc++)));
pc &= 0xffff;
break;
case 7:
cy = 2;
writemem(ROM(pc++), pop());
pc &= 0xffff;
break;
case 8:
cy = 2;
if(readmem(0x100)==0)
pc = 0xffff&(pc+1+SGNEXT(ROM(pc)));
else {
pc++;
pc &= 0xffff;
}
break;
case 9:
cy = 2;
if(readmem(0x100)!=0)
pc = 0xffff&(pc+1+SGNEXT(ROM(pc)));
else {
pc++;
pc &= 0xffff;
}
break;
case 0xa:
cy = 2;
r = pop()<<8;
r |= pop();
pc = r;
break;
case 0xb:
cy = 2;
r = pop()<<8;
r |= pop();
pc = r;
--imask;
break;
case 0xc:
r = readmem(0x100);
writemem(0x100, (r>>1)|((r&1)<<7));
break;
case 0xd:
r = readmem(0x100);
s = readmem(0x101);
writemem(0x101, (s&0x7f)|((r&1)<<7));
writemem(0x100, (r>>1)|(s&0x80));
break;
case 0xe:
r = readmem(0x100);
writemem(0x100, (r<<1)|((r&0x80)>>7));
break;
case 0xf:
r = readmem(0x100);
s = readmem(0x101);
writemem(0x101, (s&0x7f)|(r&0x80));
writemem(0x100, (r<<1)|((s&0x80)>>7));
break;
}
break;
case 1:
switch(i>>4) {
case 0:
cy = 2;
pc = 0xffff&(pc+1+SGNEXT(ROM(pc)));
break;
case 1:
cy = 4;
pc = 0xffff&(pc+1+ROM(pc)+((ROM((pc+1)&0xffff))<<8));
break;
case 2:
cy = 2;
pc = (ROM(pc)<<8)|ROM((pc+1)&0xffff);
break;
case 3:
cy = 2;
r = readmem(0x100);
writemem(0x101, (readmem(0x101)&0x7f)|(r<ROM(pc)? 0x80:0));
s = (r == ROM(pc++));
pc &= 0xffff;
if(s)
pc = 0xffff&(pc+1+SGNEXT(ROM(pc)));
else {
pc++;
pc &= 0xffff;
}
break;
case 4:
cy = 2;
r = readmem(0x100);
writemem(0x101, (readmem(0x101)&0x7f)|(r<ROM(pc)? 0x80:0));
s = (r != ROM(pc++));
pc &= 0xffff;
if(s)
pc = 0xffff&(pc+1+SGNEXT(ROM(pc)));
else {
pc++;
pc &= 0xffff;
}
break;
case 5:
cy = 2; /* ? */
/*
if(!(readmem(0x154)&2))
flash[0x1ffff&(readmem(0x104)+(readmem(0x105)<<8)+
(readmem(0x154)<<16))] = readmem(0x100);
*/
break;
case 6:
cy = 2;
push(readmem(0x100|ROM(pc++)));
pc &= 0xffff;
break;
case 7:
cy = 2;
writemem(0x100|ROM(pc++), pop());
pc &= 0xffff;
break;
case 8:
r = readmem(0x100);
s = ROM(pc++);
pc &= 0xffff;
writemem(0x100, r+s);
writemem(0x101, (readmem(0x101)&0x3b)|(r+s>255? 0x80:0)|
((r&15)+(s&15)>15? 0x40:0)|((0x80&(~r^s)&(s^(r+s)))? 4:0));
break;
case 9:
r = readmem(0x100);
s = ROM(pc++);
pc &= 0xffff;
c = (readmem(0x101)&0x80)>>7;
writemem(0x100, r+s+c);
writemem(0x101, (readmem(0x101)&0x3b)|(r+s+c>255? 0x80:0)|
((r&15)+(s&15)+c>15? 0x40:0)|
((0x80&(~r^s)&(s^(r+s+c)))? 4:0));
break;
case 0xa:
/* FIXME: OV */
r = readmem(0x100);
s = ROM(pc++);
pc &= 0xffff;
writemem(0x100, r-s);
writemem(0x101, (readmem(0x101)&0x3b)|(r-s<0? 0x80:0)|
((r&15)-(s&15)<0? 0x40:0)|(0? 4:0));
break;
case 0xb:
/* FIXME: OV */
r = readmem(0x100);
s = ROM(pc++);
pc &= 0xffff;
c = (readmem(0x101)&0x80)>>7;
writemem(0x100, r-s-c);
writemem(0x101, (readmem(0x101)&0x3b)|(r-s-c<0? 0x80:0)|
((r&15)-(s&15)-c<0? 0x40:0)|(0? 4:0));
break;
case 0xc:
cy = 2;
writemem(0x100, ROM(0xffff&(readmem(0x100)+readmem(0x104)+
(readmem(0x105)<<8))));
break;
case 0xd:
writemem(0x100, readmem(0x100)|ROM(pc++));
pc &= 0xffff;
break;
case 0xe:
writemem(0x100, readmem(0x100)&ROM(pc++));
pc &= 0xffff;
break;
case 0xf:
writemem(0x100, readmem(0x100)^ROM(pc++));
pc &= 0xffff;
break;
}
break;
case 2:
case 3:
r = ((i&1)<<8)|ROM(pc++);
pc &= 0xffff;
switch(i>>4) {
case 0:
writemem(0x100, readmem(r));
break;
case 1:
writemem(r, readmem(0x100));
break;
case 2:
cy = 2;
writemem(r, ROM(pc++));
pc &= 0xffff;
break;
case 3:
cy = 2;
s = readmem(r);
r = readmem(0x100);
writemem(0x101, (readmem(0x101)&0x7f)|(r<s? 0x80:0));
if(r == s)
pc = 0xffff&(pc+1+SGNEXT(ROM(pc)));
else {
pc++;
pc &= 0xffff;
}
break;
case 4:
cy = 2;
s = readmem(r);
r = readmem(0x100);
writemem(0x101, (readmem(0x101)&0x7f)|(r<s? 0x80:0));
if(r != s)
pc = 0xffff&(pc+1+SGNEXT(ROM(pc)));
else {
pc++;
pc &= 0xffff;
}
break;
case 5:
cy = 2;
s = (readlatch(r)-1)&0xff;
writemem(r, s);
if(s != 0)
pc = 0xffff&(pc+1+SGNEXT(ROM(pc)));
else {
pc++;
pc &= 0xffff;
}
break;
case 6:
writemem(r, readlatch(r)+1);
break;
case 7:
writemem(r, readlatch(r)-1);
break;
case 8:
s = readmem(r);
r = readmem(0x100);
writemem(0x100, r+s);
writemem(0x101, (readmem(0x101)&0x3b)|(r+s>255? 0x80:0)|
((r&15)+(s&15)>15? 0x40:0)|((0x80&(~r^s)&(s^(r+s)))? 4:0));
break;
case 9:
s = readmem(r);
r = readmem(0x100);
c = (readmem(0x101)&0x80)>>7;
writemem(0x100, r+s+c);
writemem(0x101, (readmem(0x101)&0x3b)|(r+s+c>255? 0x80:0)|
((r&15)+(s&15)+c>15? 0x40:0)|
((0x80&(~r^s)&(s^(r+s+c)))? 4:0));
break;
case 0xa:
/* FIXME: OV */
s = readmem(r);
r = readmem(0x100);
writemem(0x100, r-s);
writemem(0x101, (readmem(0x101)&0x3b)|(r-s<0? 0x80:0)|
((r&15)-(s&15)<0? 0x40:0)|(0? 4:0));
break;
case 0xb:
/* FIXME: OV */
s = readmem(r);
r = readmem(0x100);
c = (readmem(0x101)&0x80)>>7;
writemem(0x100, r-s-c);
writemem(0x101, (readmem(0x101)&0x3b)|(r-s-c<0? 0x80:0)|
((r&15)-(s&15)-c<0? 0x40:0)|(0? 4:0));
break;
case 0xc:
s = readmem(r);
writemem(r, readmem(0x100));
writemem(0x100, s);
break;
case 0xd:
writemem(0x100, readmem(0x100)|readmem(r));
break;
case 0xe:
writemem(0x100, readmem(0x100)&readmem(r));
break;
case 0xf:
writemem(0x100, readmem(0x100)^readmem(r));
break;
}
break;
case 4:
case 5:
case 6:
case 7:
r = readmem((i&3)|((readmem(0x101)>>1)&0xc))|((i&2)? 0x100 : 0);
switch(i>>4) {
case 0:
writemem(0x100, readmem(r));
break;
case 1:
writemem(r, readmem(0x100));
break;
case 2:
writemem(r, ROM(pc++));
pc &= 0xffff;
break;
case 3:
cy = 2;
s = readmem(r);
r = ROM(pc++);
pc &= 0xffff;
writemem(0x101, (readmem(0x101)&0x7f)|(s<r? 0x80:0));
if(r == s)
pc = 0xffff&(pc+1+SGNEXT(ROM(pc)));
else {
pc++;
pc &= 0xffff;
}
break;
case 4:
cy = 2;
s = readmem(r);
r = ROM(pc++);
pc &= 0xffff;
writemem(0x101, (readmem(0x101)&0x7f)|(s<r? 0x80:0));
if(r != s)
pc = 0xffff&(pc+1+SGNEXT(ROM(pc)));
else {
pc++;
pc &= 0xffff;
}
break;
case 5:
cy = 2;
s = (readlatch(r)-1)&0xff;
writemem(r, s);
if(s != 0)
pc = 0xffff&(pc+1+SGNEXT(ROM(pc)));
else {
pc++;
pc &= 0xffff;
}
break;
case 6:
writemem(r, readlatch(r)+1);
break;
case 7:
writemem(r, readlatch(r)-1);
break;
case 8:
s = readmem(r);
r = readmem(0x100);
writemem(0x100, r+s);
writemem(0x101, (readmem(0x101)&0x3b)|(r+s>255? 0x80:0)|
((r&15)+(s&15)>15? 0x40:0)|((0x80&(~r^s)&(s^(r+s)))? 4:0));
break;
case 9:
s = readmem(r);
r = readmem(0x100);
c = (readmem(0x101)&0x80)>>7;
writemem(0x100, r+s+c);
writemem(0x101, (readmem(0x101)&0x3b)|(r+s+c>255? 0x80:0)|
((r&15)+(s&15)+c>15? 0x40:0)|
((0x80&(~r^s)&(s^(r+s+c)))? 4:0));
break;
case 0xa:
/* FIXME: OV */
s = readmem(r);
r = readmem(0x100);
writemem(0x100, r-s);
writemem(0x101, (readmem(0x101)&0x3b)|(r-s<0? 0x80:0)|
((r&15)-(s&15)<0? 0x40:0)|(0? 4:0));
break;
case 0xb:
/* FIXME: OV */
s = readmem(r);
r = readmem(0x100);
c = (readmem(0x101)&0x80)>>7;
writemem(0x100, r-s-c);
writemem(0x101, (readmem(0x101)&0x3b)|(r-s-c<0? 0x80:0)|
((r&15)-(s&15)-c<0? 0x40:0)|(0? 4:0));
break;
case 0xc:
s = readmem(r);
writemem(r, readmem(0x100));
writemem(0x100, s);
break;
case 0xd:
writemem(0x100, readmem(0x100)|readmem(r));
break;
case 0xe:
writemem(0x100, readmem(0x100)&readmem(r));
break;
case 0xf:
writemem(0x100, readmem(0x100)^readmem(r));
break;
}
break;
default:
switch(i&0xe0) {
case 0x00:
cy = 2;
r = ((i&7)<<8)|((i&0x10)<<7)|ROM(pc++);
push(pc&0xff);
push((pc&0xff00)>>8);
pc = (pc&0xf000)|r;
break;
case 0x20:
cy = 2;
r = ((i&7)<<8)|((i&0x10)<<7)|ROM(pc++);
pc = (pc&0xf000)|r;
break;
case 0x40:
cy = 2;
r = ((i&0x10)<<4)|ROM(pc++);
pc &= 0xffff;
if((s=readmem(r))&(1<<(i&7))) {
writemem(r, s & ~(1<<(i&7)));
pc = 0xffff&(pc+1+SGNEXT(ROM(pc)));
} else {
pc++;
pc &= 0xffff;
}
break;
case 0x60:
cy = 2;
r = ((i&0x10)<<4)|ROM(pc++);
pc &= 0xffff;
if(readmem(r)&(1<<(i&7)))
pc = 0xffff&(pc+1+SGNEXT(ROM(pc)));
else {
pc++;
pc &= 0xffff;
}
break;
case 0x80:
cy = 2;
r = ((i&0x10)<<4)|ROM(pc++);
pc &= 0xffff;
if(!(readmem(r)&(1<<(i&7))))
pc = 0xffff&(pc+1+SGNEXT(ROM(pc)));
else {
pc++;
pc &= 0xffff;
}
break;
case 0xa0:
r = ((i&0x10)<<4)|ROM(pc++);
pc &= 0xffff;
writemem(r, readlatch(r) ^ (1<<(i&7)));
break;
case 0xc0:
r = ((i&0x10)<<4)|ROM(pc++);
pc &= 0xffff;
writemem(r, readlatch(r) & ~(1<<(i&7)));
break;
case 0xe0:
r = ((i&0x10)<<4)|ROM(pc++);
pc &= 0xffff;
writemem(r, readlatch(r) | (1<<(i&7)));
break;
}
break;
}
mcy += cy;
if(mcy>=spd) {
// struct timeval now, t;
if(lcd_updated)
lcdrefresh();
/*
GETTIMEOFDAY(&now);
if((epoch.tv_usec += 10000)>=1000000) {
epoch.tv_usec -= 1000000;
epoch.tv_sec++;
}
if(now.tv_sec>epoch.tv_sec ||
(now.tv_sec == epoch.tv_sec && now.tv_usec >= epoch.tv_usec)) {
t.tv_usec = 0;
t.tv_sec = 0;
} else if(epoch.tv_usec<now.tv_usec) {
t.tv_usec = 1000000 + epoch.tv_usec - now.tv_usec;
t.tv_sec = epoch.tv_sec - now.tv_sec - 1;
} else {
t.tv_usec = epoch.tv_usec - now.tv_usec;
t.tv_sec = epoch.tv_sec - now.tv_sec;
}
waitforevents(&t);
*/
checkevents();
mcy -= spd;
++tick;
if(tick>=50) {
intreq |= 1<<3;
tick -= 50;
}
}
/* Timer 0 */
if(sfr[0x10] & 0xc0) {
int c0=0;
if((t0base+=cy) >= t0scale)
do
c0++;
while((t0base-=t0scale) >= t0scale);
if(c0)
if((sfr[0x10] & 0xe0) == 0xe0) {
t0l += c0;
if(t0l>=256) {
t0l -= 256;
if(++t0h >= 256) {
t0h -= 256;
if((t0l += sfr[0x13])>=256) {
t0l -= 256;
if((t0h += sfr[0x15])>=256) {
t0l = sfr[0x13];
t0h = sfr[0x15];
}
}
sfr[0x10] |= 10;
if(sfr[0x10]&4)
intreq |= 1<<4;
}
}
} else {
if(sfr[0x10] & 0x40) {
t0l += c0;
if(t0l>=256) {
t0l -= 256;
if((t0l += sfr[0x13])>=256)
t0l = sfr[0x13];
sfr[0x10] |= 2;
if(sfr[0x10]&1)
intreq |= 1<<2;
}
}
if(sfr[0x10] & 0x80) {
t0h += c0;
if(t0h>=256) {
t0h -= 256;
if((t0h += sfr[0x15])>=256)
t0h = sfr[0x15];
sfr[0x10] |= 8;
if(sfr[0x10]&4)
intreq |= 1<<4;
}
}
}
}
/* Timer 1 */
if(sfr[0x18] & 0xc0) {
if((sfr[0x18] & 0xe0) == 0xe0) {
t1l += cy;
if(t1l>=256) {
t1l -= 256;
if(++t1h >= 256) {
t1h -= 256;
if((t1l += sfr[0x1b])>=256) {
t1l -= 256;
if((t1h += sfr[0x1d])>=256) {
t1l = sfr[0x1b];
t1h = sfr[0x1d];
}
}
sfr[0x18] |= 10;
if(sfr[0x18]&4)
intreq |= 1<<5;
}
}
} else {
if(sfr[0x18] & 0x40) {
t1l += cy;
if(t1l>=256) {
t1l -= 256;
if((t1l += sfr[0x1b])>=256)
t1l = sfr[0x1b];
sfr[0x18] |= 2;
if(sfr[0x18]&1)
intreq |= 1<<5;
}
}
if(sfr[0x18] & 0x80) {
t1h += cy;
if(t1h>=256) {
t1h -= 256;
if((t1h += sfr[0x1d])>=256)
t1h = sfr[0x1d];
sfr[0x18] |= 8;
if(sfr[0x18]&4)
intreq |= 1<<5;
}
}
}
}
if(!(sfr[0x0d]&1) && !hasbios)
if(!(pc=handle_fwcall(pc)))
return;
else
sfr[0x0d]|=1;
if((sfr[0x4e]&3)==3 && !imask)
intreq |= 1<<9;
if(!intreq || imask || !(sfr[0x08]&0x80))
return;
for(r=0; r<10; r++)
if(intreq & (1<<r))
return;
intreq &= ~(1<<r);
push(pc&0xff);
push((pc&0xff00)>>8);
imask++;
pc = ((r&~1)<<3)+((r&1)?0xb:0x3);
// }
}
// SRC.INO ////////////////////////////////////////////////////////////////////
const uint8_t PROGMEM lcdBootProgram[] = {
// boot defaults are commented out but left here in case they
// might prove useful for reference
//
// Further reading: https://www.adafruit.com/datasheets/SSD1306.pdf
//
// Display Off
// 0xAE,
// Set Display Clock Divisor v = 0xF0
// default is 0x80
0xD5, 0xF0,
// Set Multiplex Ratio v = 0x3F
// 0xA8, 0x3F,
// Set Display Offset v = 0
// 0xD3, 0x00,
// Set Start Line (0)
// 0x40,
// Charge Pump Setting v = enable (0x14)
// default is disabled
0x8D, 0x14,
// Set Segment Re-map (A0) | (b0001)
// default is (b0000)
0xA1,
// Set COM Output Scan Direction
0xC8,
// Set COM Pins v
// 0xDA, 0x12,
// Set Contrast v = 0xCF
0x81, 0xCF,
// Set Precharge = 0xF1
0xD9, 0xF1,
// Set VCom Detect
// 0xDB, 0x40,
// Entire Display ON
// 0xA4,
// Set normal/inverse display
// 0xA6,
// Display On
0xAF,
// set display mode = horizontal addressing mode (0x00)
0x20, 0x00,
// set col address range
// 0x21, 0x00, COLUMN_ADDRESS_END,
// set page address range
// 0x22, 0x00, PAGE_ADDRESS_END
};
class Arduboy {
public:
void delayShort(uint16_t ms)
{
delay((unsigned long) ms);
}
void bootOLED(){
// reset the display
delayShort(5); // reset pin should be low here. let it stay low a while
bitSet(RST_PORT, RST_BIT); // set high to come out of reset
delayShort(5); // wait a while
// select the display (permanently, since nothing else is using SPI)
bitClear(CS_PORT, CS_BIT);
// run our customized boot-up command sequence against the
// OLED to initialize it properly for Arduboy
LCDCommandMode();
for (uint8_t i = 0; i < sizeof(lcdBootProgram); i++) {
SPItransfer(pgm_read_byte(lcdBootProgram + i));
}
LCDDataMode();
}
// Write to the SPI bus (MOSI pin)
void SPItransfer(uint8_t data)
{
SPDR = data;
/*
* The following NOP introduces a small delay that can prevent the wait
* loop form iterating when running at the maximum speed. This gives
* about 10% more speed, even if it seems counter-intuitive. At lower
* speeds it is unnoticed.
*/
asm volatile("nop");
while (!(SPSR & _BV(SPIF))) { } // wait
}
void LCDDataMode()
{
bitSet(DC_PORT, DC_BIT);
}
void LCDCommandMode()
{
bitClear(DC_PORT, DC_BIT);
}
void begin(){
// Port B INPUT_PULLUP or HIGH
PORTB |= _BV(RED_LED_BIT) | _BV(GREEN_LED_BIT) | _BV(BLUE_LED_BIT) |
_BV(B_BUTTON_BIT);
// Port B INPUT or LOW (none)
// Port B inputs
DDRB &= ~(_BV(B_BUTTON_BIT));
// Port B outputs
DDRB |= _BV(RED_LED_BIT) | _BV(GREEN_LED_BIT) | _BV(BLUE_LED_BIT) |
_BV(SPI_MOSI_BIT) | _BV(SPI_SCK_BIT);
// Port C
// Speaker: Not set here. Controlled by audio class
// Port D INPUT_PULLUP or HIGH
PORTD |= _BV(CS_BIT);
// Port D INPUT or LOW
PORTD &= ~(_BV(RST_BIT));
// Port D inputs (none)
// Port D outputs
DDRD |= _BV(RST_BIT) | _BV(CS_BIT) | _BV(DC_BIT);
// Port E INPUT_PULLUP or HIGH
PORTE |= _BV(A_BUTTON_BIT);
// Port E INPUT or LOW (none)
// Port E inputs
DDRE &= ~(_BV(A_BUTTON_BIT));
// Port E outputs (none)
// Port F INPUT_PULLUP or HIGH
PORTF |= _BV(LEFT_BUTTON_BIT) | _BV(RIGHT_BUTTON_BIT) |
_BV(UP_BUTTON_BIT) | _BV(DOWN_BUTTON_BIT);
// Port F INPUT or LOW
PORTF &= ~(_BV(RAND_SEED_IN_BIT));
// Port F inputs
DDRF &= ~(_BV(LEFT_BUTTON_BIT) | _BV(RIGHT_BUTTON_BIT) |
_BV(UP_BUTTON_BIT) | _BV(DOWN_BUTTON_BIT) |
_BV(RAND_SEED_IN_BIT));
// Port F outputs (none)
// master, mode 0, MSB first, CPU clock / 2 (8MHz)
SPCR = _BV(SPE) | _BV(MSTR);
SPSR = _BV(SPI2X);
bootOLED();
}
uint8_t buttonsState()
{
uint8_t buttons;
// down, up, left right
buttons = ((~PINF) & B11110000);
// A (left)
buttons = buttons | (((~PINE) & B01000000) >> 3);
// B (right)
buttons = buttons | (((~PINB) & B00010000) >> 2);
return buttons;
}
} arduboy;
void setup() {
arduboy.begin();
arduboy.LCDCommandMode();
arduboy.SPItransfer(SSD1306_COLUMNADDR);
arduboy.SPItransfer(16); // Column start address (0 = reset)
arduboy.SPItransfer(16+96-1); // Column end address (127 = reset)
arduboy.SPItransfer(SSD1306_PAGEADDR);
arduboy.SPItransfer(0); // Page start address (0 = reset)
arduboy.SPItransfer(7); // Page end address
arduboy.LCDDataMode();
resetcpu();
}
void loop() {
run_cpu();
}
// void digitalWrite(uint8_t pin, uint8_t val){}
// 0x00: Black background, white pixels (inverted).
// 0xFF: White BG, black pixels (like the original)
const uint8_t TOG = 0;
uint8_t keyState;
void checkevents()
{
uint8_t bit = 1;
uint8_t nks = arduboy.buttonsState();
if( nks & UP_BUTTON ){ // UP
if( !(keyState&bit) ) {
keyState |= bit;
keypress(0);
}
}else if( keyState & bit ){
keyState &= ~bit;
keyrelease(0);
}
bit <<= 1;
if( nks & DOWN_BUTTON ){ // UP
if( !(keyState&bit) ) {
keyState |= bit;
keypress(1);
}
}else if( keyState & bit ){
keyState &= ~bit;
keyrelease(1);
}
bit <<= 1;
if( nks & LEFT_BUTTON ){ // UP
if( !(keyState&bit) ) {
keyState |= bit;
keypress(2);
}
}else if( keyState & bit ){
keyState &= ~bit;
keyrelease(2);
}
bit <<= 1;
if( nks & RIGHT_BUTTON ){ // UP
if( !(keyState&bit) ) {
keyState |= bit;
keypress(3);
}
}else if( keyState & bit ){
keyState &= ~bit;
keyrelease(3);
}
bit <<= 1;
if( nks & A_BUTTON ){ // UP
if( !(keyState&bit) ) {
keyState |= bit;
keypress(4);
}
}else if( keyState & bit ){
keyState &= ~bit;
keyrelease(4);
}
bit <<= 1;
if( nks & B_BUTTON ){ // UP
if( !(keyState&bit) ) {
keyState |= bit;
keypress(5);
}
}else if( keyState & bit ){
keyState &= ~bit;
keyrelease(5);
}
bit <<= 1;
}
void lcdrefresh(){
uint8_t buf[] = {
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0
}, ty;
uint8_t y, x, b=0, p=0;
p = sfr[0x22];
if(p>=0x83)
p -= 0x83;
b = (p>>6);
p = (p&0x3f)*2;
for(y=0; y<32; y++) {
ty = y & 3;
uint8_t ty2 = ty << 1;
for(x=0; x<48; ) {
uint8_t value = xram[b][p++];
if(!lcdon)
value = 0;
buf[x++] |= ((value>>7)&1) << ty2;
buf[x++] |= ((value>>6)&1) << ty2;
buf[x++] |= ((value>>5)&1) << ty2;
buf[x++] |= ((value>>4)&1) << ty2;
buf[x++] |= ((value>>3)&1) << ty2;
buf[x++] |= ((value>>2)&1) << ty2;
buf[x++] |= ((value>>1)&1) << ty2;
buf[x++] |= ((value )&1) << ty2;
if((p&0xf)>=12)
p+=4;
if(p>=128) {
b++;
p-=128;
}
if(b==2 && p>=6) {
b = 0;
p -= 6;
}
}
if( ty == 3 ){
for( uint8_t j=0; j<6; j++ ) {
// Wire.beginTransmission( I2C_ADDR );
// WIRE_WRITE(0x40);
for (uint8_t t=0; t<8; t++) {
uint8_t &col = buf[(j<<3)|t];
col |= col << 1;
col ^= TOG;
arduboy.SPItransfer( col );
arduboy.SPItransfer( col );
col = 0;
}
// Wire.endTransmission();
}
}
}
lcd_updated = 0;
}
const unsigned char bios[] = {0};
const unsigned char flash[] PROGMEM = {
/*[0]*/ 0x21, 0x4, 0x80, 0x28, 0x4f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x28, 0x4f, 0x0, 0x0, 0x0,
/*[10]*/ 0x0, 0x0, 0x0, 0x28, 0x4f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x29, 0x30, 0x0, 0x0, 0x0,
/*[20]*/ 0x0, 0x0, 0x0, 0x28, 0x4f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x28, 0x4f, 0x0, 0x0, 0x0,
/*[30]*/ 0x0, 0x0, 0x0, 0x28, 0x4f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x28, 0x4f, 0x0, 0x0, 0x0,
/*[40]*/ 0x0, 0x0, 0x0, 0x28, 0x4f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd8, 0x4e, 0xd9, 0x4e, 0xb0,
/*[50]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[60]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[70]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[80]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[90]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[a0]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[b0]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[c0]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[d0]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[e0]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[f0]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[100]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[110]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[120]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[130]*/ 0x61, 0x8, 0xdf, 0x8, 0xb8, 0xd, 0x21, 0x1, 0x30, 0x71, 0x8, 0xb0, 0x0, 0x0, 0x0, 0x0,
/*[140]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[150]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[160]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[170]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[180]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[190]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[1a0]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[1b0]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[1c0]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[1d0]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[1e0]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[1f0]*/ 0xb8, 0xd, 0x21, 0x1, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[200]*/ 0x2d, 0x49, 0x2d, 0x44, 0x4f, 0x2d, 0x2d, 0x55, 0x2d, 0x44, 0x4f, 0x2d, 0x20, 0x20, 0x20, 0x20,
/*[210]*/ 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x6a, 0x75, 0x6d, 0x70, 0x73,
/*[220]*/ 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x63, 0x6f, 0x2e, 0x75, 0x6b, 0x20, 0x20, 0x20, 0x20,
/*[230]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[240]*/ 0x1, 0x0, 0xa, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[250]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[260]*/ 0xfb, 0xff, 0xf7, 0xff, 0xf0, 0xff, 0xd0, 0xfd, 0xa0, 0xfa, 0x90, 0xf9, 0x13, 0xf7, 0x10, 0xf4,
/*[270]*/ 0x21, 0xf3, 0x74, 0xf6, 0x74, 0xf3, 0x86, 0xf3, 0x75, 0xf0, 0xa8, 0xf1, 0xca, 0xf6, 0xff, 0xff,
/*[280]*/ 0x0, 0x0, 0x0, 0x0, 0x10, 0x0, 0x1, 0x11, 0x11, 0x12, 0x22, 0x22, 0x33, 0x44, 0x44, 0x44,
/*[290]*/ 0x0, 0x0, 0x0, 0x0, 0x10, 0x0, 0x11, 0x11, 0x11, 0x22, 0x22, 0x23, 0x34, 0x44, 0x44, 0x45,
/*[2a0]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x11, 0x11, 0x12, 0x22, 0x23, 0x33, 0x44, 0x44, 0x44, 0x55,
/*[2b0]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x11, 0x11, 0x11, 0x22, 0x22, 0x33, 0x44, 0x44, 0x44, 0x45, 0x55,
/*[2c0]*/ 0x0, 0x66, 0x66, 0x66, 0x2, 0x11, 0x11, 0x16, 0x66, 0x77, 0x74, 0x44, 0x47, 0x88, 0x89, 0x55,
/*[2d0]*/ 0x0, 0x66, 0x66, 0x62, 0x2, 0x11, 0x11, 0x26, 0x77, 0x77, 0x77, 0x44, 0x78, 0x88, 0x99, 0x95,
/*[2e0]*/ 0x0, 0x0, 0x66, 0x12, 0x2, 0x11, 0x12, 0x22, 0x77, 0x34, 0x77, 0x44, 0x88, 0x55, 0x59, 0xa5,
/*[2f0]*/ 0x0, 0x0, 0x66, 0x12, 0x3, 0x12, 0x22, 0x22, 0x77, 0x44, 0x77, 0x44, 0x88, 0x55, 0x5a, 0xa5,
/*[300]*/ 0x0, 0x0, 0x66, 0x13, 0x3, 0x22, 0x22, 0x23, 0x77, 0x44, 0x78, 0x45, 0x89, 0x55, 0x5a, 0xa5,
/*[310]*/ 0x0, 0x1, 0x66, 0x13, 0x4, 0x22, 0x23, 0x33, 0x77, 0x44, 0x88, 0x55, 0x99, 0x55, 0x5a, 0xb5,
/*[320]*/ 0x0, 0x66, 0x23, 0x34, 0x4, 0x43, 0x33, 0x37, 0x77, 0x78, 0x88, 0x55, 0x9a, 0xaa, 0xab, 0xb5,
/*[330]*/ 0x11, 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x11, 0x11, 0x11, 0x11, 0x11, 0x22, 0x22, 0x22,
/*[340]*/ 0x11, 0x22, 0x23, 0x34, 0x24, 0x43, 0x33, 0x34, 0x44, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
/*[350]*/ 0x11, 0x11, 0x12, 0x23, 0x3, 0x34, 0x44, 0x44, 0x45, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
/*[360]*/ 0x11, 0x12, 0x22, 0x23, 0x3, 0x44, 0x44, 0x44, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
/*[370]*/ 0x11, 0x22, 0x22, 0x23, 0x3, 0x44, 0x44, 0x45, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
/*[380]*/ 0x66, 0x66, 0x77, 0x77, 0x7, 0x77, 0x88, 0x89, 0x99, 0xaa, 0xaa, 0xbb, 0xcc, 0xcc, 0xcc, 0xdd,
/*[390]*/ 0x66, 0x67, 0x77, 0x77, 0x7, 0x78, 0x88, 0x99, 0x9a, 0xaa, 0xab, 0xbc, 0xcc, 0xcc, 0xcd, 0xdd,
/*[3a0]*/ 0x66, 0x77, 0x77, 0x77, 0x7, 0x88, 0x89, 0x99, 0xaa, 0xab, 0xbb, 0xcc, 0xcc, 0xcc, 0xdd, 0xdd,
/*[3b0]*/ 0x72, 0x37, 0x77, 0x47, 0x7, 0x88, 0x99, 0x55, 0x55, 0x55, 0xcc, 0xcc, 0x55, 0x5b, 0xbd, 0xdd,
/*[3c0]*/ 0x73, 0x37, 0x77, 0x47, 0x7, 0x89, 0x99, 0x55, 0x55, 0x55, 0x5c, 0xc5, 0x55, 0xbb, 0xbb, 0xdd,
/*[3d0]*/ 0x73, 0x47, 0x77, 0x44, 0x8, 0x99, 0x9a, 0xa5, 0x5b, 0xc5, 0x5c, 0xc5, 0x5d, 0xdd, 0xbb, 0xdd,
/*[3e0]*/ 0x74, 0x47, 0x78, 0x45, 0x9, 0x9a, 0xaa, 0xa5, 0x5c, 0xc5, 0x5c, 0xc5, 0xbd, 0xdd, 0xbb, 0xdd,
/*[3f0]*/ 0x74, 0x47, 0x88, 0x55, 0x19, 0xaa, 0xaa, 0xb5, 0x5c, 0xc5, 0x5c, 0xdb, 0xbd, 0xdd, 0xb9, 0xde,
/*[400]*/ 0x74, 0x48, 0x88, 0x55, 0x1a, 0xaa, 0xab, 0xb5, 0x5c, 0xc5, 0x5d, 0xdb, 0xbd, 0xdd, 0x99, 0xee,
/*[410]*/ 0x74, 0x44, 0x55, 0x55, 0x1a, 0xab, 0xbb, 0x55, 0x55, 0x55, 0xbd, 0xdb, 0xbb, 0xb9, 0x99, 0xee,
/*[420]*/ 0x78, 0x55, 0x55, 0x5a, 0x1a, 0xbb, 0xcc, 0x55, 0x55, 0x5b, 0xdd, 0xdd, 0xbb, 0x99, 0x9e, 0xee,
/*[430]*/ 0x88, 0x89, 0x99, 0xaa, 0x1b, 0xbc, 0xcc, 0xcc, 0xcc, 0xdd, 0xdd, 0xdd, 0xdd, 0xee, 0xee, 0xee,
/*[440]*/ 0x88, 0x99, 0x9a, 0xaa, 0x1b, 0xcc, 0xcc, 0xcc, 0xdd, 0xdd, 0xdd, 0xdd, 0xde, 0xee, 0xee, 0xee,
/*[450]*/ 0x89, 0x9a, 0xaa, 0xab, 0x2c, 0xcc, 0xcc, 0xcd, 0xdd, 0xdd, 0xdd, 0xdd, 0xee, 0xee, 0xee, 0xee,
/*[460]*/ 0x99, 0xaa, 0xaa, 0xbb, 0x2c, 0xcc, 0xcc, 0xdd, 0xdd, 0xdd, 0xdd, 0xde, 0xee, 0xee, 0xee, 0xee,
/*[470]*/ 0x9a, 0xaa, 0xab, 0xbc, 0x2c, 0xcc, 0xcd, 0xdd, 0xdd, 0xdd, 0xde, 0xee, 0xee, 0xee, 0xee, 0xee,
/*[480]*/ 0x23, 0xe, 0xa1, 0x23, 0x20, 0x9, 0x23, 0x27, 0x80, 0xd8, 0x4e, 0xdf, 0x44, 0x23, 0x4c, 0xff,
/*[490]*/ 0x22, 0x29, 0x97, 0x22, 0x2a, 0x1, 0x22, 0x2b, 0x8, 0xe, 0xa, 0x19, 0x4f, 0x22, 0x31, 0x0,
/*[4a0]*/ 0x22, 0x33, 0x0, 0xf, 0xed, 0xc, 0xfe, 0xe, 0x48, 0x22, 0x34, 0x0, 0x22, 0x32, 0x1, 0x23,
/*[4b0]*/ 0x4, 0x7a, 0x23, 0x5, 0x14, 0x1a, 0xb6, 0xf, 0x21, 0xd, 0xb9, 0x22, 0x1, 0x35, 0x2, 0x1,
/*[4c0]*/ 0x82, 0x34, 0x12, 0x1, 0x5, 0x12, 0x28, 0xd, 0x25, 0x90, 0x14, 0xc, 0xfe, 0x62, 0x34, 0x2,
/*[4d0]*/ 0x33, 0x42, 0x34, 0xd8, 0x22, 0x32, 0x2, 0xf, 0x21, 0xd, 0xb9, 0x19, 0x6a, 0x1, 0xc8, 0xc,
/*[4e0]*/ 0xfe, 0x22, 0x32, 0x3, 0x23, 0x4, 0x7a, 0x23, 0x5, 0x14, 0x1a, 0xb6, 0xf, 0x21, 0xd, 0xb9,
/*[4f0]*/ 0x19, 0x6a, 0x19, 0x6a, 0x19, 0x6a, 0x19, 0x6a, 0x19, 0x9a, 0x18, 0x69, 0x1, 0x9f, 0x61, 0x0,
/*[500]*/ 0xd9, 0x1, 0x2, 0x1d, 0xf9, 0x1, 0x98, 0x0, 0x4, 0xff, 0x1, 0x1, 0x2, 0xdf, 0x1, 0x2,
/*[510]*/ 0x29, 0xf0, 0x12, 0x29, 0x71, 0x0, 0xa0, 0x61, 0x0, 0x5, 0xc0, 0x41, 0x80, 0x3, 0x23, 0x0,
/*[520]*/ 0x8, 0x15, 0x71, 0x0, 0xa0, 0x20, 0x18, 0xa8, 0x98, 0x0, 0xb, 0x99, 0x0, 0x26, 0x9a, 0x0,
/*[530]*/ 0x41, 0x9b, 0x0, 0x5e, 0x1, 0x5a, 0x22, 0x32, 0x1, 0x23, 0x4, 0xba, 0x23, 0x5, 0x16, 0x1a,
/*[540]*/ 0xb6, 0xf, 0x21, 0xd, 0xb9, 0x20, 0x18, 0xa8, 0x98, 0x0, 0xfa, 0x2, 0x28, 0x41, 0x0, 0x60,
/*[550]*/ 0xf3, 0x0, 0x1, 0x64, 0x22, 0x32, 0x1, 0x23, 0x4, 0x7a, 0x23, 0x5, 0x17, 0x1a, 0xb6, 0xf,
/*[560]*/ 0x21, 0xd, 0xb9, 0x20, 0x18, 0xa8, 0x99, 0x0, 0xfa, 0x2, 0x28, 0x41, 0x1, 0x42, 0xf3, 0x0,
/*[570]*/ 0x1, 0x46, 0x22, 0x32, 0x1, 0x23, 0x4, 0x3a, 0x23, 0x5, 0x15, 0x1a, 0xb6, 0xf, 0x21, 0xd,
/*[580]*/ 0xb9, 0x20, 0x18, 0xa8, 0x9a, 0x0, 0xfa, 0x2, 0x28, 0x41, 0x2, 0x24, 0xf3, 0x0, 0x1, 0x28,
/*[590]*/ 0x1, 0x23, 0x22, 0x32, 0x1, 0x23, 0x4, 0xfa, 0x23, 0x5, 0x15, 0x1a, 0xb6, 0xf, 0x21, 0xd,
/*[5a0]*/ 0xb9, 0x20, 0x18, 0xa8, 0x9b, 0x0, 0xfa, 0x2, 0x28, 0x41, 0x3, 0x4, 0xf3, 0x0, 0x1, 0x8,
/*[5b0]*/ 0x23, 0x0, 0xff, 0x1, 0x3, 0x11, 0x6e, 0xff, 0xa0, 0x18, 0xe0, 0xdd, 0xe, 0x61, 0x0, 0x61,
/*[5c0]*/ 0x2, 0x61, 0x3, 0x60, 0x2, 0x61, 0x25, 0x61, 0x63, 0x61, 0x64, 0x61, 0x65, 0xfc, 0x63, 0x23,
/*[5d0]*/ 0x64, 0x80, 0x22, 0x2, 0x80, 0xf3, 0x0, 0x13, 0x25, 0xd8, 0x65, 0x3, 0x66, 0x16, 0x3, 0x64,
/*[5e0]*/ 0x90, 0x11, 0x22, 0x2, 0x80, 0x23, 0x64, 0x80, 0xf8, 0x65, 0x98, 0x25, 0x2, 0x1, 0x8, 0xf8,
/*[5f0]*/ 0x25, 0x1, 0xe8, 0x62, 0x2, 0x1, 0xe4, 0x71, 0x65, 0x71, 0x64, 0x71, 0x63, 0x71, 0x25, 0x70,
/*[600]*/ 0x2, 0x71, 0x3, 0x71, 0x2, 0x71, 0x0, 0xfd, 0xe, 0xa0, 0x18, 0xe0, 0xdd, 0xe, 0x61, 0x0,
/*[610]*/ 0x61, 0x2, 0x61, 0x3, 0xfc, 0x63, 0x23, 0x64, 0x80, 0xf3, 0x0, 0x13, 0x65, 0x13, 0x2, 0x23,
/*[620]*/ 0x3, 0x81, 0x2, 0x31, 0x13, 0x66, 0x73, 0x3, 0x3, 0x3, 0x90, 0xf, 0x23, 0x3, 0x81, 0x23,
/*[630]*/ 0x64, 0x80, 0xf8, 0x65, 0x63, 0x2, 0x3, 0x2, 0x31, 0x2, 0x2, 0x1, 0xe5, 0x71, 0x3, 0x71,
/*[640]*/ 0x2, 0x71, 0x0, 0xdc, 0x63, 0xfd, 0xe, 0xa0, 0x62, 0x33, 0xf, 0x6e, 0xe, 0x4f, 0xa0, 0x61,
/*[650]*/ 0x0, 0x60, 0x1, 0x22, 0x1, 0x35, 0x22, 0x32, 0x0, 0x22, 0x34, 0x0, 0x23, 0x4, 0x7a, 0x23,
/*[660]*/ 0x5, 0x14, 0x1a, 0xb6, 0xf, 0x21, 0xd, 0xb9, 0x22, 0x1, 0x35, 0x2, 0x1, 0x82, 0x34, 0x12,
/*[670]*/ 0x1, 0x5, 0x31, 0x0, 0xb, 0x31, 0x1, 0x1c, 0x31, 0x2, 0x23, 0x31, 0x3, 0xc, 0x1, 0x35,
/*[680]*/ 0x23, 0x4, 0xba, 0x23, 0x5, 0x16, 0x1a, 0xb6, 0x1, 0x1e, 0x23, 0x4, 0xfa, 0x23, 0x5, 0x15,
/*[690]*/ 0x1a, 0xb6, 0x1, 0x14, 0x23, 0x4, 0x7a, 0x23, 0x5, 0x17, 0x1a, 0xb6, 0x1, 0xa, 0x23, 0x4,
/*[6a0]*/ 0x3a, 0x23, 0x5, 0x15, 0x1a, 0xb6, 0x1, 0x0, 0xf, 0x21, 0xd, 0xb9, 0x19, 0x6a, 0x62, 0x34,
/*[6b0]*/ 0x2, 0x33, 0x42, 0x34, 0xa7, 0x70, 0x1, 0x71, 0x0, 0xa0, 0x18, 0xe0, 0xdd, 0xe, 0x61, 0x0,
/*[6c0]*/ 0x80, 0x5, 0x22, 0x27, 0x14, 0x1, 0x3, 0x22, 0x27, 0x2, 0x22, 0x26, 0x0, 0x2, 0x27, 0x19,
/*[6d0]*/ 0x56, 0x13, 0x64, 0x2, 0x26, 0xc1, 0x13, 0x2, 0x23, 0x0, 0x20, 0x18, 0xa8, 0x83, 0x64, 0x13,
/*[6e0]*/ 0x64, 0x3, 0x2, 0x13, 0x66, 0x3, 0x3, 0x80, 0x6, 0x63, 0x64, 0xf3, 0x66, 0x13, 0x66, 0x62,
/*[6f0]*/ 0x26, 0x2, 0x27, 0x19, 0x56, 0x13, 0x64, 0x2, 0x26, 0xc1, 0x13, 0x2, 0x23, 0x0, 0x28, 0x18,
/*[700]*/ 0xa8, 0x83, 0x64, 0x13, 0x64, 0x3, 0x2, 0x13, 0x66, 0x3, 0x3, 0x80, 0x6, 0x63, 0x64, 0xf3,
/*[710]*/ 0x66, 0x13, 0x66, 0x62, 0x27, 0x62, 0x26, 0x2, 0x26, 0x41, 0x16, 0xb1, 0x71, 0x0, 0xfd, 0xe,
/*[720]*/ 0xa0, 0x18, 0xe0, 0x2, 0x32, 0x41, 0x0, 0xd, 0x23, 0x0, 0x0, 0x23, 0x4, 0x3a, 0x23, 0x5,
/*[730]*/ 0x18, 0xe, 0xba, 0x1, 0x38, 0x23, 0x0, 0x0, 0x23, 0x4, 0x50, 0x23, 0x5, 0x18, 0xe, 0xba,
/*[740]*/ 0x2, 0x32, 0x41, 0x1, 0xd, 0x23, 0x0, 0x1, 0x23, 0x4, 0x66, 0x23, 0x5, 0x18, 0xe, 0xba,
/*[750]*/ 0x1, 0x1b, 0x41, 0x2, 0xd, 0x23, 0x0, 0x2, 0x23, 0x4, 0x7c, 0x23, 0x5, 0x18, 0xe, 0xba,
/*[760]*/ 0x1, 0xb, 0x23, 0x0, 0x2, 0x23, 0x4, 0x92, 0x23, 0x5, 0x18, 0xe, 0xba, 0xa0, 0x18, 0xe0,
/*[770]*/ 0x2, 0x2a, 0x41, 0x1, 0xc, 0x2, 0x29, 0xe2, 0x2a, 0x42, 0x2a, 0x5, 0x23, 0x2, 0x0, 0x1,
/*[780]*/ 0x54, 0x41, 0x2, 0xc, 0x2, 0x29, 0xe2, 0x2a, 0x42, 0x2a, 0x5, 0x23, 0x2, 0x1, 0x1, 0x45,
/*[790]*/ 0x41, 0x4, 0xc, 0x2, 0x29, 0xe2, 0x2a, 0x42, 0x2a, 0x5, 0x23, 0x2, 0x2, 0x1, 0x36, 0x41,
/*[7a0]*/ 0x8, 0xc, 0x2, 0x29, 0xe2, 0x2a, 0x42, 0x2a, 0x5, 0x23, 0x2, 0x3, 0x1, 0x27, 0x22, 0x1,
/*[7b0]*/ 0x2b, 0xd, 0x17, 0x2, 0x2b, 0x41, 0x8, 0x5, 0x23, 0x2, 0x0, 0x1, 0x18, 0x41, 0x4, 0x5,
/*[7c0]*/ 0x23, 0x2, 0x1, 0x1, 0x10, 0x41, 0x2, 0x5, 0x23, 0x2, 0x2, 0x1, 0x8, 0x41, 0x1, 0x5,
/*[7d0]*/ 0x23, 0x2, 0x3, 0x1, 0x0, 0x22, 0x1, 0x35, 0x2, 0x1, 0x82, 0x33, 0x73, 0x0, 0x12, 0x1,
/*[7e0]*/ 0xc3, 0x2, 0x15, 0x62, 0x1, 0x25, 0x4, 0x22, 0x1, 0x2a, 0xd, 0x17, 0xa0, 0x20, 0x18, 0xa8,
/*[7f0]*/ 0x9c, 0x0, 0xfa, 0x23, 0x4, 0x7e, 0x23, 0x5, 0xb, 0x1a, 0xb6, 0xd, 0xb9, 0x19, 0x6a, 0x19,
/*[800]*/ 0x6a, 0x19, 0x6a, 0x19, 0x6a, 0x23, 0x2, 0x5, 0x23, 0x4, 0xfa, 0x23, 0x5, 0xa, 0x1a, 0x4d,
/*[810]*/ 0xd, 0xb9, 0x19, 0x6a, 0x20, 0x18, 0xa8, 0x9c, 0x0, 0x4e, 0x23, 0x4, 0x7e, 0x23, 0x5, 0xb,
/*[820]*/ 0x1a, 0xb6, 0xd, 0xb9, 0x19, 0x6a, 0x20, 0x18, 0xa8, 0x9c, 0x0, 0x3c, 0x73, 0x2, 0x3, 0x2,
/*[830]*/ 0x80, 0x4, 0x1, 0xd4, 0x1, 0xb7, 0x23, 0x4, 0x7e, 0x23, 0x5, 0xb, 0x22, 0x2d, 0x0, 0x19,
/*[840]*/ 0x7e, 0x20, 0x18, 0xa8, 0x9c, 0x0, 0x21, 0x1a, 0xb6, 0xd, 0xb9, 0x3, 0x4, 0x81, 0x6, 0x13,
/*[850]*/ 0x4, 0x3, 0x5, 0x91, 0x0, 0x13, 0x5, 0x62, 0x2d, 0x2, 0x2d, 0x41, 0xad, 0xe1, 0x19, 0x6a,
/*[860]*/ 0x19, 0x6a, 0x19, 0x6a, 0x19, 0x6a, 0x1, 0xcc, 0xa0, 0x23, 0x4, 0x46, 0x23, 0x5, 0x10, 0x1a,
/*[870]*/ 0xb6, 0xd, 0xb9, 0x19, 0x6a, 0x19, 0x6a, 0x19, 0x6a, 0x19, 0x6a, 0x20, 0x18, 0xa8, 0x7c, 0x0,
/*[880]*/ 0xfa, 0x23, 0x4, 0xfa, 0x23, 0x5, 0xa, 0x1a, 0x4d, 0xd, 0xb9, 0x19, 0x6a, 0x20, 0x18, 0xa8,
/*[890]*/ 0x9c, 0x0, 0x14, 0x23, 0x4, 0x46, 0x23, 0x5, 0x10, 0x1a, 0xb6, 0xd, 0xb9, 0x19, 0x6a, 0x20,
/*[8a0]*/ 0x18, 0xa8, 0x9c, 0x0, 0x2, 0x1, 0xda, 0xa0, 0x61, 0x2, 0x13, 0x2, 0xdf, 0x1, 0xd0, 0xdf,
/*[8b0]*/ 0x1, 0xd0, 0xdf, 0x1, 0xd0, 0x13, 0x3, 0xdf, 0x1, 0xf0, 0xdf, 0x1, 0xf0, 0xdf, 0x1, 0xf0,
/*[8c0]*/ 0xc3, 0x2, 0xa3, 0x2, 0x71, 0x2, 0x61, 0x3, 0x23, 0x3, 0x0, 0x80, 0x10, 0xc3, 0x2, 0xdf,
/*[8d0]*/ 0x1, 0xd0, 0xc3, 0x3, 0xd0, 0xc3, 0x3, 0xc3, 0x2, 0x73, 0x0, 0x1, 0xee, 0x71, 0x0, 0xa0,
/*[8e0]*/ 0x61, 0x0, 0x61, 0x2, 0x3, 0x4c, 0x32, 0x55, 0x24, 0xc3, 0x2, 0x22, 0x1, 0x55, 0x2, 0x25,
/*[8f0]*/ 0x31, 0x64, 0x1a, 0x62, 0x25, 0x2, 0x1, 0x82, 0x25, 0x12, 0x1, 0x2, 0x55, 0x31, 0xff, 0x7,
/*[900]*/ 0x15, 0xc3, 0x2, 0x12, 0x55, 0x1, 0x6, 0xc3, 0x2, 0x12, 0x55, 0x72, 0x25, 0x71, 0x2, 0x71,
/*[910]*/ 0x0, 0xa0, 0x18, 0xe0, 0x2, 0x25, 0x31, 0x0, 0xb, 0x31, 0x1, 0xc, 0x22, 0x1, 0x56, 0x5,
/*[920]*/ 0x19, 0x2f, 0x1, 0xa, 0x2, 0x55, 0x1, 0x6, 0x22, 0x1, 0x56, 0x5, 0x72, 0x25, 0xa0, 0x61,
/*[930]*/ 0x0, 0x22, 0x27, 0x1, 0x2, 0x27, 0x32, 0x25, 0x11, 0x62, 0x27, 0x22, 0x1, 0x55, 0x2, 0x1,
/*[940]*/ 0x82, 0x27, 0x12, 0x1, 0x5, 0x72, 0x1, 0x15, 0x1, 0xea, 0x72, 0x25, 0x71, 0x0, 0xa0, 0x22,
/*[950]*/ 0x55, 0xff, 0x22, 0x25, 0x0, 0xa0, 0xe0, 0xe0, 0xe0, 0x9b, 0x0, 0x2, 0xa1, 0x2, 0x23, 0x65,
/*[960]*/ 0x0, 0x9f, 0x0, 0x3, 0x23, 0x65, 0xff, 0xd1, 0x80, 0xa0, 0x61, 0x0, 0x23, 0x0, 0x1, 0x19,
/*[970]*/ 0x74, 0x71, 0x0, 0xa0, 0x61, 0x2, 0x19, 0x7e, 0x53, 0x0, 0xfb, 0x71, 0x2, 0xa0, 0x61, 0x0,
/*[980]*/ 0x23, 0x0, 0xff, 0x53, 0x0, 0xfd, 0x18, 0xe0, 0x71, 0x0, 0xa0, 0x23, 0x3, 0x0, 0xa3, 0x2,
/*[990]*/ 0x7f, 0x1, 0x4, 0x63, 0x3, 0x1, 0xf7, 0x83, 0x2, 0xa0, 0xe, 0xa, 0x19, 0xcb, 0xd, 0xb9,
/*[9a0]*/ 0x19, 0x6a, 0x19, 0x6a, 0x19, 0x6a, 0x19, 0x6a, 0x23, 0x4, 0xfa, 0x23, 0x5, 0xa, 0x1a, 0x4d,
/*[9b0]*/ 0xd, 0xb9, 0x19, 0x6a, 0x20, 0x18, 0xa8, 0x9c, 0x0, 0x10, 0xe, 0xa, 0x19, 0xcb, 0xd, 0xb9,
/*[9c0]*/ 0x19, 0x6a, 0x20, 0x18, 0xa8, 0x9c, 0x0, 0x2, 0x1, 0xde, 0xa0, 0x2, 0x33, 0x23, 0x2, 0xa,
/*[9d0]*/ 0x19, 0x8b, 0xc3, 0x3, 0x23, 0x4, 0x86, 0x23, 0x5, 0x12, 0x80, 0x14, 0xc3, 0x2, 0x3, 0x4,
/*[9e0]*/ 0x81, 0x32, 0x13, 0x4, 0x3, 0x5, 0x91, 0x0, 0x13, 0x5, 0xc3, 0x2, 0x73, 0x0, 0x1, 0xea,
/*[9f0]*/ 0x22, 0x30, 0x1, 0x1a, 0x19, 0xc3, 0x3, 0x23, 0x4, 0x86, 0x23, 0x5, 0x12, 0x80, 0x14, 0xc3,
/*[a00]*/ 0x2, 0x3, 0x4, 0x81, 0x32, 0x13, 0x4, 0x3, 0x5, 0x91, 0x0, 0x13, 0x5, 0xc3, 0x2, 0x73,
/*[a10]*/ 0x0, 0x1, 0xea, 0x22, 0x30, 0x3, 0x1a, 0x19, 0xa0, 0x13, 0x2, 0x22, 0x2d, 0x0, 0x22, 0x2f,
/*[a20]*/ 0x0, 0x22, 0x2e, 0x0, 0x23, 0x0, 0x4, 0x82, 0x2d, 0x19, 0x56, 0x82, 0x2f, 0x82, 0x30, 0x13,
/*[a30]*/ 0x64, 0x3, 0x2, 0x82, 0x2e, 0xc1, 0xf3, 0x66, 0x13, 0x66, 0x2, 0x2f, 0xf1, 0x1, 0x12, 0x2f,
/*[a40]*/ 0x90, 0x2, 0x62, 0x2d, 0x62, 0x2e, 0x23, 0x0, 0x32, 0x42, 0x2e, 0xd8, 0xa0, 0x18, 0xe0, 0x61,
/*[a50]*/ 0x63, 0xdc, 0x63, 0x61, 0x0, 0x61, 0x3, 0x23, 0x64, 0xd0, 0xf3, 0x0, 0x13, 0x65, 0x13, 0x3,
/*[a60]*/ 0xc1, 0xe3, 0x66, 0x13, 0x66, 0x63, 0x64, 0x3, 0x64, 0xe1, 0xf, 0x41, 0xc, 0xe, 0x3, 0x64,
/*[a70]*/ 0x81, 0x4, 0x13, 0x64, 0x90, 0x6, 0x23, 0x65, 0xff, 0x23, 0x64, 0x80, 0x63, 0x3, 0x3, 0x3,
/*[a80]*/ 0x41, 0x42, 0xdd, 0x23, 0x64, 0xd0, 0xf3, 0x0, 0x13, 0x65, 0x3, 0x3, 0xc1, 0xd3, 0x66, 0x13,
/*[a90]*/ 0x66, 0x63, 0x64, 0x3, 0x64, 0xe1, 0xf, 0x41, 0xc, 0xe, 0x3, 0x64, 0x81, 0x4, 0x13, 0x64,
/*[aa0]*/ 0x90, 0x6, 0x23, 0x65, 0xff, 0x23, 0x64, 0x80, 0x63, 0x3, 0x3, 0x3, 0x41, 0x84, 0xdd, 0x71,
/*[ab0]*/ 0x3, 0x71, 0x0, 0x71, 0x63, 0xa0, 0x61, 0x63, 0xdc, 0x63, 0xdd, 0xe, 0x61, 0x0, 0x61, 0x65,
/*[ac0]*/ 0x61, 0x3, 0x61, 0x64, 0x23, 0x64, 0x80, 0xf3, 0x0, 0xd8, 0x65, 0x13, 0x3, 0xc1, 0x13, 0x66,
/*[ad0]*/ 0x63, 0x64, 0x3, 0x64, 0xe1, 0xf, 0x41, 0xc, 0xd, 0x3, 0x64, 0x81, 0x4, 0x13, 0x64, 0x90,
/*[ae0]*/ 0x5, 0xf8, 0x65, 0x23, 0x64, 0x80, 0x63, 0x3, 0x3, 0x3, 0x41, 0xc0, 0xe0, 0x71, 0x64, 0x71,
/*[af0]*/ 0x3, 0x71, 0x65, 0x71, 0x0, 0xfd, 0xe, 0x71, 0x63, 0xa0, 0xfe, 0x0, 0x0, 0x0, 0x0, 0x7f,
/*[b00]*/ 0xfc, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x1f, 0xf0, 0x0, 0x0, 0x0,
/*[b10]*/ 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0,
/*[b20]*/ 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf,
/*[b30]*/ 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0x0,
/*[b40]*/ 0x0, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x80, 0x2, 0x0, 0x0, 0x0, 0x0, 0x40, 0x4, 0xf7,
/*[b50]*/ 0x3c, 0xe7, 0x3, 0x20, 0x4, 0x94, 0xa1, 0x8, 0x4, 0xa0, 0x4, 0xf7, 0x38, 0xc6, 0x7, 0xa0,
/*[b60]*/ 0x4, 0x85, 0x20, 0x21, 0x4, 0xa0, 0x4, 0x84, 0xbd, 0xce, 0x4, 0xa0, 0x4, 0x0, 0x0, 0x0,
/*[b70]*/ 0x0, 0x20, 0x7, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8, 0x0,
/*[b80]*/ 0x0, 0x0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[b90]*/ 0x90, 0x0, 0x0, 0x0, 0x0, 0x0, 0x83, 0xff, 0xff, 0xff, 0xff, 0x80, 0x3, 0xff, 0xff, 0xff,
/*[ba0]*/ 0xff, 0x80, 0x3, 0x81, 0xfc, 0xf, 0x7, 0x80, 0x3, 0x81, 0xfc, 0x6, 0x3, 0x80, 0x3, 0xe7,
/*[bb0]*/ 0xfe, 0x66, 0x73, 0x80, 0x3, 0xe7, 0xfe, 0x66, 0x73, 0x80, 0x3, 0xe7, 0xfe, 0x66, 0x73, 0x80,
/*[bc0]*/ 0x3, 0xe7, 0xfe, 0x66, 0x73, 0x80, 0x3, 0x81, 0xfc, 0x6, 0x3, 0x80, 0x3, 0x81, 0xfc, 0xf,
/*[bd0]*/ 0x7, 0x80, 0x3, 0xff, 0xff, 0xff, 0xff, 0x80, 0x3, 0xff, 0xff, 0xff, 0xff, 0x80, 0xfc, 0x0,
/*[be0]*/ 0x0, 0x0, 0x0, 0x7f, 0xfc, 0x63, 0x3, 0xf0, 0xf8, 0x7f, 0xfc, 0x63, 0x3, 0xf9, 0xfc, 0x7f,
/*[bf0]*/ 0xfc, 0x63, 0x1, 0x99, 0x8c, 0x7f, 0xfc, 0x63, 0x1, 0x99, 0x8c, 0x7f, 0xfc, 0x63, 0x1, 0x99,
/*[c00]*/ 0x8c, 0x7f, 0xfc, 0x63, 0x1, 0x99, 0x8c, 0x7f, 0xfc, 0x7f, 0x3, 0xf9, 0xfc, 0x7f, 0xfc, 0x3e,
/*[c10]*/ 0x3, 0xf0, 0xf8, 0x7f, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x7f,
/*[c20]*/ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
/*[c30]*/ 0xff, 0xff, 0xff, 0xfe, 0x0, 0x1, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xf3, 0xff, 0xff, 0x0, 0x0,
/*[c40]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[c50]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[c60]*/ 0x0, 0x0, 0x0, 0x0, 0x2f, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[c70]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xcc, 0xe7, 0x81, 0x92, 0xe0,
/*[c80]*/ 0x2, 0x12, 0x54, 0x2, 0x5a, 0x50, 0x2, 0x12, 0x57, 0x3, 0xda, 0x50, 0x2, 0x12, 0x54, 0x2,
/*[c90]*/ 0x56, 0x50, 0x1, 0xcc, 0xe7, 0x82, 0x52, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[ca0]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x3b, 0xa8, 0x39, 0x40, 0x0, 0x0, 0x42, 0x28, 0x15, 0x40, 0x0,
/*[cb0]*/ 0x0, 0x5b, 0x10, 0x18, 0x80, 0x0, 0x0, 0x4a, 0x28, 0x14, 0x80, 0x0, 0x0, 0x3a, 0x28, 0x38,
/*[cc0]*/ 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[cd0]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[ce0]*/ 0x3, 0x9d, 0xe4, 0x51, 0x4b, 0xe0, 0x2, 0x50, 0x96, 0x51, 0x48, 0x80, 0x2, 0x50, 0x96, 0x51,
/*[cf0]*/ 0x48, 0x80, 0x3, 0x98, 0x95, 0x51, 0x78, 0x80, 0x2, 0x90, 0x94, 0xd1, 0x48, 0x80, 0x2, 0x50,
/*[d00]*/ 0x94, 0xd1, 0x48, 0x80, 0x2, 0x5d, 0xe4, 0x4e, 0x48, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[d10]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[d20]*/ 0x0, 0x0, 0x3, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[d30]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[d40]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8, 0x91, 0x22, 0x0, 0x0, 0x0, 0x8, 0x91, 0x22, 0x0,
/*[d50]*/ 0x0, 0x0, 0x8, 0x91, 0x22, 0x0, 0x0, 0x0, 0xa, 0x95, 0x2a, 0x60, 0x0, 0x0, 0x5, 0xa,
/*[d60]*/ 0x14, 0x60, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[d70]*/ 0x0, 0x7a, 0x52, 0xe0, 0x0, 0x0, 0x0, 0x12, 0x5e, 0x90, 0x0, 0x0, 0x0, 0x12, 0x52, 0xe0,
/*[d80]*/ 0x0, 0x0, 0x0, 0x52, 0x52, 0x80, 0x0, 0x0, 0x0, 0x21, 0x92, 0x80, 0x0, 0x0, 0x0, 0x0,
/*[d90]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xde, 0x67, 0xbc, 0xc9, 0x0,
/*[da0]*/ 0x2, 0x4, 0x91, 0x9, 0x2d, 0x0, 0x1, 0x84, 0xf1, 0x9, 0x2d, 0x0, 0x0, 0x44, 0x91, 0x9,
/*[db0]*/ 0x2b, 0x30, 0x3, 0x84, 0x91, 0x3c, 0xc9, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[dc0]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7, 0x30, 0x25, 0x20,
/*[dd0]*/ 0x80, 0x0, 0x8, 0x48, 0x25, 0x40, 0x80, 0x0, 0x8, 0x48, 0x25, 0x80, 0xc0, 0x0, 0x8, 0x4b,
/*[de0]*/ 0x25, 0x41, 0xe0, 0x0, 0x7, 0x33, 0x19, 0x23, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xb0, 0x0,
/*[df0]*/ 0x0, 0x0, 0x0, 0x7, 0xf8, 0x0, 0x0, 0x0, 0x0, 0xf, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x1f,
/*[e00]*/ 0xff, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xff, 0x80, 0x0, 0x0, 0x0, 0xfb, 0xdf, 0xc0, 0x0, 0x0,
/*[e10]*/ 0x1, 0xff, 0xff, 0xf0, 0x0, 0x0, 0x7, 0xff, 0xff, 0xf8, 0x0, 0x0, 0xf, 0xdf, 0xff, 0xff,
/*[e20]*/ 0x0, 0x0, 0x7f, 0xbf, 0xfd, 0xff, 0xf0, 0x7, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff,
/*[e30]*/ 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xef, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff,
/*[e40]*/ 0xff, 0xff, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xbf, 0xff, 0xbf, 0xff, 0xff, 0xff,
/*[e50]*/ 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xef, 0xff, 0xff, 0xff, 0xff,
/*[e60]*/ 0xff, 0xff, 0xf6, 0xf7, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xf3, 0xcf, 0x3c,
/*[e70]*/ 0xb3, 0x4f, 0xff, 0xe9, 0xa6, 0x9a, 0x69, 0xa5, 0xff, 0xf3, 0xcf, 0x3c, 0xf3, 0xcf, 0xfe, 0xed,
/*[e80]*/ 0xb6, 0xdb, 0x4d, 0xb7, 0xff, 0xbe, 0xdf, 0xff, 0xbf, 0xff, 0x7f, 0xf3, 0xcf, 0x3c, 0xb3, 0xbf,
/*[e90]*/ 0xff, 0xe5, 0x96, 0x59, 0x65, 0xff, 0xff, 0xf3, 0xcf, 0x3c, 0xf3, 0xfb, 0xdf, 0xf3, 0x4f, 0x3c,
/*[ea0]*/ 0xf3, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x7f, 0xdf, 0xff, 0xf3, 0xcf, 0x1f, 0xf3, 0xff, 0xff, 0xe9,
/*[eb0]*/ 0xa6, 0x9f, 0xe9, 0xfb, 0xf5, 0x73, 0xcf, 0x3f, 0xf3, 0xff, 0xf7, 0xed, 0xa6, 0xdf, 0xed, 0xff,
/*[ec0]*/ 0xfb, 0xff, 0xff, 0xf7, 0x7f, 0xff, 0xee, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xff, 0x5b, 0xf7, 0xff,
/*[ed0]*/ 0xff, 0xbf, 0xff, 0xff, 0xe3, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xea, 0xff, 0xff, 0xfe, 0xff, 0xff,
/*[ee0]*/ 0xff, 0xbf, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xfd, 0xfb, 0xfb, 0xbf, 0xff,
/*[ef0]*/ 0xff, 0xff, 0xff, 0xff, 0xbd, 0xff, 0xff, 0xef, 0xff, 0xff, 0xbf, 0xef, 0xff, 0xff, 0xd7, 0xff,
/*[f00]*/ 0xff, 0xff, 0xff, 0xf3, 0xe3, 0xef, 0xff, 0xfd, 0xff, 0xff, 0xc1, 0xdf, 0xff, 0xff, 0xfb, 0xff,
/*[f10]*/ 0xd5, 0xff, 0xff, 0xff, 0xff, 0xdd, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfd, 0xef, 0xfb, 0xff,
/*[f20]*/ 0xef, 0xff, 0xff, 0xeb, 0xff, 0xef, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xfb, 0xbf,
/*[f30]*/ 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff,
/*[f40]*/ 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff,
/*[f50]*/ 0xff, 0xdf, 0xff, 0xff, 0xfd, 0xff, 0xef, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
/*[f60]*/ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xef, 0xff, 0xfe, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xff,
/*[f70]*/ 0xff, 0xff, 0xff, 0xff, 0xff, 0xdf, 0x7f, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xff,
/*[f80]*/ 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0x7, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff,
/*[f90]*/ 0xff, 0xff, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6f, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7c, 0x0,
/*[fa0]*/ 0x0, 0x0, 0x0, 0x7f, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0xfc, 0x7e, 0x3, 0xf0, 0xf8, 0x7f,
/*[fb0]*/ 0xfc, 0x7e, 0x3, 0xf9, 0xfc, 0x7f, 0xfc, 0x18, 0x1, 0x99, 0x8c, 0x7f, 0xfc, 0x18, 0x1, 0x99,
/*[fc0]*/ 0x8c, 0x7f, 0xfc, 0x18, 0x1, 0x99, 0x8c, 0x7f, 0xfc, 0x18, 0x1, 0x99, 0x8c, 0x7f, 0xfc, 0x7e,
/*[fd0]*/ 0x3, 0xf9, 0xfc, 0x7f, 0xfc, 0x7e, 0x3, 0xf0, 0xf8, 0x7f, 0xfc, 0x0, 0x0, 0x0, 0x0, 0x7f,
/*[fe0]*/ 0xfc, 0x0, 0x0, 0x0, 0x0, 0x7f, 0x3, 0xff, 0xff, 0xff, 0xff, 0x80, 0x3, 0x9c, 0xfc, 0xf,
/*[ff0]*/ 0x7, 0x80, 0x3, 0x9c, 0xfc, 0x6, 0x3, 0x80, 0x3, 0x9c, 0xfe, 0x66, 0x73, 0x80, 0x3, 0x9c,
/*[1000]*/ 0xfe, 0x66, 0x73, 0x80, 0x3, 0x9c, 0xfe, 0x66, 0x73, 0x80, 0x3, 0x9c, 0xfe, 0x66, 0x73, 0x80,
/*[1010]*/ 0x3, 0x80, 0xfc, 0x6, 0x3, 0x80, 0x3, 0xc1, 0xfc, 0xf, 0x7, 0x80, 0x3, 0xff, 0xff, 0xff,
/*[1020]*/ 0xff, 0x80, 0x3, 0xff, 0xff, 0xff, 0xff, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[1030]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0xff, 0xfe, 0x0, 0x0,
/*[1040]*/ 0x0, 0x0, 0xc0, 0xc, 0x0, 0x0, 0x9f, 0xff, 0xff, 0xff, 0x9f, 0xf3, 0xc7, 0xf3, 0xf9, 0xff,
/*[1050]*/ 0x7f, 0xc3, 0xc0, 0xfd, 0xf0, 0x7f, 0xff, 0x7, 0xe0, 0x3f, 0xe0, 0xf, 0xfc, 0x7, 0xf0, 0x7,
/*[1060]*/ 0xc0, 0x3, 0xf0, 0xf, 0xf0, 0x1, 0x83, 0x0, 0xc0, 0xe, 0xf8, 0xf8, 0x3, 0xc0, 0x0, 0x1e,
/*[1070]*/ 0xfd, 0x0, 0x7, 0xf8, 0x0, 0x1d, 0x7e, 0x64, 0xff, 0xfe, 0xe1, 0xff, 0x9c, 0x9b, 0x3, 0x91,
/*[1080]*/ 0x6, 0x1f, 0xe9, 0xfe, 0x67, 0x80, 0x8, 0x9f, 0xf9, 0x4, 0xe7, 0x8, 0x90, 0x33, 0xf9, 0xcc,
/*[1090]*/ 0xc6, 0x1, 0x90, 0x67, 0xf8, 0x8c, 0x84, 0x91, 0x81, 0x8f, 0xfc, 0xc, 0x21, 0x93, 0x8c, 0x3d,
/*[10a0]*/ 0xf3, 0x9f, 0xff, 0xff, 0xf3, 0xfe, 0xe0, 0xff, 0xff, 0xff, 0xe0, 0xfe, 0x80, 0xc, 0x3f, 0xff,
/*[10b0]*/ 0xe0, 0x7f, 0x0, 0x31, 0x1f, 0xff, 0xfd, 0xff, 0xe0, 0x43, 0x91, 0xf8, 0x72, 0x1f, 0xff, 0x93,
/*[10c0]*/ 0x89, 0x92, 0x30, 0xcf, 0xff, 0x8f, 0x89, 0x20, 0xc1, 0x7, 0xff, 0x9f, 0x24, 0x21, 0x82, 0x3,
/*[10d0]*/ 0xff, 0x8e, 0x44, 0x66, 0x27, 0xc1, 0xc7, 0xe0, 0xbc, 0x90, 0xe1, 0xff, 0x3f, 0x9f, 0x7b, 0xf,
/*[10e0]*/ 0x99, 0xff, 0xff, 0x81, 0xfc, 0xf, 0xc1, 0xf7, 0xff, 0x7, 0xdc, 0x1e, 0xe0, 0xf7, 0xff, 0xf,
/*[10f0]*/ 0xdc, 0x1f, 0x70, 0xfb, 0xde, 0x39, 0xfe, 0x1f, 0x78, 0xff, 0xde, 0x77, 0xfe, 0x3f, 0xbe, 0x7f,
/*[1100]*/ 0xbd, 0xff, 0xff, 0x3f, 0xff, 0x7f, 0x60, 0x0, 0x0, 0x0, 0x60, 0xc, 0x38, 0xc, 0x6, 0x0,
/*[1110]*/ 0x80, 0x3c, 0x3f, 0x2, 0xf, 0x80, 0x0, 0xf8, 0x1f, 0xc0, 0x1f, 0xf0, 0x3, 0xf8, 0xf, 0xf8,
/*[1120]*/ 0x3f, 0xfc, 0xf, 0xf0, 0xf, 0xfe, 0x7c, 0xff, 0x3f, 0xf1, 0x7, 0x7, 0xfc, 0x3f, 0xff, 0xe1,
/*[1130]*/ 0x2, 0xff, 0xf8, 0x7, 0xff, 0xe2, 0x81, 0x9b, 0x0, 0x1, 0x1e, 0x0, 0x63, 0x64, 0xfc, 0x6e,
/*[1140]*/ 0xf9, 0xe0, 0x16, 0x1, 0x98, 0x7f, 0xf7, 0x60, 0x6, 0xfb, 0x18, 0xf7, 0x6f, 0xcc, 0x6, 0x33,
/*[1150]*/ 0x39, 0xfe, 0x6f, 0x98, 0x7, 0x73, 0x7b, 0x6e, 0x7e, 0x70, 0x3, 0xf3, 0xde, 0x6c, 0x73, 0xc2,
/*[1160]*/ 0xc, 0x60, 0x0, 0x0, 0xc, 0x1, 0x1f, 0x0, 0x0, 0x0, 0x1f, 0x1, 0x7f, 0xf3, 0xc0, 0x0,
/*[1170]*/ 0x1f, 0x80, 0xff, 0xce, 0xe0, 0x0, 0x2, 0x0, 0x1f, 0xbc, 0x6e, 0x7, 0x8d, 0xe0, 0x0, 0x6c,
/*[1180]*/ 0x76, 0x6d, 0xcf, 0x30, 0x0, 0x70, 0x76, 0xdf, 0x3e, 0xf8, 0x0, 0x60, 0xdb, 0xde, 0x7d, 0xfc,
/*[1190]*/ 0x0, 0x71, 0xbb, 0x99, 0xd8, 0x3e, 0x38, 0x1f, 0x43, 0x6f, 0x1e, 0x0, 0xc0, 0x60, 0x84, 0xf0,
/*[11a0]*/ 0x66, 0x0, 0x0, 0x7e, 0x3, 0xf0, 0x3e, 0x8, 0x0, 0xf8, 0x23, 0xe1, 0x1f, 0x8, 0x0, 0xf0,
/*[11b0]*/ 0x23, 0xe0, 0x8f, 0x4, 0x21, 0xc6, 0x1, 0xe0, 0x87, 0x0, 0x21, 0x88, 0x1, 0xc0, 0x41, 0x80,
/*[11c0]*/ 0x42, 0x0, 0x0, 0xc0, 0x0, 0x80, 0x9f, 0xff, 0xff, 0xff, 0x9f, 0xf3, 0xc7, 0xf3, 0xf9, 0xff,
/*[11d0]*/ 0x7f, 0xc3, 0xc0, 0xfd, 0xf0, 0x7f, 0xff, 0x7, 0xe0, 0x3f, 0xe0, 0xf, 0xfc, 0x7, 0xf0, 0x7,
/*[11e0]*/ 0xc0, 0x3, 0xf0, 0xf, 0xf0, 0x1, 0x83, 0x0, 0xc0, 0xe, 0xf8, 0xf8, 0x3, 0xc0, 0x0, 0x1e,
/*[11f0]*/ 0xfd, 0x0, 0x7, 0xf8, 0x0, 0x1d, 0x7e, 0x64, 0xff, 0xfe, 0xe1, 0xff, 0x9c, 0x9b, 0x3, 0x91,
/*[1200]*/ 0x6, 0x1f, 0xe9, 0xfe, 0x67, 0x80, 0x8, 0x9f, 0xf9, 0x4, 0xe7, 0x8, 0x90, 0x33, 0xf9, 0xcc,
/*[1210]*/ 0xc6, 0x1, 0x90, 0x67, 0xf8, 0x8c, 0x84, 0x91, 0x81, 0x8f, 0xfc, 0xc, 0x21, 0x93, 0x8c, 0x3d,
/*[1220]*/ 0xf3, 0x9f, 0xff, 0xff, 0xf3, 0xfe, 0xe0, 0xff, 0xff, 0xff, 0xe0, 0xfe, 0x80, 0xc, 0x3f, 0xff,
/*[1230]*/ 0xe0, 0x7f, 0x0, 0x31, 0x1f, 0xff, 0xfd, 0xff, 0xe0, 0x43, 0x91, 0xf8, 0x72, 0x1f, 0xff, 0x93,
/*[1240]*/ 0x89, 0x92, 0x30, 0xcf, 0xff, 0x8f, 0x89, 0x20, 0xc1, 0x7, 0xff, 0x9f, 0x24, 0x21, 0x82, 0x3,
/*[1250]*/ 0xff, 0x8e, 0x44, 0x66, 0x27, 0xc1, 0xc7, 0xe0, 0xbc, 0x90, 0xe1, 0xff, 0x3f, 0x9f, 0x7b, 0xf,
/*[1260]*/ 0x99, 0xff, 0xff, 0x81, 0xfc, 0xf, 0xc1, 0xf7, 0xff, 0x7, 0xdc, 0x1e, 0xe0, 0xf7, 0xff, 0xf,
/*[1270]*/ 0xdc, 0x1f, 0x70, 0xfb, 0xde, 0x39, 0xfe, 0x1f, 0x78, 0xff, 0xde, 0x77, 0xfe, 0x3f, 0xbe, 0x7f,
/*[1280]*/ 0xbd, 0xff, 0xff, 0x3f, 0xff, 0x7f, 0x3f, 0xf0, 0x7f, 0xf8, 0x1f, 0xe0, 0x40, 0x8, 0xe0, 0x1c,
/*[1290]*/ 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xc0, 0xc, 0x40, 0x8, 0x0, 0x0,
/*[12a0]*/ 0x40, 0x8, 0xc0, 0xc, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c,
/*[12b0]*/ 0x40, 0x8, 0x1f, 0xe0, 0x7f, 0xf8, 0x3f, 0xf0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x8,
/*[12c0]*/ 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0xc, 0x0, 0x8,
/*[12d0]*/ 0x0, 0x0, 0x0, 0x8, 0x0, 0xc, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c,
/*[12e0]*/ 0x0, 0x1c, 0x0, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf0, 0x7f, 0xf8, 0x1f, 0xe0,
/*[12f0]*/ 0x0, 0x8, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0xc,
/*[1300]*/ 0xf, 0xc8, 0x1f, 0xe0, 0x4f, 0xc0, 0xc0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0,
/*[1310]*/ 0xe0, 0x0, 0xe0, 0x0, 0x40, 0x0, 0x1f, 0xe0, 0x7f, 0xf8, 0x3f, 0xf0, 0x3f, 0xf0, 0x7f, 0xf8,
/*[1320]*/ 0x1f, 0xe0, 0x0, 0x8, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c,
/*[1330]*/ 0x0, 0xc, 0xf, 0xc8, 0x1f, 0xe0, 0xf, 0xc8, 0x0, 0xc, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c,
/*[1340]*/ 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x8, 0x1f, 0xe0, 0x7f, 0xf8, 0x3f, 0xf0, 0x0, 0x0,
/*[1350]*/ 0x0, 0x0, 0x0, 0x0, 0x40, 0x8, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c,
/*[1360]*/ 0xe0, 0x1c, 0xc0, 0xc, 0x4f, 0xc8, 0x1f, 0xe0, 0xf, 0xc8, 0x0, 0xc, 0x0, 0x1c, 0x0, 0x1c,
/*[1370]*/ 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
/*[1380]*/ 0x3f, 0xf0, 0x7f, 0xf8, 0x1f, 0xe0, 0x40, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0,
/*[1390]*/ 0xe0, 0x0, 0xe0, 0x0, 0xc0, 0x0, 0x4f, 0xc0, 0x1f, 0xe0, 0xf, 0xc8, 0x0, 0xc, 0x0, 0x1c,
/*[13a0]*/ 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x8, 0x1f, 0xe0, 0x7f, 0xf8,
/*[13b0]*/ 0x3f, 0xf0, 0x3f, 0xf0, 0x7f, 0xf8, 0x1f, 0xe0, 0x40, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0,
/*[13c0]*/ 0xe0, 0x0, 0xe0, 0x0, 0xe0, 0x0, 0xc0, 0x0, 0x4f, 0xc0, 0x1f, 0xe0, 0x4f, 0xc8, 0xc0, 0xc,
/*[13d0]*/ 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0x40, 0x8, 0x1f, 0xe0,
/*[13e0]*/ 0x7f, 0xf8, 0x3f, 0xf0, 0x3f, 0xf0, 0x7f, 0xf8, 0x1f, 0xe0, 0x0, 0x8, 0x0, 0x1c, 0x0, 0x1c,
/*[13f0]*/ 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0xc, 0x0, 0x8, 0x0, 0x0, 0x0, 0x8,
/*[1400]*/ 0x0, 0xc, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x8,
/*[1410]*/ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3f, 0xf0, 0x7f, 0xf8, 0x1f, 0xe0, 0x40, 0x8, 0xe0, 0x1c,
/*[1420]*/ 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xc0, 0xc, 0x4f, 0xc8, 0x1f, 0xe0,
/*[1430]*/ 0x4f, 0xc8, 0xc0, 0xc, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c,
/*[1440]*/ 0x40, 0x8, 0x1f, 0xe0, 0x7f, 0xf8, 0x3f, 0xf0, 0x3f, 0xf0, 0x7f, 0xf8, 0x1f, 0xe0, 0x40, 0x8,
/*[1450]*/ 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xe0, 0x1c, 0xc0, 0xc, 0x4f, 0xc8,
/*[1460]*/ 0x1f, 0xe0, 0xf, 0xc8, 0x0, 0xc, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c, 0x0, 0x1c,
/*[1470]*/ 0x0, 0x1c, 0x0, 0x8, 0x1f, 0xe0, 0x7f, 0xf8, 0x3f, 0xf0, 0x0, 0xf, 0xf0, 0x0, 0x0, 0x0,
/*[1480]*/ 0x0, 0x70, 0xe, 0x0, 0x0, 0x0, 0x1, 0xa0, 0x5, 0x80, 0x0, 0x0, 0x2, 0x20, 0x4, 0x40,
/*[1490]*/ 0x0, 0x0, 0x4, 0x20, 0x4, 0x20, 0x0, 0x0, 0x8, 0x20, 0x4, 0x10, 0x0, 0x0, 0x10, 0x40,
/*[14a0]*/ 0x2, 0x8, 0x0, 0x0, 0x20, 0x40, 0x2, 0x4, 0x0, 0x0, 0x20, 0x40, 0x2, 0x4, 0x0, 0x0,
/*[14b0]*/ 0x43, 0x80, 0x1, 0xc2, 0x0, 0x0, 0x7c, 0x0, 0x0, 0x3e, 0x0, 0x0, 0x40, 0x0, 0x0, 0x2,
/*[14c0]*/ 0x0, 0x0, 0x80, 0x0, 0x0, 0x1, 0x0, 0x0, 0x80, 0x0, 0x0, 0x1, 0x0, 0x0, 0x80, 0x1,
/*[14d0]*/ 0x80, 0x1, 0x0, 0x0, 0x80, 0x2, 0x40, 0x1, 0x0, 0x0, 0x80, 0x2, 0x40, 0x1, 0x0, 0x0,
/*[14e0]*/ 0x80, 0x1, 0x80, 0x1, 0x0, 0x0, 0x80, 0x0, 0x0, 0x1, 0x0, 0x0, 0x80, 0x0, 0x0, 0x1,
/*[14f0]*/ 0x0, 0x0, 0x40, 0x0, 0x0, 0x2, 0x0, 0x0, 0x7c, 0x0, 0x0, 0x3e, 0x0, 0x0, 0x43, 0x80,
/*[1500]*/ 0x1, 0xc2, 0x0, 0x0, 0x20, 0x40, 0x2, 0x4, 0x0, 0x0, 0x20, 0x40, 0x2, 0x4, 0x0, 0x0,
/*[1510]*/ 0x10, 0x40, 0x2, 0x8, 0x0, 0x0, 0x8, 0x20, 0x4, 0x10, 0x0, 0x0, 0x4, 0x20, 0x4, 0x20,
/*[1520]*/ 0x0, 0x0,