From 78dad90fc9c896e908b6fa298e171483e4c84f80 Mon Sep 17 00:00:00 2001 From: august Date: Sat, 10 Feb 2024 00:01:32 -0500 Subject: [PATCH] Split code into modules, add font stuff --- .gitignore | 1 + src/Cozette.sfd | 25585 +++++++++++++++++++++++++++++++++++++++ src/cozette.bdf | 2943 +++++ src/cpu.rs | 247 + src/error.rs | 66 + src/george | Bin 65536 -> 65536 bytes src/george.asm | 2 +- src/georgeencoding.txt | 265 + src/instructions.rs | 3430 ++++++ src/main.rs | 3987 +----- src/memory.rs | 106 + src/types.rs | 4 + src/video.rs | 64 + 13 files changed, 32737 insertions(+), 3963 deletions(-) create mode 100644 src/Cozette.sfd create mode 100644 src/cozette.bdf create mode 100644 src/cpu.rs create mode 100644 src/error.rs create mode 100644 src/georgeencoding.txt create mode 100644 src/instructions.rs create mode 100644 src/memory.rs create mode 100644 src/types.rs create mode 100644 src/video.rs diff --git a/.gitignore b/.gitignore index 48e4944..11456a0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /target log +george.o diff --git a/src/Cozette.sfd b/src/Cozette.sfd new file mode 100644 index 0000000..0acd040 --- /dev/null +++ b/src/Cozette.sfd @@ -0,0 +1,25585 @@ +SplineFontDB: 3.2 +FontName: Cozette +FullName: Cozette +FamilyName: Cozette +Weight: Medium +Copyright: (c) 2020-2023 Slavfox +UComments: "2024-2-6: Created with FontForge (http://fontforge.org)" +Version: 001.000 +ItalicAngle: 0 +UnderlinePosition: 13 +UnderlineWidth: 50 +Ascent: 769 +Descent: 231 +InvalidEm: 0 +LayerCount: 2 +Layer: 0 0 "Back" 1 +Layer: 1 0 "Fore" 0 +XUID: [1021 883 -213293449 6015392] +OS2Version: 0 +OS2_WeightWidthSlopeOnly: 0 +OS2_UseTypoMetrics: 1 +CreationTime: 1707263925 +ModificationTime: 1707449024 +OS2TypoAscent: 0 +OS2TypoAOffset: 1 +OS2TypoDescent: 0 +OS2TypoDOffset: 1 +OS2TypoLinegap: 0 +OS2WinAscent: 0 +OS2WinAOffset: 1 +OS2WinDescent: 0 +OS2WinDOffset: 1 +HheadAscent: 0 +HheadAOffset: 1 +HheadDescent: 0 +HheadDOffset: 1 +OS2Vendor: 'PfEd' +DEI: 91125 +Encoding: george +Compacted: 1 +UnicodeInterp: none +NameList: AGL For New Fonts +DisplaySize: 13 +AntiAlias: 1 +FitToEm: 0 +WinInfo: 0 24 15 +OnlyBitmaps: 1 +BeginChars: 3220 3163 + +StartChar: uni0295 +Encoding: -1 661 0 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni1D25 +Encoding: -1 7461 1 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni0294 +Encoding: -1 660 2 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni2661 +Encoding: -1 9825 3 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: female +Encoding: -1 9792 4 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: male +Encoding: -1 9794 5 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni26A2 +Encoding: -1 9890 6 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni26A3 +Encoding: -1 9891 7 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni26A5 +Encoding: -1 9893 8 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni0009 +Encoding: 256 9 9 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni000A +Encoding: 257 10 10 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni000B +Encoding: 258 11 11 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni000C +Encoding: 259 12 12 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni000D +Encoding: 260 13 13 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni000E +Encoding: 261 14 14 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni000F +Encoding: 262 15 15 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0010 +Encoding: 263 16 16 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0011 +Encoding: 264 17 17 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0012 +Encoding: 265 18 18 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0013 +Encoding: 266 19 19 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0014 +Encoding: 267 20 20 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0015 +Encoding: 268 21 21 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0016 +Encoding: 269 22 22 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0017 +Encoding: 270 23 23 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0018 +Encoding: 271 24 24 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0019 +Encoding: 272 25 25 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni001A +Encoding: 273 26 26 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni001B +Encoding: 274 27 27 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni001C +Encoding: 275 28 28 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni001D +Encoding: 276 29 29 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni001E +Encoding: 277 30 30 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni001F +Encoding: 278 31 31 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: space +Encoding: 20 32 32 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: exclam +Encoding: 33 33 33 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: quotedbl +Encoding: 34 34 34 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: numbersign +Encoding: 35 35 35 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: dollar +Encoding: 36 36 36 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: percent +Encoding: 37 37 37 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: ampersand +Encoding: 38 38 38 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: quotesingle +Encoding: 39 39 39 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: parenleft +Encoding: 40 40 40 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: parenright +Encoding: 41 41 41 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: asterisk +Encoding: 42 42 42 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: plus +Encoding: 43 43 43 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: comma +Encoding: 44 44 44 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: hyphen +Encoding: 45 45 45 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: period +Encoding: 46 46 46 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: slash +Encoding: 47 47 47 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: zero +Encoding: 48 48 48 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: one +Encoding: 49 49 49 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: two +Encoding: 50 50 50 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: three +Encoding: 51 51 51 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: four +Encoding: 52 52 52 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: five +Encoding: 53 53 53 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: six +Encoding: 54 54 54 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: seven +Encoding: 55 55 55 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: eight +Encoding: 56 56 56 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: nine +Encoding: 57 57 57 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: colon +Encoding: 58 58 58 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: semicolon +Encoding: 59 59 59 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: less +Encoding: 60 60 60 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: equal +Encoding: 61 61 61 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: greater +Encoding: 62 62 62 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: question +Encoding: 63 63 63 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: at +Encoding: 64 64 64 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: A +Encoding: 65 65 65 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: B +Encoding: 66 66 66 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: C +Encoding: 67 67 67 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: D +Encoding: 68 68 68 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: E +Encoding: 69 69 69 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: F +Encoding: 70 70 70 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: G +Encoding: 71 71 71 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: H +Encoding: 72 72 72 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: I +Encoding: 73 73 73 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: J +Encoding: 74 74 74 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: K +Encoding: 75 75 75 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: L +Encoding: 76 76 76 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: M +Encoding: 77 77 77 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: N +Encoding: 78 78 78 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: O +Encoding: 79 79 79 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: P +Encoding: 80 80 80 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: Q +Encoding: 81 81 81 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: R +Encoding: 82 82 82 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: S +Encoding: 83 83 83 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: T +Encoding: 84 84 84 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: U +Encoding: 85 85 85 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: V +Encoding: 86 86 86 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: W +Encoding: 87 87 87 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: X +Encoding: 88 88 88 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: Y +Encoding: 89 89 89 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: Z +Encoding: 90 90 90 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: bracketleft +Encoding: 91 91 91 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: backslash +Encoding: 92 92 92 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: bracketright +Encoding: 93 93 93 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: asciicircum +Encoding: 94 94 94 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: underscore +Encoding: 95 95 95 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: grave +Encoding: 96 96 96 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: a +Encoding: 97 97 97 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: b +Encoding: 98 98 98 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: c +Encoding: 99 99 99 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: d +Encoding: 100 100 100 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: e +Encoding: 101 101 101 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: f +Encoding: 102 102 102 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: g +Encoding: 103 103 103 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: h +Encoding: 104 104 104 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: i +Encoding: 105 105 105 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: j +Encoding: 106 106 106 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: k +Encoding: 107 107 107 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: l +Encoding: 108 108 108 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: m +Encoding: 109 109 109 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: n +Encoding: 110 110 110 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: o +Encoding: 111 111 111 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: p +Encoding: 112 112 112 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: q +Encoding: 113 113 113 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: r +Encoding: 114 114 114 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: s +Encoding: 115 115 115 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: t +Encoding: 116 116 116 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: u +Encoding: 117 117 117 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: v +Encoding: 118 118 118 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: w +Encoding: 119 119 119 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: x +Encoding: 120 120 120 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: y +Encoding: 121 121 121 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: z +Encoding: 122 122 122 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: braceleft +Encoding: 123 123 123 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: bar +Encoding: 124 124 124 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: braceright +Encoding: 125 125 125 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: asciitilde +Encoding: 126 126 126 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni007F +Encoding: 279 127 127 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0080 +Encoding: 280 128 128 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0081 +Encoding: 281 129 129 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0082 +Encoding: 282 130 130 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0083 +Encoding: 283 131 131 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0084 +Encoding: 284 132 132 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0085 +Encoding: 285 133 133 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0086 +Encoding: 286 134 134 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0087 +Encoding: 287 135 135 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0088 +Encoding: 288 136 136 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0089 +Encoding: 289 137 137 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni008A +Encoding: 290 138 138 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni008B +Encoding: 291 139 139 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni008C +Encoding: 292 140 140 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni008D +Encoding: 293 141 141 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni008E +Encoding: 294 142 142 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni008F +Encoding: 295 143 143 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0090 +Encoding: 296 144 144 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0091 +Encoding: 297 145 145 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0092 +Encoding: 298 146 146 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0093 +Encoding: 299 147 147 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0094 +Encoding: 300 148 148 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0095 +Encoding: 301 149 149 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0096 +Encoding: 302 150 150 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0097 +Encoding: 1 151 151 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni0098 +Encoding: 303 152 152 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0099 +Encoding: 304 153 153 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni009A +Encoding: 305 154 154 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni009B +Encoding: 306 155 155 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni009C +Encoding: 307 156 156 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni009D +Encoding: 308 157 157 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni009E +Encoding: 309 158 158 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni009F +Encoding: 310 159 159 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni00A0 +Encoding: 311 160 160 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: exclamdown +Encoding: 312 161 161 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: cent +Encoding: 313 162 162 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: sterling +Encoding: 314 163 163 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: currency +Encoding: 315 164 164 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: yen +Encoding: 316 165 165 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: brokenbar +Encoding: 317 166 166 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: section +Encoding: 318 167 167 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: dieresis +Encoding: 319 168 168 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: copyright +Encoding: 320 169 169 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: ordfeminine +Encoding: 321 170 170 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: guillemotleft +Encoding: 322 171 171 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: logicalnot +Encoding: 323 172 172 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni00AD +Encoding: 324 173 173 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: registered +Encoding: 325 174 174 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: macron +Encoding: 326 175 175 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: degree +Encoding: 327 176 176 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: plusminus +Encoding: 328 177 177 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni00B2 +Encoding: 329 178 178 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni00B3 +Encoding: 330 179 179 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: acute +Encoding: 331 180 180 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: mu +Encoding: 332 181 181 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: paragraph +Encoding: 333 182 182 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: periodcentered +Encoding: 334 183 183 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: cedilla +Encoding: 335 184 184 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni00B9 +Encoding: 336 185 185 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: ordmasculine +Encoding: 337 186 186 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: guillemotright +Encoding: 338 187 187 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: onequarter +Encoding: 339 188 188 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: onehalf +Encoding: 340 189 189 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: threequarters +Encoding: 341 190 190 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: questiondown +Encoding: 342 191 191 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Agrave +Encoding: 343 192 192 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Aacute +Encoding: 344 193 193 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Acircumflex +Encoding: 345 194 194 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Atilde +Encoding: 346 195 195 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Adieresis +Encoding: 347 196 196 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Aring +Encoding: 348 197 197 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: AE +Encoding: 349 198 198 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Ccedilla +Encoding: 350 199 199 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Egrave +Encoding: 351 200 200 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Eacute +Encoding: 352 201 201 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Ecircumflex +Encoding: 353 202 202 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Edieresis +Encoding: 354 203 203 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Igrave +Encoding: 355 204 204 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Iacute +Encoding: 356 205 205 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Icircumflex +Encoding: 357 206 206 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Idieresis +Encoding: 358 207 207 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Eth +Encoding: 359 208 208 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Ntilde +Encoding: 360 209 209 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Ograve +Encoding: 361 210 210 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Oacute +Encoding: 362 211 211 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Ocircumflex +Encoding: 363 212 212 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Otilde +Encoding: 364 213 213 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Odieresis +Encoding: 365 214 214 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: multiply +Encoding: 366 215 215 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Oslash +Encoding: 367 216 216 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Ugrave +Encoding: 368 217 217 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Uacute +Encoding: 369 218 218 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Ucircumflex +Encoding: 370 219 219 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Udieresis +Encoding: 371 220 220 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Yacute +Encoding: 372 221 221 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Thorn +Encoding: 373 222 222 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: germandbls +Encoding: 374 223 223 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: agrave +Encoding: 375 224 224 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: aacute +Encoding: 376 225 225 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: acircumflex +Encoding: 377 226 226 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: atilde +Encoding: 378 227 227 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: adieresis +Encoding: 379 228 228 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: aring +Encoding: 380 229 229 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: ae +Encoding: 381 230 230 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: ccedilla +Encoding: 382 231 231 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: egrave +Encoding: 383 232 232 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: eacute +Encoding: 384 233 233 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: ecircumflex +Encoding: 385 234 234 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: edieresis +Encoding: 386 235 235 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: igrave +Encoding: 387 236 236 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: iacute +Encoding: 388 237 237 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: icircumflex +Encoding: 389 238 238 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: idieresis +Encoding: 390 239 239 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: eth +Encoding: 391 240 240 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: ntilde +Encoding: 392 241 241 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: ograve +Encoding: 393 242 242 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: oacute +Encoding: 394 243 243 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: ocircumflex +Encoding: 395 244 244 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: otilde +Encoding: 396 245 245 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: odieresis +Encoding: 397 246 246 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: divide +Encoding: 398 247 247 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: oslash +Encoding: 399 248 248 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: ugrave +Encoding: 400 249 249 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uacute +Encoding: 401 250 250 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: ucircumflex +Encoding: 402 251 251 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: udieresis +Encoding: 403 252 252 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: yacute +Encoding: 404 253 253 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: thorn +Encoding: 405 254 254 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: ydieresis +Encoding: 406 255 255 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Gdotaccent +Encoding: 407 288 256 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: gdotaccent +Encoding: 408 289 257 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Gcommaaccent +Encoding: 409 290 258 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: gcommaaccent +Encoding: 410 291 259 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Hcircumflex +Encoding: 411 292 260 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: hcircumflex +Encoding: 412 293 261 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Hbar +Encoding: 413 294 262 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: hbar +Encoding: 414 295 263 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Itilde +Encoding: 415 296 264 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: itilde +Encoding: 416 297 265 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Imacron +Encoding: 417 298 266 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: imacron +Encoding: 418 299 267 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Ibreve +Encoding: 419 300 268 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: ibreve +Encoding: 420 301 269 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Iogonek +Encoding: 421 302 270 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: iogonek +Encoding: 422 303 271 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Idotaccent +Encoding: 423 304 272 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: dotlessi +Encoding: 424 305 273 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: IJ +Encoding: 425 306 274 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: ij +Encoding: 426 307 275 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Jcircumflex +Encoding: 427 308 276 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: jcircumflex +Encoding: 428 309 277 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Kcommaaccent +Encoding: 429 310 278 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: kcommaaccent +Encoding: 430 311 279 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: kgreenlandic +Encoding: 431 312 280 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Lacute +Encoding: 432 313 281 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: lacute +Encoding: 433 314 282 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Lcommaaccent +Encoding: 434 315 283 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: lcommaaccent +Encoding: 435 316 284 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Lcaron +Encoding: 436 317 285 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: lcaron +Encoding: 437 318 286 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Ldot +Encoding: 438 319 287 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: ldot +Encoding: 439 320 288 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Lslash +Encoding: 440 321 289 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: lslash +Encoding: 441 322 290 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Nacute +Encoding: 442 323 291 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: nacute +Encoding: 443 324 292 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Ncommaaccent +Encoding: 444 325 293 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: ncommaaccent +Encoding: 445 326 294 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Ncaron +Encoding: 446 327 295 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: ncaron +Encoding: 447 328 296 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: napostrophe +Encoding: 448 329 297 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Eng +Encoding: 449 330 298 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: eng +Encoding: 450 331 299 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Omacron +Encoding: 451 332 300 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: omacron +Encoding: 452 333 301 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Obreve +Encoding: 453 334 302 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: obreve +Encoding: 454 335 303 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Ohungarumlaut +Encoding: 455 336 304 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: ohungarumlaut +Encoding: 456 337 305 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: OE +Encoding: 457 338 306 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: oe +Encoding: 458 339 307 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Racute +Encoding: 459 340 308 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: racute +Encoding: 460 341 309 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Rcommaaccent +Encoding: 461 342 310 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: rcommaaccent +Encoding: 462 343 311 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Rcaron +Encoding: 463 344 312 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: rcaron +Encoding: 464 345 313 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Sacute +Encoding: 465 346 314 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: sacute +Encoding: 466 347 315 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Scircumflex +Encoding: 467 348 316 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: scircumflex +Encoding: 468 349 317 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Scedilla +Encoding: 469 350 318 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: scedilla +Encoding: 470 351 319 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Scaron +Encoding: 471 352 320 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: scaron +Encoding: 472 353 321 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Tcommaaccent +Encoding: 473 354 322 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: tcommaaccent +Encoding: 474 355 323 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Tcaron +Encoding: 475 356 324 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: tcaron +Encoding: 476 357 325 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Tbar +Encoding: 477 358 326 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: tbar +Encoding: 478 359 327 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Utilde +Encoding: 479 360 328 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: utilde +Encoding: 480 361 329 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Umacron +Encoding: 481 362 330 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: umacron +Encoding: 482 363 331 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Ubreve +Encoding: 483 364 332 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: ubreve +Encoding: 484 365 333 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Uring +Encoding: 485 366 334 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uring +Encoding: 486 367 335 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Uhungarumlaut +Encoding: 487 368 336 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uhungarumlaut +Encoding: 488 369 337 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Uogonek +Encoding: 489 370 338 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uogonek +Encoding: 490 371 339 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Wcircumflex +Encoding: 491 372 340 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: wcircumflex +Encoding: 492 373 341 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Ycircumflex +Encoding: 493 374 342 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: ycircumflex +Encoding: 494 375 343 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Ydieresis +Encoding: 495 376 344 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Zacute +Encoding: 496 377 345 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: zacute +Encoding: 497 378 346 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Zdotaccent +Encoding: 498 379 347 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: zdotaccent +Encoding: 499 380 348 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Zcaron +Encoding: 500 381 349 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: zcaron +Encoding: 501 382 350 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: longs +Encoding: 502 383 351 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0180 +Encoding: 503 384 352 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0181 +Encoding: 504 385 353 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0182 +Encoding: 505 386 354 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0183 +Encoding: 506 387 355 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0184 +Encoding: 507 388 356 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0185 +Encoding: 508 389 357 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0186 +Encoding: 509 390 358 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0187 +Encoding: 510 391 359 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0188 +Encoding: 511 392 360 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0189 +Encoding: 512 393 361 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni018A +Encoding: 513 394 362 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni018B +Encoding: 514 395 363 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni018C +Encoding: 515 396 364 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni018D +Encoding: 516 397 365 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni018E +Encoding: 517 398 366 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni018F +Encoding: 518 399 367 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0190 +Encoding: 519 400 368 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0191 +Encoding: 520 401 369 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: florin +Encoding: 521 402 370 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0193 +Encoding: 522 403 371 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0194 +Encoding: 523 404 372 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0195 +Encoding: 524 405 373 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0196 +Encoding: 525 406 374 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0197 +Encoding: 526 407 375 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0198 +Encoding: 527 408 376 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0199 +Encoding: 528 409 377 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni019A +Encoding: 529 410 378 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni019B +Encoding: 530 411 379 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni019C +Encoding: 531 412 380 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni019D +Encoding: 532 413 381 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni019E +Encoding: 533 414 382 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni019F +Encoding: 534 415 383 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Ohorn +Encoding: 535 416 384 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: ohorn +Encoding: 536 417 385 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01A2 +Encoding: 537 418 386 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01A3 +Encoding: 538 419 387 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01A4 +Encoding: 539 420 388 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01A5 +Encoding: 540 421 389 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01A6 +Encoding: 541 422 390 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01A7 +Encoding: 542 423 391 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01A8 +Encoding: 543 424 392 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01A9 +Encoding: 544 425 393 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01AA +Encoding: 545 426 394 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01AB +Encoding: 546 427 395 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01AC +Encoding: 547 428 396 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01AD +Encoding: 548 429 397 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01AE +Encoding: 549 430 398 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Uhorn +Encoding: 550 431 399 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uhorn +Encoding: 551 432 400 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01B1 +Encoding: 552 433 401 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01B2 +Encoding: 553 434 402 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01B3 +Encoding: 554 435 403 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01B4 +Encoding: 555 436 404 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01B5 +Encoding: 556 437 405 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01B6 +Encoding: 557 438 406 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01B7 +Encoding: 558 439 407 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01B8 +Encoding: 559 440 408 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01B9 +Encoding: 560 441 409 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01BA +Encoding: 561 442 410 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01BB +Encoding: 562 443 411 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01BC +Encoding: 563 444 412 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01BD +Encoding: 564 445 413 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01BE +Encoding: 565 446 414 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01BF +Encoding: 566 447 415 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01C0 +Encoding: 567 448 416 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01C1 +Encoding: 568 449 417 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01C2 +Encoding: 569 450 418 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01C3 +Encoding: 570 451 419 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01CD +Encoding: 571 461 420 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01CE +Encoding: 572 462 421 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01CF +Encoding: 573 463 422 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01D0 +Encoding: 574 464 423 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01D1 +Encoding: 575 465 424 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01D2 +Encoding: 576 466 425 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01D3 +Encoding: 577 467 426 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01D4 +Encoding: 578 468 427 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01D5 +Encoding: 579 469 428 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01D6 +Encoding: 580 470 429 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01D7 +Encoding: 581 471 430 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01D8 +Encoding: 582 472 431 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01D9 +Encoding: 583 473 432 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01DA +Encoding: 584 474 433 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01DB +Encoding: 585 475 434 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01DC +Encoding: 586 476 435 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01DD +Encoding: 587 477 436 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01DE +Encoding: 588 478 437 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01DF +Encoding: 589 479 438 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01E0 +Encoding: 590 480 439 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01E1 +Encoding: 591 481 440 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01E2 +Encoding: 592 482 441 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01E3 +Encoding: 593 483 442 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01E4 +Encoding: 594 484 443 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01E5 +Encoding: 595 485 444 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Gcaron +Encoding: 596 486 445 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: gcaron +Encoding: 597 487 446 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01E8 +Encoding: 598 488 447 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01E9 +Encoding: 599 489 448 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01EA +Encoding: 600 490 449 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01EB +Encoding: 601 491 450 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01EC +Encoding: 602 492 451 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01ED +Encoding: 603 493 452 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01EE +Encoding: 604 494 453 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01EF +Encoding: 605 495 454 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01F0 +Encoding: 606 496 455 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01F4 +Encoding: 607 500 456 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01F5 +Encoding: 608 501 457 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01F6 +Encoding: 609 502 458 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01F7 +Encoding: 610 503 459 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01F8 +Encoding: 611 504 460 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni01F9 +Encoding: 612 505 461 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Aringacute +Encoding: 613 506 462 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: aringacute +Encoding: 614 507 463 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: AEacute +Encoding: 615 508 464 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: aeacute +Encoding: 616 509 465 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Oslashacute +Encoding: 617 510 466 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: oslashacute +Encoding: 618 511 467 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0200 +Encoding: 619 512 468 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0201 +Encoding: 620 513 469 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0202 +Encoding: 621 514 470 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0203 +Encoding: 622 515 471 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0204 +Encoding: 623 516 472 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0205 +Encoding: 624 517 473 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0206 +Encoding: 625 518 474 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0207 +Encoding: 626 519 475 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0208 +Encoding: 627 520 476 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0209 +Encoding: 628 521 477 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni020A +Encoding: 629 522 478 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni020B +Encoding: 630 523 479 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni020C +Encoding: 631 524 480 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni020D +Encoding: 632 525 481 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni020E +Encoding: 633 526 482 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni020F +Encoding: 634 527 483 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0210 +Encoding: 635 528 484 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0211 +Encoding: 636 529 485 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0212 +Encoding: 637 530 486 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0213 +Encoding: 638 531 487 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0214 +Encoding: 639 532 488 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0215 +Encoding: 640 533 489 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0216 +Encoding: 641 534 490 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0217 +Encoding: 642 535 491 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Scommaaccent +Encoding: 643 536 492 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: scommaaccent +Encoding: 644 537 493 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni021A +Encoding: 645 538 494 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni021B +Encoding: 646 539 495 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni021C +Encoding: 647 540 496 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni021D +Encoding: 648 541 497 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni021E +Encoding: 649 542 498 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni021F +Encoding: 650 543 499 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0220 +Encoding: 651 544 500 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0224 +Encoding: 652 548 501 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0225 +Encoding: 653 549 502 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0226 +Encoding: 654 550 503 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0227 +Encoding: 655 551 504 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0228 +Encoding: 656 552 505 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0229 +Encoding: 657 553 506 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni022B +Encoding: 658 555 507 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni022D +Encoding: 659 557 508 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni022E +Encoding: 660 558 509 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni022F +Encoding: 661 559 510 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0231 +Encoding: 662 561 511 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0232 +Encoding: 663 562 512 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0233 +Encoding: 664 563 513 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0241 +Encoding: 665 577 514 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0242 +Encoding: 666 578 515 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0246 +Encoding: 667 582 516 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0247 +Encoding: 668 583 517 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0250 +Encoding: 669 592 518 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0251 +Encoding: 670 593 519 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0252 +Encoding: 671 594 520 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0253 +Encoding: 672 595 521 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0254 +Encoding: 673 596 522 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0255 +Encoding: 674 597 523 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0256 +Encoding: 675 598 524 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0257 +Encoding: 676 599 525 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0258 +Encoding: 677 600 526 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0259 +Encoding: 678 601 527 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni025A +Encoding: 679 602 528 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni025B +Encoding: 680 603 529 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni025C +Encoding: 681 604 530 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni025D +Encoding: 682 605 531 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni025E +Encoding: 683 606 532 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni025F +Encoding: 684 607 533 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0260 +Encoding: 685 608 534 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0261 +Encoding: 686 609 535 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0262 +Encoding: 687 610 536 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0263 +Encoding: 688 611 537 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0264 +Encoding: 689 612 538 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0265 +Encoding: 690 613 539 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0266 +Encoding: 691 614 540 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0267 +Encoding: 692 615 541 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0268 +Encoding: 693 616 542 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0269 +Encoding: 694 617 543 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni026A +Encoding: 695 618 544 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni026B +Encoding: 696 619 545 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni026C +Encoding: 697 620 546 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni026D +Encoding: 698 621 547 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni026E +Encoding: 699 622 548 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni026F +Encoding: 700 623 549 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0270 +Encoding: 701 624 550 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0271 +Encoding: 702 625 551 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0272 +Encoding: 703 626 552 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0273 +Encoding: 704 627 553 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0274 +Encoding: 705 628 554 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0275 +Encoding: 706 629 555 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0276 +Encoding: 707 630 556 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0277 +Encoding: 708 631 557 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0278 +Encoding: 709 632 558 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0279 +Encoding: 710 633 559 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni027A +Encoding: 711 634 560 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni027B +Encoding: 712 635 561 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni027C +Encoding: 713 636 562 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni027D +Encoding: 714 637 563 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni027E +Encoding: 715 638 564 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni027F +Encoding: 716 639 565 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0280 +Encoding: 717 640 566 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0281 +Encoding: 718 641 567 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0282 +Encoding: 719 642 568 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0283 +Encoding: 720 643 569 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0284 +Encoding: 721 644 570 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0285 +Encoding: 722 645 571 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0286 +Encoding: 723 646 572 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0287 +Encoding: 724 647 573 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0288 +Encoding: 725 648 574 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0289 +Encoding: 726 649 575 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni028A +Encoding: 727 650 576 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni028B +Encoding: 728 651 577 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni028C +Encoding: 729 652 578 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni028D +Encoding: 730 653 579 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni028E +Encoding: 731 654 580 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni028F +Encoding: 732 655 581 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0290 +Encoding: 733 656 582 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0291 +Encoding: 734 657 583 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0292 +Encoding: 735 658 584 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0293 +Encoding: 736 659 585 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0294 +Encoding: 3 660 586 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni0295 +Encoding: 0 661 587 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni0296 +Encoding: 737 662 588 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0297 +Encoding: 738 663 589 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0298 +Encoding: 739 664 590 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0299 +Encoding: 740 665 591 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni029A +Encoding: 741 666 592 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni029B +Encoding: 742 667 593 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni029C +Encoding: 743 668 594 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni029D +Encoding: 744 669 595 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni029E +Encoding: 745 670 596 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni029F +Encoding: 746 671 597 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02A0 +Encoding: 747 672 598 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02A1 +Encoding: 748 673 599 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02A2 +Encoding: 749 674 600 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02B9 +Encoding: 750 697 601 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02BA +Encoding: 751 698 602 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02BB +Encoding: 752 699 603 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii57929 +Encoding: 753 700 604 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii64937 +Encoding: 754 701 605 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02C2 +Encoding: 755 706 606 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02C3 +Encoding: 756 707 607 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02C4 +Encoding: 757 708 608 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02C5 +Encoding: 758 709 609 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: circumflex +Encoding: 759 710 610 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: caron +Encoding: 760 711 611 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02C8 +Encoding: 761 712 612 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02C9 +Encoding: 762 713 613 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02CA +Encoding: 763 714 614 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02CB +Encoding: 764 715 615 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02CC +Encoding: 765 716 616 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02CD +Encoding: 766 717 617 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02CE +Encoding: 767 718 618 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02CF +Encoding: 768 719 619 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02D0 +Encoding: 769 720 620 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02D1 +Encoding: 770 721 621 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02D2 +Encoding: 771 722 622 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02D3 +Encoding: 772 723 623 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02D4 +Encoding: 773 724 624 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02D5 +Encoding: 774 725 625 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02D6 +Encoding: 775 726 626 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02D7 +Encoding: 776 727 627 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: breve +Encoding: 777 728 628 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: dotaccent +Encoding: 778 729 629 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: ring +Encoding: 779 730 630 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: ogonek +Encoding: 780 731 631 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: tilde +Encoding: 781 732 632 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: hungarumlaut +Encoding: 782 733 633 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02DF +Encoding: 783 735 634 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02E0 +Encoding: 784 736 635 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02E1 +Encoding: 785 737 636 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02E2 +Encoding: 786 738 637 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02E3 +Encoding: 787 739 638 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02E4 +Encoding: 788 740 639 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02EC +Encoding: 789 748 640 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02ED +Encoding: 790 749 641 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02EF +Encoding: 791 751 642 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02F0 +Encoding: 792 752 643 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02F1 +Encoding: 793 753 644 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02F2 +Encoding: 794 754 645 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02F3 +Encoding: 795 755 646 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02F4 +Encoding: 796 756 647 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02F5 +Encoding: 797 757 648 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02F6 +Encoding: 798 758 649 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02F7 +Encoding: 799 759 650 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02F9 +Encoding: 800 761 651 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02FA +Encoding: 801 762 652 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02FB +Encoding: 802 763 653 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02FC +Encoding: 803 764 654 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02FD +Encoding: 804 765 655 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni02FE +Encoding: 805 766 656 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: gravecomb +Encoding: 806 768 657 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: acutecomb +Encoding: 807 769 658 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0302 +Encoding: 808 770 659 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: tildecomb +Encoding: 809 771 660 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0304 +Encoding: 810 772 661 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0305 +Encoding: 811 773 662 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0306 +Encoding: 812 774 663 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0307 +Encoding: 813 775 664 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0308 +Encoding: 814 776 665 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: hookabovecomb +Encoding: 815 777 666 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni030A +Encoding: 816 778 667 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni030B +Encoding: 817 779 668 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni030C +Encoding: 818 780 669 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni030D +Encoding: 819 781 670 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni030E +Encoding: 820 782 671 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni030F +Encoding: 821 783 672 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0310 +Encoding: 822 784 673 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0311 +Encoding: 823 785 674 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0312 +Encoding: 824 786 675 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0313 +Encoding: 825 787 676 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0314 +Encoding: 826 788 677 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0315 +Encoding: 827 789 678 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0316 +Encoding: 828 790 679 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0317 +Encoding: 829 791 680 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0318 +Encoding: 830 792 681 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0319 +Encoding: 831 793 682 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni031A +Encoding: 832 794 683 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni031B +Encoding: 833 795 684 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni031C +Encoding: 834 796 685 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni031D +Encoding: 835 797 686 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni031E +Encoding: 836 798 687 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni031F +Encoding: 837 799 688 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0320 +Encoding: 838 800 689 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: dotbelowcomb +Encoding: 839 803 690 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0324 +Encoding: 840 804 691 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0325 +Encoding: 841 805 692 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0326 +Encoding: 842 806 693 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0327 +Encoding: 843 807 694 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0328 +Encoding: 844 808 695 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0329 +Encoding: 845 809 696 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni032A +Encoding: 846 810 697 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni032B +Encoding: 847 811 698 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni032C +Encoding: 848 812 699 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni032D +Encoding: 849 813 700 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni032E +Encoding: 850 814 701 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni032F +Encoding: 851 815 702 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0330 +Encoding: 852 816 703 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0331 +Encoding: 853 817 704 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0332 +Encoding: 854 818 705 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0333 +Encoding: 855 819 706 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni033A +Encoding: 856 826 707 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni033B +Encoding: 857 827 708 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni033C +Encoding: 858 828 709 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni033D +Encoding: 859 829 710 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni033E +Encoding: 860 830 711 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni033F +Encoding: 861 831 712 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0340 +Encoding: 862 832 713 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0341 +Encoding: 863 833 714 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0342 +Encoding: 864 834 715 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0343 +Encoding: 865 835 716 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0346 +Encoding: 866 838 717 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0347 +Encoding: 867 839 718 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0348 +Encoding: 868 840 719 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Alphatonos +Encoding: 869 902 720 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Epsilontonos +Encoding: 870 904 721 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Etatonos +Encoding: 871 905 722 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Iotatonos +Encoding: 872 906 723 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Omicrontonos +Encoding: 873 908 724 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Upsilontonos +Encoding: 874 910 725 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Omegatonos +Encoding: 875 911 726 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: iotadieresistonos +Encoding: 876 912 727 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Alpha +Encoding: 877 913 728 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Beta +Encoding: 878 914 729 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Gamma +Encoding: 879 915 730 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0394 +Encoding: 880 916 731 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Epsilon +Encoding: 881 917 732 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Zeta +Encoding: 882 918 733 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Eta +Encoding: 883 919 734 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Theta +Encoding: 884 920 735 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Iota +Encoding: 885 921 736 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Kappa +Encoding: 886 922 737 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Lambda +Encoding: 887 923 738 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Mu +Encoding: 888 924 739 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Nu +Encoding: 889 925 740 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Xi +Encoding: 890 926 741 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Omicron +Encoding: 891 927 742 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Pi +Encoding: 892 928 743 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Rho +Encoding: 893 929 744 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Sigma +Encoding: 894 931 745 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Tau +Encoding: 895 932 746 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Upsilon +Encoding: 896 933 747 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Phi +Encoding: 897 934 748 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Chi +Encoding: 898 935 749 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Psi +Encoding: 899 936 750 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni03A9 +Encoding: 900 937 751 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Iotadieresis +Encoding: 901 938 752 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Upsilondieresis +Encoding: 902 939 753 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: alphatonos +Encoding: 903 940 754 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: epsilontonos +Encoding: 904 941 755 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: etatonos +Encoding: 905 942 756 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: iotatonos +Encoding: 906 943 757 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: upsilondieresistonos +Encoding: 907 944 758 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: alpha +Encoding: 908 945 759 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: beta +Encoding: 909 946 760 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: gamma +Encoding: 910 947 761 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: delta +Encoding: 911 948 762 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: epsilon +Encoding: 912 949 763 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: zeta +Encoding: 913 950 764 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: eta +Encoding: 914 951 765 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: theta +Encoding: 915 952 766 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: iota +Encoding: 916 953 767 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: kappa +Encoding: 917 954 768 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: lambda +Encoding: 918 955 769 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni03BC +Encoding: 919 956 770 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: nu +Encoding: 920 957 771 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: xi +Encoding: 921 958 772 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: omicron +Encoding: 922 959 773 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: pi +Encoding: 923 960 774 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: rho +Encoding: 924 961 775 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: sigma1 +Encoding: 925 962 776 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: sigma +Encoding: 926 963 777 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: tau +Encoding: 927 964 778 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: upsilon +Encoding: 928 965 779 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: phi +Encoding: 929 966 780 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: chi +Encoding: 930 967 781 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: psi +Encoding: 931 968 782 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: omega +Encoding: 932 969 783 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: iotadieresis +Encoding: 933 970 784 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: upsilondieresis +Encoding: 934 971 785 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: omicrontonos +Encoding: 935 972 786 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: upsilontonos +Encoding: 936 973 787 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: omegatonos +Encoding: 937 974 788 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: phi1 +Encoding: 938 981 789 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni03DA +Encoding: 939 986 790 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni03DB +Encoding: 940 987 791 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni03DC +Encoding: 941 988 792 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni03DD +Encoding: 942 989 793 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni03F4 +Encoding: 943 1012 794 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni03F7 +Encoding: 944 1015 795 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni03F8 +Encoding: 945 1016 796 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni03F9 +Encoding: 946 1017 797 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0400 +Encoding: 947 1024 798 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10023 +Encoding: 948 1025 799 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10051 +Encoding: 949 1026 800 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10052 +Encoding: 950 1027 801 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10053 +Encoding: 951 1028 802 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10054 +Encoding: 952 1029 803 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10055 +Encoding: 953 1030 804 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10056 +Encoding: 954 1031 805 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10057 +Encoding: 955 1032 806 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10058 +Encoding: 956 1033 807 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10059 +Encoding: 957 1034 808 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10060 +Encoding: 958 1035 809 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10061 +Encoding: 959 1036 810 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni040D +Encoding: 960 1037 811 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10062 +Encoding: 961 1038 812 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10145 +Encoding: 962 1039 813 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10017 +Encoding: 963 1040 814 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10018 +Encoding: 964 1041 815 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10019 +Encoding: 965 1042 816 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10020 +Encoding: 966 1043 817 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10021 +Encoding: 967 1044 818 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10022 +Encoding: 968 1045 819 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10024 +Encoding: 969 1046 820 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10025 +Encoding: 970 1047 821 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10026 +Encoding: 971 1048 822 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10027 +Encoding: 972 1049 823 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10028 +Encoding: 973 1050 824 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10029 +Encoding: 974 1051 825 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10030 +Encoding: 975 1052 826 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10031 +Encoding: 976 1053 827 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10032 +Encoding: 977 1054 828 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10033 +Encoding: 978 1055 829 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10034 +Encoding: 979 1056 830 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10035 +Encoding: 980 1057 831 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10036 +Encoding: 981 1058 832 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10037 +Encoding: 982 1059 833 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10038 +Encoding: 983 1060 834 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10039 +Encoding: 984 1061 835 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10040 +Encoding: 985 1062 836 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10041 +Encoding: 986 1063 837 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10042 +Encoding: 987 1064 838 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10043 +Encoding: 988 1065 839 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10044 +Encoding: 989 1066 840 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10045 +Encoding: 990 1067 841 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10046 +Encoding: 991 1068 842 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10047 +Encoding: 992 1069 843 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10048 +Encoding: 993 1070 844 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10049 +Encoding: 994 1071 845 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10065 +Encoding: 995 1072 846 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10066 +Encoding: 996 1073 847 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10067 +Encoding: 997 1074 848 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10068 +Encoding: 998 1075 849 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10069 +Encoding: 999 1076 850 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10070 +Encoding: 1000 1077 851 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10072 +Encoding: 1001 1078 852 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10073 +Encoding: 1002 1079 853 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10074 +Encoding: 1003 1080 854 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10075 +Encoding: 1004 1081 855 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10076 +Encoding: 1005 1082 856 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10077 +Encoding: 1006 1083 857 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10078 +Encoding: 1007 1084 858 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10079 +Encoding: 1008 1085 859 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10080 +Encoding: 1009 1086 860 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10081 +Encoding: 1010 1087 861 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10082 +Encoding: 1011 1088 862 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10083 +Encoding: 1012 1089 863 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10084 +Encoding: 1013 1090 864 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10085 +Encoding: 1014 1091 865 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10086 +Encoding: 1015 1092 866 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10087 +Encoding: 1016 1093 867 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10088 +Encoding: 1017 1094 868 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10089 +Encoding: 1018 1095 869 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10090 +Encoding: 1019 1096 870 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10091 +Encoding: 1020 1097 871 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10092 +Encoding: 1021 1098 872 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10093 +Encoding: 1022 1099 873 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10094 +Encoding: 1023 1100 874 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10095 +Encoding: 1024 1101 875 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10096 +Encoding: 1025 1102 876 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10097 +Encoding: 1026 1103 877 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0450 +Encoding: 1027 1104 878 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10071 +Encoding: 1028 1105 879 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10099 +Encoding: 1029 1106 880 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10100 +Encoding: 1030 1107 881 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10101 +Encoding: 1031 1108 882 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10102 +Encoding: 1032 1109 883 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10103 +Encoding: 1033 1110 884 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10104 +Encoding: 1034 1111 885 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10105 +Encoding: 1035 1112 886 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10106 +Encoding: 1036 1113 887 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10107 +Encoding: 1037 1114 888 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10108 +Encoding: 1038 1115 889 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10109 +Encoding: 1039 1116 890 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni045D +Encoding: 1040 1117 891 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10110 +Encoding: 1041 1118 892 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10193 +Encoding: 1042 1119 893 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0460 +Encoding: 1043 1120 894 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0461 +Encoding: 1044 1121 895 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10146 +Encoding: 1045 1122 896 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10194 +Encoding: 1046 1123 897 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0464 +Encoding: 1047 1124 898 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0465 +Encoding: 1048 1125 899 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0466 +Encoding: 1049 1126 900 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0467 +Encoding: 1050 1127 901 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0468 +Encoding: 1051 1128 902 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0469 +Encoding: 1052 1129 903 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni046A +Encoding: 1053 1130 904 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni046B +Encoding: 1054 1131 905 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni046C +Encoding: 1055 1132 906 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni046D +Encoding: 1056 1133 907 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni046E +Encoding: 1057 1134 908 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni046F +Encoding: 1058 1135 909 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0470 +Encoding: 1059 1136 910 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0471 +Encoding: 1060 1137 911 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10147 +Encoding: 1061 1138 912 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10195 +Encoding: 1062 1139 913 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10148 +Encoding: 1063 1140 914 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10196 +Encoding: 1064 1141 915 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0476 +Encoding: 1065 1142 916 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0477 +Encoding: 1066 1143 917 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0478 +Encoding: 1067 1144 918 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0479 +Encoding: 1068 1145 919 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni047A +Encoding: 1069 1146 920 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni047B +Encoding: 1070 1147 921 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni047C +Encoding: 1071 1148 922 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni047D +Encoding: 1072 1149 923 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni047E +Encoding: 1073 1150 924 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni047F +Encoding: 1074 1151 925 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0480 +Encoding: 1075 1152 926 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0481 +Encoding: 1076 1153 927 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0482 +Encoding: 1077 1154 928 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni048A +Encoding: 1078 1162 929 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni048B +Encoding: 1079 1163 930 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni048C +Encoding: 1080 1164 931 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni048D +Encoding: 1081 1165 932 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni048E +Encoding: 1082 1166 933 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni048F +Encoding: 1083 1167 934 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10050 +Encoding: 1084 1168 935 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10098 +Encoding: 1085 1169 936 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0492 +Encoding: 1086 1170 937 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0493 +Encoding: 1087 1171 938 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0494 +Encoding: 1088 1172 939 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0495 +Encoding: 1089 1173 940 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0496 +Encoding: 1090 1174 941 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0497 +Encoding: 1091 1175 942 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0498 +Encoding: 1092 1176 943 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0499 +Encoding: 1093 1177 944 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni049A +Encoding: 1094 1178 945 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni049B +Encoding: 1095 1179 946 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni049C +Encoding: 1096 1180 947 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni049D +Encoding: 1097 1181 948 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni049E +Encoding: 1098 1182 949 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni049F +Encoding: 1099 1183 950 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04A0 +Encoding: 1100 1184 951 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04A1 +Encoding: 1101 1185 952 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04A2 +Encoding: 1102 1186 953 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04A3 +Encoding: 1103 1187 954 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04A4 +Encoding: 1104 1188 955 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04A5 +Encoding: 1105 1189 956 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04A6 +Encoding: 1106 1190 957 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04A7 +Encoding: 1107 1191 958 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04A8 +Encoding: 1108 1192 959 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04A9 +Encoding: 1109 1193 960 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04AA +Encoding: 1110 1194 961 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04AB +Encoding: 1111 1195 962 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04AC +Encoding: 1112 1196 963 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04AD +Encoding: 1113 1197 964 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04AE +Encoding: 1114 1198 965 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04AF +Encoding: 1115 1199 966 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04B0 +Encoding: 1116 1200 967 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04B1 +Encoding: 1117 1201 968 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04B2 +Encoding: 1118 1202 969 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04B3 +Encoding: 1119 1203 970 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04B4 +Encoding: 1120 1204 971 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04B5 +Encoding: 1121 1205 972 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04B6 +Encoding: 1122 1206 973 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04B7 +Encoding: 1123 1207 974 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04B8 +Encoding: 1124 1208 975 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04B9 +Encoding: 1125 1209 976 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04BA +Encoding: 1126 1210 977 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04BB +Encoding: 1127 1211 978 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04BC +Encoding: 1128 1212 979 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04BD +Encoding: 1129 1213 980 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04BE +Encoding: 1130 1214 981 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04BF +Encoding: 1131 1215 982 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04C0 +Encoding: 1132 1216 983 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04C1 +Encoding: 1133 1217 984 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04C2 +Encoding: 1134 1218 985 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04C3 +Encoding: 1135 1219 986 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04C4 +Encoding: 1136 1220 987 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04C5 +Encoding: 1137 1221 988 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04C6 +Encoding: 1138 1222 989 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04C7 +Encoding: 1139 1223 990 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04C8 +Encoding: 1140 1224 991 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04C9 +Encoding: 1141 1225 992 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04CA +Encoding: 1142 1226 993 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04CB +Encoding: 1143 1227 994 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04CC +Encoding: 1144 1228 995 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04CD +Encoding: 1145 1229 996 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04CE +Encoding: 1146 1230 997 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04CF +Encoding: 1147 1231 998 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04D0 +Encoding: 1148 1232 999 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04D1 +Encoding: 1149 1233 1000 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04D2 +Encoding: 1150 1234 1001 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04D3 +Encoding: 1151 1235 1002 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04D4 +Encoding: 1152 1236 1003 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04D5 +Encoding: 1153 1237 1004 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04D6 +Encoding: 1154 1238 1005 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04D7 +Encoding: 1155 1239 1006 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04D8 +Encoding: 1156 1240 1007 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii10846 +Encoding: 1157 1241 1008 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04DA +Encoding: 1158 1242 1009 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04DB +Encoding: 1159 1243 1010 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04DC +Encoding: 1160 1244 1011 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04DD +Encoding: 1161 1245 1012 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04DE +Encoding: 1162 1246 1013 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04DF +Encoding: 1163 1247 1014 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04E0 +Encoding: 1164 1248 1015 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04E1 +Encoding: 1165 1249 1016 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04E2 +Encoding: 1166 1250 1017 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04E3 +Encoding: 1167 1251 1018 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04E4 +Encoding: 1168 1252 1019 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04E5 +Encoding: 1169 1253 1020 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04E6 +Encoding: 1170 1254 1021 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04E7 +Encoding: 1171 1255 1022 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04E8 +Encoding: 1172 1256 1023 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04E9 +Encoding: 1173 1257 1024 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04EA +Encoding: 1174 1258 1025 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04EB +Encoding: 1175 1259 1026 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04EC +Encoding: 1176 1260 1027 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04ED +Encoding: 1177 1261 1028 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04EE +Encoding: 1178 1262 1029 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04EF +Encoding: 1179 1263 1030 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04F0 +Encoding: 1180 1264 1031 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04F1 +Encoding: 1181 1265 1032 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04F2 +Encoding: 1182 1266 1033 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04F3 +Encoding: 1183 1267 1034 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04F4 +Encoding: 1184 1268 1035 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04F5 +Encoding: 1185 1269 1036 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04F6 +Encoding: 1186 1270 1037 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04F7 +Encoding: 1187 1271 1038 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04F8 +Encoding: 1188 1272 1039 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04F9 +Encoding: 1189 1273 1040 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04FA +Encoding: 1190 1274 1041 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04FB +Encoding: 1191 1275 1042 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04FC +Encoding: 1192 1276 1043 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04FD +Encoding: 1193 1277 1044 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04FE +Encoding: 1194 1278 1045 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni04FF +Encoding: 1195 1279 1046 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0500 +Encoding: 1196 1280 1047 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0501 +Encoding: 1197 1281 1048 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0502 +Encoding: 1198 1282 1049 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0503 +Encoding: 1199 1283 1050 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0504 +Encoding: 1200 1284 1051 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0505 +Encoding: 1201 1285 1052 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0506 +Encoding: 1202 1286 1053 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0507 +Encoding: 1203 1287 1054 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0508 +Encoding: 1204 1288 1055 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0509 +Encoding: 1205 1289 1056 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni050A +Encoding: 1206 1290 1057 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni050B +Encoding: 1207 1291 1058 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni050C +Encoding: 1208 1292 1059 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni050D +Encoding: 1209 1293 1060 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni050E +Encoding: 1210 1294 1061 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni050F +Encoding: 1211 1295 1062 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0510 +Encoding: 1212 1296 1063 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0511 +Encoding: 1213 1297 1064 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0512 +Encoding: 1214 1298 1065 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0513 +Encoding: 1215 1299 1066 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0514 +Encoding: 1216 1300 1067 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0515 +Encoding: 1217 1301 1068 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0516 +Encoding: 1218 1302 1069 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0517 +Encoding: 1219 1303 1070 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0518 +Encoding: 1220 1304 1071 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0519 +Encoding: 1221 1305 1072 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni051A +Encoding: 1222 1306 1073 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni051B +Encoding: 1223 1307 1074 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni051C +Encoding: 1224 1308 1075 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni051D +Encoding: 1225 1309 1076 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni051E +Encoding: 1226 1310 1077 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni051F +Encoding: 1227 1311 1078 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0520 +Encoding: 1228 1312 1079 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0521 +Encoding: 1229 1313 1080 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0522 +Encoding: 1230 1314 1081 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0523 +Encoding: 1231 1315 1082 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0524 +Encoding: 1232 1316 1083 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0525 +Encoding: 1233 1317 1084 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0526 +Encoding: 1234 1318 1085 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0527 +Encoding: 1235 1319 1086 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0528 +Encoding: 1236 1320 1087 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0529 +Encoding: 1237 1321 1088 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni052A +Encoding: 1238 1322 1089 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni052B +Encoding: 1239 1323 1090 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni052C +Encoding: 1240 1324 1091 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni052D +Encoding: 1241 1325 1092 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni052E +Encoding: 1242 1326 1093 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni052F +Encoding: 1243 1327 1094 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni0CA0 +Encoding: 1244 3232 1095 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni16A0 +Encoding: 1245 5792 1096 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni16A2 +Encoding: 1246 5794 1097 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni16A3 +Encoding: 1247 5795 1098 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni16A4 +Encoding: 1248 5796 1099 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni16A5 +Encoding: 1249 5797 1100 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni16A6 +Encoding: 1250 5798 1101 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni16A8 +Encoding: 1251 5800 1102 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni16A9 +Encoding: 1252 5801 1103 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni16AA +Encoding: 1253 5802 1104 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni16AB +Encoding: 1254 5803 1105 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni16AC +Encoding: 1255 5804 1106 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1D25 +Encoding: 2 7461 1107 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni1E00 +Encoding: 1256 7680 1108 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E01 +Encoding: 1257 7681 1109 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E02 +Encoding: 1258 7682 1110 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E03 +Encoding: 1259 7683 1111 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E04 +Encoding: 1260 7684 1112 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E05 +Encoding: 1261 7685 1113 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E06 +Encoding: 1262 7686 1114 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E07 +Encoding: 1263 7687 1115 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E08 +Encoding: 1264 7688 1116 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E09 +Encoding: 1265 7689 1117 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E0A +Encoding: 1266 7690 1118 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E0B +Encoding: 1267 7691 1119 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E0C +Encoding: 1268 7692 1120 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E0D +Encoding: 1269 7693 1121 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E0E +Encoding: 1270 7694 1122 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E0F +Encoding: 1271 7695 1123 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E10 +Encoding: 1272 7696 1124 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E11 +Encoding: 1273 7697 1125 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E12 +Encoding: 1274 7698 1126 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E13 +Encoding: 1275 7699 1127 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E14 +Encoding: 1276 7700 1128 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E15 +Encoding: 1277 7701 1129 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E16 +Encoding: 1278 7702 1130 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E17 +Encoding: 1279 7703 1131 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E18 +Encoding: 1280 7704 1132 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E19 +Encoding: 1281 7705 1133 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E1A +Encoding: 1282 7706 1134 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E1B +Encoding: 1283 7707 1135 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E1C +Encoding: 1284 7708 1136 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E1D +Encoding: 1285 7709 1137 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E1E +Encoding: 1286 7710 1138 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E1F +Encoding: 1287 7711 1139 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E20 +Encoding: 1288 7712 1140 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E21 +Encoding: 1289 7713 1141 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E22 +Encoding: 1290 7714 1142 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E23 +Encoding: 1291 7715 1143 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E24 +Encoding: 1292 7716 1144 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E25 +Encoding: 1293 7717 1145 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E26 +Encoding: 1294 7718 1146 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E27 +Encoding: 1295 7719 1147 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E28 +Encoding: 1296 7720 1148 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E29 +Encoding: 1297 7721 1149 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E2A +Encoding: 1298 7722 1150 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E2B +Encoding: 1299 7723 1151 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E2C +Encoding: 1300 7724 1152 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E2D +Encoding: 1301 7725 1153 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E2E +Encoding: 1302 7726 1154 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E2F +Encoding: 1303 7727 1155 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E30 +Encoding: 1304 7728 1156 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E31 +Encoding: 1305 7729 1157 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E32 +Encoding: 1306 7730 1158 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E33 +Encoding: 1307 7731 1159 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E34 +Encoding: 1308 7732 1160 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E35 +Encoding: 1309 7733 1161 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E36 +Encoding: 1310 7734 1162 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E37 +Encoding: 1311 7735 1163 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E38 +Encoding: 1312 7736 1164 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E39 +Encoding: 1313 7737 1165 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E3A +Encoding: 1314 7738 1166 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E3B +Encoding: 1315 7739 1167 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E3C +Encoding: 1316 7740 1168 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E3D +Encoding: 1317 7741 1169 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E3E +Encoding: 1318 7742 1170 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E3F +Encoding: 1319 7743 1171 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E40 +Encoding: 1320 7744 1172 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E41 +Encoding: 1321 7745 1173 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E42 +Encoding: 1322 7746 1174 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E43 +Encoding: 1323 7747 1175 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E44 +Encoding: 1324 7748 1176 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E45 +Encoding: 1325 7749 1177 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E46 +Encoding: 1326 7750 1178 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E47 +Encoding: 1327 7751 1179 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E48 +Encoding: 1328 7752 1180 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E49 +Encoding: 1329 7753 1181 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E4A +Encoding: 1330 7754 1182 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E4B +Encoding: 1331 7755 1183 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E4C +Encoding: 1332 7756 1184 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E4D +Encoding: 1333 7757 1185 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E4E +Encoding: 1334 7758 1186 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E4F +Encoding: 1335 7759 1187 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E50 +Encoding: 1336 7760 1188 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E51 +Encoding: 1337 7761 1189 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E52 +Encoding: 1338 7762 1190 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E53 +Encoding: 1339 7763 1191 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E54 +Encoding: 1340 7764 1192 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E55 +Encoding: 1341 7765 1193 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E56 +Encoding: 1342 7766 1194 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E57 +Encoding: 1343 7767 1195 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E58 +Encoding: 1344 7768 1196 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E59 +Encoding: 1345 7769 1197 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E5A +Encoding: 1346 7770 1198 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E5B +Encoding: 1347 7771 1199 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E5C +Encoding: 1348 7772 1200 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E5D +Encoding: 1349 7773 1201 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E5E +Encoding: 1350 7774 1202 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E5F +Encoding: 1351 7775 1203 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E60 +Encoding: 1352 7776 1204 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E61 +Encoding: 1353 7777 1205 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E62 +Encoding: 1354 7778 1206 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E63 +Encoding: 1355 7779 1207 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E64 +Encoding: 1356 7780 1208 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E65 +Encoding: 1357 7781 1209 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E66 +Encoding: 1358 7782 1210 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E67 +Encoding: 1359 7783 1211 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E68 +Encoding: 1360 7784 1212 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E69 +Encoding: 1361 7785 1213 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E6A +Encoding: 1362 7786 1214 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E6B +Encoding: 1363 7787 1215 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E6C +Encoding: 1364 7788 1216 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E6D +Encoding: 1365 7789 1217 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E6E +Encoding: 1366 7790 1218 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E6F +Encoding: 1367 7791 1219 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E70 +Encoding: 1368 7792 1220 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E71 +Encoding: 1369 7793 1221 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E72 +Encoding: 1370 7794 1222 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E73 +Encoding: 1371 7795 1223 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E74 +Encoding: 1372 7796 1224 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E75 +Encoding: 1373 7797 1225 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E76 +Encoding: 1374 7798 1226 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E77 +Encoding: 1375 7799 1227 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E78 +Encoding: 1376 7800 1228 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E79 +Encoding: 1377 7801 1229 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E7A +Encoding: 1378 7802 1230 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E7B +Encoding: 1379 7803 1231 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E7C +Encoding: 1380 7804 1232 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E7D +Encoding: 1381 7805 1233 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E7E +Encoding: 1382 7806 1234 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E7F +Encoding: 1383 7807 1235 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Wgrave +Encoding: 1384 7808 1236 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: wgrave +Encoding: 1385 7809 1237 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Wacute +Encoding: 1386 7810 1238 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: wacute +Encoding: 1387 7811 1239 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Wdieresis +Encoding: 1388 7812 1240 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: wdieresis +Encoding: 1389 7813 1241 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E86 +Encoding: 1390 7814 1242 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E87 +Encoding: 1391 7815 1243 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E88 +Encoding: 1392 7816 1244 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E89 +Encoding: 1393 7817 1245 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E8A +Encoding: 1394 7818 1246 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E8B +Encoding: 1395 7819 1247 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E8C +Encoding: 1396 7820 1248 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E8D +Encoding: 1397 7821 1249 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E8E +Encoding: 1398 7822 1250 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E8F +Encoding: 1399 7823 1251 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E90 +Encoding: 1400 7824 1252 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E91 +Encoding: 1401 7825 1253 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E92 +Encoding: 1402 7826 1254 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E93 +Encoding: 1403 7827 1255 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E94 +Encoding: 1404 7828 1256 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E95 +Encoding: 1405 7829 1257 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E96 +Encoding: 1406 7830 1258 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E97 +Encoding: 1407 7831 1259 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E98 +Encoding: 1408 7832 1260 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E99 +Encoding: 1409 7833 1261 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E9A +Encoding: 1410 7834 1262 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E9B +Encoding: 1411 7835 1263 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E9C +Encoding: 1412 7836 1264 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E9D +Encoding: 1413 7837 1265 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E9E +Encoding: 1414 7838 1266 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1E9F +Encoding: 1415 7839 1267 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EA0 +Encoding: 1416 7840 1268 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EA1 +Encoding: 1417 7841 1269 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EA2 +Encoding: 1418 7842 1270 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EA3 +Encoding: 1419 7843 1271 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EA4 +Encoding: 1420 7844 1272 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EA5 +Encoding: 1421 7845 1273 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EA6 +Encoding: 1422 7846 1274 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EA7 +Encoding: 1423 7847 1275 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EA8 +Encoding: 1424 7848 1276 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EA9 +Encoding: 1425 7849 1277 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EAA +Encoding: 1426 7850 1278 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EAB +Encoding: 1427 7851 1279 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EAC +Encoding: 1428 7852 1280 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EAD +Encoding: 1429 7853 1281 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EAE +Encoding: 1430 7854 1282 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EAF +Encoding: 1431 7855 1283 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EB0 +Encoding: 1432 7856 1284 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EB1 +Encoding: 1433 7857 1285 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EB2 +Encoding: 1434 7858 1286 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EB3 +Encoding: 1435 7859 1287 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EB4 +Encoding: 1436 7860 1288 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EB5 +Encoding: 1437 7861 1289 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EB6 +Encoding: 1438 7862 1290 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EB7 +Encoding: 1439 7863 1291 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EB8 +Encoding: 1440 7864 1292 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EB9 +Encoding: 1441 7865 1293 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EBA +Encoding: 1442 7866 1294 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EBB +Encoding: 1443 7867 1295 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EBC +Encoding: 1444 7868 1296 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EBD +Encoding: 1445 7869 1297 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EBE +Encoding: 1446 7870 1298 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EBF +Encoding: 1447 7871 1299 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EC0 +Encoding: 1448 7872 1300 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EC1 +Encoding: 1449 7873 1301 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EC2 +Encoding: 1450 7874 1302 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EC3 +Encoding: 1451 7875 1303 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EC4 +Encoding: 1452 7876 1304 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EC5 +Encoding: 1453 7877 1305 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EC6 +Encoding: 1454 7878 1306 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EC7 +Encoding: 1455 7879 1307 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EC8 +Encoding: 1456 7880 1308 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EC9 +Encoding: 1457 7881 1309 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1ECA +Encoding: 1458 7882 1310 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1ECB +Encoding: 1459 7883 1311 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1ECC +Encoding: 1460 7884 1312 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1ECD +Encoding: 1461 7885 1313 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1ECE +Encoding: 1462 7886 1314 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1ECF +Encoding: 1463 7887 1315 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1ED0 +Encoding: 1464 7888 1316 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1ED1 +Encoding: 1465 7889 1317 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1ED2 +Encoding: 1466 7890 1318 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1ED3 +Encoding: 1467 7891 1319 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1ED4 +Encoding: 1468 7892 1320 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1ED5 +Encoding: 1469 7893 1321 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1ED6 +Encoding: 1470 7894 1322 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1ED7 +Encoding: 1471 7895 1323 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1ED8 +Encoding: 1472 7896 1324 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1ED9 +Encoding: 1473 7897 1325 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EDA +Encoding: 1474 7898 1326 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EDB +Encoding: 1475 7899 1327 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EDC +Encoding: 1476 7900 1328 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EDD +Encoding: 1477 7901 1329 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EDE +Encoding: 1478 7902 1330 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EDF +Encoding: 1479 7903 1331 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EE0 +Encoding: 1480 7904 1332 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EE1 +Encoding: 1481 7905 1333 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EE2 +Encoding: 1482 7906 1334 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EE3 +Encoding: 1483 7907 1335 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EE4 +Encoding: 1484 7908 1336 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EE5 +Encoding: 1485 7909 1337 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EE6 +Encoding: 1486 7910 1338 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EE7 +Encoding: 1487 7911 1339 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EE8 +Encoding: 1488 7912 1340 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EE9 +Encoding: 1489 7913 1341 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EEA +Encoding: 1490 7914 1342 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EEB +Encoding: 1491 7915 1343 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EEC +Encoding: 1492 7916 1344 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EED +Encoding: 1493 7917 1345 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EEE +Encoding: 1494 7918 1346 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EEF +Encoding: 1495 7919 1347 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EF0 +Encoding: 1496 7920 1348 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EF1 +Encoding: 1497 7921 1349 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Ygrave +Encoding: 1498 7922 1350 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: ygrave +Encoding: 1499 7923 1351 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EF4 +Encoding: 1500 7924 1352 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EF5 +Encoding: 1501 7925 1353 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EF6 +Encoding: 1502 7926 1354 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EF7 +Encoding: 1503 7927 1355 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EF8 +Encoding: 1504 7928 1356 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1EF9 +Encoding: 1505 7929 1357 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F00 +Encoding: 1506 7936 1358 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F01 +Encoding: 1507 7937 1359 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F02 +Encoding: 1508 7938 1360 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F03 +Encoding: 1509 7939 1361 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F04 +Encoding: 1510 7940 1362 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F05 +Encoding: 1511 7941 1363 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F08 +Encoding: 1512 7944 1364 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F09 +Encoding: 1513 7945 1365 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F0A +Encoding: 1514 7946 1366 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F0B +Encoding: 1515 7947 1367 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F0C +Encoding: 1516 7948 1368 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F0D +Encoding: 1517 7949 1369 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F10 +Encoding: 1518 7952 1370 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F11 +Encoding: 1519 7953 1371 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F12 +Encoding: 1520 7954 1372 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F13 +Encoding: 1521 7955 1373 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F14 +Encoding: 1522 7956 1374 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F15 +Encoding: 1523 7957 1375 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F18 +Encoding: 1524 7960 1376 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F19 +Encoding: 1525 7961 1377 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F1A +Encoding: 1526 7962 1378 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F1B +Encoding: 1527 7963 1379 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F1C +Encoding: 1528 7964 1380 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F1D +Encoding: 1529 7965 1381 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F20 +Encoding: 1530 7968 1382 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F21 +Encoding: 1531 7969 1383 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F22 +Encoding: 1532 7970 1384 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F23 +Encoding: 1533 7971 1385 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F24 +Encoding: 1534 7972 1386 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F25 +Encoding: 1535 7973 1387 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F28 +Encoding: 1536 7976 1388 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F29 +Encoding: 1537 7977 1389 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F2A +Encoding: 1538 7978 1390 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F2B +Encoding: 1539 7979 1391 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F2C +Encoding: 1540 7980 1392 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F2D +Encoding: 1541 7981 1393 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F30 +Encoding: 1542 7984 1394 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F31 +Encoding: 1543 7985 1395 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F32 +Encoding: 1544 7986 1396 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F33 +Encoding: 1545 7987 1397 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F34 +Encoding: 1546 7988 1398 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F35 +Encoding: 1547 7989 1399 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F38 +Encoding: 1548 7992 1400 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F39 +Encoding: 1549 7993 1401 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F3A +Encoding: 1550 7994 1402 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F3B +Encoding: 1551 7995 1403 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F3C +Encoding: 1552 7996 1404 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F3D +Encoding: 1553 7997 1405 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F40 +Encoding: 1554 8000 1406 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F41 +Encoding: 1555 8001 1407 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F42 +Encoding: 1556 8002 1408 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F43 +Encoding: 1557 8003 1409 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F44 +Encoding: 1558 8004 1410 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F45 +Encoding: 1559 8005 1411 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F48 +Encoding: 1560 8008 1412 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F49 +Encoding: 1561 8009 1413 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F4A +Encoding: 1562 8010 1414 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F4B +Encoding: 1563 8011 1415 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F4C +Encoding: 1564 8012 1416 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F4D +Encoding: 1565 8013 1417 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F50 +Encoding: 1566 8016 1418 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F51 +Encoding: 1567 8017 1419 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F52 +Encoding: 1568 8018 1420 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F53 +Encoding: 1569 8019 1421 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F54 +Encoding: 1570 8020 1422 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F55 +Encoding: 1571 8021 1423 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F59 +Encoding: 1572 8025 1424 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F5B +Encoding: 1573 8027 1425 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F5D +Encoding: 1574 8029 1426 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F60 +Encoding: 1575 8032 1427 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F61 +Encoding: 1576 8033 1428 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F62 +Encoding: 1577 8034 1429 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F63 +Encoding: 1578 8035 1430 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F64 +Encoding: 1579 8036 1431 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F65 +Encoding: 1580 8037 1432 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F68 +Encoding: 1581 8040 1433 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F69 +Encoding: 1582 8041 1434 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F6A +Encoding: 1583 8042 1435 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F6B +Encoding: 1584 8043 1436 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F6C +Encoding: 1585 8044 1437 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F6D +Encoding: 1586 8045 1438 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F70 +Encoding: 1587 8048 1439 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F71 +Encoding: 1588 8049 1440 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F72 +Encoding: 1589 8050 1441 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F73 +Encoding: 1590 8051 1442 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F74 +Encoding: 1591 8052 1443 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F75 +Encoding: 1592 8053 1444 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F76 +Encoding: 1593 8054 1445 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F77 +Encoding: 1594 8055 1446 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F78 +Encoding: 1595 8056 1447 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F79 +Encoding: 1596 8057 1448 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F7A +Encoding: 1597 8058 1449 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F7B +Encoding: 1598 8059 1450 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F7C +Encoding: 1599 8060 1451 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F7D +Encoding: 1600 8061 1452 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F80 +Encoding: 1601 8064 1453 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F81 +Encoding: 1602 8065 1454 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F82 +Encoding: 1603 8066 1455 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F83 +Encoding: 1604 8067 1456 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F84 +Encoding: 1605 8068 1457 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F85 +Encoding: 1606 8069 1458 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F88 +Encoding: 1607 8072 1459 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F89 +Encoding: 1608 8073 1460 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F8A +Encoding: 1609 8074 1461 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F8B +Encoding: 1610 8075 1462 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F8C +Encoding: 1611 8076 1463 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F8D +Encoding: 1612 8077 1464 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F90 +Encoding: 1613 8080 1465 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F91 +Encoding: 1614 8081 1466 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F92 +Encoding: 1615 8082 1467 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F93 +Encoding: 1616 8083 1468 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F94 +Encoding: 1617 8084 1469 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F95 +Encoding: 1618 8085 1470 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F98 +Encoding: 1619 8088 1471 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F99 +Encoding: 1620 8089 1472 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F9A +Encoding: 1621 8090 1473 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F9B +Encoding: 1622 8091 1474 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F9C +Encoding: 1623 8092 1475 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1F9D +Encoding: 1624 8093 1476 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FA0 +Encoding: 1625 8096 1477 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FA1 +Encoding: 1626 8097 1478 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FA2 +Encoding: 1627 8098 1479 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FA3 +Encoding: 1628 8099 1480 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FA4 +Encoding: 1629 8100 1481 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FA5 +Encoding: 1630 8101 1482 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FA8 +Encoding: 1631 8104 1483 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FA9 +Encoding: 1632 8105 1484 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FAA +Encoding: 1633 8106 1485 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FAB +Encoding: 1634 8107 1486 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FAC +Encoding: 1635 8108 1487 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FAD +Encoding: 1636 8109 1488 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FB0 +Encoding: 1637 8112 1489 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FB1 +Encoding: 1638 8113 1490 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FB2 +Encoding: 1639 8114 1491 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FB3 +Encoding: 1640 8115 1492 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FB4 +Encoding: 1641 8116 1493 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FB6 +Encoding: 1642 8118 1494 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FB7 +Encoding: 1643 8119 1495 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FB8 +Encoding: 1644 8120 1496 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FB9 +Encoding: 1645 8121 1497 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FBA +Encoding: 1646 8122 1498 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FBB +Encoding: 1647 8123 1499 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FBC +Encoding: 1648 8124 1500 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FC2 +Encoding: 1649 8130 1501 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FC3 +Encoding: 1650 8131 1502 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FC4 +Encoding: 1651 8132 1503 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FC6 +Encoding: 1652 8134 1504 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FC7 +Encoding: 1653 8135 1505 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FC8 +Encoding: 1654 8136 1506 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FC9 +Encoding: 1655 8137 1507 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FCA +Encoding: 1656 8138 1508 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FCB +Encoding: 1657 8139 1509 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FCC +Encoding: 1658 8140 1510 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FD0 +Encoding: 1659 8144 1511 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FD1 +Encoding: 1660 8145 1512 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FD2 +Encoding: 1661 8146 1513 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FD3 +Encoding: 1662 8147 1514 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FD6 +Encoding: 1663 8150 1515 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FD7 +Encoding: 1664 8151 1516 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FD8 +Encoding: 1665 8152 1517 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FD9 +Encoding: 1666 8153 1518 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FDA +Encoding: 1667 8154 1519 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FDB +Encoding: 1668 8155 1520 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FE0 +Encoding: 1669 8160 1521 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FE1 +Encoding: 1670 8161 1522 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FE2 +Encoding: 1671 8162 1523 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FE3 +Encoding: 1672 8163 1524 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FE4 +Encoding: 1673 8164 1525 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FE5 +Encoding: 1674 8165 1526 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FE6 +Encoding: 1675 8166 1527 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FE8 +Encoding: 1676 8168 1528 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FE9 +Encoding: 1677 8169 1529 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FEA +Encoding: 1678 8170 1530 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FEB +Encoding: 1679 8171 1531 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FEC +Encoding: 1680 8172 1532 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FF2 +Encoding: 1681 8178 1533 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FF3 +Encoding: 1682 8179 1534 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FF4 +Encoding: 1683 8180 1535 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FF6 +Encoding: 1684 8182 1536 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FF7 +Encoding: 1685 8183 1537 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FF8 +Encoding: 1686 8184 1538 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FF9 +Encoding: 1687 8185 1539 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FFA +Encoding: 1688 8186 1540 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FFB +Encoding: 1689 8187 1541 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni1FFC +Encoding: 1690 8188 1542 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2000 +Encoding: 1691 8192 1543 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2001 +Encoding: 1692 8193 1544 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2002 +Encoding: 1693 8194 1545 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2003 +Encoding: 1694 8195 1546 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2004 +Encoding: 1695 8196 1547 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2005 +Encoding: 1696 8197 1548 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2006 +Encoding: 1697 8198 1549 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2007 +Encoding: 1698 8199 1550 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2008 +Encoding: 1699 8200 1551 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2009 +Encoding: 1700 8201 1552 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni200A +Encoding: 1701 8202 1553 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2010 +Encoding: 1702 8208 1554 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2011 +Encoding: 1703 8209 1555 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: figuredash +Encoding: 1704 8210 1556 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: endash +Encoding: 1705 8211 1557 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: emdash +Encoding: 1706 8212 1558 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii00208 +Encoding: 1707 8213 1559 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2016 +Encoding: 1708 8214 1560 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: underscoredbl +Encoding: 1709 8215 1561 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: quoteleft +Encoding: 1710 8216 1562 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: quoteright +Encoding: 1711 8217 1563 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: quotesinglbase +Encoding: 1712 8218 1564 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: quotereversed +Encoding: 1713 8219 1565 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: quotedblleft +Encoding: 1714 8220 1566 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: quotedblright +Encoding: 1715 8221 1567 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: quotedblbase +Encoding: 1716 8222 1568 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni201F +Encoding: 1717 8223 1569 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: dagger +Encoding: 1718 8224 1570 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: daggerdbl +Encoding: 1719 8225 1571 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: bullet +Encoding: 1720 8226 1572 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2023 +Encoding: 1721 8227 1573 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: onedotenleader +Encoding: 1722 8228 1574 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: twodotenleader +Encoding: 1723 8229 1575 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: ellipsis +Encoding: 1724 8230 1576 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2027 +Encoding: 1725 8231 1577 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni202F +Encoding: 1726 8239 1578 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: perthousand +Encoding: 1727 8240 1579 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: minute +Encoding: 1728 8242 1580 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: second +Encoding: 1729 8243 1581 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2034 +Encoding: 1730 8244 1582 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2035 +Encoding: 1731 8245 1583 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2036 +Encoding: 1732 8246 1584 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2037 +Encoding: 1733 8247 1585 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2038 +Encoding: 1734 8248 1586 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: guilsinglleft +Encoding: 1735 8249 1587 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: guilsinglright +Encoding: 1736 8250 1588 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni203B +Encoding: 1737 8251 1589 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: exclamdbl +Encoding: 1738 8252 1590 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni203D +Encoding: 1739 8253 1591 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni203E +Encoding: 1740 8254 1592 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni203F +Encoding: 1741 8255 1593 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2043 +Encoding: 1742 8259 1594 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: fraction +Encoding: 1743 8260 1595 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2045 +Encoding: 1744 8261 1596 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2046 +Encoding: 1745 8262 1597 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2056 +Encoding: 1746 8278 1598 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2058 +Encoding: 1747 8280 1599 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2059 +Encoding: 1748 8281 1600 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni205A +Encoding: 1749 8282 1601 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni205B +Encoding: 1750 8283 1602 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni205C +Encoding: 1751 8284 1603 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni205D +Encoding: 1752 8285 1604 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni205E +Encoding: 1753 8286 1605 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2070 +Encoding: 1754 8304 1606 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2071 +Encoding: 1755 8305 1607 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2074 +Encoding: 1756 8308 1608 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2075 +Encoding: 1757 8309 1609 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2076 +Encoding: 1758 8310 1610 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2077 +Encoding: 1759 8311 1611 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2078 +Encoding: 1760 8312 1612 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2079 +Encoding: 1761 8313 1613 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni207A +Encoding: 1762 8314 1614 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni207B +Encoding: 1763 8315 1615 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni207C +Encoding: 1764 8316 1616 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni207D +Encoding: 1765 8317 1617 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni207E +Encoding: 1766 8318 1618 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni207F +Encoding: 1767 8319 1619 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2080 +Encoding: 1768 8320 1620 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2081 +Encoding: 1769 8321 1621 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2082 +Encoding: 1770 8322 1622 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2083 +Encoding: 1771 8323 1623 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2084 +Encoding: 1772 8324 1624 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2085 +Encoding: 1773 8325 1625 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2086 +Encoding: 1774 8326 1626 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2087 +Encoding: 1775 8327 1627 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2088 +Encoding: 1776 8328 1628 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2089 +Encoding: 1777 8329 1629 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni208A +Encoding: 1778 8330 1630 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni208B +Encoding: 1779 8331 1631 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni208C +Encoding: 1780 8332 1632 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni208D +Encoding: 1781 8333 1633 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni208E +Encoding: 1782 8334 1634 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2090 +Encoding: 1783 8336 1635 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2091 +Encoding: 1784 8337 1636 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2092 +Encoding: 1785 8338 1637 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2093 +Encoding: 1786 8339 1638 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2094 +Encoding: 1787 8340 1639 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2095 +Encoding: 1788 8341 1640 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2096 +Encoding: 1789 8342 1641 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2097 +Encoding: 1790 8343 1642 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2098 +Encoding: 1791 8344 1643 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2099 +Encoding: 1792 8345 1644 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni209A +Encoding: 1793 8346 1645 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni209B +Encoding: 1794 8347 1646 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni209C +Encoding: 1795 8348 1647 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: lira +Encoding: 1796 8356 1648 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii57636 +Encoding: 1797 8362 1649 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Euro +Encoding: 1798 8364 1650 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni20BD +Encoding: 1799 8381 1651 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni20BF +Encoding: 1800 8383 1652 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: afii61352 +Encoding: 1801 8470 1653 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: trademark +Encoding: 1802 8482 1654 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2160 +Encoding: 1803 8544 1655 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2161 +Encoding: 1804 8545 1656 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2162 +Encoding: 1805 8546 1657 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2163 +Encoding: 1806 8547 1658 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2164 +Encoding: 1807 8548 1659 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2165 +Encoding: 1808 8549 1660 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2168 +Encoding: 1809 8552 1661 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2169 +Encoding: 1810 8553 1662 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni216A +Encoding: 1811 8554 1663 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2170 +Encoding: 1812 8560 1664 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2171 +Encoding: 1813 8561 1665 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2172 +Encoding: 1814 8562 1666 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2173 +Encoding: 1815 8563 1667 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2174 +Encoding: 1816 8564 1668 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2175 +Encoding: 1817 8565 1669 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2176 +Encoding: 1818 8566 1670 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2177 +Encoding: 1819 8567 1671 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2178 +Encoding: 1820 8568 1672 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2179 +Encoding: 1821 8569 1673 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni217A +Encoding: 1822 8570 1674 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni217B +Encoding: 1823 8571 1675 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: arrowleft +Encoding: 195 8592 1676 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: arrowup +Encoding: 196 8593 1677 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: arrowright +Encoding: 197 8594 1678 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: arrowdown +Encoding: 198 8595 1679 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: arrowboth +Encoding: 1824 8596 1680 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: arrowupdn +Encoding: 1825 8597 1681 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2196 +Encoding: 1826 8598 1682 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2197 +Encoding: 1827 8599 1683 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2198 +Encoding: 1828 8600 1684 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2199 +Encoding: 1829 8601 1685 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni219A +Encoding: 1830 8602 1686 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni219B +Encoding: 1831 8603 1687 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21A2 +Encoding: 1832 8610 1688 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21A3 +Encoding: 1833 8611 1689 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21A4 +Encoding: 1834 8612 1690 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21A5 +Encoding: 1835 8613 1691 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21A6 +Encoding: 1836 8614 1692 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21A7 +Encoding: 1837 8615 1693 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21A9 +Encoding: 1838 8617 1694 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21AA +Encoding: 1839 8618 1695 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21AB +Encoding: 1840 8619 1696 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21AC +Encoding: 1841 8620 1697 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21AF +Encoding: 1842 8623 1698 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21B0 +Encoding: 1843 8624 1699 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21B1 +Encoding: 1844 8625 1700 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21B2 +Encoding: 1845 8626 1701 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21B3 +Encoding: 1846 8627 1702 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21B4 +Encoding: 1847 8628 1703 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: carriagereturn +Encoding: 1848 8629 1704 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21B6 +Encoding: 1849 8630 1705 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21B7 +Encoding: 1850 8631 1706 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21B8 +Encoding: 1851 8632 1707 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21B9 +Encoding: 1852 8633 1708 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21BA +Encoding: 1853 8634 1709 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21BB +Encoding: 1854 8635 1710 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21BC +Encoding: 1855 8636 1711 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21BD +Encoding: 1856 8637 1712 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21BE +Encoding: 1857 8638 1713 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21BF +Encoding: 1858 8639 1714 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21C0 +Encoding: 1859 8640 1715 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21C1 +Encoding: 1860 8641 1716 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21C2 +Encoding: 1861 8642 1717 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21C3 +Encoding: 1862 8643 1718 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21CB +Encoding: 1863 8651 1719 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21CC +Encoding: 1864 8652 1720 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: arrowdblleft +Encoding: 1865 8656 1721 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: arrowdblup +Encoding: 1866 8657 1722 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: arrowdblright +Encoding: 1867 8658 1723 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: arrowdbldown +Encoding: 1868 8659 1724 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: arrowdblboth +Encoding: 1869 8660 1725 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21D5 +Encoding: 1870 8661 1726 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21E0 +Encoding: 1871 8672 1727 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21E1 +Encoding: 1872 8673 1728 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21E2 +Encoding: 1873 8674 1729 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21E3 +Encoding: 1874 8675 1730 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21F1 +Encoding: 1875 8689 1731 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni21F2 +Encoding: 1876 8690 1732 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: universal +Encoding: 1877 8704 1733 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2201 +Encoding: 1878 8705 1734 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: partialdiff +Encoding: 1879 8706 1735 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: existential +Encoding: 1880 8707 1736 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2204 +Encoding: 1881 8708 1737 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: emptyset +Encoding: 1882 8709 1738 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Delta +Encoding: 1883 8710 1739 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: gradient +Encoding: 1884 8711 1740 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: element +Encoding: 1885 8712 1741 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: notelement +Encoding: 1886 8713 1742 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni220A +Encoding: 1887 8714 1743 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: suchthat +Encoding: 1888 8715 1744 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni220C +Encoding: 1889 8716 1745 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni220D +Encoding: 1890 8717 1746 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni220E +Encoding: 1891 8718 1747 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: product +Encoding: 1892 8719 1748 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2210 +Encoding: 1893 8720 1749 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: summation +Encoding: 1894 8721 1750 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: minus +Encoding: 1895 8722 1751 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2213 +Encoding: 1896 8723 1752 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2214 +Encoding: 1897 8724 1753 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2215 +Encoding: 1898 8725 1754 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2216 +Encoding: 1899 8726 1755 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: asteriskmath +Encoding: 1900 8727 1756 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2218 +Encoding: 1901 8728 1757 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2219 +Encoding: 1902 8729 1758 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: radical +Encoding: 1903 8730 1759 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni221B +Encoding: 1904 8731 1760 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni221C +Encoding: 1905 8732 1761 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: proportional +Encoding: 1906 8733 1762 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: infinity +Encoding: 1907 8734 1763 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: orthogonal +Encoding: 1908 8735 1764 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: angle +Encoding: 1909 8736 1765 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2221 +Encoding: 1910 8737 1766 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2222 +Encoding: 1911 8738 1767 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2223 +Encoding: 1912 8739 1768 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2224 +Encoding: 1913 8740 1769 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2225 +Encoding: 1914 8741 1770 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2226 +Encoding: 1915 8742 1771 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: logicaland +Encoding: 1916 8743 1772 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: logicalor +Encoding: 1917 8744 1773 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: intersection +Encoding: 1918 8745 1774 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: union +Encoding: 1919 8746 1775 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: integral +Encoding: 1920 8747 1776 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni222C +Encoding: 1921 8748 1777 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni222D +Encoding: 1922 8749 1778 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: therefore +Encoding: 1923 8756 1779 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2235 +Encoding: 1924 8757 1780 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2236 +Encoding: 1925 8758 1781 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2237 +Encoding: 1926 8759 1782 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni223A +Encoding: 1927 8762 1783 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni223E +Encoding: 1928 8766 1784 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: congruent +Encoding: 1929 8773 1785 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: approxequal +Encoding: 1930 8776 1786 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2249 +Encoding: 1931 8777 1787 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni224D +Encoding: 1932 8781 1788 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: notequal +Encoding: 1933 8800 1789 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: equivalence +Encoding: 1934 8801 1790 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2262 +Encoding: 1935 8802 1791 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: lessequal +Encoding: 1936 8804 1792 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: greaterequal +Encoding: 1937 8805 1793 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: propersubset +Encoding: 1938 8834 1794 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: propersuperset +Encoding: 1939 8835 1795 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: notsubset +Encoding: 1940 8836 1796 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2285 +Encoding: 1941 8837 1797 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: reflexsubset +Encoding: 1942 8838 1798 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: reflexsuperset +Encoding: 1943 8839 1799 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2288 +Encoding: 1944 8840 1800 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2289 +Encoding: 1945 8841 1801 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni228A +Encoding: 1946 8842 1802 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni228B +Encoding: 1947 8843 1803 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni228F +Encoding: 1948 8847 1804 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2290 +Encoding: 1949 8848 1805 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2291 +Encoding: 1950 8849 1806 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2292 +Encoding: 1951 8850 1807 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2293 +Encoding: 1952 8851 1808 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2294 +Encoding: 1953 8852 1809 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: circleplus +Encoding: 1954 8853 1810 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2296 +Encoding: 1955 8854 1811 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: circlemultiply +Encoding: 1956 8855 1812 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2298 +Encoding: 1957 8856 1813 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni229B +Encoding: 1958 8859 1814 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni229C +Encoding: 1959 8860 1815 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni229D +Encoding: 1960 8861 1816 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni229E +Encoding: 1961 8862 1817 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni229F +Encoding: 1962 8863 1818 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni22A0 +Encoding: 1963 8864 1819 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni22A1 +Encoding: 1964 8865 1820 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni22A2 +Encoding: 1965 8866 1821 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni22A3 +Encoding: 1966 8867 1822 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni22A4 +Encoding: 1967 8868 1823 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: perpendicular +Encoding: 1968 8869 1824 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni22B2 +Encoding: 1969 8882 1825 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni22B3 +Encoding: 1970 8883 1826 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni22B4 +Encoding: 1971 8884 1827 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni22B5 +Encoding: 1972 8885 1828 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni22B6 +Encoding: 1973 8886 1829 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni22B7 +Encoding: 1974 8887 1830 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni22B8 +Encoding: 1975 8888 1831 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni22C0 +Encoding: 1976 8896 1832 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni22C1 +Encoding: 1977 8897 1833 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni22C2 +Encoding: 1978 8898 1834 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni22C3 +Encoding: 1979 8899 1835 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni22C4 +Encoding: 1980 8900 1836 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: dotmath +Encoding: 1981 8901 1837 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni22C6 +Encoding: 1982 8902 1838 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni22C8 +Encoding: 1983 8904 1839 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni22EE +Encoding: 1984 8942 1840 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni22EF +Encoding: 1985 8943 1841 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni22F0 +Encoding: 1986 8944 1842 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni22F1 +Encoding: 1987 8945 1843 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2300 +Encoding: 1988 8960 1844 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: house +Encoding: 1989 8962 1845 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2308 +Encoding: 1990 8968 1846 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2309 +Encoding: 1991 8969 1847 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni230A +Encoding: 1992 8970 1848 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni230B +Encoding: 1993 8971 1849 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni230C +Encoding: 1994 8972 1850 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni230D +Encoding: 1995 8973 1851 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni230E +Encoding: 1996 8974 1852 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni230F +Encoding: 1997 8975 1853 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2315 +Encoding: 1998 8981 1854 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2318 +Encoding: 1999 8984 1855 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni231C +Encoding: 2000 8988 1856 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni231D +Encoding: 2001 8989 1857 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni231E +Encoding: 2002 8990 1858 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni231F +Encoding: 2003 8991 1859 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: integraltp +Encoding: 2004 8992 1860 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: integralbt +Encoding: 2005 8993 1861 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: angleleft +Encoding: 2006 9001 1862 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: angleright +Encoding: 2007 9002 1863 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2335 +Encoding: 2008 9013 1864 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2336 +Encoding: 2009 9014 1865 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2337 +Encoding: 2010 9015 1866 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2338 +Encoding: 2011 9016 1867 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2339 +Encoding: 2012 9017 1868 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni233A +Encoding: 2013 9018 1869 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni233D +Encoding: 2014 9021 1870 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni233E +Encoding: 2015 9022 1871 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni233F +Encoding: 2016 9023 1872 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2340 +Encoding: 2017 9024 1873 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2341 +Encoding: 2018 9025 1874 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2342 +Encoding: 2019 9026 1875 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2349 +Encoding: 2020 9033 1876 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni234B +Encoding: 2021 9035 1877 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni234D +Encoding: 2022 9037 1878 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni234E +Encoding: 2023 9038 1879 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2352 +Encoding: 2024 9042 1880 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2355 +Encoding: 2025 9045 1881 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2358 +Encoding: 2026 9048 1882 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2359 +Encoding: 2027 9049 1883 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni235A +Encoding: 2028 9050 1884 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni235B +Encoding: 2029 9051 1885 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni235C +Encoding: 2030 9052 1886 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni235D +Encoding: 2031 9053 1887 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni235E +Encoding: 2032 9054 1888 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni235F +Encoding: 2033 9055 1889 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2360 +Encoding: 2034 9056 1890 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2361 +Encoding: 2035 9057 1891 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2362 +Encoding: 2036 9058 1892 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2363 +Encoding: 2037 9059 1893 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2364 +Encoding: 2038 9060 1894 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2365 +Encoding: 2039 9061 1895 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2368 +Encoding: 2040 9064 1896 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni236A +Encoding: 2041 9066 1897 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni236B +Encoding: 2042 9067 1898 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni236C +Encoding: 2043 9068 1899 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni236D +Encoding: 2044 9069 1900 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni236E +Encoding: 2045 9070 1901 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni236F +Encoding: 2046 9071 1902 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2371 +Encoding: 2047 9073 1903 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2372 +Encoding: 2048 9074 1904 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2373 +Encoding: 2049 9075 1905 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2374 +Encoding: 2050 9076 1906 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2375 +Encoding: 2051 9077 1907 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2376 +Encoding: 2052 9078 1908 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2377 +Encoding: 2053 9079 1909 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2378 +Encoding: 2054 9080 1910 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2379 +Encoding: 2055 9081 1911 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni237A +Encoding: 2056 9082 1912 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni237F +Encoding: 2057 9087 1913 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2387 +Encoding: 2058 9095 1914 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2388 +Encoding: 2059 9096 1915 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2389 +Encoding: 2060 9097 1916 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni238A +Encoding: 2061 9098 1917 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni238B +Encoding: 2062 9099 1918 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2395 +Encoding: 2063 9109 1919 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni23CE +Encoding: 2064 9166 1920 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni23CF +Encoding: 2065 9167 1921 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni23E8 +Encoding: 2066 9192 1922 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni23F3 +Encoding: 2067 9203 1923 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni23F4 +Encoding: 2068 9204 1924 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni23F5 +Encoding: 2069 9205 1925 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni23F6 +Encoding: 2070 9206 1926 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni23F7 +Encoding: 2071 9207 1927 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni23F8 +Encoding: 2072 9208 1928 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni23F9 +Encoding: 2073 9209 1929 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni23FA +Encoding: 2074 9210 1930 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni23FB +Encoding: 2075 9211 1931 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni23FC +Encoding: 2076 9212 1932 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2400 +Encoding: 2077 9216 1933 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2408 +Encoding: 2078 9224 1934 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2409 +Encoding: 2079 9225 1935 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni240A +Encoding: 2080 9226 1936 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni240B +Encoding: 2081 9227 1937 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni240C +Encoding: 2082 9228 1938 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni240D +Encoding: 2083 9229 1939 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni240E +Encoding: 2084 9230 1940 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni240F +Encoding: 2085 9231 1941 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni241C +Encoding: 2086 9244 1942 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni241D +Encoding: 2087 9245 1943 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni241E +Encoding: 2088 9246 1944 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni241F +Encoding: 2089 9247 1945 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2420 +Encoding: 2090 9248 1946 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2424 +Encoding: 2091 9252 1947 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: SF100000 +Encoding: 127 9472 1948 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni2501 +Encoding: 2092 9473 1949 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: SF110000 +Encoding: 128 9474 1950 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni2503 +Encoding: 2093 9475 1951 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2504 +Encoding: 2094 9476 1952 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2505 +Encoding: 2095 9477 1953 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2506 +Encoding: 2096 9478 1954 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2507 +Encoding: 2097 9479 1955 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2508 +Encoding: 2098 9480 1956 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2509 +Encoding: 2099 9481 1957 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni250A +Encoding: 2100 9482 1958 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni250B +Encoding: 2101 9483 1959 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: SF010000 +Encoding: 129 9484 1960 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni250D +Encoding: 2102 9485 1961 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni250E +Encoding: 2103 9486 1962 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni250F +Encoding: 2104 9487 1963 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: SF030000 +Encoding: 2105 9488 1964 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2511 +Encoding: 2106 9489 1965 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2512 +Encoding: 2107 9490 1966 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2513 +Encoding: 2108 9491 1967 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: SF020000 +Encoding: 130 9492 1968 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni2515 +Encoding: 2109 9493 1969 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2516 +Encoding: 2110 9494 1970 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2517 +Encoding: 2111 9495 1971 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: SF040000 +Encoding: 2112 9496 1972 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2519 +Encoding: 2113 9497 1973 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni251A +Encoding: 2114 9498 1974 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni251B +Encoding: 2115 9499 1975 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: SF080000 +Encoding: 131 9500 1976 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni251D +Encoding: 2116 9501 1977 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni251E +Encoding: 2117 9502 1978 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni251F +Encoding: 2118 9503 1979 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2520 +Encoding: 2119 9504 1980 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2521 +Encoding: 2120 9505 1981 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2522 +Encoding: 2121 9506 1982 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2523 +Encoding: 2122 9507 1983 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: SF090000 +Encoding: 132 9508 1984 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni2525 +Encoding: 2123 9509 1985 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2526 +Encoding: 2124 9510 1986 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2527 +Encoding: 2125 9511 1987 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2528 +Encoding: 2126 9512 1988 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2529 +Encoding: 2127 9513 1989 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni252A +Encoding: 2128 9514 1990 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni252B +Encoding: 2129 9515 1991 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: SF060000 +Encoding: 133 9516 1992 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni252D +Encoding: 2130 9517 1993 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni252E +Encoding: 2131 9518 1994 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni252F +Encoding: 2132 9519 1995 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2530 +Encoding: 2133 9520 1996 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2531 +Encoding: 2134 9521 1997 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2532 +Encoding: 2135 9522 1998 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2533 +Encoding: 2136 9523 1999 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: SF070000 +Encoding: 134 9524 2000 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni2535 +Encoding: 2137 9525 2001 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2536 +Encoding: 2138 9526 2002 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2537 +Encoding: 2139 9527 2003 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2538 +Encoding: 2140 9528 2004 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2539 +Encoding: 2141 9529 2005 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni253A +Encoding: 2142 9530 2006 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni253B +Encoding: 2143 9531 2007 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: SF050000 +Encoding: 135 9532 2008 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni253D +Encoding: 2144 9533 2009 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni253E +Encoding: 2145 9534 2010 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni253F +Encoding: 2146 9535 2011 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2540 +Encoding: 2147 9536 2012 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2541 +Encoding: 2148 9537 2013 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2542 +Encoding: 2149 9538 2014 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2543 +Encoding: 2150 9539 2015 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2544 +Encoding: 2151 9540 2016 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2545 +Encoding: 2152 9541 2017 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2546 +Encoding: 2153 9542 2018 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2547 +Encoding: 2154 9543 2019 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2548 +Encoding: 2155 9544 2020 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2549 +Encoding: 2156 9545 2021 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni254A +Encoding: 2157 9546 2022 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni254B +Encoding: 2158 9547 2023 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni254C +Encoding: 2159 9548 2024 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni254D +Encoding: 2160 9549 2025 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni254E +Encoding: 2161 9550 2026 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni254F +Encoding: 2162 9551 2027 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: SF430000 +Encoding: 143 9552 2028 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: SF240000 +Encoding: 144 9553 2029 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: SF510000 +Encoding: 2163 9554 2030 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: SF520000 +Encoding: 2164 9555 2031 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: SF390000 +Encoding: 145 9556 2032 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: SF220000 +Encoding: 2165 9557 2033 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: SF210000 +Encoding: 2166 9558 2034 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: SF250000 +Encoding: 146 9559 2035 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: SF500000 +Encoding: 2167 9560 2036 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: SF490000 +Encoding: 2168 9561 2037 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: SF380000 +Encoding: 147 9562 2038 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: SF280000 +Encoding: 2169 9563 2039 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: SF270000 +Encoding: 2170 9564 2040 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: SF260000 +Encoding: 148 9565 2041 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: SF360000 +Encoding: 2171 9566 2042 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: SF370000 +Encoding: 2172 9567 2043 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: SF420000 +Encoding: 149 9568 2044 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: SF190000 +Encoding: 2173 9569 2045 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: SF200000 +Encoding: 2174 9570 2046 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: SF230000 +Encoding: 150 9571 2047 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: SF470000 +Encoding: 2175 9572 2048 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: SF480000 +Encoding: 2176 9573 2049 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: SF410000 +Encoding: 151 9574 2050 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: SF450000 +Encoding: 2177 9575 2051 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: SF460000 +Encoding: 2178 9576 2052 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: SF400000 +Encoding: 152 9577 2053 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: SF540000 +Encoding: 2179 9578 2054 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: SF530000 +Encoding: 2180 9579 2055 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: SF440000 +Encoding: 153 9580 2056 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni256D +Encoding: 136 9581 2057 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni256E +Encoding: 137 9582 2058 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni256F +Encoding: 138 9583 2059 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni2570 +Encoding: 139 9584 2060 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni2571 +Encoding: 140 9585 2061 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni2572 +Encoding: 141 9586 2062 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni2573 +Encoding: 142 9587 2063 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni2574 +Encoding: 2181 9588 2064 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2575 +Encoding: 2182 9589 2065 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2576 +Encoding: 2183 9590 2066 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2577 +Encoding: 2184 9591 2067 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2578 +Encoding: 2185 9592 2068 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2579 +Encoding: 2186 9593 2069 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni257A +Encoding: 2187 9594 2070 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni257B +Encoding: 2188 9595 2071 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni257C +Encoding: 2189 9596 2072 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni257D +Encoding: 2190 9597 2073 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni257E +Encoding: 2191 9598 2074 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni257F +Encoding: 2192 9599 2075 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: upblock +Encoding: 2193 9600 2076 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2581 +Encoding: 167 9601 2077 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni2582 +Encoding: 168 9602 2078 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni2583 +Encoding: 169 9603 2079 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: dnblock +Encoding: 170 9604 2080 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni2585 +Encoding: 171 9605 2081 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni2586 +Encoding: 172 9606 2082 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni2587 +Encoding: 173 9607 2083 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: block +Encoding: 174 9608 2084 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni2589 +Encoding: 175 9609 2085 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni258A +Encoding: 176 9610 2086 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni258B +Encoding: 177 9611 2087 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: lfblock +Encoding: 178 9612 2088 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni258D +Encoding: 179 9613 2089 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni258E +Encoding: 180 9614 2090 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni258F +Encoding: 181 9615 2091 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: rtblock +Encoding: 2194 9616 2092 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: ltshade +Encoding: 182 9617 2093 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: shade +Encoding: 183 9618 2094 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: dkshade +Encoding: 184 9619 2095 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni2594 +Encoding: 2195 9620 2096 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2596 +Encoding: 185 9622 2097 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni2597 +Encoding: 186 9623 2098 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni2598 +Encoding: 187 9624 2099 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni2599 +Encoding: 188 9625 2100 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni259A +Encoding: 189 9626 2101 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni259B +Encoding: 190 9627 2102 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni259C +Encoding: 191 9628 2103 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni259D +Encoding: 192 9629 2104 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni259E +Encoding: 193 9630 2105 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni259F +Encoding: 194 9631 2106 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: filledbox +Encoding: 2196 9632 2107 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: H22073 +Encoding: 2197 9633 2108 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni25A2 +Encoding: 2198 9634 2109 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni25A3 +Encoding: 2199 9635 2110 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: H18543 +Encoding: 2200 9642 2111 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: H18551 +Encoding: 2201 9643 2112 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: triagup +Encoding: 2202 9650 2113 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni25B3 +Encoding: 2203 9651 2114 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni25B6 +Encoding: 2204 9654 2115 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: triagdn +Encoding: 2205 9660 2116 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni25BD +Encoding: 2206 9661 2117 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni25C0 +Encoding: 2207 9664 2118 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni25C6 +Encoding: 2208 9670 2119 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni25C7 +Encoding: 2209 9671 2120 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni25C8 +Encoding: 2210 9672 2121 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni25C9 +Encoding: 2211 9673 2122 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: circle +Encoding: 2212 9675 2123 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni25CE +Encoding: 2213 9678 2124 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: H18533 +Encoding: 2214 9679 2125 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni25D0 +Encoding: 2215 9680 2126 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni25D1 +Encoding: 2216 9681 2127 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni25D2 +Encoding: 2217 9682 2128 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni25D3 +Encoding: 2218 9683 2129 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni25D4 +Encoding: 2219 9684 2130 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni25D5 +Encoding: 2220 9685 2131 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni25EB +Encoding: 2221 9707 2132 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni25F0 +Encoding: 2222 9712 2133 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni25F1 +Encoding: 2223 9713 2134 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni25F2 +Encoding: 2224 9714 2135 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni25F3 +Encoding: 2225 9715 2136 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni25F4 +Encoding: 2226 9716 2137 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni25F5 +Encoding: 2227 9717 2138 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni25F6 +Encoding: 2228 9718 2139 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni25F7 +Encoding: 2229 9719 2140 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni25FF +Encoding: 2230 9727 2141 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2601 +Encoding: 2231 9729 2142 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2603 +Encoding: 2232 9731 2143 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2610 +Encoding: 2233 9744 2144 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2611 +Encoding: 2234 9745 2145 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2612 +Encoding: 2235 9746 2146 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2615 +Encoding: 2236 9749 2147 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2630 +Encoding: 2237 9776 2148 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2631 +Encoding: 2238 9777 2149 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2632 +Encoding: 2239 9778 2150 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2633 +Encoding: 2240 9779 2151 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2634 +Encoding: 2241 9780 2152 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2635 +Encoding: 2242 9781 2153 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2636 +Encoding: 2243 9782 2154 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2637 +Encoding: 2244 9783 2155 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2638 +Encoding: 2245 9784 2156 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2639 +Encoding: 2246 9785 2157 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: smileface +Encoding: 2247 9786 2158 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: invsmileface +Encoding: 2248 9787 2159 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni263F +Encoding: 2249 9791 2160 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: female +Encoding: 11 9792 2161 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni2641 +Encoding: 2250 9793 2162 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: male +Encoding: 12 9794 2163 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni2648 +Encoding: 2251 9800 2164 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2649 +Encoding: 2252 9801 2165 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni264A +Encoding: 2253 9802 2166 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni264B +Encoding: 2254 9803 2167 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni264C +Encoding: 2255 9804 2168 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni264D +Encoding: 2256 9805 2169 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni264E +Encoding: 2257 9806 2170 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni264F +Encoding: 2258 9807 2171 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2650 +Encoding: 2259 9808 2172 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2651 +Encoding: 2260 9809 2173 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2652 +Encoding: 2261 9810 2174 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2653 +Encoding: 2262 9811 2175 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: spade +Encoding: 2263 9824 2176 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2661 +Encoding: 4 9825 2177 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni2662 +Encoding: 2264 9826 2178 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: club +Encoding: 2265 9827 2179 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2664 +Encoding: 2266 9828 2180 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: heart +Encoding: 5 9829 2181 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: diamond +Encoding: 2267 9830 2182 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2667 +Encoding: 2268 9831 2183 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2669 +Encoding: 16 9833 2184 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: musicalnote +Encoding: 17 9834 2185 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: musicalnotedbl +Encoding: 18 9835 2186 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni266C +Encoding: 19 9836 2187 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni266D +Encoding: 2269 9837 2188 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni266E +Encoding: 2270 9838 2189 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni266F +Encoding: 2271 9839 2190 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2680 +Encoding: 2272 9856 2191 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2681 +Encoding: 2273 9857 2192 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2682 +Encoding: 2274 9858 2193 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2683 +Encoding: 2275 9859 2194 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2684 +Encoding: 2276 9860 2195 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2685 +Encoding: 2277 9861 2196 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2687 +Encoding: 2278 9863 2197 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2690 +Encoding: 2279 9872 2198 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2691 +Encoding: 2280 9873 2199 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2699 +Encoding: 2281 9881 2200 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni26A0 +Encoding: 2282 9888 2201 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni26A1 +Encoding: 2283 9889 2202 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni26A2 +Encoding: 13 9890 2203 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni26A3 +Encoding: 14 9891 2204 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni26A5 +Encoding: 15 9893 2205 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni26A6 +Encoding: 2284 9894 2206 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni26A8 +Encoding: 2285 9896 2207 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni26B2 +Encoding: 2286 9906 2208 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni26B3 +Encoding: 2287 9907 2209 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni26B4 +Encoding: 2288 9908 2210 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni26B5 +Encoding: 2289 9909 2211 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni26B8 +Encoding: 2290 9912 2212 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni26D4 +Encoding: 2291 9940 2213 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2705 +Encoding: 2292 9989 2214 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2713 +Encoding: 2293 10003 2215 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2714 +Encoding: 2294 10004 2216 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2715 +Encoding: 2295 10005 2217 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2716 +Encoding: 2296 10006 2218 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2717 +Encoding: 2297 10007 2219 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2718 +Encoding: 2298 10008 2220 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2719 +Encoding: 2299 10009 2221 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni271A +Encoding: 2300 10010 2222 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni271B +Encoding: 2301 10011 2223 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni271C +Encoding: 2302 10012 2224 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2726 +Encoding: 9 10022 2225 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni2728 +Encoding: 10 10024 2226 +Width: 922 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni272D +Encoding: 7 10029 2227 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni272E +Encoding: 2303 10030 2228 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2739 +Encoding: 2304 10041 2229 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2744 +Encoding: 2305 10052 2230 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni274C +Encoding: 2306 10060 2231 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni274E +Encoding: 2307 10062 2232 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2753 +Encoding: 2308 10067 2233 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2764 +Encoding: 2309 10084 2234 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni276C +Encoding: 2310 10092 2235 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni276D +Encoding: 2311 10093 2236 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni276E +Encoding: 2312 10094 2237 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni276F +Encoding: 2313 10095 2238 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni279C +Encoding: 2314 10140 2239 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni27DC +Encoding: 2315 10204 2240 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni27E6 +Encoding: 2316 10214 2241 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni27E7 +Encoding: 2317 10215 2242 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni27E8 +Encoding: 2318 10216 2243 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni27E9 +Encoding: 2319 10217 2244 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni27EA +Encoding: 2320 10218 2245 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni27EB +Encoding: 2321 10219 2246 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2801 +Encoding: 2322 10241 2247 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2802 +Encoding: 2323 10242 2248 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2803 +Encoding: 2324 10243 2249 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2804 +Encoding: 2325 10244 2250 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2805 +Encoding: 2326 10245 2251 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2806 +Encoding: 2327 10246 2252 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2807 +Encoding: 2328 10247 2253 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2808 +Encoding: 2329 10248 2254 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2809 +Encoding: 2330 10249 2255 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni280A +Encoding: 2331 10250 2256 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni280B +Encoding: 2332 10251 2257 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni280C +Encoding: 2333 10252 2258 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni280D +Encoding: 2334 10253 2259 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni280E +Encoding: 2335 10254 2260 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni280F +Encoding: 2336 10255 2261 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2810 +Encoding: 2337 10256 2262 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2811 +Encoding: 2338 10257 2263 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2812 +Encoding: 2339 10258 2264 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2813 +Encoding: 2340 10259 2265 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2814 +Encoding: 2341 10260 2266 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2815 +Encoding: 2342 10261 2267 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2816 +Encoding: 2343 10262 2268 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2817 +Encoding: 2344 10263 2269 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2818 +Encoding: 2345 10264 2270 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2819 +Encoding: 2346 10265 2271 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni281A +Encoding: 2347 10266 2272 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni281B +Encoding: 2348 10267 2273 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni281C +Encoding: 2349 10268 2274 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni281D +Encoding: 2350 10269 2275 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni281E +Encoding: 2351 10270 2276 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni281F +Encoding: 2352 10271 2277 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2820 +Encoding: 2353 10272 2278 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2821 +Encoding: 2354 10273 2279 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2822 +Encoding: 2355 10274 2280 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2823 +Encoding: 2356 10275 2281 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2824 +Encoding: 2357 10276 2282 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2825 +Encoding: 2358 10277 2283 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2826 +Encoding: 2359 10278 2284 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2827 +Encoding: 2360 10279 2285 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2828 +Encoding: 2361 10280 2286 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2829 +Encoding: 2362 10281 2287 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni282A +Encoding: 2363 10282 2288 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni282B +Encoding: 2364 10283 2289 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni282C +Encoding: 2365 10284 2290 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni282D +Encoding: 2366 10285 2291 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni282E +Encoding: 2367 10286 2292 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni282F +Encoding: 2368 10287 2293 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2830 +Encoding: 2369 10288 2294 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2831 +Encoding: 2370 10289 2295 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2832 +Encoding: 2371 10290 2296 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2833 +Encoding: 2372 10291 2297 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2834 +Encoding: 2373 10292 2298 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2835 +Encoding: 2374 10293 2299 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2836 +Encoding: 2375 10294 2300 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2837 +Encoding: 2376 10295 2301 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2838 +Encoding: 2377 10296 2302 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2839 +Encoding: 2378 10297 2303 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni283A +Encoding: 2379 10298 2304 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni283B +Encoding: 2380 10299 2305 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni283C +Encoding: 2381 10300 2306 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni283D +Encoding: 2382 10301 2307 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni283E +Encoding: 2383 10302 2308 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni283F +Encoding: 2384 10303 2309 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2840 +Encoding: 2385 10304 2310 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2841 +Encoding: 2386 10305 2311 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2842 +Encoding: 2387 10306 2312 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2843 +Encoding: 2388 10307 2313 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2844 +Encoding: 2389 10308 2314 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2845 +Encoding: 2390 10309 2315 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2846 +Encoding: 2391 10310 2316 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2847 +Encoding: 2392 10311 2317 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2848 +Encoding: 2393 10312 2318 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2849 +Encoding: 2394 10313 2319 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni284A +Encoding: 2395 10314 2320 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni284B +Encoding: 2396 10315 2321 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni284C +Encoding: 2397 10316 2322 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni284D +Encoding: 2398 10317 2323 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni284E +Encoding: 2399 10318 2324 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni284F +Encoding: 2400 10319 2325 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2850 +Encoding: 2401 10320 2326 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2851 +Encoding: 2402 10321 2327 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2852 +Encoding: 2403 10322 2328 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2853 +Encoding: 2404 10323 2329 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2854 +Encoding: 2405 10324 2330 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2855 +Encoding: 2406 10325 2331 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2856 +Encoding: 2407 10326 2332 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2857 +Encoding: 2408 10327 2333 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2858 +Encoding: 2409 10328 2334 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2859 +Encoding: 2410 10329 2335 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni285A +Encoding: 2411 10330 2336 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni285B +Encoding: 2412 10331 2337 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni285C +Encoding: 2413 10332 2338 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni285D +Encoding: 2414 10333 2339 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni285E +Encoding: 2415 10334 2340 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni285F +Encoding: 2416 10335 2341 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2860 +Encoding: 2417 10336 2342 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2861 +Encoding: 2418 10337 2343 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2862 +Encoding: 2419 10338 2344 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2863 +Encoding: 2420 10339 2345 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2864 +Encoding: 2421 10340 2346 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2865 +Encoding: 2422 10341 2347 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2866 +Encoding: 2423 10342 2348 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2867 +Encoding: 2424 10343 2349 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2868 +Encoding: 2425 10344 2350 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2869 +Encoding: 2426 10345 2351 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni286A +Encoding: 2427 10346 2352 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni286B +Encoding: 2428 10347 2353 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni286C +Encoding: 2429 10348 2354 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni286D +Encoding: 2430 10349 2355 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni286E +Encoding: 2431 10350 2356 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni286F +Encoding: 2432 10351 2357 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2870 +Encoding: 2433 10352 2358 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2871 +Encoding: 2434 10353 2359 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2872 +Encoding: 2435 10354 2360 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2873 +Encoding: 2436 10355 2361 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2874 +Encoding: 2437 10356 2362 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2875 +Encoding: 2438 10357 2363 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2876 +Encoding: 2439 10358 2364 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2877 +Encoding: 2440 10359 2365 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2878 +Encoding: 2441 10360 2366 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2879 +Encoding: 2442 10361 2367 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni287A +Encoding: 2443 10362 2368 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni287B +Encoding: 2444 10363 2369 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni287C +Encoding: 2445 10364 2370 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni287D +Encoding: 2446 10365 2371 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni287E +Encoding: 2447 10366 2372 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni287F +Encoding: 2448 10367 2373 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2880 +Encoding: 2449 10368 2374 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2881 +Encoding: 2450 10369 2375 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2882 +Encoding: 2451 10370 2376 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2883 +Encoding: 2452 10371 2377 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2884 +Encoding: 2453 10372 2378 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2885 +Encoding: 2454 10373 2379 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2886 +Encoding: 2455 10374 2380 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2887 +Encoding: 2456 10375 2381 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2888 +Encoding: 2457 10376 2382 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2889 +Encoding: 2458 10377 2383 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni288A +Encoding: 2459 10378 2384 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni288B +Encoding: 2460 10379 2385 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni288C +Encoding: 2461 10380 2386 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni288D +Encoding: 2462 10381 2387 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni288E +Encoding: 2463 10382 2388 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni288F +Encoding: 2464 10383 2389 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2890 +Encoding: 2465 10384 2390 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2891 +Encoding: 2466 10385 2391 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2892 +Encoding: 2467 10386 2392 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2893 +Encoding: 2468 10387 2393 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2894 +Encoding: 2469 10388 2394 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2895 +Encoding: 2470 10389 2395 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2896 +Encoding: 2471 10390 2396 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2897 +Encoding: 2472 10391 2397 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2898 +Encoding: 2473 10392 2398 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2899 +Encoding: 2474 10393 2399 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni289A +Encoding: 2475 10394 2400 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni289B +Encoding: 2476 10395 2401 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni289C +Encoding: 2477 10396 2402 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni289D +Encoding: 2478 10397 2403 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni289E +Encoding: 2479 10398 2404 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni289F +Encoding: 2480 10399 2405 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28A0 +Encoding: 2481 10400 2406 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28A1 +Encoding: 2482 10401 2407 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28A2 +Encoding: 2483 10402 2408 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28A3 +Encoding: 2484 10403 2409 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28A4 +Encoding: 2485 10404 2410 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28A5 +Encoding: 2486 10405 2411 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28A6 +Encoding: 2487 10406 2412 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28A7 +Encoding: 2488 10407 2413 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28A8 +Encoding: 2489 10408 2414 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28A9 +Encoding: 2490 10409 2415 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28AA +Encoding: 2491 10410 2416 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28AB +Encoding: 2492 10411 2417 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28AC +Encoding: 2493 10412 2418 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28AD +Encoding: 2494 10413 2419 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28AE +Encoding: 2495 10414 2420 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28AF +Encoding: 2496 10415 2421 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28B0 +Encoding: 2497 10416 2422 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28B1 +Encoding: 2498 10417 2423 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28B2 +Encoding: 2499 10418 2424 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28B3 +Encoding: 2500 10419 2425 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28B4 +Encoding: 2501 10420 2426 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28B5 +Encoding: 2502 10421 2427 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28B6 +Encoding: 2503 10422 2428 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28B7 +Encoding: 2504 10423 2429 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28B8 +Encoding: 2505 10424 2430 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28B9 +Encoding: 2506 10425 2431 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28BA +Encoding: 2507 10426 2432 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28BB +Encoding: 2508 10427 2433 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28BC +Encoding: 2509 10428 2434 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28BD +Encoding: 2510 10429 2435 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28BE +Encoding: 2511 10430 2436 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28BF +Encoding: 2512 10431 2437 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28C0 +Encoding: 2513 10432 2438 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28C1 +Encoding: 2514 10433 2439 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28C2 +Encoding: 2515 10434 2440 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28C3 +Encoding: 2516 10435 2441 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28C4 +Encoding: 2517 10436 2442 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28C5 +Encoding: 2518 10437 2443 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28C6 +Encoding: 2519 10438 2444 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28C7 +Encoding: 2520 10439 2445 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28C8 +Encoding: 2521 10440 2446 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28C9 +Encoding: 2522 10441 2447 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28CA +Encoding: 2523 10442 2448 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28CB +Encoding: 2524 10443 2449 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28CC +Encoding: 2525 10444 2450 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28CD +Encoding: 2526 10445 2451 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28CE +Encoding: 2527 10446 2452 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28CF +Encoding: 2528 10447 2453 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28D0 +Encoding: 2529 10448 2454 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28D1 +Encoding: 2530 10449 2455 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28D2 +Encoding: 2531 10450 2456 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28D3 +Encoding: 2532 10451 2457 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28D4 +Encoding: 2533 10452 2458 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28D5 +Encoding: 2534 10453 2459 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28D6 +Encoding: 2535 10454 2460 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28D7 +Encoding: 2536 10455 2461 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28D8 +Encoding: 2537 10456 2462 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28D9 +Encoding: 2538 10457 2463 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28DA +Encoding: 2539 10458 2464 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28DB +Encoding: 2540 10459 2465 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28DC +Encoding: 2541 10460 2466 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28DD +Encoding: 2542 10461 2467 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28DE +Encoding: 2543 10462 2468 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28DF +Encoding: 2544 10463 2469 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28E0 +Encoding: 2545 10464 2470 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28E1 +Encoding: 2546 10465 2471 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28E2 +Encoding: 2547 10466 2472 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28E3 +Encoding: 2548 10467 2473 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28E4 +Encoding: 2549 10468 2474 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28E5 +Encoding: 2550 10469 2475 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28E6 +Encoding: 2551 10470 2476 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28E7 +Encoding: 2552 10471 2477 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28E8 +Encoding: 2553 10472 2478 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28E9 +Encoding: 2554 10473 2479 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28EA +Encoding: 2555 10474 2480 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28EB +Encoding: 2556 10475 2481 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28EC +Encoding: 2557 10476 2482 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28ED +Encoding: 2558 10477 2483 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28EE +Encoding: 2559 10478 2484 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28EF +Encoding: 2560 10479 2485 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28F0 +Encoding: 2561 10480 2486 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28F1 +Encoding: 2562 10481 2487 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28F2 +Encoding: 2563 10482 2488 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28F3 +Encoding: 2564 10483 2489 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28F4 +Encoding: 2565 10484 2490 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28F5 +Encoding: 2566 10485 2491 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28F6 +Encoding: 2567 10486 2492 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28F7 +Encoding: 2568 10487 2493 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28F8 +Encoding: 2569 10488 2494 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28F9 +Encoding: 2570 10489 2495 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28FA +Encoding: 2571 10490 2496 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28FB +Encoding: 2572 10491 2497 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28FC +Encoding: 2573 10492 2498 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28FD +Encoding: 2574 10493 2499 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28FE +Encoding: 2575 10494 2500 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni28FF +Encoding: 2576 10495 2501 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni294A +Encoding: 2577 10570 2502 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni29FB +Encoding: 2578 10747 2503 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2B22 +Encoding: 2579 11042 2504 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2B50 +Encoding: 6 11088 2505 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni2B60 +Encoding: 199 11104 2506 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni2B61 +Encoding: 200 11105 2507 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni2B62 +Encoding: 201 11106 2508 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni2B63 +Encoding: 202 11107 2509 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni2B64 +Encoding: 2580 11108 2510 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2B65 +Encoding: 2581 11109 2511 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2B66 +Encoding: 2582 11110 2512 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2B67 +Encoding: 2583 11111 2513 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2B68 +Encoding: 2584 11112 2514 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2B69 +Encoding: 2585 11113 2515 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni2B80 +Encoding: 203 11136 2516 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni2B81 +Encoding: 204 11137 2517 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni2B82 +Encoding: 205 11138 2518 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni2B83 +Encoding: 206 11139 2519 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uni2E3D +Encoding: 2586 11837 2520 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni3002 +Encoding: 2587 12290 2521 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uni33D1 +Encoding: 2588 13265 2522 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniA7A8 +Encoding: 2589 42920 2523 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE000 +Encoding: 2590 57344 2524 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE001 +Encoding: 2591 57345 2525 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE002 +Encoding: 2592 57346 2526 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE003 +Encoding: 2593 57347 2527 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE004 +Encoding: 2594 57348 2528 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE005 +Encoding: 2595 57349 2529 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE006 +Encoding: 2596 57350 2530 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE007 +Encoding: 2597 57351 2531 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE008 +Encoding: 2598 57352 2532 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE009 +Encoding: 2599 57353 2533 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE00A +Encoding: 2600 57354 2534 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE0A0 +Encoding: 2601 57504 2535 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE0A1 +Encoding: 2602 57505 2536 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE0A2 +Encoding: 2603 57506 2537 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE0A3 +Encoding: 2604 57507 2538 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE0B0 +Encoding: 159 57520 2539 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uniE0B1 +Encoding: 2605 57521 2540 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE0B2 +Encoding: 160 57522 2541 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uniE0B3 +Encoding: 2606 57523 2542 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE0B4 +Encoding: 161 57524 2543 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uniE0B5 +Encoding: 2607 57525 2544 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE0B6 +Encoding: 162 57526 2545 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uniE0B7 +Encoding: 2608 57527 2546 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE0B8 +Encoding: 163 57528 2547 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uniE0B9 +Encoding: 2609 57529 2548 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE0BA +Encoding: 164 57530 2549 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uniE0BB +Encoding: 2610 57531 2550 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE0BC +Encoding: 165 57532 2551 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uniE0BD +Encoding: 2611 57533 2552 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE0BE +Encoding: 166 57534 2553 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uniE0BF +Encoding: 2612 57535 2554 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE0D2 +Encoding: 2613 57554 2555 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE0D4 +Encoding: 2614 57556 2556 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE204 +Encoding: 2615 57860 2557 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE20A +Encoding: 2616 57866 2558 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE20B +Encoding: 2617 57867 2559 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE20C +Encoding: 2618 57868 2560 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE21E +Encoding: 2619 57886 2561 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE235 +Encoding: 2620 57909 2562 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE244 +Encoding: 2621 57924 2563 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE256 +Encoding: 2622 57942 2564 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE271 +Encoding: 2623 57969 2565 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE28A +Encoding: 2624 57994 2566 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE28B +Encoding: 2625 57995 2567 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE5FA +Encoding: 2626 58874 2568 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE5FB +Encoding: 2627 58875 2569 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE5FC +Encoding: 2628 58876 2570 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE5FD +Encoding: 2629 58877 2571 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE5FE +Encoding: 2630 58878 2572 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE5FF +Encoding: 2631 58879 2573 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE600 +Encoding: 2632 58880 2574 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE601 +Encoding: 2633 58881 2575 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE602 +Encoding: 2634 58882 2576 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE603 +Encoding: 2635 58883 2577 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE604 +Encoding: 2636 58884 2578 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE605 +Encoding: 2637 58885 2579 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE606 +Encoding: 2638 58886 2580 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE607 +Encoding: 2639 58887 2581 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE608 +Encoding: 2640 58888 2582 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE609 +Encoding: 2641 58889 2583 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE60A +Encoding: 2642 58890 2584 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE60B +Encoding: 2643 58891 2585 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE60C +Encoding: 2644 58892 2586 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE60D +Encoding: 2645 58893 2587 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE60E +Encoding: 2646 58894 2588 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE60F +Encoding: 2647 58895 2589 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE610 +Encoding: 2648 58896 2590 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE611 +Encoding: 2649 58897 2591 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE612 +Encoding: 2650 58898 2592 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE613 +Encoding: 2651 58899 2593 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE614 +Encoding: 2652 58900 2594 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE615 +Encoding: 2653 58901 2595 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE616 +Encoding: 2654 58902 2596 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE617 +Encoding: 2655 58903 2597 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE618 +Encoding: 2656 58904 2598 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE619 +Encoding: 2657 58905 2599 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE61A +Encoding: 2658 58906 2600 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE61B +Encoding: 2659 58907 2601 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE61C +Encoding: 2660 58908 2602 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE61D +Encoding: 2661 58909 2603 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE61E +Encoding: 2662 58910 2604 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE61F +Encoding: 2663 58911 2605 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE620 +Encoding: 2664 58912 2606 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE621 +Encoding: 2665 58913 2607 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE622 +Encoding: 2666 58914 2608 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE623 +Encoding: 2667 58915 2609 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE624 +Encoding: 2668 58916 2610 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE625 +Encoding: 2669 58917 2611 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE626 +Encoding: 2670 58918 2612 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE627 +Encoding: 2671 58919 2613 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE628 +Encoding: 2672 58920 2614 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE62A +Encoding: 2673 58922 2615 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE62B +Encoding: 2674 58923 2616 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE62C +Encoding: 2675 58924 2617 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE62D +Encoding: 2676 58925 2618 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE634 +Encoding: 2677 58932 2619 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE63A +Encoding: 2678 58938 2620 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE64E +Encoding: 2679 58958 2621 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE681 +Encoding: 2680 59009 2622 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE697 +Encoding: 2681 59031 2623 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE6A9 +Encoding: 2682 59049 2624 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE702 +Encoding: 2683 59138 2625 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE703 +Encoding: 2684 59139 2626 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE706 +Encoding: 2685 59142 2627 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE707 +Encoding: 2686 59143 2628 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE70C +Encoding: 2687 59148 2629 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE70E +Encoding: 2688 59150 2630 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE70F +Encoding: 2689 59151 2631 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE711 +Encoding: 2690 59153 2632 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE712 +Encoding: 2691 59154 2633 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE716 +Encoding: 2692 59158 2634 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE718 +Encoding: 2693 59160 2635 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE71E +Encoding: 2694 59166 2636 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE725 +Encoding: 2695 59173 2637 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE726 +Encoding: 2696 59174 2638 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE727 +Encoding: 2697 59175 2639 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE728 +Encoding: 2698 59176 2640 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE729 +Encoding: 2699 59177 2641 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE72D +Encoding: 2700 59181 2642 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE736 +Encoding: 2701 59190 2643 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE737 +Encoding: 2702 59191 2644 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE738 +Encoding: 2703 59192 2645 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE739 +Encoding: 2704 59193 2646 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE73A +Encoding: 2705 59194 2647 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE73B +Encoding: 2706 59195 2648 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE73C +Encoding: 2707 59196 2649 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE73D +Encoding: 2708 59197 2650 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE73E +Encoding: 2709 59198 2651 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE73F +Encoding: 2710 59199 2652 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE743 +Encoding: 2711 59203 2653 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE745 +Encoding: 2712 59205 2654 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE746 +Encoding: 2713 59206 2655 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE749 +Encoding: 2714 59209 2656 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE74A +Encoding: 2715 59210 2657 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE74E +Encoding: 2716 59214 2658 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE755 +Encoding: 2717 59221 2659 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE756 +Encoding: 2718 59222 2660 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE757 +Encoding: 2719 59223 2661 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE758 +Encoding: 2720 59224 2662 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE759 +Encoding: 2721 59225 2663 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE764 +Encoding: 2722 59236 2664 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE768 +Encoding: 2723 59240 2665 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE769 +Encoding: 2724 59241 2666 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE76A +Encoding: 2725 59242 2667 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE76D +Encoding: 2726 59245 2668 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE76E +Encoding: 2727 59246 2669 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE777 +Encoding: 2728 59255 2670 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE779 +Encoding: 2729 59257 2671 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE77B +Encoding: 2730 59259 2672 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE77F +Encoding: 2731 59263 2673 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE781 +Encoding: 2732 59265 2674 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE786 +Encoding: 2733 59270 2675 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE791 +Encoding: 2734 59281 2676 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE795 +Encoding: 2735 59285 2677 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE796 +Encoding: 2736 59286 2678 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE798 +Encoding: 2737 59288 2679 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE7A2 +Encoding: 2738 59298 2680 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE7A3 +Encoding: 2739 59299 2681 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE7A7 +Encoding: 2740 59303 2682 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE7A8 +Encoding: 2741 59304 2683 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE7AA +Encoding: 2742 59306 2684 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE7AF +Encoding: 2743 59311 2685 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE7B0 +Encoding: 2744 59312 2686 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE7B1 +Encoding: 2745 59313 2687 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE7B4 +Encoding: 2746 59316 2688 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE7B5 +Encoding: 2747 59317 2689 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE7B8 +Encoding: 2748 59320 2690 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE7BA +Encoding: 2749 59322 2691 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE7C4 +Encoding: 2750 59332 2692 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniE7C5 +Encoding: 2751 59333 2693 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniEFFA +Encoding: 2752 61434 2694 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniEFFB +Encoding: 2753 61435 2695 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniEFFC +Encoding: 2754 61436 2696 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniEFFD +Encoding: 2755 61437 2697 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF001 +Encoding: 2756 61441 2698 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF005 +Encoding: 8 61445 2699 +Width: 500 +Flags: W +LayerCount: 2 +EndChar + +StartChar: uniF008 +Encoding: 2757 61448 2700 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF00B +Encoding: 2758 61451 2701 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF00C +Encoding: 2759 61452 2702 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF00D +Encoding: 2760 61453 2703 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF013 +Encoding: 2761 61459 2704 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF014 +Encoding: 2762 61460 2705 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF015 +Encoding: 2763 61461 2706 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF016 +Encoding: 2764 61462 2707 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF017 +Encoding: 2765 61463 2708 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF01A +Encoding: 2766 61466 2709 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF01B +Encoding: 2767 61467 2710 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF01C +Encoding: 2768 61468 2711 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF023 +Encoding: 2769 61475 2712 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF025 +Encoding: 2770 61477 2713 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF026 +Encoding: 2771 61478 2714 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF027 +Encoding: 2772 61479 2715 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF028 +Encoding: 2773 61480 2716 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF02B +Encoding: 2774 61483 2717 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF02D +Encoding: 2775 61485 2718 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF031 +Encoding: 2776 61489 2719 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF032 +Encoding: 2777 61490 2720 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF033 +Encoding: 2778 61491 2721 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF034 +Encoding: 2779 61492 2722 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF035 +Encoding: 2780 61493 2723 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF03A +Encoding: 2781 61498 2724 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF03D +Encoding: 2782 61501 2725 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF03E +Encoding: 2783 61502 2726 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF040 +Encoding: 2784 61504 2727 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF048 +Encoding: 2785 61512 2728 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF049 +Encoding: 2786 61513 2729 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF04A +Encoding: 2787 61514 2730 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF04B +Encoding: 2788 61515 2731 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF04C +Encoding: 2789 61516 2732 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF04D +Encoding: 2790 61517 2733 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF04E +Encoding: 2791 61518 2734 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF050 +Encoding: 2792 61520 2735 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF051 +Encoding: 2793 61521 2736 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF052 +Encoding: 2794 61522 2737 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF053 +Encoding: 2795 61523 2738 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF054 +Encoding: 2796 61524 2739 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF055 +Encoding: 2797 61525 2740 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF056 +Encoding: 2798 61526 2741 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF057 +Encoding: 2799 61527 2742 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF058 +Encoding: 2800 61528 2743 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF059 +Encoding: 2801 61529 2744 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF05A +Encoding: 2802 61530 2745 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF064 +Encoding: 2803 61540 2746 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF067 +Encoding: 2804 61543 2747 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF068 +Encoding: 2805 61544 2748 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF069 +Encoding: 2806 61545 2749 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF06A +Encoding: 2807 61546 2750 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF071 +Encoding: 2808 61553 2751 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF073 +Encoding: 2809 61555 2752 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF075 +Encoding: 2810 61557 2753 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF076 +Encoding: 2811 61558 2754 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF07B +Encoding: 2812 61563 2755 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF07C +Encoding: 2813 61564 2756 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF080 +Encoding: 2814 61568 2757 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF084 +Encoding: 2815 61572 2758 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF085 +Encoding: 2816 61573 2759 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF09C +Encoding: 2817 61596 2760 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF09E +Encoding: 2818 61598 2761 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF0A0 +Encoding: 2819 61600 2762 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF0A2 +Encoding: 2820 61602 2763 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF0AC +Encoding: 2821 61612 2764 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF0AE +Encoding: 2822 61614 2765 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF0B0 +Encoding: 2823 61616 2766 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF0C3 +Encoding: 2824 61635 2767 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF0C4 +Encoding: 2825 61636 2768 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF0C5 +Encoding: 2826 61637 2769 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF0E4 +Encoding: 2827 61668 2770 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF0E7 +Encoding: 2828 61671 2771 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF0F3 +Encoding: 2829 61683 2772 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF0F4 +Encoding: 2830 61684 2773 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF0F6 +Encoding: 2831 61686 2774 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF0FD +Encoding: 2832 61693 2775 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF108 +Encoding: 2833 61704 2776 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF111 +Encoding: 2834 61713 2777 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF113 +Encoding: 2835 61715 2778 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF114 +Encoding: 2836 61716 2779 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF115 +Encoding: 2837 61717 2780 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF11C +Encoding: 2838 61724 2781 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF120 +Encoding: 2839 61728 2782 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF121 +Encoding: 2840 61729 2783 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF126 +Encoding: 2841 61734 2784 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF130 +Encoding: 2842 61744 2785 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF131 +Encoding: 2843 61745 2786 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF133 +Encoding: 2844 61747 2787 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF13B +Encoding: 2845 61755 2788 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF13E +Encoding: 2846 61758 2789 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF144 +Encoding: 2847 61764 2790 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF155 +Encoding: 2848 61781 2791 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF15B +Encoding: 2849 61787 2792 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF15C +Encoding: 2850 61788 2793 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF15D +Encoding: 2851 61789 2794 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF15E +Encoding: 2852 61790 2795 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF16B +Encoding: 2853 61803 2796 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF179 +Encoding: 2854 61817 2797 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF17A +Encoding: 2855 61818 2798 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF17B +Encoding: 2856 61819 2799 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF17C +Encoding: 2857 61820 2800 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF185 +Encoding: 2858 61829 2801 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF187 +Encoding: 2859 61831 2802 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF188 +Encoding: 2860 61832 2803 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF18D +Encoding: 2861 61837 2804 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF198 +Encoding: 2862 61848 2805 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF1B6 +Encoding: 2863 61878 2806 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF1B7 +Encoding: 2864 61879 2807 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF1BB +Encoding: 2865 61883 2808 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF1BD +Encoding: 2866 61885 2809 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF1C0 +Encoding: 2867 61888 2810 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF1C1 +Encoding: 2868 61889 2811 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF1C2 +Encoding: 2869 61890 2812 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF1C3 +Encoding: 2870 61891 2813 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF1C4 +Encoding: 2871 61892 2814 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF1C5 +Encoding: 2872 61893 2815 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF1C6 +Encoding: 2873 61894 2816 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF1D3 +Encoding: 2874 61907 2817 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF1EA +Encoding: 2875 61930 2818 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF1EB +Encoding: 2876 61931 2819 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF1F6 +Encoding: 2877 61942 2820 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF1F7 +Encoding: 2878 61943 2821 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF1F8 +Encoding: 2879 61944 2822 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF1FA +Encoding: 2880 61946 2823 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF1FE +Encoding: 2881 61950 2824 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF200 +Encoding: 2882 61952 2825 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF201 +Encoding: 2883 61953 2826 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF219 +Encoding: 2884 61977 2827 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF233 +Encoding: 2885 62003 2828 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF240 +Encoding: 2886 62016 2829 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF241 +Encoding: 2887 62017 2830 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF242 +Encoding: 2888 62018 2831 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF243 +Encoding: 2889 62019 2832 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF244 +Encoding: 2890 62020 2833 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF250 +Encoding: 2891 62032 2834 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF251 +Encoding: 2892 62033 2835 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF252 +Encoding: 2893 62034 2836 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF253 +Encoding: 2894 62035 2837 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF254 +Encoding: 2895 62036 2838 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF260 +Encoding: 2896 62048 2839 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF268 +Encoding: 2897 62056 2840 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF269 +Encoding: 2898 62057 2841 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF26A +Encoding: 2899 62058 2842 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF270 +Encoding: 2900 62064 2843 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF292 +Encoding: 2901 62098 2844 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF293 +Encoding: 2902 62099 2845 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF294 +Encoding: 2903 62100 2846 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF296 +Encoding: 2904 62102 2847 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF298 +Encoding: 2905 62104 2848 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF2C7 +Encoding: 2906 62151 2849 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF2C8 +Encoding: 2907 62152 2850 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF2C9 +Encoding: 2908 62153 2851 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF2CA +Encoding: 2909 62154 2852 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF2CB +Encoding: 2910 62155 2853 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF2DB +Encoding: 2911 62171 2854 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF2DC +Encoding: 2912 62172 2855 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF300 +Encoding: 2913 62208 2856 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF301 +Encoding: 2914 62209 2857 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF302 +Encoding: 2915 62210 2858 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF303 +Encoding: 2916 62211 2859 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF304 +Encoding: 2917 62212 2860 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF305 +Encoding: 2918 62213 2861 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF306 +Encoding: 2919 62214 2862 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF307 +Encoding: 2920 62215 2863 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF308 +Encoding: 2921 62216 2864 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF309 +Encoding: 2922 62217 2865 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF30A +Encoding: 2923 62218 2866 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF30C +Encoding: 2924 62220 2867 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF30D +Encoding: 2925 62221 2868 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF30E +Encoding: 2926 62222 2869 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF310 +Encoding: 2927 62224 2870 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF312 +Encoding: 2928 62226 2871 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF313 +Encoding: 2929 62227 2872 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF314 +Encoding: 2930 62228 2873 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF317 +Encoding: 2931 62231 2874 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF318 +Encoding: 2932 62232 2875 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF319 +Encoding: 2933 62233 2876 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF31B +Encoding: 2934 62235 2877 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF31C +Encoding: 2935 62236 2878 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF401 +Encoding: 2936 62465 2879 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF408 +Encoding: 2937 62472 2880 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF40E +Encoding: 2938 62478 2881 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF40F +Encoding: 2939 62479 2882 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF410 +Encoding: 2940 62480 2883 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF411 +Encoding: 2941 62481 2884 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF413 +Encoding: 2942 62483 2885 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF415 +Encoding: 2943 62485 2886 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF417 +Encoding: 2944 62487 2887 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF423 +Encoding: 2945 62499 2888 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF425 +Encoding: 2946 62501 2889 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF42B +Encoding: 2947 62507 2890 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF431 +Encoding: 2948 62513 2891 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF432 +Encoding: 2949 62514 2892 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF433 +Encoding: 2950 62515 2893 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF434 +Encoding: 2951 62516 2894 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF440 +Encoding: 2952 62528 2895 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF447 +Encoding: 2953 62535 2896 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF449 +Encoding: 2954 62537 2897 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF44A +Encoding: 2955 62538 2898 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF44B +Encoding: 2956 62539 2899 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF461 +Encoding: 2957 62561 2900 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF462 +Encoding: 2958 62562 2901 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF464 +Encoding: 2959 62564 2902 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF471 +Encoding: 2960 62577 2903 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF475 +Encoding: 2961 62581 2904 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF481 +Encoding: 2962 62593 2905 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF482 +Encoding: 2963 62594 2906 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF489 +Encoding: 2964 62601 2907 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF48A +Encoding: 2965 62602 2908 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF48E +Encoding: 2966 62606 2909 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF498 +Encoding: 2967 62616 2910 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF499 +Encoding: 2968 62617 2911 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF49B +Encoding: 2969 62619 2912 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF49E +Encoding: 2970 62622 2913 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF4A0 +Encoding: 2971 62624 2914 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF4A5 +Encoding: 2972 62629 2915 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF529 +Encoding: 2973 62761 2916 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF53B +Encoding: 2974 62779 2917 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF541 +Encoding: 2975 62785 2918 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF542 +Encoding: 2976 62786 2919 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF543 +Encoding: 2977 62787 2920 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF544 +Encoding: 2978 62788 2921 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF54B +Encoding: 2979 62795 2922 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF54C +Encoding: 2980 62796 2923 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF553 +Encoding: 2981 62803 2924 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF55A +Encoding: 2982 62810 2925 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF55B +Encoding: 2983 62811 2926 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF55C +Encoding: 2984 62812 2927 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF578 +Encoding: 2985 62840 2928 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF579 +Encoding: 2986 62841 2929 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF57A +Encoding: 2987 62842 2930 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF57B +Encoding: 2988 62843 2931 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF57C +Encoding: 2989 62844 2932 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF57D +Encoding: 2990 62845 2933 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF57E +Encoding: 2991 62846 2934 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF57F +Encoding: 2992 62847 2935 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF580 +Encoding: 2993 62848 2936 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF581 +Encoding: 2994 62849 2937 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF582 +Encoding: 2995 62850 2938 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF583 +Encoding: 2996 62851 2939 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF584 +Encoding: 2997 62852 2940 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF585 +Encoding: 2998 62853 2941 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF586 +Encoding: 2999 62854 2942 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF587 +Encoding: 3000 62855 2943 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF588 +Encoding: 3001 62856 2944 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF589 +Encoding: 3002 62857 2945 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF58A +Encoding: 3003 62858 2946 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF58B +Encoding: 3004 62859 2947 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF58C +Encoding: 3005 62860 2948 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF58D +Encoding: 3006 62861 2949 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF58E +Encoding: 3007 62862 2950 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF58F +Encoding: 3008 62863 2951 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF590 +Encoding: 3009 62864 2952 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF5AE +Encoding: 3010 62894 2953 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF5AF +Encoding: 3011 62895 2954 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF5B1 +Encoding: 3012 62897 2955 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF5B2 +Encoding: 3013 62898 2956 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF5BC +Encoding: 3014 62908 2957 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF5BD +Encoding: 3015 62909 2958 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF5EB +Encoding: 3016 62955 2959 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: parenleft.numerator +Encoding: 3017 63025 2960 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: parenright.numerator +Encoding: 3018 63026 2961 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: three.denominator +Encoding: 3019 63064 2962 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: four.denominator +Encoding: 3020 63065 2963 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: seven.numerator +Encoding: 3021 63080 2964 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Lcommaaccent.small +Encoding: 3022 63116 2965 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: Wcircumflex.small +Encoding: 3023 63142 2966 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: guillemotright.cap +Encoding: 3024 63159 2967 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: guilsinglleft.cap +Encoding: 3025 63160 2968 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: guilsinglright.cap +Encoding: 3026 63161 2969 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: zcaron.sc +Encoding: 3027 63231 2970 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF713 +Encoding: 3028 63251 2971 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF718 +Encoding: 3029 63256 2972 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF71A +Encoding: 3030 63258 2973 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF71C +Encoding: 3031 63260 2974 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF71E +Encoding: 3032 63262 2975 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF722 +Encoding: 3033 63266 2976 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: dollar.oldstyle +Encoding: 3034 63268 2977 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF72A +Encoding: 3035 63274 2978 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF72B +Encoding: 3036 63275 2979 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF72D +Encoding: 3037 63277 2980 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF74A +Encoding: 3038 63306 2981 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF783 +Encoding: 3039 63363 2982 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF794 +Encoding: 3040 63380 2983 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF7B7 +Encoding: 3041 63415 2984 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF7CA +Encoding: 3042 63434 2985 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF7CB +Encoding: 3043 63435 2986 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF7CC +Encoding: 3044 63436 2987 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF7CD +Encoding: 3045 63437 2988 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF7CF +Encoding: 3046 63439 2989 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF7D9 +Encoding: 3047 63449 2990 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: ucircumflex.sc +Encoding: 3048 63483 2991 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF80A +Encoding: 3049 63498 2992 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF816 +Encoding: 3050 63510 2993 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF81A +Encoding: 3051 63514 2994 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF81F +Encoding: 3052 63519 2995 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF820 +Encoding: 3053 63520 2996 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF831 +Encoding: 3054 63537 2997 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF832 +Encoding: 3055 63538 2998 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF833 +Encoding: 3056 63539 2999 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF834 +Encoding: 3057 63540 3000 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF835 +Encoding: 3058 63541 3001 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF836 +Encoding: 3059 63542 3002 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF837 +Encoding: 3060 63543 3003 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF83C +Encoding: 3061 63548 3004 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF886 +Encoding: 3062 63622 3005 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF89F +Encoding: 3063 63647 3006 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF8D7 +Encoding: 3064 63703 3007 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniF8FE +Encoding: 3065 63742 3008 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFA7D +Encoding: 3066 64125 3009 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFA7E +Encoding: 3067 64126 3010 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFA7F +Encoding: 3068 64127 3011 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFA80 +Encoding: 3069 64128 3012 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFAA8 +Encoding: 3070 64168 3013 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFAA9 +Encoding: 3071 64169 3014 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFAB6 +Encoding: 3072 64182 3015 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFABF +Encoding: 3073 64191 3016 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFB68 +Encoding: 3074 64360 3017 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFBF1 +Encoding: 3075 64497 3018 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFC2E +Encoding: 3076 64558 3019 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFC5B +Encoding: 3077 64603 3020 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFC5C +Encoding: 3078 64604 3021 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFC5D +Encoding: 3079 64605 3022 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFCCC +Encoding: 3080 64716 3023 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFCE4 +Encoding: 3081 64740 3024 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFD03 +Encoding: 3082 64771 3025 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFD05 +Encoding: 3083 64773 3026 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFD06 +Encoding: 3084 64774 3027 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFD07 +Encoding: 3085 64775 3028 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFD08 +Encoding: 3086 64776 3029 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFD09 +Encoding: 3087 64777 3030 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFD0A +Encoding: 3088 64778 3031 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFD0B +Encoding: 3089 64779 3032 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFD0C +Encoding: 3090 64780 3033 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFD0D +Encoding: 3091 64781 3034 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFD0E +Encoding: 3092 64782 3035 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFD0F +Encoding: 3093 64783 3036 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFD10 +Encoding: 3094 64784 3037 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFD32 +Encoding: 3095 64818 3038 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFD42 +Encoding: 3096 64834 3039 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFE54 +Encoding: 3097 65108 3040 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFE55 +Encoding: 3098 65109 3041 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFE56 +Encoding: 3099 65110 3042 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFE57 +Encoding: 3100 65111 3043 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFE58 +Encoding: 3101 65112 3044 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFE59 +Encoding: 3102 65113 3045 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFE5A +Encoding: 3103 65114 3046 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFE5B +Encoding: 3104 65115 3047 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFE5C +Encoding: 3105 65116 3048 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFE5D +Encoding: 3106 65117 3049 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFE5E +Encoding: 3107 65118 3050 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFE5F +Encoding: 3108 65119 3051 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFE60 +Encoding: 3109 65120 3052 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFE61 +Encoding: 3110 65121 3053 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFE62 +Encoding: 3111 65122 3054 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFE63 +Encoding: 3112 65123 3055 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFE64 +Encoding: 3113 65124 3056 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFE65 +Encoding: 3114 65125 3057 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFE66 +Encoding: 3115 65126 3058 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFE68 +Encoding: 3116 65128 3059 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFE69 +Encoding: 3117 65129 3060 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFE6A +Encoding: 3118 65130 3061 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFE6B +Encoding: 3119 65131 3062 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFF0B +Encoding: 3120 65291 3063 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFF32 +Encoding: 3121 65330 3064 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFF41 +Encoding: 3122 65345 3065 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFF4E +Encoding: 3123 65358 3066 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uniFF53 +Encoding: 3124 65363 3067 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1016F +Encoding: 3125 65903 3068 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u102A6 +Encoding: 3126 66214 3069 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u102C9 +Encoding: 3127 66249 3070 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u102CF +Encoding: 3128 66255 3071 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u10315 +Encoding: 3129 66325 3072 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u10343 +Encoding: 3130 66371 3073 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1D53D +Encoding: 3131 120125 3074 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1D53E +Encoding: 3132 120126 3075 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1D54A +Encoding: 3133 120138 3076 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1D54E +Encoding: 3134 120142 3077 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1D54F +Encoding: 3135 120143 3078 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1D557 +Encoding: 3136 120151 3079 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1D558 +Encoding: 3137 120152 3080 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1D563 +Encoding: 3138 120163 3081 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1D564 +Encoding: 3139 120164 3082 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1D568 +Encoding: 3140 120168 3083 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1D569 +Encoding: 3141 120169 3084 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F311 +Encoding: 3142 127761 3085 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F312 +Encoding: 3143 127762 3086 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F313 +Encoding: 3144 127763 3087 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F314 +Encoding: 3145 127764 3088 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F315 +Encoding: 3146 127765 3089 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F316 +Encoding: 3147 127766 3090 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F317 +Encoding: 3148 127767 3091 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F318 +Encoding: 3149 127768 3092 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F31E +Encoding: 3150 127774 3093 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F331 +Encoding: 3151 127793 3094 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F333 +Encoding: 3152 127795 3095 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F379 +Encoding: 3153 127865 3096 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F381 +Encoding: 3154 127873 3097 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F40D +Encoding: 3155 128013 3098 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F40F +Encoding: 3156 128015 3099 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F418 +Encoding: 3157 128024 3100 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F41B +Encoding: 3158 128027 3101 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F429 +Encoding: 3159 128041 3102 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F42A +Encoding: 3160 128042 3103 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F42B +Encoding: 3161 128043 3104 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F42C +Encoding: 3162 128044 3105 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F439 +Encoding: 3163 128057 3106 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F447 +Encoding: 3164 128071 3107 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F448 +Encoding: 3165 128072 3108 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F469 +Encoding: 3166 128105 3109 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F47D +Encoding: 3167 128125 3110 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F48E +Encoding: 3168 128142 3111 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F4A0 +Encoding: 3169 128160 3112 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F4A1 +Encoding: 3170 128161 3113 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F4A5 +Encoding: 3171 128165 3114 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F4A9 +Encoding: 3172 128169 3115 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F4BC +Encoding: 3173 128188 3116 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F4C4 +Encoding: 3174 128196 3117 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F4D6 +Encoding: 3175 128214 3118 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F4DD +Encoding: 3176 128221 3119 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F4E1 +Encoding: 3177 128225 3120 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F4E6 +Encoding: 3178 128230 3121 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F4E9 +Encoding: 3179 128233 3122 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F50B +Encoding: 3180 128267 3123 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F510 +Encoding: 3181 128272 3124 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F511 +Encoding: 3182 128273 3125 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F512 +Encoding: 3183 128274 3126 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F517 +Encoding: 3184 128279 3127 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F527 +Encoding: 3185 128295 3128 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F52C +Encoding: 3186 128300 3129 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F52E +Encoding: 3187 128302 3130 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F5A8 +Encoding: 3188 128424 3131 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F608 +Encoding: 3189 128520 3132 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F60A +Encoding: 3190 128522 3133 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F60E +Encoding: 3191 128526 3134 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F680 +Encoding: 3192 128640 3135 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F6E0 +Encoding: 3193 128736 3136 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F6E1 +Encoding: 3194 128737 3137 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F937 +Encoding: 3195 129335 3138 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F980 +Encoding: 3196 129408 3139 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F98A +Encoding: 3197 129418 3140 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: u1F98C +Encoding: 3198 129420 3141 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uF0002 +Encoding: 3199 983042 3142 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uF006F +Encoding: 3200 983151 3143 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uF0172 +Encoding: 3201 983410 3144 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uF01A8 +Encoding: 3202 983464 3145 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uF01F0 +Encoding: 3203 983536 3146 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uF0232 +Encoding: 3204 983602 3147 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uF02D1 +Encoding: 3205 983761 3148 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uF02D4 +Encoding: 3206 983764 3149 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uF0306 +Encoding: 3207 983814 3150 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uF031B +Encoding: 3208 983835 3151 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uF0320 +Encoding: 3209 983840 3152 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uF0411 +Encoding: 3210 984081 3153 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uF048D +Encoding: 3211 984205 3154 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uF05C6 +Encoding: 3212 984518 3155 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uF0645 +Encoding: 3213 984645 3156 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uF06A9 +Encoding: 3214 984745 3157 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uF072B +Encoding: 3215 984875 3158 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uF07D4 +Encoding: 3216 985044 3159 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uF0844 +Encoding: 3217 985156 3160 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uF0A0A +Encoding: 3218 985610 3161 +Width: 1000 +LayerCount: 2 +EndChar + +StartChar: uF1417 +Encoding: 3219 988183 3162 +Width: 1000 +LayerCount: 2 +EndChar +EndChars +BitmapFont: 13 3164 10 3 1 slavfox +BDFStartProperties: 45 +FONT 1 "-slavfox-Cozette-Medium-R-Normal--13-120-75-75-M-60-george-0" +SIZE 1 "12 75 75" +FONTBOUNDINGBOX 1 "13 13 -1 -3" +COMMENT 0 "Generated by fontforge, http://fontforge.sourceforge.net" +COMMENT 0 "(c) 2020-2023 Slavfox" +FOUNDRY 16 "slavfox" +FAMILY_NAME 16 "Cozette" +WEIGHT_NAME 16 "Medium" +SLANT 16 "R" +SETWIDTH_NAME 16 "Normal" +ADD_STYLE_NAME 16 "" +PIXEL_SIZE 18 13 +POINT_SIZE 18 120 +RESOLUTION_X 19 75 +RESOLUTION_Y 19 75 +SPACING 16 "M" +AVERAGE_WIDTH 18 60 +CHARSET_REGISTRY 16 "george" +CHARSET_ENCODING 16 "0" +FONTNAME_REGISTRY 16 "" +FONT_NAME 16 "Cozette" +FACE_NAME 16 "Cozette" +COPYRIGHT 16 "(c) 2020-2023 Slavfox" +FONT_VERSION 16 "1.232" +FONT_ASCENT 18 10 +FONT_DESCENT 18 3 +UNDERLINE_POSITION 18 -19 +UNDERLINE_THICKNESS 18 13 +X_HEIGHT 18 5 +CAP_HEIGHT 18 7 +DEFAULT_CHAR 19 0 +RAW_ASCENT 18 769 +RAW_DESCENT 18 230 +NORM_SPACE 18 6 +RELATIVE_WEIGHT 19 50 +RELATIVE_SETWIDTH 19 50 +SUPERSCRIPT_X 18 0 +SUPERSCRIPT_Y 18 2 +SUPERSCRIPT_SIZE 18 2 +SUBSCRIPT_X 18 0 +SUBSCRIPT_Y 18 2 +SUBSCRIPT_SIZE 18 2 +FIGURE_WIDTH 18 6 +AVG_LOWERCASE_WIDTH 18 60 +AVG_UPPERCASE_WIDTH 18 60 +BDFEndProperties +Resolution: 75 +BDFChar: 9 256 7 0 0 0 0 +z +BDFChar: 10 257 6 0 0 0 0 +z +BDFChar: 11 258 6 0 0 0 0 +z +BDFChar: 12 259 6 0 0 0 0 +z +BDFChar: 13 260 6 0 0 0 0 +z +BDFChar: 14 261 6 0 0 0 0 +z +BDFChar: 15 262 6 0 0 0 0 +z +BDFChar: 16 263 6 0 0 0 0 +z +BDFChar: 17 264 6 0 0 0 0 +z +BDFChar: 18 265 6 0 0 0 0 +z +BDFChar: 19 266 6 0 0 0 0 +z +BDFChar: 20 267 6 0 0 0 0 +z +BDFChar: 21 268 6 0 0 0 0 +z +BDFChar: 22 269 6 0 0 0 0 +z +BDFChar: 23 270 6 0 0 0 0 +z +BDFChar: 24 271 6 0 0 0 0 +z +BDFChar: 25 272 6 0 0 0 0 +z +BDFChar: 26 273 7 0 0 0 0 +z +BDFChar: 27 274 6 1 5 1 6 +pkX`^M"grM +BDFChar: 28 275 6 1 5 1 6 +pkX`^M"grM +BDFChar: 29 276 6 1 5 1 6 +pkX`^M"grM +BDFChar: 30 277 6 1 5 1 6 +pkX`^M"grM +BDFChar: 31 278 6 0 3 3 9 +&.fBa&.n=2 +BDFChar: 32 20 6 6 6 -1 -1 +z +BDFChar: 33 33 6 3 3 0 7 +J:N0#J:IWM +BDFChar: 34 34 6 2 4 6 8 +TV.qX +BDFChar: 35 35 6 1 5 0 7 +:f-p`;#!j` +BDFChar: 36 36 6 1 5 -1 8 ++E49PE%!-5E$,,\ +BDFChar: 37 37 6 1 5 0 8 +5bLXZ+@)#:&-)\1 +BDFChar: 38 38 6 1 5 0 8 ++AblWBTS=;BE/#4 +BDFChar: 39 39 6 3 3 6 8 +J:N.M +BDFChar: 40 40 6 2 4 -2 8 ++@&2BJ:N0#5X6Fl +BDFChar: 41 41 6 2 4 -2 8 +J3Z@B+9S +BDFChar: 76 76 6 1 5 0 7 +J:N0#J:N1F +BDFChar: 77 77 6 1 5 0 7 +LtJZ)LkpkC +BDFChar: 78 78 6 1 5 0 7 +LrdZ9W0is. +BDFChar: 79 79 6 1 5 0 7 +E/9=+Lkpk+ +BDFChar: 80 80 6 1 5 0 7 +n;)mVn:6%> +BDFChar: 81 81 6 1 5 -1 7 +E/9=+Lkq.+#QOi) +BDFChar: 82 82 6 1 5 0 7 +n;)niOGJ^K +BDFChar: 83 83 6 1 5 0 7 +E/9$`#RH6* +BDFChar: 84 84 6 1 5 0 7 +p`L\%+LkpkCn,NFg +BDFChar: 99 99 6 1 5 0 5 +E/9$pLi<=o +BDFChar: 100 100 6 1 5 0 8 +#RC]\LkpkCGQ7^D +BDFChar: 101 101 6 1 5 0 5 +E/=:>Li<=o +BDFChar: 102 102 6 1 5 0 8 +3']au5X7S"5QCca +BDFChar: 103 103 6 1 5 -3 5 +G_h03Lj012Du]k< +BDFChar: 104 104 6 1 5 0 8 +J:N1>LkpkCL]@DT +BDFChar: 105 105 6 2 5 0 7 +5QJSb5X7Rg +BDFChar: 106 106 6 2 4 -2 7 ++95dl+qUM +BDFChar: 127 279 6 3 6 3 9 +J:N0#J:R+h +BDFChar: 128 280 6 3 6 -3 3 +n:6%>J:N.M +BDFChar: 129 281 6 0 3 -3 3 +n.6-B&.fBQ +BDFChar: 130 282 6 0 6 3 3 +rVuou +BDFChar: 131 283 6 3 3 -3 9 +J:N0#J:N0#J:N0#J,fQL +BDFChar: 132 284 6 0 3 -3 9 +&.fBa&.n=B&.fBa&-)\1 +BDFChar: 133 285 6 0 6 3 9 +&.fBa&.ng@ +BDFChar: 134 286 6 3 6 -3 9 +J:N0#J:R->J:N0#J,fQL +BDFChar: 135 287 6 0 6 -3 3 +rX]VP&.fBQ +BDFChar: 136 288 6 0 6 -3 9 +&.fBa&.ngP&.fBa&-)\1 +BDFChar: 137 289 6 0 6 -3 9 +W`5utW`5utW`5utWW3#! +BDFChar: 138 290 6 1 5 1 5 +&GRCC5QCca +BDFChar: 139 291 6 1 5 0 6 +(gql%(]a=2 +BDFChar: 140 292 6 1 5 0 5 +peXd`:f%,l +BDFChar: 141 293 6 1 5 0 6 +^b?$J^]=-0 +BDFChar: 142 294 6 1 5 0 7 +0L.nm5X9kp +BDFChar: 143 295 6 2 4 3 3 +huE`W +BDFChar: 144 296 6 0 0 0 0 +z +BDFChar: 145 297 6 6 6 -1 -1 +z +BDFChar: 146 298 6 3 3 -2 5 +J,k+MJ:N0# +BDFChar: 147 299 6 1 5 -1 6 ++E49PTVufP +BDFChar: 148 300 6 1 5 0 7 +0L.nm5X7TE +BDFChar: 149 301 6 1 5 0 5 +Li?0eE/4Jo +BDFChar: 150 302 6 1 5 0 8 +Lkpj`+S[)S+92BA +BDFChar: 151 1 6 2 4 2 4 +5i=m- +BDFChar: 152 303 6 3 3 -2 8 +J:N0#!!!"LJ:N.M +BDFChar: 153 304 6 1 5 -1 8 +E/9$P:f&hOLi<=o +BDFChar: 154 305 6 2 4 8 8 +TE"rl +BDFChar: 155 306 6 0 6 0 6 +3(1?P\jSLX +BDFChar: 156 307 6 2 5 3 7 +?k@:=Du]k< +BDFChar: 157 308 6 1 5 1 5 +-r?R5-ia5I +BDFChar: 158 309 6 1 4 0 3 +n.6-B +BDFChar: 159 310 6 2 4 3 3 +huE`W +BDFChar: 160 311 6 0 6 0 6 +3(1?PU-ps@ +BDFChar: 161 312 6 0 6 9 9 +rVuou +BDFChar: 162 313 6 1 4 4 7 +@$$IX +BDFChar: 163 314 6 1 5 0 6 ++<^G%+9;0: +BDFChar: 164 315 6 1 4 4 8 +@#uKrn,NFg +BDFChar: 165 316 6 1 4 4 8 +i"09-huE`W +BDFChar: 166 317 6 3 4 7 8 +5_&h7 +BDFChar: 167 318 6 1 5 -2 5 +84Z9BBM^sE +BDFChar: 168 319 6 1 5 -1 7 +Gj+@)-n$Jl-ia5I +BDFChar: 169 320 6 2 4 -2 0 +5TmiB +BDFChar: 170 321 6 1 3 4 8 +5eoWMhuE`W +BDFChar: 171 322 6 3 5 3 7 +5bL@BhuE`W +BDFChar: 172 323 6 1 5 1 5 +TMR%5TE"rl +BDFChar: 173 324 6 1 5 0 8 +Lld^k+@oVEL]@DT +BDFChar: 174 325 6 1 5 0 8 +Lld^k+AbUjQiI*d +BDFChar: 175 326 6 1 5 0 8 +aA@t+i(-t[L]@DT +BDFChar: 176 327 6 1 5 -2 5 ++93N,5_+Z0 +BDFChar: 177 328 6 1 5 0 9 +5Tg&GLkth^Lkl$2 +BDFChar: 178 329 6 1 5 0 9 +&0LslLkth^Lkl$2 +BDFChar: 179 330 6 1 5 0 9 ++A`&WLkth^Lkl$2 +BDFChar: 180 331 6 1 5 0 9 +BWqJULkth^Lkl$2 +BDFChar: 181 332 6 1 5 0 9 +:]PHjLkth^Lkl$2 +BDFChar: 182 333 6 1 5 0 9 ++Aa0\E/9>FLkl$2 +BDFChar: 183 334 6 1 5 0 7 +GbC_>i1QaQ +BDFChar: 184 335 6 1 5 -3 7 +E/9$pJ:NGp+JG9*E +BDFChar: 186 337 6 1 5 0 9 +&0LuJJ:R->JG9*E +BDFChar: 187 338 6 1 5 0 9 ++A`(5J:R->JG9*E +BDFChar: 188 339 6 1 5 0 9 +:]U9@JFJ)>JG9*E +BDFChar: 189 340 6 2 4 0 9 +J3X+m5X7S"5i;VB +BDFChar: 190 341 6 2 4 0 9 ++@#qb5X7S"5i;VB +BDFChar: 191 342 6 2 4 0 9 +5bJ,85X7S"5i;VB +BDFChar: 192 343 6 2 4 0 9 +TE*n85X7S"5i;VB +BDFChar: 193 344 6 1 5 0 6 +E(EO`84[\" +BDFChar: 194 345 6 1 5 0 9 +BWqJmaN1W)*Ho +BDFChar: 216 367 6 1 5 -3 5 +E/9$pLi=IJ?iU0, +BDFChar: 217 368 6 1 5 0 8 +5Tg&GM"lLVDu]k< +BDFChar: 218 369 6 1 5 0 8 +&0LslM"lLVDu]k< +BDFChar: 219 370 6 1 5 0 8 ++A`&WM"lLVDu]k< +BDFChar: 220 371 6 1 5 0 7 +:]PHjpje0> +BDFChar: 221 372 6 2 5 0 8 +J3X+M5X7S"0E;(Q +BDFChar: 222 373 6 2 5 0 8 ++@#qB5X7S"0E;(Q +BDFChar: 223 374 6 2 5 0 8 +5bJ+m5X7S"0E;(Q +BDFChar: 224 375 6 2 5 0 7 +TE)bm5X7Rg +BDFChar: 225 376 6 1 5 0 8 +BFlQtG_h03Du]k< +BDFChar: 226 377 6 1 5 0 8 +BWqL+LkpkCL]@DT +BDFChar: 227 378 6 1 5 0 8 +5Tg&GLkpkCDu]k< +BDFChar: 228 379 6 1 5 0 8 +&0LslLkpkCDu]k< +BDFChar: 229 380 6 1 5 0 8 ++A`&WLkpkCDu]k< +BDFChar: 230 381 6 1 5 0 8 +BWqJULkpkCDu]k< +BDFChar: 231 382 6 1 5 0 7 +:]PHjLkpk+ +BDFChar: 232 383 6 1 5 1 5 ++9;0:+92BA +BDFChar: 233 384 6 1 5 -1 6 +#]Q00W5rq. +BDFChar: 234 385 6 1 5 0 8 +5Tg&_LkpkCGQ7^D +BDFChar: 235 386 6 1 5 0 8 +&0Lt/LkpkCGQ7^D +BDFChar: 236 387 6 1 5 0 8 ++A`&oLkpkCGQ7^D +BDFChar: 237 388 6 1 5 0 7 +:]Q<-Lkpk3 +BDFChar: 238 389 6 1 5 -3 8 +&0Lt/LkpkCGR+Ro +BDFChar: 239 390 6 1 5 -2 7 +J:R-FLkplVJ:IV" +BDFChar: 240 391 6 1 5 -3 7 +:]Q<-Lkpk3#RGAL +BDFChar: 241 392 6 1 5 0 8 +Duaj5M"ld^L]@DT +BDFChar: 242 393 6 1 5 0 7 +Dub-=LkqF3 +BDFChar: 243 394 6 1 5 0 9 +:iHDRLkth^Lkl$2 +BDFChar: 244 395 6 1 5 0 8 +:iHDZLkpkSBE/#4 +BDFChar: 245 396 6 1 5 -2 7 +E/9=+pkX`^&/YBI +BDFChar: 246 397 6 1 5 -2 5 +E/9=+QtR$J +BDFChar: 247 398 6 1 5 0 9 +&0LslLk(#+Li<=o +BDFChar: 248 399 6 1 5 0 8 +&0LslLk(#3Du]k< +BDFChar: 249 400 6 1 5 0 9 ++A`&WLk(#+Li<=o +BDFChar: 250 401 6 1 5 0 8 ++A`&WLk(#3Du]k< +BDFChar: 251 402 6 1 5 0 9 ++96A:J:N0#Li<=o +BDFChar: 252 403 6 1 5 0 7 ++96A:J:NGp +BDFChar: 253 404 6 1 5 0 9 +:`oaWLk(#+Li<=o +BDFChar: 254 405 6 1 5 0 8 +:`oaWLk(#3Du]k< +BDFChar: 255 406 6 1 5 0 9 +:`obrOGJ^KOPg*= +BDFChar: 256 407 6 1 6 0 8 +'GqC#OH>QcDu]k< +BDFChar: 257 408 6 1 5 0 7 +?r0BbkX\NX +BDFChar: 258 409 6 1 5 0 8 +&9nb*OH>QcDu]k< +BDFChar: 259 410 6 1 5 0 9 +DufZ`JFJ)>JG9*E +BDFChar: 260 411 6 1 5 0 7 +Duaj5pje0> +BDFChar: 261 412 6 1 5 0 9 +:iHF0J:R->JG9*E +BDFChar: 262 413 6 1 5 0 8 +:iHDRM"lLVDu]k< +BDFChar: 263 414 6 1 5 0 9 ++9;1eJFJ)>JG9*E +BDFChar: 264 415 6 1 5 0 7 ++96A:pje0> +BDFChar: 265 416 6 1 5 -2 7 +pjdnaJ:N1F&/YBI +BDFChar: 266 417 6 1 5 -2 5 +E/=:>LiJG9*E +BDFChar: 268 419 6 1 5 0 8 +:`oaWM"lLVDu]k< +BDFChar: 269 420 6 1 5 0 9 ++A`&WLk(kKLi<=o +BDFChar: 270 421 6 1 5 -3 8 ++A`&_LkpkCGR+Ro +BDFChar: 271 422 6 1 5 0 9 +:iHDRLk(kKLi<=o +BDFChar: 272 423 6 1 5 -3 8 +:iHDZLkpkCGR+Ro +BDFChar: 273 424 6 1 5 0 9 ++96A:J:O#CLi<=o +BDFChar: 274 425 6 1 5 -3 7 ++96YBLkpk3#RGAL +BDFChar: 275 426 6 1 5 -3 7 +E/9$pR#$Q;!$FN, +BDFChar: 276 427 6 1 5 -3 8 +&0LstLkpkCGR+Ro +BDFChar: 277 428 6 1 5 0 9 ++A`&oLkth^Lkl$2 +BDFChar: 278 429 6 2 5 0 9 +5bJ+-JDcNNOH9GB +BDFChar: 279 430 6 0 6 0 7 +7/fT%6psF2 +BDFChar: 280 431 6 1 5 0 8 +5i=nH84Z9B8,rVi +BDFChar: 281 432 6 1 5 0 9 +BWqJU+9S+@#o, +BDFChar: 296 447 6 1 5 -2 8 +J:N0+OJ(NnL`eq_ +BDFChar: 297 448 6 1 5 0 5 +Lle:fOGEl: +BDFChar: 298 449 6 1 5 0 9 +5_&ibJ:N0#JG9*E +BDFChar: 299 450 6 2 4 0 9 ++@#qB5X7S"5[XQl +BDFChar: 300 451 6 1 5 -3 7 +J:N0#J:N1F!$FN, +BDFChar: 301 452 6 2 4 -3 8 +^d(.M5X7S"?iWHB +BDFChar: 302 453 6 1 5 0 8 ++J=78J:N0#p](9o +BDFChar: 303 454 6 2 5 0 9 +&C<[-5X7S"5[XQl +BDFChar: 304 455 6 1 5 0 7 +J:N0CJ:N1F +BDFChar: 305 456 6 2 5 0 8 +^d(.M:d@92?iU0, +BDFChar: 306 457 6 1 5 0 7 +5X8.R5eoX0 +BDFChar: 307 458 6 2 4 0 8 +^d(.m^d(.M?iU0, +BDFChar: 308 459 6 1 5 0 9 +&0Lt/aN1J< +BDFChar: 340 491 6 1 5 -3 7 +5X=g(5X7Ro+:qo\ +BDFChar: 341 492 6 1 5 0 9 +:`oc5+9S +BDFChar: 394 545 6 1 5 0 8 +5bNX`OJ(NnL]@DT +BDFChar: 395 546 6 2 4 0 8 +^d(0C5X7S"?iU0, +BDFChar: 396 547 6 1 5 0 7 +^``Cp:f)t( +BDFChar: 397 548 6 1 5 0 8 +W2QYnW2QYn=9&=$ +BDFChar: 398 549 6 -1 5 -3 7 ++u1o'.OHJd+<\H" +BDFChar: 399 550 6 1 5 -2 5 +n;)mVLkl +BDFChar: 407 558 6 1 5 -1 7 +J:R-FM"%(!#QOi) +BDFChar: 408 559 6 1 5 0 7 +E/4d=J:NGp +BDFChar: 409 560 6 1 5 0 5 +n-Eu`J9V%o +BDFChar: 410 561 6 1 5 0 7 +pkV0X+@(bX +BDFChar: 411 562 6 1 5 0 8 +5bML-+FLkl$2 +BDFChar: 455 606 6 1 5 0 9 +Du`]7G_h03QtQI" +BDFChar: 456 607 6 1 5 0 9 +Du_!\E/9>FLkl$2 +BDFChar: 457 608 6 1 5 0 9 +Du_!\G_h03QtQI" +BDFChar: 458 609 6 1 5 0 9 +Dub-UTX`pQTXXt% +BDFChar: 459 610 6 1 5 0 7 +Dub-]W3Dps +BDFChar: 460 611 6 1 6 0 7 +E/9%3LqJO_ +BDFChar: 461 612 6 1 6 -3 5 +G_h0gLj012Du]k< +BDFChar: 462 613 6 1 5 0 9 +:`oaWLk(kKLi<=o +BDFChar: 463 614 6 1 5 -3 8 +:`oa_LkpkCGR+Ro +BDFChar: 464 615 6 1 5 0 9 +:`tRUT\tonLkl$2 +BDFChar: 465 616 6 1 5 0 8 +W/uOcOJ(NnL]@DT +BDFChar: 466 617 6 1 5 -2 7 +E/9=+Lkpk++> +BDFChar: 477 628 6 1 5 0 9 +5Tkm(aJc&)R"t_B +BDFChar: 478 629 6 1 5 0 8 +5Tg'rLkpkCL]@DT +BDFChar: 479 630 6 1 5 0 9 +5c@KZE/9>FLkl$2 +BDFChar: 480 631 6 1 5 0 9 +5c@KZG_h03QtQI" +BDFChar: 481 632 6 1 5 0 9 +&0LstTX`pQTXXt% +BDFChar: 482 633 6 1 5 0 8 +&0LslW48M!:]LIq +BDFChar: 483 634 6 1 5 -1 9 +&0M6tR&Hs^aDcY0 +BDFChar: 484 635 6 1 5 -1 8 +&0M6tR&Ht)E.@og +BDFChar: 485 636 6 1 5 0 9 +O@T@jLkth^Lkl$2 +BDFChar: 486 637 6 1 5 0 8 +O@T@rLkpkSBE/#4 +BDFChar: 487 638 6 1 5 0 9 +E)6ORLkth^Lkl$2 +BDFChar: 488 639 6 1 5 0 8 +E)6OZLkpkSBE/#4 +BDFChar: 489 640 6 1 5 0 9 +O@TBHJ:R->JG9*E +BDFChar: 490 641 6 1 5 0 8 +O@T@jM"lLVDu]k< +BDFChar: 491 642 6 1 5 0 9 +E)6Q0J:R->JG9*E +BDFChar: 492 643 6 1 5 0 8 +E)6ORM"lLVDu]k< +BDFChar: 493 644 6 1 5 0 9 +O@T@j+Li=IJ?iU0, +BDFChar: 524 675 6 1 5 0 9 +Du`]7E/9=+Li<=o +BDFChar: 525 676 6 1 5 0 9 +DuaRU!-!aMLi<=o +BDFChar: 526 677 6 1 5 0 9 ++96A:LkpkCLi<=o +BDFChar: 527 678 6 1 5 0 7 ++96A:Lkpk+ +BDFChar: 528 679 6 1 5 0 9 +Du_!\E/9=+Li<=o +BDFChar: 529 680 6 1 5 0 9 +Dub]MLeo3:+GQ7^D +BDFChar: 574 725 6 1 5 0 4 +E/:Hk:]LIq +BDFChar: 575 726 6 1 5 -2 7 ++U!$H7U +BDFChar: 638 787 6 1 5 5 7 +pi%>U +BDFChar: 639 788 6 2 3 1 5 +J3Z@bJ,fQL +BDFChar: 640 789 6 2 3 1 5 +5_+B85QCca +BDFChar: 641 790 6 2 4 1 2 +5i;VB +BDFChar: 642 791 6 2 4 1 2 +i'78B +BDFChar: 643 792 6 2 4 1 3 +5i=m- +BDFChar: 644 793 6 2 4 2 2 +huE`W +BDFChar: 645 794 6 2 4 7 8 +T\oeM +BDFChar: 646 795 6 3 3 7 7 +J,fQL +BDFChar: 647 796 6 2 4 7 9 +5bL@B +BDFChar: 648 797 6 3 4 -2 -1 +JA;-b +BDFChar: 649 798 6 1 5 6 7 +BWqI: +BDFChar: 650 799 6 2 6 7 8 +8<`]L6&.fBm +BDFChar: 739 888 6 0 5 0 8 +5boYN4 +BDFChar: 762 911 6 1 5 0 7 +pkV0X+@(bX +BDFChar: 763 912 6 1 5 0 7 +p`L\%+*&-)\1 +BDFChar: 809 958 6 1 5 0 7 +pjdnaJ:N0# +BDFChar: 810 959 6 1 5 -3 7 +(a'qD3$9=d+<\H" +BDFChar: 811 960 6 1 5 0 7 +E/9=+pkX`F +BDFChar: 812 961 6 1 5 0 7 +J:R-FM"#qF +BDFChar: 813 962 6 1 5 -2 7 +J:R-FLkplVJ:IV" +BDFChar: 814 963 6 1 5 0 7 +E/9$pJ:NGp +BDFChar: 815 964 6 1 5 0 9 +5Tg(%J:R->JG9*E +BDFChar: 816 965 6 1 5 0 9 +:]U9@JFJ)>JG9*E +BDFChar: 817 966 6 1 5 -2 7 +n3B6@BLkZb#VZ5Y +BDFChar: 818 967 6 2 5 0 9 ++@#qrJ:N0#J:IV" +BDFChar: 819 968 6 1 5 0 7 +0M$``J:L0E +BDFChar: 820 969 6 1 5 0 7 +E/9$`#RH6* +BDFChar: 821 970 6 2 4 0 7 +i'9Om5X7Tm +BDFChar: 822 971 6 2 4 0 9 +TE*n85X7S"5i;VB +BDFChar: 823 972 6 2 5 0 7 +E$-8G+J:N0# +BDFChar: 835 984 6 1 6 -1 7 +3(QS284\R7KE(uP +BDFChar: 836 985 6 1 5 0 7 +pjdnaJ:N1F +BDFChar: 837 986 6 1 5 0 7 +W2QY6E2]_6 +BDFChar: 838 987 6 1 5 0 7 +n;%?(#RH6* +BDFChar: 839 988 6 1 5 0 7 +LmXR.W6!&9 +BDFChar: 840 989 6 1 5 0 9 +:`tR]R&Ht)aG9fr +BDFChar: 841 990 6 1 5 0 7 +Lkq.cd#a'> +BDFChar: 842 991 6 1 5 0 7 +GXt@r84Z:- +BDFChar: 843 992 6 1 5 0 7 +Lks^9W2PN. +BDFChar: 844 993 6 1 5 0 7 +Lkpl^LkpkC +BDFChar: 845 994 6 1 5 0 7 +E/9=+Lkpk+ +BDFChar: 846 995 6 1 5 0 7 +pkX`^LkpkC +BDFChar: 847 996 6 1 5 0 7 +n;)mVn:6%> +BDFChar: 848 997 6 1 5 0 7 +E/9$pJ:NGp +BDFChar: 849 998 6 1 5 0 7 +p`L\%+QcOH>S!#QOi) +BDFChar: 854 1003 6 1 5 0 7 +LkpkCGR+Q\ +BDFChar: 855 1004 6 1 5 0 7 +W2QYnW2QZi +BDFChar: 856 1005 6 1 6 -2 7 +W2QYnW2QZi"<7CA +BDFChar: 857 1006 6 0 5 0 7 +i#j.%,U=Wp +BDFChar: 858 1007 6 1 5 0 7 +Lkpl.W2QZ9 +BDFChar: 859 1008 6 1 5 0 7 +J:N1>LkplV +BDFChar: 860 1009 6 1 5 0 7 +@#tY=#RHN" +BDFChar: 861 1010 6 1 5 0 7 +OJo,AW2QYV +BDFChar: 862 1011 6 1 5 0 7 +G_h03GUQ+= +BDFChar: 863 1012 6 1 5 0 5 +E!U]EQtQI" +BDFChar: 864 1013 6 1 5 0 8 +#]PY.Du]k< +BDFChar: 865 1014 6 1 5 0 5 +n;-RiM!tBE +BDFChar: 866 1015 6 2 5 0 5 +n:6%>J:IV" +BDFChar: 867 1016 6 1 6 -1 5 +GXt@rM#;o+ +BDFChar: 868 1017 6 1 5 0 5 +E/=:>Li<=o +BDFChar: 869 1018 6 1 5 0 5 +W2OZSW2K[r +BDFChar: 870 1019 6 1 5 0 5 +E/61RLi<=o +BDFChar: 871 1020 6 1 5 0 5 +R$ahNaN+>] +BDFChar: 872 1021 6 1 5 0 8 +:`ob*R&Ht)a8c2? +BDFChar: 873 1022 6 1 5 0 5 +Lle:fOGEl: +BDFChar: 874 1023 6 1 5 0 5 +GXt@r8;I6G +BDFChar: 875 1024 6 1 5 0 5 +LtL@YW/(ER +BDFChar: 876 1025 6 1 5 0 5 +Lkpl^Lkl$2 +BDFChar: 877 1026 6 1 5 0 5 +E/9=+Li<=o +BDFChar: 878 1027 6 1 5 0 5 +pkX`^Lkl$2 +BDFChar: 879 1028 6 1 5 -3 5 +YfMWVaKU2FJ,fQL +BDFChar: 880 1029 6 1 5 0 5 +E/9$pLi<=o +BDFChar: 881 1030 6 1 5 0 5 +p`L\%+QcOSB(] +BDFChar: 886 1035 6 1 5 0 5 +Lkpk3#RCD1 +BDFChar: 887 1036 6 1 5 0 5 +W2QYnW;$>m +BDFChar: 888 1037 6 1 6 -2 5 +W2QYnW;$K8 +BDFChar: 889 1038 6 0 5 0 5 +i#k!),WGc( +BDFChar: 890 1039 6 1 5 0 5 +Lks-NW5nr= +BDFChar: 891 1040 6 1 5 0 5 +J:R-FM!tBE +BDFChar: 892 1041 6 1 5 0 5 +n-F7E#k.fo +BDFChar: 893 1042 6 1 5 0 5 +OJqBAW/puZ +BDFChar: 894 1043 6 1 5 0 5 +G_h0#8;I6G +BDFChar: 895 1044 6 1 5 0 8 +5Tg&GM"lLVDu]k< +BDFChar: 896 1045 6 1 5 0 7 +:]PHjpje0> +BDFChar: 897 1046 6 1 5 -2 7 +5X=g(=D15r#VZ5Y +BDFChar: 898 1047 6 2 5 0 8 ++@#qrJ:N0#J,fQL +BDFChar: 899 1048 6 1 5 0 5 +E/N:a +BDFChar: 920 1069 6 1 5 0 5 +TV0[$W2K[r +BDFChar: 921 1070 6 1 5 0 7 +pkVaCE2]_6 +BDFChar: 922 1071 6 1 5 0 5 +pkVacW2K[r +BDFChar: 923 1072 6 1 5 0 7 +pk[;Dn>N:a +BDFChar: 924 1073 6 1 5 0 5 +pk[;dW2K[r +BDFChar: 925 1074 6 1 5 -2 9 +:`s_5#VZMi#]P<5 +BDFChar: 926 1075 6 1 5 -2 7 +:`s_50F.r'J8bJg +BDFChar: 927 1076 6 1 6 0 7 +XJi(rW2OYX +BDFChar: 928 1077 6 1 5 -2 5 +W2QYnW,Nk% +BDFChar: 929 1078 6 1 5 0 7 +E/9>FLkpk+ +BDFChar: 930 1079 6 1 5 0 5 +E/=:FLi<=o +BDFChar: 931 1080 6 1 6 0 7 +N/39d:f&8W +BDFChar: 932 1081 6 1 5 0 5 +Lknl(+i/j%^&0LrQ +BDFChar: 957 1106 6 2 5 -2 5 +n:6&IOH:"r +BDFChar: 958 1107 6 1 5 -2 7 +W2QY6E2]_6#RCD1 +BDFChar: 959 1108 6 1 5 -2 5 +W2OZSW2Kt- +BDFChar: 960 1109 6 1 5 -2 7 +n;%?(#RH6*+CG0L +BDFChar: 961 1110 6 1 5 -2 5 +E/61RLi=JE +BDFChar: 962 1111 6 1 5 -2 7 +OH>Qsi1Q1!#RCD1 +BDFChar: 963 1112 6 1 5 -2 5 +OH?-nOI-:Z +BDFChar: 964 1113 6 1 5 0 7 +Lo@PNn?AjI +BDFChar: 965 1114 6 1 5 0 5 +Lo@QIW/(ER +BDFChar: 966 1115 6 0 5 0 7 +7-$m8BLkNZ +BDFChar: 967 1116 6 0 5 0 7 +5k%04:hWBf +BDFChar: 968 1117 6 0 5 0 7 +jRnOH>Qk#RCD1 +BDFChar: 971 1120 6 1 5 -2 5 +OHAsnOI-:Z +BDFChar: 972 1121 6 1 6 0 7 +SQc +BDFChar: 973 1122 6 1 6 0 5 +S<36%OH9GB +BDFChar: 974 1123 6 1 5 -2 7 +i1Qa9Yc+M!#S6t9 +BDFChar: 975 1124 6 1 5 -2 5 +i1QaIW2Kt5 +BDFChar: 976 1125 6 1 5 0 7 +5`hqCW2Pek +BDFChar: 977 1126 6 1 5 0 5 +5`hqCOD"Uo +BDFChar: 978 1127 6 1 5 -2 7 +E/9$pJ:NGp&24(a +BDFChar: 979 1128 6 1 5 -2 5 +E/9$pLi=?< +BDFChar: 982 1131 6 1 5 0 7 +Lknl(+QcE"EQt#RCD1 +BDFChar: 991 1140 6 1 5 -2 5 +OH>QC&/YZY +BDFChar: 992 1141 6 1 5 0 7 +LkpkcGUNh' +BDFChar: 993 1142 6 1 5 0 5 +Lkr!S-jTeQ +BDFChar: 994 1143 6 1 5 0 7 +J:N1>LkpkC +BDFChar: 995 1144 6 1 5 0 5 +J:R-FLkl$2 +BDFChar: 996 1145 6 1 5 0 7 +&1FK%+#VZ5Y +BDFChar: 1004 1153 6 1 5 -2 5 +Lle:VOGF/r +BDFChar: 1005 1154 6 1 5 -2 7 +GXt@r84Z:-#S6t9 +BDFChar: 1006 1155 6 1 5 -2 5 +GXt@r8;IN_ +BDFChar: 1007 1156 6 1 5 -1 7 +Lkpl^LkpkC0E;(Q +BDFChar: 1008 1157 6 1 5 -1 5 +Lkpl^Lkm_b +BDFChar: 1009 1158 6 1 5 -2 7 +Lkpl^LkpkC#S6t9 +BDFChar: 1010 1159 6 1 5 -2 5 +Lkpl^LklJG9*E +BDFChar: 1023 1172 6 1 5 0 8 +:`oaWM"lLVDu]k< +BDFChar: 1024 1173 6 1 5 0 7 +E/4c*pkX`F +BDFChar: 1025 1174 6 1 5 0 5 +E/4epLi<=o +BDFChar: 1026 1175 6 1 5 0 9 +:]PHj#RL3]Li<=o +BDFChar: 1027 1176 6 1 5 0 7 +:]PHj#l'3p +BDFChar: 1028 1177 6 1 5 0 9 +:]RGmW,Q^SW2K[r +BDFChar: 1029 1178 6 1 5 0 7 +:]RGmE,_bS +BDFChar: 1030 1179 6 1 5 0 9 +:]U!@#VZMiLi<=o +BDFChar: 1031 1180 6 1 5 0 7 +:]PHj0F3JR +BDFChar: 1032 1181 6 1 5 0 7 +p]qEb#RH6* +BDFChar: 1033 1182 6 1 5 -2 5 +p]qERE!V8= +BDFChar: 1034 1183 6 1 5 0 9 +Dub]]R&Ht)aG9fr +BDFChar: 1035 1184 6 1 5 0 7 +Duc8mW2ReY +BDFChar: 1036 1185 6 1 5 0 9 +:]Q<=R&Ht)aG9fr +BDFChar: 1037 1186 6 1 5 0 7 +:]QlMW2ReY +BDFChar: 1038 1187 6 1 5 0 9 +:]PHjLkpkCLi<=o +BDFChar: 1039 1188 6 1 5 0 7 +:]PHjLkpk+ +BDFChar: 1040 1189 6 1 5 0 7 +E/9=+pkX`F +BDFChar: 1041 1190 6 1 5 0 5 +E/9>FLi<=o +BDFChar: 1042 1191 6 1 5 0 9 +:]PHjLkth^Li<=o +BDFChar: 1043 1192 6 1 5 0 7 +:]PHjM"ldF +BDFChar: 1044 1193 6 1 5 0 9 +:]Omb#^?U\OC/%g +BDFChar: 1045 1194 6 1 5 0 7 +:]TtjGR+TE +BDFChar: 1046 1195 6 1 5 0 9 +Dub]MLknl(+M[sW +BDFChar: 1047 1196 6 1 5 -2 7 +Dub]MLepnj+M[sW +BDFChar: 1048 1197 6 1 5 0 9 +:]Q<-Lknl(+M[sW +BDFChar: 1049 1198 6 1 5 -2 7 +:]Q<-Lepnj+M[sW +BDFChar: 1050 1199 6 1 5 0 9 +-r9o"Lknl(+M[sW +BDFChar: 1051 1200 6 1 5 -2 8 +-r9o"Lknl(+<\H" +BDFChar: 1052 1201 6 1 5 0 9 +:]Q<-Lkp9]#RCD1 +BDFChar: 1053 1202 6 1 5 0 7 +:]Q<-Lj012 +BDFChar: 1054 1203 6 2 5 -2 7 +n:6%>J:N0c5X5;L +BDFChar: 1055 1204 6 2 5 -2 5 +n:6%>JA=E8 +BDFChar: 1056 1205 6 1 5 0 9 +:]Q<-LrcNnW5nr= +BDFChar: 1057 1206 6 1 5 0 7 +:]Q<-aJc&Y +BDFChar: 1058 1207 6 1 5 -2 7 +GX+MZn3B6X&7>J< +BDFChar: 1059 1208 6 1 5 -2 5 +GX1a`5]@9B +BDFChar: 1060 1209 6 1 5 -2 7 +LknkM+AdlM#VZ5Y +BDFChar: 1061 1210 6 1 5 -2 5 +Leo3::l#B2 +BDFChar: 1062 1211 6 1 5 0 7 +Lknn&E);@H +BDFChar: 1063 1212 6 1 5 0 5 +Lf!kc:l#)O +BDFChar: 1064 1213 6 1 5 0 7 +3"U%jOH>QK +BDFChar: 1065 1214 6 1 5 0 7 +#\]T]LkqF3 +BDFChar: 1066 1215 6 1 5 0 7 +E$/PeW2QY6 +BDFChar: 1067 1216 6 1 5 0 7 ++9i/ibN +BDFChar: 1087 1236 6 1 5 -3 5 +aJc>IW5sL>J,fQL +BDFChar: 1088 1237 6 1 5 0 7 +G`\#30MkT5 +BDFChar: 1089 1238 6 1 5 0 5 +E2\"hW/puZ +BDFChar: 1090 1239 6 1 5 -2 7 +E/9=+Lkpk++:nMQ +BDFChar: 1091 1240 6 1 6 -3 5 +G_h03Lj012$ig8- +BDFChar: 1092 1241 6 1 5 0 7 +W2QYnW)-;e +BDFChar: 1093 1242 6 1 5 0 5 +W2QYn:f%,l +BDFChar: 1094 1243 6 1 5 0 7 +Lo?E6i/ibN +BDFChar: 1095 1244 6 1 5 0 5 +W0!t9OGEl: +BDFChar: 1096 1245 6 0 5 -2 7 +E)9A-=B&7a":+u- +BDFChar: 1097 1246 6 0 5 -2 5 +E)9A5<0RLk +BDFChar: 1098 1247 6 1 5 -2 7 +TV.tIW2QYn#S6t9 +BDFChar: 1099 1248 6 1 5 -2 5 +TV.tIW2Kt5 +BDFChar: 1100 1249 6 1 5 -2 7 +n;r`nOH>Qk#RCD1 +BDFChar: 1101 1250 6 1 5 -2 5 +n;r`nOI-:Z +BDFChar: 1102 1251 6 1 5 -2 7 +J:N1.OH>Qk#RCD1 +BDFChar: 1103 1252 6 1 5 -2 5 +J:QR>OI-:Z +BDFChar: 1104 1253 6 0 5 -2 7 +,U=Wt,U=W\TKiJW +BDFChar: 1105 1254 6 0 5 -2 5 +,U=Wt,UB$J +BDFChar: 1106 1255 6 1 5 -1 7 +-tm:mYc+MaTE"rl +BDFChar: 1107 2 6 1 5 0 5 +E,]b=+P6Yo +BDFChar: 1108 1256 6 1 5 -1 5 +-tm:uW9BlS +BDFChar: 1109 1257 6 1 5 -1 7 +OKbt9E);YkL]@DT +BDFChar: 1110 1258 6 1 5 -1 5 +OK`[X;##hH +BDFChar: 1111 1259 6 1 5 -2 7 +E)9A-:f'uU#RCD1 +BDFChar: 1112 1260 6 1 5 -2 5 +E)9A-:m_Lo +BDFChar: 1113 1261 6 1 6 1 8 +#R'pALo?,K +BDFChar: 1114 1262 6 1 4 0 7 +OJ'sn^jprc +BDFChar: 1115 1263 6 1 5 0 7 +^n?dFLkpkC +BDFChar: 1116 1264 6 1 5 0 7 +^n@?^OH>9s +BDFChar: 1117 1265 6 1 5 0 7 +^n?dFW2PN. +BDFChar: 1118 1266 6 1 5 0 7 +^n?e1W2QYn +BDFChar: 1119 1267 6 1 4 0 7 +J:QR>OPkY> +BDFChar: 1120 1268 6 2 4 0 7 +JA@hnTR_QC +BDFChar: 1121 1269 6 2 5 0 7 +JC't9TR_QC +BDFChar: 1122 1270 6 2 5 0 7 +JC't)TR_QC +BDFChar: 1123 1271 6 2 5 0 7 +JAAD)Y^h7S +BDFChar: 1124 1272 6 2 4 0 7 +5epbm^gKDm +BDFChar: 1125 1273 6 1 5 -3 7 +E/9=+pkX`^+Aa0\ +BDFChar: 1126 1274 6 1 5 -3 5 +G_h03QtRU=+92BA +BDFChar: 1127 1275 6 1 5 0 9 ++9:neM"$4VM!tBE +BDFChar: 1128 1276 6 1 5 0 9 ++Fnumn;)mVM!tBE +BDFChar: 1129 1277 6 1 5 -2 7 +n;)niLkplV!$D7A +BDFChar: 1130 1278 6 1 5 -2 8 +J:N1>LkpkCn,OR2 +BDFChar: 1131 1279 6 1 5 -2 7 +n;)niLkplV!;HNo +BDFChar: 1132 1280 6 1 5 -2 8 +J:N1>LkpkCn,W4` +BDFChar: 1133 1281 6 1 5 -3 9 +&0LslLk(#+Li=IJ?iU0, +BDFChar: 1134 1282 6 1 5 -3 8 +&0LslLk(#3E$,^" +BDFChar: 1135 1283 6 1 5 0 9 ++9:>]LkpkCOPg*= +BDFChar: 1136 1284 6 1 5 0 9 ++:&5YG_h03Lj/n" +BDFChar: 1137 1285 6 1 5 -2 7 +i/ibNLkq/N!$D7A +BDFChar: 1138 1286 6 1 5 -2 8 +#RC]\LkpkCGQ8id +BDFChar: 1139 1287 6 1 5 -2 7 +i/ibNLkq/N!;HNo +BDFChar: 1140 1288 6 1 5 -2 8 +#RC]\LkpkCGQ@L= +BDFChar: 1141 1289 6 1 5 -3 7 +i/ibNLkq/N+:qo\ +BDFChar: 1142 1290 6 1 5 -3 8 +#RC]\LkpkCGT[Q* +BDFChar: 1143 1291 6 1 5 -3 7 +i/ibNLkq/N!$G)< +BDFChar: 1144 1292 6 1 5 -3 8 +#RC]\LkpkCGQ8j_ +BDFChar: 1145 1293 6 1 5 -2 9 +5Tg&G!;M(pn:6&a +BDFChar: 1146 1294 6 1 5 -1 9 +5Tg&G!-!bhJ;A.E +BDFChar: 1147 1295 6 1 5 -2 9 +&0Lsl!;M(pn:6&a +BDFChar: 1148 1296 6 1 5 -1 9 +&0Lsl!-!bhJ;A.E +BDFChar: 1149 1297 6 1 5 -3 7 +pjdnaJ:N1F!$G)< +BDFChar: 1150 1298 6 1 5 -3 5 +E/=:>Li<>::]LIq +BDFChar: 1151 1299 6 1 5 -3 7 +pjdnaJ:N1F!,/S: +BDFChar: 1152 1300 6 1 5 -3 5 +E/=:>LiJG:5u?iU0, +BDFChar: 1154 1302 6 1 5 -3 8 +:iHDRM"lLVE$,^" +BDFChar: 1155 1303 6 1 5 0 9 ++9;1eJFJ)>J:IV" +BDFChar: 1156 1304 6 1 5 0 9 ++94Ad5k%$(5X5;L +BDFChar: 1157 1305 6 1 5 0 9 +Duaj5J:O#CLi<=o +BDFChar: 1158 1306 6 1 5 -3 7 +Dub-=Lkpk3#RGAL +BDFChar: 1159 1307 6 1 5 0 9 ++974RM"ld^Lkl$2 +BDFChar: 1160 1308 6 1 5 0 9 ++Fnumn;)mVLkl$2 +BDFChar: 1161 1309 6 1 5 -2 7 +Lkpl^LkpkC!$D7A +BDFChar: 1162 1310 6 1 5 -2 8 +J:N1>LkpkCL]AOt +BDFChar: 1163 1311 6 1 5 0 9 +:]Q<-M"ld^Lkl$2 +BDFChar: 1164 1312 6 1 5 0 9 +:]Q#rn;)mVLkl$2 +BDFChar: 1165 1313 6 0 5 -2 7 +6psFj6psF2+M[sW +BDFChar: 1166 1314 6 0 5 -2 8 +5X7SZ6psF26m08F +BDFChar: 1167 1315 6 1 5 -3 7 +Lkpl^LkpkC!)RV7 +BDFChar: 1168 1316 6 1 5 -3 8 +J:N1>LkpkCL]C7j +BDFChar: 1169 1317 6 1 5 -3 7 +E$-8G+9S!$D7A +BDFChar: 1176 1324 6 1 5 -2 8 +J:N0+OJ(NnL]AOt +BDFChar: 1177 1325 6 1 5 -2 7 +Lle:fOH>9S!;HNo +BDFChar: 1178 1326 6 1 5 -2 8 +J:N0+OJ(NnL]I2M +BDFChar: 1179 1327 6 1 5 -2 7 +J:N0#J:N1F!$D7A +BDFChar: 1180 1328 6 2 4 -2 8 +^d(.M5X7S"?iWFl +BDFChar: 1181 1329 6 1 5 -2 9 +DubE=J:N0#JG9*e +BDFChar: 1182 1330 6 2 4 -2 9 +huLPX5X7S"5[XRW +BDFChar: 1183 1331 6 1 5 -2 7 +J:N0#J:N1F!;HNo +BDFChar: 1184 1332 6 1 5 -2 8 +?m$R7+ +BDFChar: 1211 1359 6 1 5 0 9 ++9:neLktPNJ:IV" +BDFChar: 1212 1360 6 1 5 -3 7 ++9:neLkplVJ:N.M +BDFChar: 1213 1361 6 1 5 0 9 ++9:neM"$L^Lkl$2 +BDFChar: 1214 1362 6 1 5 0 7 ++9:neJ:N0# +BDFChar: 1215 1363 6 1 5 -2 7 +n;)niOGJ^K!$D7A +BDFChar: 1216 1364 6 1 5 -2 5 +n;)UFJ:IVB +BDFChar: 1217 1365 6 1 5 -2 9 +DufB`M"$L^Lkl$R +BDFChar: 1218 1366 6 1 5 -2 7 +DufB`J:N0#!$D7A +BDFChar: 1219 1367 6 1 5 -2 7 +n;)niOGJ^K!;HNo +BDFChar: 1220 1368 6 1 5 -2 5 +n;)UFJ:IXp +BDFChar: 1221 1369 6 1 5 0 9 ++96A:J8bc"Li<=o +BDFChar: 1222 1370 6 1 5 0 7 ++96Y:E!Qa= +BDFChar: 1223 1371 6 1 5 -2 7 +E/9$`#RH6*!$D7A +BDFChar: 1224 1372 6 1 5 -2 5 +G^s`=#k.g: +BDFChar: 1225 1373 6 1 5 -1 9 +#Z(M?Lk'FM#`*F" +BDFChar: 1226 1374 6 1 5 0 8 +#Z(MGJ8bc"n,NFg +BDFChar: 1227 1375 6 1 5 -2 9 ++954\!-!aEE!V8= +BDFChar: 1228 1376 6 1 5 -1 9 ++954\!-j$5#RKo" +BDFChar: 1229 1377 6 1 5 -2 9 ++96A:J8bc"Li<>: +BDFChar: 1230 1378 6 1 5 -2 7 ++96Y:E!Qa=!$D7A +BDFChar: 1231 1379 6 1 5 0 9 ++9;0Z+ +BDFChar: 1275 1423 6 1 5 -2 8 +J:N1>LkpkCL]I2M +BDFChar: 1276 1424 6 1 5 0 9 +:]NaGn3B6(5WA`D +BDFChar: 1277 1425 6 1 5 0 9 ++Aa0\Lkr".:f%,l +BDFChar: 1278 1426 6 1 5 -3 9 ++Aa0\LkpkCLj012Du]k< +BDFChar: 1279 1427 6 1 5 0 9 +&-rOQG_h03QtQI" +BDFChar: 1280 1428 6 2 5 0 9 +5QEK'^d(.M5X5;L +BDFChar: 1281 1429 6 1 5 0 7 +(a*370OUOr +BDFChar: 1282 1430 6 1 5 0 7 +(a/Sr?m$R7 +BDFChar: 1283 1431 6 1 5 -1 7 +G_h0[LkpkkJ,fQL +BDFChar: 1284 1432 6 1 5 0 6 +G^sahLkp!M +BDFChar: 1285 1433 6 1 5 -2 7 +E/9=+pkX`^!$D7A +BDFChar: 1286 1434 6 1 5 -2 5 +G_h03QtQIB +BDFChar: 1287 1435 6 1 5 0 9 +E"F.2Lkth^Lkl$2 +BDFChar: 1288 1436 6 1 5 0 9 +E"F,lG_h03QtQI" +BDFChar: 1289 1437 6 0 5 0 9 +7&U)F6puDj6pq"T +BDFChar: 1290 1438 6 0 5 0 9 +"A#0c4@DS*9Jc_L +BDFChar: 1291 1439 6 0 5 0 9 +Lf=@66puDj6pq"T +BDFChar: 1292 1440 6 1 5 0 9 +&4iGoG_h03QtQI" +BDFChar: 1293 1441 6 1 5 -2 9 +E"F-g!-!aMpkX`^ +BDFChar: 1294 1442 6 1 5 -1 8 +E"F-g!-jLi<>: +BDFChar: 1311 1459 6 1 5 0 9 +E"F/eJ:R->JG9*E +BDFChar: 1312 1460 6 1 5 0 9 +E"F,lE/=:>Li<=o +BDFChar: 1313 1461 6 1 5 0 9 +BWqL3J:R->JG9*E +BDFChar: 1314 1462 6 1 5 0 8 +BWqJUM"lLVDu]k< +BDFChar: 1315 1463 6 0 5 0 9 +7&U*55X9QZ5^WP3 +BDFChar: 1316 1464 6 0 5 0 8 +7&U)F7!q6f2uipY +BDFChar: 1317 1465 6 0 5 0 9 +Lf=A%5X9QZ5^WP3 +BDFChar: 1318 1466 6 0 5 0 8 +Lf=@67!q6f2uipY +BDFChar: 1319 1467 6 1 5 -2 9 +E"F-g!;M(pn:6&a +BDFChar: 1320 1468 6 1 5 -1 9 +E"F-g!-!bhJ;A.E +BDFChar: 1321 1469 6 1 5 -2 9 +BWrUU!;M(pn:6&a +BDFChar: 1322 1470 6 1 5 -1 9 +BWrUU!-!bhJ;A.E +BDFChar: 1323 1471 6 1 5 -2 9 ++A`(5J:R->JG9*e +BDFChar: 1324 1472 6 1 5 -2 8 ++A`&WM"lLVDu_!\ +BDFChar: 1325 1473 6 2 4 0 9 +i#k;C5X7S"5i;VB +BDFChar: 1326 1474 6 2 5 0 9 +i#k8b^d(.M5VN0< +BDFChar: 1327 1475 6 2 4 -2 7 +i'9Om5X7Tm!'gMa +BDFChar: 1328 1476 6 2 5 -2 7 +5QJSb5X7Rg!'gMa +BDFChar: 1329 1477 6 1 5 -2 7 +E/9=+Lkpk+!$D7A +BDFChar: 1330 1478 6 1 5 -2 5 +E/9=+Li<>: +BDFChar: 1331 1479 6 1 5 0 9 +E"F.2LkpkCLi<=o +BDFChar: 1332 1480 6 1 5 0 9 +E"F,lE/9=+Li<=o +BDFChar: 1333 1481 6 0 5 -2 9 +7&U)F6psF26psF& +BDFChar: 1334 1482 6 0 5 0 8 +7&U)F6psF22uipY +BDFChar: 1335 1483 6 0 5 -2 9 +J4L@S3(-/&6psF& +BDFChar: 1336 1484 6 1 5 0 9 +&4iGoE/9=+Li<=o +BDFChar: 1337 1485 6 1 5 -2 9 +E"F-g!-!aMLkpk+ +BDFChar: 1338 1486 6 1 5 0 9 +E"F-g!-!aMLi<=o +BDFChar: 1339 1487 6 1 5 -2 9 ++A`&OYQ/WuLkpk+ +BDFChar: 1340 1488 6 1 5 -1 9 ++A`&OYQ/WuLkp!M +BDFChar: 1341 1489 6 1 5 -2 9 ++A`&WLkpkCLi<>: +BDFChar: 1342 1490 6 1 5 -2 8 ++A`&WLkpkCDu_!\ +BDFChar: 1343 1491 6 1 6 0 9 +&0qC'LkpkCLi<=o +BDFChar: 1344 1492 6 1 6 0 8 +&0qC'LkpkCDu]k< +BDFChar: 1345 1493 6 1 6 0 9 +5U6JWLkpkCLi<=o +BDFChar: 1346 1494 6 1 6 0 8 +5U6JWLkpkCDu]k< +BDFChar: 1347 1495 6 1 6 0 8 +F;/tULkpkCDu]k< +BDFChar: 1348 1496 6 1 6 0 8 +E"jRBLkpkCDu]k< +BDFChar: 1349 1497 6 1 6 0 9 +BX@neLkpkCLi<=o +BDFChar: 1350 1498 6 1 6 0 8 +BX@neLkpkCDu]k< +BDFChar: 1351 1499 6 1 6 -2 9 +"9`t*LkpkCLi<>: +BDFChar: 1352 1500 6 1 6 -2 7 +"9`t*Lkpk+!$D7A +BDFChar: 1353 1501 6 1 5 -2 7 +LkpkCLkpk+!$D7A +BDFChar: 1354 1502 6 1 5 -2 5 +LkpkCLj/nB +BDFChar: 1355 1503 6 1 5 0 9 +E"Jt(LkpkCLi<=o +BDFChar: 1356 1504 6 1 5 0 8 +E"F.JLkpkCGQ7^D +BDFChar: 1357 1505 6 1 6 0 9 +'I8KjLkpkCLi<=o +BDFChar: 1358 1506 6 1 6 0 7 +'I8KjLkpk3 +BDFChar: 1359 1507 6 1 6 0 9 +6mRSELkpkCLi<=o +BDFChar: 1360 1508 6 1 6 0 7 +6mRSELkpk3 +BDFChar: 1361 1509 6 1 6 0 9 +F;1[0LkpkCLi<=o +BDFChar: 1362 1510 6 1 6 0 7 +F;1[0Lkpk3 +BDFChar: 1363 1511 6 1 6 0 9 +BX@nuLkpkCLi<=o +BDFChar: 1364 1512 6 1 6 0 8 +BX@nuLkpkCGQ7^D +BDFChar: 1365 1513 6 1 6 -2 9 +"9aO:LkpkCLi<>: +BDFChar: 1366 1514 6 1 6 -2 7 +"9aO:Lkpk3!$D7A +BDFChar: 1367 1515 6 1 5 0 9 +5Tkl=Leo3:+Q; +BDFChar: 1508 1656 6 1 5 -3 8 +5Tg&?R#mDkBHSEO +BDFChar: 1509 1657 6 1 5 -3 5 +BUFmCOD#aZ0E;(Q +BDFChar: 1510 1658 6 1 5 -3 8 +&0LsdR#mDkBHSEO +BDFChar: 1511 1659 6 1 5 0 8 +BWqJMR#mDkBE/#4 +BDFChar: 1512 1660 6 1 5 -3 8 +BWqJMR#mDkBHSEO +BDFChar: 1513 1661 6 1 5 -3 8 +5Tg&?R#mDkBHSEO +BDFChar: 1514 1662 6 1 5 0 9 +Du_"':f)+eLkl$2 +BDFChar: 1515 1663 6 0 5 0 8 +J5?e*-oaU_6i[2e +BDFChar: 1516 1664 6 0 5 0 8 +5`cO*-oaU_6i[2e +BDFChar: 1517 1665 6 1 5 -3 7 ++5^Yg^5^WP3 +BDFChar: 1524 1672 6 0 5 0 9 +5_(s^5^Yg^5^WP3 +BDFChar: 1525 1673 6 1 5 0 9 +5Tkl=M"ld^Lkl$2 +BDFChar: 1526 1674 6 1 5 0 9 +&0QdbM"ld^Lkl$2 +BDFChar: 1527 1675 6 1 5 -3 7 +Lkpl^LkpkC+QcOH9I( +BDFChar: 1608 1756 6 1 5 0 7 +E2Y0=+?iU0, +BDFChar: 1657 1805 6 1 4 -2 3 +J:QR>OH9GB +BDFChar: 1658 1806 6 1 4 -2 3 +J<5lNOH9GB +BDFChar: 1659 1807 6 2 3 -2 3 +J:N0#JA;-b +BDFChar: 1660 1808 6 1 5 -2 2 +d& +BDFChar: 1676 195 6 1 5 1 5 ++@,]e+92BA +BDFChar: 1677 196 6 1 5 0 6 ++E48%+rHe +BDFChar: 1696 1840 6 0 6 0 6 +$37*+8uelk +BDFChar: 1697 1841 6 1 5 2 4 +;#!ie +BDFChar: 1698 1842 6 2 4 1 6 +5i=mmi'78B +BDFChar: 1699 1843 6 1 5 1 5 +i4tus#QOi) +BDFChar: 1700 1844 6 1 5 1 5 +3#F&/J,fQL +BDFChar: 1701 1845 6 1 5 1 5 +J3YM"2uipY +BDFChar: 1702 1846 6 1 5 1 5 +#SLi<=o +BDFChar: 1728 1872 6 1 5 3 5 ++@,]% +BDFChar: 1729 1873 6 1 5 1 3 +pcor% +BDFChar: 1730 1874 6 3 5 1 6 +JA@h.J:IV" +BDFChar: 1731 1875 6 1 3 1 6 ++CLib+GQ7^D +BDFChar: 1759 1903 6 1 5 0 6 +&9s<3TQhRZ +BDFChar: 1760 1904 6 1 4 1 5 +E.IG.Du]k< +BDFChar: 1761 1905 6 1 5 1 5 +n-Jdpn,NFg +BDFChar: 1762 1906 6 1 5 0 6 ++RgfS8FSkE +BDFChar: 1763 1907 6 2 5 1 5 +i"5AhhuE`W +BDFChar: 1764 1908 6 2 4 0 3 +i8EPO +BDFChar: 1765 1909 6 1 5 0 9 +pkX`^LkpkCLkl$2 +BDFChar: 1766 1910 6 1 5 0 9 +LkpkCLkpkCM"grM +BDFChar: 1767 1911 6 1 5 0 8 +pkV0X+@&2Jp](9o +BDFChar: 1768 1912 6 1 5 3 3 +p](9o +BDFChar: 1769 1913 6 1 5 0 6 +p])EZp`L[Z +BDFChar: 1770 1914 6 1 5 0 6 ++93N,p`L[Z +BDFChar: 1771 1915 6 2 4 0 8 ++M5X5;L +BDFChar: 1777 1921 6 0 5 0 9 +bUCO\ck);#?sis7 +BDFChar: 1778 1922 6 0 5 0 9 +9ZZEg&.jqb?sis7 +BDFChar: 1779 1923 6 1 5 1 4 +BTSE +BDFChar: 1819 1963 6 1 5 -1 6 +G^t@[ +BDFChar: 1821 1965 6 1 5 1 5 +pjdmFp](9o +BDFChar: 1822 1966 6 1 5 1 5 +p]q-2p](9o +BDFChar: 1823 1967 6 1 5 0 6 +pjdmFp]1'h +BDFChar: 1824 1968 6 1 5 0 6 +p]q-2p]1'h +BDFChar: 1825 1969 6 1 5 0 5 +pkX`^Lkl$2 +BDFChar: 1826 1970 6 1 5 0 5 +LkpkCM"grM +BDFChar: 1827 1971 6 1 5 1 5 +E2`Q1Du]k< +BDFChar: 1828 1972 6 1 5 1 5 +E/=:FDu]k< +BDFChar: 1829 1973 6 0 6 0 6 +3(0d0W^JfH +BDFChar: 1830 1974 6 1 5 1 5 +E1!TFDu]k< +BDFChar: 1831 1975 6 0 6 0 6 +3)mKg\l:Wh +BDFChar: 1832 1976 6 0 6 0 6 +3(1?0\jSLX +BDFChar: 1833 1977 6 0 6 1 5 +3(3a62uipY +BDFChar: 1834 1978 6 1 5 1 5 +po*tdp](9o +BDFChar: 1835 1979 6 1 5 1 5 +pk\^$p](9o +BDFChar: 1836 1980 6 0 6 0 6 +rl1t$WlG#< +BDFChar: 1837 1981 6 1 5 1 5 +pkYl)p](9o +BDFChar: 1838 1982 6 1 5 1 5 +J:REFJ,fQL +BDFChar: 1839 1983 6 1 5 1 5 +#RL22#QOi) +BDFChar: 1840 1984 6 1 5 1 5 +p`L\%+92BA +BDFChar: 1841 1985 6 1 5 1 5 ++Du]k< +BDFChar: 1853 1997 6 1 5 1 5 ++Adkj+92BA +BDFChar: 1854 1998 6 2 3 3 4 +^q]pM +BDFChar: 1855 1999 6 1 5 1 6 ++<^GuE/4Jo +BDFChar: 1856 2000 6 1 5 1 5 +LtJZYL]@DT +BDFChar: 1857 2001 6 3 3 1 7 +J,fS"!!%NL +BDFChar: 1858 2002 6 1 5 3 3 +VuQet +BDFChar: 1859 2003 6 1 5 1 7 +#QOiI!!%NL +BDFChar: 1860 2004 6 1 5 1 7 +J,fQl!!!9) +BDFChar: 1861 2005 6 0 5 0 7 +"F/.TUs+(6 +BDFChar: 1862 2006 6 1 5 1 6 ++AdlMM"grM +BDFChar: 1863 2007 6 1 3 2 7 +i.-?.J:IV" +BDFChar: 1864 2008 6 3 5 2 7 +i#j-b+m +BDFChar: 1879 2023 6 2 4 -1 7 ++U +BDFChar: 1945 2089 6 2 4 1 6 +TV.sNTV)8b +BDFChar: 1946 2090 6 1 5 1 5 +q"XXZp](9o +BDFChar: 1947 2091 6 1 5 1 5 +E;95'Du]k< +BDFChar: 1948 127 6 0 6 3 3 +rVuou +BDFChar: 1949 2092 6 0 6 0 6 +&6+gUJj_Qu +BDFChar: 1950 128 6 3 3 -3 9 +J:N0#J:N0#J:N0#J,fQL +BDFChar: 1951 2093 6 0 6 0 6 +3(/pmP!h80 +BDFChar: 1952 2094 6 0 5 -2 8 +^n@>#:f&hG&.ff] +BDFChar: 1953 2095 6 1 4 -2 8 +^nAK9^]6&R+:qo\ +BDFChar: 1954 2096 6 1 4 -2 8 +TV159TE&pR+J:N.M +BDFChar: 1961 2102 6 1 4 -2 8 +@":Kb^]8J:N0#J,fQL +BDFChar: 1977 2116 6 0 6 3 4 +Wi?%! +BDFChar: 1978 2117 6 3 3 -3 8 +J:IWMJ,k+MJ,k+M +BDFChar: 1979 2118 6 3 4 -3 8 +^q]rc^];0c^];0c +BDFChar: 1980 2119 6 3 6 -3 4 +nF1sYJ:N0# +BDFChar: 1981 2120 6 3 6 -3 3 +nA)iT^qd_c +BDFChar: 1982 2121 6 3 6 -3 4 +nF46/^qdb$ +BDFChar: 1983 2122 6 0 3 -3 3 +n.6-B&.fBQ +BDFChar: 1984 132 6 0 3 -3 9 +&.fBa&.n=B&.fBa&-)\1 +BDFChar: 1985 2123 6 0 3 -3 4 +nF-u#&.fBa +BDFChar: 1986 2124 6 0 4 -3 3 +p_Xhb(`4(i +BDFChar: 1987 2125 6 0 4 -3 4 +q"P[C(`4), +BDFChar: 1988 2126 6 3 6 3 9 +J:N0#JFN%. +BDFChar: 1989 2127 6 3 6 3 9 +^qdb$^qfF> +BDFChar: 1990 2128 6 3 6 3 9 +^qdb$_!pgn +BDFChar: 1991 2129 6 0 3 3 9 +&.fBa&.n=2 +BDFChar: 1992 133 6 0 6 -3 3 +rX]VP&.fBQ +BDFChar: 1993 2130 6 0 3 3 9 +&.fBa&Ff/h +BDFChar: 1994 2131 6 0 4 3 9 +(`4),(`<#J +BDFChar: 1995 2132 6 0 4 3 9 +(`4),)#3k+ +BDFChar: 1996 2133 6 3 6 -3 9 +J:N0#JFN&YJ:N0#J,fQL +BDFChar: 1997 2134 6 3 6 -3 9 +^qdb$^qfGiJ:N0#J,fQL +BDFChar: 1998 2135 6 3 6 -3 9 +J:N0#J:R.)^qdb$^]4?7 +BDFChar: 1999 2136 6 3 6 -3 9 +^qdb$^qfHT^qdb$^]4?7 +BDFChar: 2000 134 6 0 6 3 9 +&.fBa&.ng@ +BDFChar: 2001 2137 6 3 6 -3 9 +^qdb$_!piDJ:N0#J,fQL +BDFChar: 2002 2138 6 3 6 -3 9 +J:N0#JFN'D^qdb$^]4?7 +BDFChar: 2003 2139 6 3 6 -3 9 +^qdb$_!pj/^qdb$^]4?7 +BDFChar: 2004 2140 6 0 3 -3 9 +&.fBa&Ff0#&.fBa&-)\1 +BDFChar: 2005 2141 6 0 4 -3 9 +(`4),(`<#Z&.fBa&-)\1 +BDFChar: 2006 2142 6 0 4 -3 9 +&.fBa&.nUR(`4),(]XO9 +BDFChar: 2007 2143 6 0 4 -3 9 +(`4),(`<#b(`4),(]XO9 +BDFChar: 2008 135 6 0 6 -3 9 +&.fBa&.ngP&.fBa&-)\1 +BDFChar: 2009 2144 6 0 4 -3 9 +(`4),)#3k;&.fBa&-)\1 +BDFChar: 2010 2145 6 0 4 -3 9 +&.fBa&GZ#;(`4),(]XO9 +BDFChar: 2011 2146 6 0 4 -3 9 +(`4),)#3kC(`4),(]XO9 +BDFChar: 2012 2147 6 0 6 -3 4 +nGWt1&.fBa +BDFChar: 2013 2148 6 0 6 -3 4 +*rZ]^&.fBa +BDFChar: 2014 2149 6 0 6 -3 4 +rr*H?&.fBa +BDFChar: 2015 2150 6 0 6 -3 3 +rYQIh(`4(i +BDFChar: 2016 2151 6 0 6 -3 4 +q#2*I(`4), +BDFChar: 2017 2152 6 0 6 -3 4 +*rZun(`4), +BDFChar: 2018 2153 6 0 6 -3 4 +rr*`O(`4), +BDFChar: 2019 2154 6 0 6 3 9 +&.fBa&FfZ! +BDFChar: 2020 2155 6 0 6 3 9 +&.fBa&0CfN +BDFChar: 2021 2156 6 0 6 3 9 +&.fBa&H;Y/ +BDFChar: 2022 2157 6 0 6 3 9 +(`4),(`<5P +BDFChar: 2023 2158 6 0 6 3 9 +(`4),)#4(1 +BDFChar: 2024 2159 6 0 6 3 9 +(`4),(`rYV +BDFChar: 2025 2160 6 0 6 3 9 +(`4),)#jL7 +BDFChar: 2026 2161 6 0 6 -3 9 +&.fBa&FfZ1&.fBa&-)\1 +BDFChar: 2027 2162 6 0 6 -3 9 +&.fBa&0Cf^&.fBa&-)\1 +BDFChar: 2028 143 6 0 6 2 4 +rW)ot +BDFChar: 2029 144 6 2 4 -3 9 +TV.sNTV.sNTV.sNTE"rl +BDFChar: 2030 2163 6 0 6 -3 9 +&.fBa&H;Y?&.fBa&-)\1 +BDFChar: 2031 2164 6 0 6 -3 9 +(`4),(`<5`&.fBa&-)\1 +BDFChar: 2032 145 6 2 6 -3 4 +pjflITV.sN +BDFChar: 2033 2165 6 0 6 -3 9 +&.fBa&.ngX(`4),(]XO9 +BDFChar: 2034 2166 6 0 6 -3 9 +(`4),(`<5h(`4),(]XO9 +BDFChar: 2035 146 6 0 4 -3 4 +p^$(3-n$Jl +BDFChar: 2036 2167 6 0 6 -3 9 +(`4),)#4(A&.fBa&-)\1 +BDFChar: 2037 2168 6 0 6 -3 9 +(`4),(`rYf&.fBa&-)\1 +BDFChar: 2038 147 6 2 6 2 9 +TV.sNTX]OI +BDFChar: 2039 2169 6 0 6 -3 9 +&.fBa&GZ5A(`4),(]XO9 +BDFChar: 2040 2170 6 0 6 -3 9 +&.fBa&0Cff(`4),(]XO9 +BDFChar: 2041 148 6 0 4 2 9 +-n$Jl.-Ls3 +BDFChar: 2042 2171 6 0 6 -3 9 +(`4),)#jLG&.fBa&-)\1 +BDFChar: 2043 2172 6 0 6 -3 9 +&.fBa&H;YG(`4),(]XO9 +BDFChar: 2044 149 6 2 6 -3 9 +TV.sNTX]N^TV.sNTE"rl +BDFChar: 2045 2173 6 0 6 -3 9 +(`4),)#4(I(`4),(]XO9 +BDFChar: 2046 2174 6 0 6 -3 9 +(`4),(`rYn(`4),(]XO9 +BDFChar: 2047 150 6 0 4 -3 9 +-n$Jl.-Ls#-n$Jl-ia5I +BDFChar: 2048 2175 6 0 6 -3 9 +(`4),)#jLO(`4),(]XO9 +BDFChar: 2049 2176 6 0 5 3 3 +g].(#&.fBa +BDFChar: 2066 2183 6 0 4 -3 3 +pa@O=-n$JD +BDFChar: 2067 2184 6 3 6 2 9 +J:N0#JFJ*Y +BDFChar: 2068 2185 6 2 6 3 9 +TV.sNTV2&[ +BDFChar: 2069 2186 6 0 3 2 9 +&.fBa&F^8# +BDFChar: 2070 2187 6 0 4 3 9 +-n$Jl-n+ij +BDFChar: 2071 2188 6 3 6 -3 9 +J:N0#JFJ*YJ:N0#J,fQL +BDFChar: 2072 2189 6 2 6 -3 9 +TV.sNTV/ffTV.sNTE"rl +BDFChar: 2073 2190 6 0 3 -3 9 +&.fBa&F^8#&.fBa&-)\1 +BDFChar: 2074 2191 6 0 4 -3 9 +-n$Jl-n+:--n$Jl-ia5I +BDFChar: 2075 2192 6 0 6 -3 4 +rW)p/&.fBa +BDFChar: 2076 2193 6 0 6 -3 3 +r[90C-n$JD +BDFChar: 2077 167 6 0 6 -3 -2 +rr)lt +BDFChar: 2078 168 6 0 6 -3 0 +rr2or +BDFChar: 2079 169 6 0 6 -3 1 +rr2orrVuou +BDFChar: 2080 170 6 0 6 -3 3 +rr2orrr2ls +BDFChar: 2081 171 6 0 6 -3 5 +rr2orrr2orrVuou +BDFChar: 2082 172 6 0 6 -3 7 +rr2orrr2orrr2ls +BDFChar: 2083 173 6 0 6 -3 8 +rr2orrr2orrr2or +BDFChar: 2084 174 6 0 6 -3 9 +rr2orrr2orrr2orrVuou +BDFChar: 2085 175 6 0 5 -3 9 +r;?Kjr;?Kjr;?Kjqu?]s +BDFChar: 2086 176 6 0 4 -3 9 +q"XXZq"XXZq"XXZp](9o +BDFChar: 2087 177 6 0 3 -3 9 +nF5r:nF5r:nF5r:n,NFg +BDFChar: 2088 178 6 0 3 -3 9 +nF5r:nF5r:nF5r:n,NFg +BDFChar: 2089 179 6 0 2 -3 9 +i8EPOi8EPOi8EPOhuE`W +BDFChar: 2090 180 6 0 1 -3 9 +^qdb$^qdb$^qdb$^]4?7 +BDFChar: 2091 181 6 0 0 -3 9 +J:N0#J:N0#J:N0#J,fQL +BDFChar: 2092 2194 6 0 6 2 9 +&.fBa&H2\/ +BDFChar: 2093 182 6 0 6 -3 9 +La%X!La%X!La%X!L]@DT +BDFChar: 2094 183 6 0 6 -3 9 +W`5utW`5utW`5utWW3#! +BDFChar: 2095 184 6 0 6 -3 9 +]'d/t]'d/t]'d/t\c;^1 +BDFChar: 2096 2195 6 0 6 3 9 +-n$Jl-n,&p +BDFChar: 2097 185 6 0 2 -3 2 +m/HPAs763j +BDFChar: 2098 186 6 3 5 -3 2 +m.U#EqXsmh +BDFChar: 2099 187 6 0 2 3 9 +m.U#EqY'ph +BDFChar: 2100 188 6 0 5 -3 9 +io8tUio&kqr;Zfsrr<$! +BDFChar: 2101 189 6 0 5 -3 9 +iSi_QioB&?*ZlCD)uos= +BDFChar: 2102 190 6 0 5 -3 9 +rVcZlrr<#XioB"WhuE`W +BDFChar: 2103 191 6 0 5 -3 9 +rr2oprqud:*$6.B)uos= +BDFChar: 2104 192 6 3 5 3 9 +o)A1Srq$-i +BDFChar: 2105 193 6 0 5 -3 9 +*??+>*ZlK`ioB"WhuE`W +BDFChar: 2106 194 6 0 5 -3 9 +*$-1C*ZQ:$s8W#squ?]s +BDFChar: 2107 2196 6 0 6 -3 9 +&.fBa&H37?&.fBa&-)\1 +BDFChar: 2108 2197 6 0 6 -3 9 +-n$Jl-n,'C-n$Jl-ia5I +BDFChar: 2109 2198 6 0 3 3 3 +n,NFg +BDFChar: 2110 2199 6 3 3 3 9 +J:N0#J:N.M +BDFChar: 2111 2200 6 3 6 3 3 +n,NFg +BDFChar: 2112 2201 6 3 3 -3 3 +J:N0#J:N.M +BDFChar: 2113 2202 6 0 3 3 4 +nF-DX +BDFChar: 2114 2203 6 3 4 3 9 +^qdb$^qd_c +BDFChar: 2115 2204 6 3 6 3 4 +nF-DX +BDFChar: 2116 2205 6 3 4 -3 3 +^qdb$^qd_c +BDFChar: 2117 2206 6 0 6 3 4 +*rZ-> +BDFChar: 2118 2207 6 3 4 -3 9 +J:N0#J:PGN^qdb$^]4?7 +BDFChar: 2119 2208 6 0 6 3 4 +nGWCf +BDFChar: 2120 2209 6 3 4 -3 9 +^qdb$^qda9J:N0#J,fQL +BDFChar: 2121 2210 6 0 6 3 9 +rr2orrr2ls +BDFChar: 2122 2211 6 3 6 -3 9 +nF5r:nF5r:nF5r:n,NFg +BDFChar: 2123 2212 6 0 6 8 9 +rr)lt +BDFChar: 2124 2213 6 0 6 0 6 +rr2orrr2ls +BDFChar: 2125 2214 6 0 6 0 6 +rdo`RJqEt% +BDFChar: 2126 2215 6 0 6 0 6 +I"Hs%JqA@M +BDFChar: 2127 2216 6 0 6 0 6 +rdq_m\q9n] +BDFChar: 2128 2217 6 1 5 1 5 +q"XXZp](9o +BDFChar: 2129 2218 6 1 5 1 5 +pkX`^p](9o +BDFChar: 2130 2219 6 0 6 0 6 +&3)XsI/a*F +BDFChar: 2131 2220 6 0 6 0 6 +&1Aqp7"YC< +BDFChar: 2132 2221 6 1 5 -1 7 +JAC+4q!d4WJ,fQL +BDFChar: 2133 2222 6 0 6 0 6 +rr.:m3&hHL +BDFChar: 2134 2223 6 0 6 0 6 +rdmO+-n#W, +BDFChar: 2135 2224 6 1 5 -1 7 +#T,OGpinb8#QOi) +BDFChar: 2136 2225 6 0 6 0 6 +&3,(:HoMZ; +BDFChar: 2137 2226 6 0 6 0 6 +&1Bqu6mrTH +BDFChar: 2138 2227 6 0 6 0 6 +&1CMh<%&:X +BDFChar: 2139 2228 6 0 6 0 6 +3(1?h\jSLX +BDFChar: 2140 2229 6 0 6 0 6 +3(/@MJj_Qu +BDFChar: 2141 2230 6 0 6 0 6 +3(/q0P!h80 +BDFChar: 2142 2231 6 1 5 1 5 +E;95'Du]k< +BDFChar: 2143 2232 6 0 6 0 6 +3-=`^noQhk +BDFChar: 2144 2233 6 0 6 0 6 +3*`&HSm45T +BDFChar: 2145 2234 6 0 6 0 6 +3(/Atrd6[* +BDFChar: 2146 2235 6 0 6 0 6 +3.1`)Jj_Qu +BDFChar: 2147 2236 6 0 6 0 6 +3*`&HJj_Qu +BDFChar: 2148 2237 6 0 6 0 6 +3)#?mrd6[* +BDFChar: 2149 2238 6 0 6 0 6 +rfWG-P*5eE +BDFChar: 2150 2239 6 0 6 0 6 +rfWH8JqEt% +BDFChar: 2151 2240 6 0 6 0 6 +rdoamP*5eE +BDFChar: 2152 2241 6 0 6 0 6 +rdo`nP*5eE +BDFChar: 2153 2242 6 0 6 0 6 +rfWG9JqEt% +BDFChar: 2154 2243 6 0 6 0 6 +3)l(3Jj_Qu +BDFChar: 2155 2244 6 0 6 0 6 +3(/AhP#OC@ +BDFChar: 2156 2245 6 0 6 0 6 +3(/@iP#OC@ +BDFChar: 2157 2246 6 0 6 0 6 +3)l'4Jj_Qu +BDFChar: 2158 2247 6 0 6 0 6 +!X8uE,!u8/ +BDFChar: 2159 2248 6 1 5 2 4 +0R3?m +BDFChar: 2160 2249 6 0 6 0 9 +O9AB@W&R156oY/H +BDFChar: 2161 11 6 1 5 -2 5 +E/9=+E$0*B +BDFChar: 2162 2250 6 0 6 0 6 +rdo`RJqEt% +BDFChar: 2163 12 6 0 5 0 5 +*"6qNOC/%g +BDFChar: 2164 2251 6 0 6 0 6 +re?HentQ*` +BDFChar: 2165 2252 6 0 6 0 6 +rdq/5We13M +BDFChar: 2166 2253 6 0 6 0 9 +&0N),E3>)rpi$35 +BDFChar: 2167 2254 6 0 6 0 6 +rVurt!!)uu +BDFChar: 2168 2255 6 0 6 0 6 +mJm7d!!)uu +BDFChar: 2169 2256 6 0 6 0 6 +rVurd!!)uu +BDFChar: 2170 2257 6 0 6 0 6 +mJm7T!!)uu +BDFChar: 2171 2258 6 0 6 0 6 +rVurt!!)Ee +BDFChar: 2172 2259 6 0 6 0 6 +mJm7d!!)Ee +BDFChar: 2173 2260 6 0 6 0 6 +rVurd!!)Ee +BDFChar: 2174 2261 6 0 6 0 6 +mJm7T!!)Ee +BDFChar: 2175 2262 6 0 6 0 6 +\l?9/\l?6@ +BDFChar: 2176 2263 6 0 5 1 5 +8,rX7KE(uP +BDFChar: 2177 4 6 0 6 0 6 +Cm'C%6mrTH +BDFChar: 2178 2264 6 0 5 1 5 +8,rXCGQ7^D +BDFChar: 2179 2265 6 0 5 0 6 +r3ZD"G_Gtp +BDFChar: 2180 2266 6 1 5 -2 7 +Lkp#+Lkp!mE$,,\ +BDFChar: 2181 5 6 0 6 0 6 +D#XG5HoMZ; +BDFChar: 2182 2267 6 1 5 -2 5 ++E/HBLkpk+ +BDFChar: 2183 2268 12 1 10 -1 8 +s1mL,X[)9hmD/>/o>'t5o>(CA +BDFChar: 2184 16 6 2 3 0 6 +5X7S"5et/8 +BDFChar: 2185 17 6 2 5 0 6 +?r0*R5et/8 +BDFChar: 2186 18 6 0 5 0 7 +E(iYf7)[:X +BDFChar: 2187 19 6 0 5 0 6 +Hpi?M7*NjT +BDFChar: 2188 2269 12 1 10 -1 8 +s1nZMSj;8MmD.SohSANoo>(CA +BDFChar: 2189 2270 12 1 10 -1 8 +s1lB7^qf?QmD/,)mD-NQ^Hhh7 +BDFChar: 2190 2271 12 1 10 -1 8 +s1lOf[(s.9cbTIo]0OP)nA,(> +BDFChar: 2191 2272 12 1 10 -1 8 +s1nHGp;$C;`k]!t[D:$PrkSQL +BDFChar: 2192 2273 12 1 10 -1 8 +s1k\Ne\K\MeNhYMeA2!tqS<-H +BDFChar: 2193 2274 12 1 10 -1 8 +s1mU/beW)NhSANoN'REYJ3a.M +BDFChar: 2194 2275 12 1 10 -1 8 +s1k\Ne\K_Ne\K_Ne\M)JrkSQL +BDFChar: 2195 2276 12 1 10 -1 8 +s1nCpr]pEI]0Ou`n%dPj]>4H^ +BDFChar: 2196 2277 12 1 10 -1 8 +s1kPJgVDRZgVDRZftdI"jhUo3 +BDFChar: 2197 2278 12 1 10 -1 8 +s1n:mi'e +BDFChar: 2205 15 6 0 5 -1 7 +*"6qROC02M+92BA +BDFChar: 2206 2284 6 1 5 0 7 ++E2;ppi(0p +BDFChar: 2207 2285 6 0 6 0 7 +&1A)hW`0Nh +BDFChar: 2208 2286 6 2 4 0 6 +J:N1.TV0(# +BDFChar: 2209 2287 6 2 4 -1 6 +J:QRNT\pq8 +BDFChar: 2210 2288 6 1 5 -1 6 +&6Nnu=E)VP +BDFChar: 2211 2289 6 0 6 0 6 +rr2obrr2ls +BDFChar: 2212 2290 6 0 6 0 6 +rr2WjhZ!KS +BDFChar: 2213 2291 6 0 6 0 6 +rqcW^rkA@3 +BDFChar: 2214 2292 6 0 6 0 6 +rjr+.rjr(/ +BDFChar: 2215 2293 6 0 6 0 6 +rjr*srjr(/ +BDFChar: 2216 2294 6 0 6 0 6 +rmq)"rmq&K +BDFChar: 2217 2295 6 0 6 0 6 +3(/@uJj_Qu +BDFChar: 2218 2296 6 0 6 -2 7 +i1>OPK&WAPJ:IV" +BDFChar: 2219 2297 6 0 6 -2 7 +i;W`Trr/L>J:IV" +BDFChar: 2220 2298 6 0 6 0 6 +834[g7^s]D +BDFChar: 2221 2299 6 0 6 0 6 +&3)(SI.$t6 +BDFChar: 2222 2300 6 1 5 0 6 +&7E:m(be2T +BDFChar: 2223 2301 6 0 5 -1 8 +#WQ''E&_6eOC/%g +BDFChar: 2224 2302 6 1 5 -2 8 ++E48%p`OO3Lkp!M +BDFChar: 2225 9 6 1 5 1 5 ++E7*p+92BA +BDFChar: 2226 10 12 1 10 -1 8 +5QK^B63%&e#65j]#65qJEW@3^ +BDFChar: 2227 7 6 1 5 1 6 ++<^GuE/4Jo +BDFChar: 2228 2303 6 1 5 -1 6 +E/9=+E$-8G +BDFChar: 2229 2304 6 1 5 -1 6 +E/4c*0Hb;+E/G' +BDFChar: 2233 2308 12 1 10 -1 8 +*WU\?It7R7J3\WMs1j,7It/R? +BDFChar: 2234 2309 12 1 10 -1 8 +s1nZMr]pCsq7r30a2%/Zs1nZM +BDFChar: 2235 2310 6 1 5 0 5 +#RD!'?m#FL +BDFChar: 2236 2311 6 1 5 0 6 +#RD9/n6d@= +BDFChar: 2237 2312 6 1 5 1 5 +Leo3jL]@DT +BDFChar: 2238 2313 6 1 5 1 5 +f_BF\fDkmO +BDFChar: 2239 2314 6 1 5 -1 6 +85O7JE);@@ +BDFChar: 2240 2315 6 1 5 -1 7 +LtGOCE,aHcJ,fQL +BDFChar: 2241 2316 6 0 6 0 6 +3%43HmO1$p +BDFChar: 2242 2317 6 0 6 0 6 +3&pp:r\uk; +BDFChar: 2243 2318 6 1 5 1 5 ++<];Z+92BA +BDFChar: 2244 2319 6 0 6 0 6 +3&npt`],pX +BDFChar: 2245 2320 6 1 5 1 6 ++<^GuE/4Jo +BDFChar: 2246 2321 6 0 6 0 6 +WdOenrd:^G +BDFChar: 2247 2322 6 0 6 -1 7 +&3/7l37cY?&-)\1 +BDFChar: 2248 2323 12 2 9 -1 7 +J\u(^(d)EJJH,ZM +BDFChar: 2249 2324 12 1 10 -1 8 +s1nZMhSANoo>'t5mD.Sos1nZM +BDFChar: 2250 2325 12 3 8 -2 8 +Gl5bo*&oW+!&-), +BDFChar: 2251 2326 12 1 11 -2 7 +EPVJ0s5c0OS;(^]4?7 +BDFChar: 2256 2331 6 1 6 0 5 +0Gs`c(bbpi +BDFChar: 2257 2332 6 1 5 2 4 +5e'&Z +BDFChar: 2258 2333 6 1 5 -1 7 +pn4:QTV.sNp](9o +BDFChar: 2259 2334 6 1 5 -1 7 +pa@O=-n$Jlp](9o +BDFChar: 2260 2335 6 2 4 -1 7 ++^]4?7 +BDFChar: 2275 2350 6 1 5 1 8 +(`35Q!!'gM +BDFChar: 2276 2351 6 1 5 1 8 +f[p0(!!'gM +BDFChar: 2277 2352 6 1 5 1 8 +(`37g^];0c +BDFChar: 2278 2353 6 1 5 1 8 +f[p2>^];0c +BDFChar: 2279 2354 6 4 5 4 5 +^q]pM +BDFChar: 2280 2355 6 1 5 4 8 +^q]pe(]XO9 +BDFChar: 2281 2356 6 1 5 4 5 +f[p0( +BDFChar: 2282 2357 6 1 5 4 8 +^q]s&fDkmO +BDFChar: 2283 2358 6 1 5 1 5 +(`37g^]4?7 +BDFChar: 2284 2359 6 1 5 1 8 +^q]pe(]_@e +BDFChar: 2285 2360 6 1 5 1 5 +f[p2>^]4?7 +BDFChar: 2286 2361 6 1 5 1 8 +^q]s&fDr_& +BDFChar: 2287 2362 6 4 5 4 8 +^q]rc^]4?7 +BDFChar: 2288 2363 6 1 5 4 8 +f[p0@(]XO9 +BDFChar: 2289 2364 6 1 5 4 8 +(`38*fDkmO +BDFChar: 2290 2365 6 1 5 4 8 +f[p2VfDkmO +BDFChar: 2291 2366 6 1 5 1 8 +(`35i(]_@e +BDFChar: 2292 2367 6 1 5 1 8 +f[p0@(]_@e +BDFChar: 2293 2368 6 1 5 1 8 +(`38*fDr_& +BDFChar: 2294 2369 6 1 5 1 8 +f[p2VfDr_& +BDFChar: 2295 2370 6 4 5 1 2 +^q]pM +BDFChar: 2296 2371 6 1 5 1 8 +^q]pM!!!iQ +BDFChar: 2297 2372 6 1 5 1 5 +^q]pe(]XO9 +BDFChar: 2298 2373 6 1 5 1 8 +^q]rc^]52g +BDFChar: 2299 2374 6 1 5 1 2 +f[p0( +BDFChar: 2300 2375 6 1 5 1 8 +^q]pM!!([( +BDFChar: 2301 2376 6 1 5 1 5 +^q]s&fDkmO +BDFChar: 2302 2377 6 1 5 1 8 +^q]rc^]<$> +BDFChar: 2303 2378 6 4 5 1 8 +^q]pM!!'gM +BDFChar: 2304 2379 6 1 5 1 8 +f[p0(!!!iQ +BDFChar: 2305 2380 6 1 5 1 8 +(`37g^]52g +BDFChar: 2306 2381 6 1 5 1 8 +f[p2>^]52g +BDFChar: 2307 2382 6 1 5 1 8 +(`35Q!!([( +BDFChar: 2308 2383 6 1 5 1 8 +f[p0(!!([( +BDFChar: 2309 2384 6 1 5 1 8 +(`37g^]<$> +BDFChar: 2310 2385 6 1 5 1 8 +f[p2>^]<$> +BDFChar: 2311 2386 6 4 5 1 5 +^q]rc^]4?7 +BDFChar: 2312 2387 6 1 5 1 8 +^q]pe(]YBi +BDFChar: 2313 2388 6 1 5 1 5 +f[p0@(]XO9 +BDFChar: 2314 2389 6 1 5 1 8 +^q]s&fDla* +BDFChar: 2315 2390 6 1 5 1 5 +(`38*fDkmO +BDFChar: 2316 2391 6 1 5 1 8 +^q]pe(]`4@ +BDFChar: 2317 2392 6 1 5 1 5 +f[p2VfDkmO +BDFChar: 2318 2393 6 1 5 1 8 +^q]s&fDsRV +BDFChar: 2319 2394 6 4 5 1 8 +^q]rc^];0c +BDFChar: 2320 2395 6 1 5 1 8 +f[p0@(]YBi +BDFChar: 2321 2396 6 1 5 1 8 +(`38*fDla* +BDFChar: 2322 2397 6 1 5 1 8 +f[p2VfDla* +BDFChar: 2323 2398 6 1 5 1 8 +(`35i(]`4@ +BDFChar: 2324 2399 6 1 5 1 8 +f[p0@(]`4@ +BDFChar: 2325 2400 6 1 5 1 8 +(`38*fDsRV +BDFChar: 2326 2401 6 1 5 1 8 +f[p2VfDsRV +BDFChar: 2327 2402 6 1 2 -2 -1 +^q]pM +BDFChar: 2328 2403 6 1 2 -2 8 +^q]pMz!5QAM +BDFChar: 2329 2404 6 1 2 -2 5 +^q]pM!!'gM +BDFChar: 2330 2405 6 1 2 -2 8 +^q]rc^]4?7!5QAM +BDFChar: 2331 2406 6 1 2 -2 2 +^q]rc^]4?7 +BDFChar: 2332 2407 6 1 2 -2 8 +^q]pM!!'gM!5QAM +BDFChar: 2333 2408 6 1 2 -2 5 +^q]rc^];0c +BDFChar: 2334 2409 6 1 2 -2 8 +^q]rc^];0c!5QAM +BDFChar: 2335 2410 6 1 5 -2 8 +(`35Qz!5QAM +BDFChar: 2336 2411 6 1 5 -2 8 +f[p0(z!5QAM +BDFChar: 2337 2412 6 1 5 -2 8 +(`37g^]4?7!5QAM +BDFChar: 2338 2413 6 1 5 -2 8 +f[p2>^]4?7!5QAM +BDFChar: 2339 2414 6 1 5 -2 8 +(`35Q!!'gM!5QAM +BDFChar: 2340 2415 6 1 5 -2 8 +f[p0(!!'gM!5QAM +BDFChar: 2341 2416 6 1 5 -2 8 +(`37g^];0c!5QAM +BDFChar: 2342 2417 6 1 5 -2 8 +f[p2>^];0c!5QAM +BDFChar: 2343 2418 6 1 5 -2 5 +(`35Q!!'gM +BDFChar: 2344 2419 6 1 5 -2 8 +^q]pe(]XO9!5QAM +BDFChar: 2345 2420 6 1 5 -2 5 +f[p0(!!'gM +BDFChar: 2346 2421 6 1 5 -2 8 +^q]s&fDkmO!5QAM +BDFChar: 2347 2422 6 1 5 -2 5 +(`37g^];0c +BDFChar: 2348 2423 6 1 5 -2 8 +^q]pe(]_@e!5QAM +BDFChar: 2349 2424 6 1 5 -2 5 +f[p2>^];0c +BDFChar: 2350 2425 6 1 5 -2 8 +^q]s&fDr_&!5QAM +BDFChar: 2351 2426 6 1 5 -2 8 +(`35i(]XO9!5QAM +BDFChar: 2352 2427 6 1 5 -2 8 +f[p0@(]XO9!5QAM +BDFChar: 2353 2428 6 1 5 -2 8 +(`38*fDkmO!5QAM +BDFChar: 2354 2429 6 1 5 -2 8 +f[p2VfDkmO!5QAM +BDFChar: 2355 2430 6 1 5 -2 8 +(`35i(]_@e!5QAM +BDFChar: 2356 2431 6 1 5 -2 8 +f[p0@(]_@e!5QAM +BDFChar: 2357 2432 6 1 5 -2 8 +(`38*fDr_&!5QAM +BDFChar: 2358 2433 6 1 5 -2 8 +f[p2VfDr_&!5QAM +BDFChar: 2359 2434 6 1 2 -2 2 +^q]rc^]4?7 +BDFChar: 2360 2435 6 1 5 -2 8 +^q]pM!!!iQ!5QAM +BDFChar: 2361 2436 6 1 5 -2 5 +^q]pe(]_@e +BDFChar: 2362 2437 6 1 5 -2 8 +^q]rc^]52g!5QAM +BDFChar: 2363 2438 6 1 5 -2 2 +f[p2>^]4?7 +BDFChar: 2364 2439 6 1 5 -2 8 +^q]pM!!([(!5QAM +BDFChar: 2365 2440 6 1 5 -2 5 +^q]s&fDr_& +BDFChar: 2366 2441 6 1 5 -2 8 +^q]rc^]<$>!5QAM +BDFChar: 2367 2442 6 1 5 -2 8 +(`35Q!!!iQ!5QAM +BDFChar: 2368 2443 6 1 5 -2 8 +f[p0(!!!iQ!5QAM +BDFChar: 2369 2444 6 1 5 -2 8 +(`37g^]52g!5QAM +BDFChar: 2370 2445 6 1 5 -2 8 +f[p2>^]52g!5QAM +BDFChar: 2371 2446 6 1 5 -2 8 +(`35Q!!([(!5QAM +BDFChar: 2372 2447 6 1 5 -2 8 +f[p0(!!([(!5QAM +BDFChar: 2373 2448 6 1 5 -2 8 +(`37g^]<$>!5QAM +BDFChar: 2374 2449 6 1 5 -2 8 +f[p2>^]<$>!5QAM +BDFChar: 2375 2450 6 1 5 -2 5 +(`35i(]_@e +BDFChar: 2376 2451 6 1 5 -2 8 +^q]pe(]YBi!5QAM +BDFChar: 2377 2452 6 1 5 -2 5 +f[p0@(]_@e +BDFChar: 2378 2453 6 1 5 -2 8 +^q]s&fDla*!5QAM +BDFChar: 2379 2454 6 1 5 -2 5 +(`38*fDr_& +BDFChar: 2380 2455 6 1 5 -2 8 +^q]pe(]`4@!5QAM +BDFChar: 2381 2456 6 1 5 -2 5 +f[p2VfDr_& +BDFChar: 2382 2457 6 1 5 -2 8 +^q]s&fDsRV!5QAM +BDFChar: 2383 2458 6 1 5 -2 8 +(`35i(]YBi!5QAM +BDFChar: 2384 2459 6 1 5 -2 8 +f[p0@(]YBi!5QAM +BDFChar: 2385 2460 6 1 5 -2 8 +(`38*fDla*!5QAM +BDFChar: 2386 2461 6 1 5 -2 8 +f[p2VfDla*!5QAM +BDFChar: 2387 2462 6 1 5 -2 8 +(`35i(]`4@!5QAM +BDFChar: 2388 2463 6 1 5 -2 8 +f[p0@(]`4@!5QAM +BDFChar: 2389 2464 6 1 5 -2 8 +(`38*fDsRV!5QAM +BDFChar: 2390 2465 6 1 5 -2 8 +f[p2VfDsRV!5QAM +BDFChar: 2391 2466 6 4 5 -2 -1 +^q]pM +BDFChar: 2392 2467 6 1 5 -2 8 +^q]pMz!#QOQ +BDFChar: 2393 2468 6 1 5 -2 5 +^q]pM!!!iQ +BDFChar: 2394 2469 6 1 5 -2 8 +^q]rc^]4?7!#QOQ +BDFChar: 2395 2470 6 1 5 -2 2 +^q]pe(]XO9 +BDFChar: 2396 2471 6 1 5 -2 8 +^q]pM!!'gM!#QOQ +BDFChar: 2397 2472 6 1 5 -2 5 +^q]rc^]52g +BDFChar: 2398 2473 6 1 5 -2 8 +^q]rc^];0c!#QOQ +BDFChar: 2399 2474 6 4 5 -2 8 +^q]pMz!5QAM +BDFChar: 2400 2475 6 1 5 -2 8 +f[p0(z!#QOQ +BDFChar: 2401 2476 6 1 5 -2 8 +(`37g^]4?7!#QOQ +BDFChar: 2402 2477 6 1 5 -2 8 +f[p2>^]4?7!#QOQ +BDFChar: 2403 2478 6 1 5 -2 8 +(`35Q!!'gM!#QOQ +BDFChar: 2404 2479 6 1 5 -2 8 +f[p0(!!'gM!#QOQ +BDFChar: 2405 2480 6 1 5 -2 8 +(`37g^];0c!#QOQ +BDFChar: 2406 2481 6 1 5 -2 8 +f[p2>^];0c!#QOQ +BDFChar: 2407 2482 6 4 5 -2 5 +^q]pM!!'gM +BDFChar: 2408 2483 6 1 5 -2 8 +^q]pe(]XO9!#QOQ +BDFChar: 2409 2484 6 1 5 -2 5 +f[p0(!!!iQ +BDFChar: 2410 2485 6 1 5 -2 8 +^q]s&fDkmO!#QOQ +BDFChar: 2411 2486 6 1 5 -2 5 +(`37g^]52g +BDFChar: 2412 2487 6 1 5 -2 8 +^q]pe(]_@e!#QOQ +BDFChar: 2413 2488 6 1 5 -2 5 +f[p2>^]52g +BDFChar: 2414 2489 6 1 5 -2 8 +^q]s&fDr_&!#QOQ +BDFChar: 2415 2490 6 4 5 -2 8 +^q]rc^]4?7!5QAM +BDFChar: 2416 2491 6 1 5 -2 8 +f[p0@(]XO9!#QOQ +BDFChar: 2417 2492 6 1 5 -2 8 +(`38*fDkmO!#QOQ +BDFChar: 2418 2493 6 1 5 -2 8 +f[p2VfDkmO!#QOQ +BDFChar: 2419 2494 6 1 5 -2 8 +(`35i(]_@e!#QOQ +BDFChar: 2420 2495 6 1 5 -2 8 +f[p0@(]_@e!#QOQ +BDFChar: 2421 2496 6 1 5 -2 8 +(`38*fDr_&!#QOQ +BDFChar: 2422 2497 6 1 5 -2 8 +f[p2VfDr_&!#QOQ +BDFChar: 2423 2498 6 4 5 -2 2 +^q]rc^]4?7 +BDFChar: 2424 2499 6 1 5 -2 8 +^q]pM!!!iQ!#QOQ +BDFChar: 2425 2500 6 1 5 -2 5 +^q]pe(]YBi +BDFChar: 2426 2501 6 1 5 -2 8 +^q]rc^]52g!#QOQ +BDFChar: 2427 2502 6 1 5 -2 2 +f[p0@(]XO9 +BDFChar: 2428 2503 6 1 5 -2 8 +^q]pM!!([(!#QOQ +BDFChar: 2429 2504 6 1 5 -2 5 +^q]s&fDla* +BDFChar: 2430 2505 6 1 5 -2 8 +^q]rc^]<$>!#QOQ +BDFChar: 2431 2506 6 4 5 -2 8 +^q]pM!!'gM!5QAM +BDFChar: 2432 2507 6 1 5 -2 8 +f[p0(!!!iQ!#QOQ +BDFChar: 2433 2508 6 1 5 -2 8 +(`37g^]52g!#QOQ +BDFChar: 2434 2509 6 1 5 -2 8 +f[p2>^]52g!#QOQ +BDFChar: 2435 2510 6 1 5 -2 8 +(`35Q!!([(!#QOQ +BDFChar: 2436 2511 6 1 5 -2 8 +f[p0(!!([(!#QOQ +BDFChar: 2437 2512 6 1 5 -2 8 +(`37g^]<$>!#QOQ +BDFChar: 2438 2513 6 1 5 -2 8 +f[p2>^]<$>!#QOQ +BDFChar: 2439 2514 6 4 5 -2 5 +^q]rc^];0c +BDFChar: 2440 2515 6 1 5 -2 8 +^q]pe(]YBi!#QOQ +BDFChar: 2441 2516 6 1 5 -2 5 +f[p0@(]YBi +BDFChar: 2442 2517 6 1 5 -2 8 +^q]s&fDla*!#QOQ +BDFChar: 2443 2518 6 1 5 -2 5 +(`38*fDla* +BDFChar: 2444 2519 6 1 5 -2 8 +^q]pe(]`4@!#QOQ +BDFChar: 2445 2520 6 1 5 -2 5 +f[p2VfDla* +BDFChar: 2446 2521 6 1 5 -2 8 +^q]s&fDsRV!#QOQ +BDFChar: 2447 2522 6 4 5 -2 8 +^q]rc^];0c!5QAM +BDFChar: 2448 2523 6 1 5 -2 8 +f[p0@(]YBi!#QOQ +BDFChar: 2449 2524 6 1 5 -2 8 +(`38*fDla*!#QOQ +BDFChar: 2450 2525 6 1 5 -2 8 +f[p2VfDla*!#QOQ +BDFChar: 2451 2526 6 1 5 -2 8 +(`35i(]`4@!#QOQ +BDFChar: 2452 2527 6 1 5 -2 8 +f[p0@(]`4@!#QOQ +BDFChar: 2453 2528 6 1 5 -2 8 +(`38*fDsRV!#QOQ +BDFChar: 2454 2529 6 1 5 -2 8 +f[p2VfDsRV!#QOQ +BDFChar: 2455 2530 6 1 5 -2 -1 +f[p0( +BDFChar: 2456 2531 6 1 5 -2 8 +^q]pMz!8,p( +BDFChar: 2457 2532 6 1 5 -2 5 +^q]pM!!([( +BDFChar: 2458 2533 6 1 5 -2 8 +^q]rc^]4?7!8,p( +BDFChar: 2459 2534 6 1 5 -2 2 +^q]s&fDkmO +BDFChar: 2460 2535 6 1 5 -2 8 +^q]pM!!'gM!8,p( +BDFChar: 2461 2536 6 1 5 -2 5 +^q]rc^]<$> +BDFChar: 2462 2537 6 1 5 -2 8 +^q]rc^];0c!8,p( +BDFChar: 2463 2538 6 1 5 -2 8 +(`35Qz!8,p( +BDFChar: 2464 2539 6 1 5 -2 8 +f[p0(z!8,p( +BDFChar: 2465 2540 6 1 5 -2 8 +(`37g^]4?7!8,p( +BDFChar: 2466 2541 6 1 5 -2 8 +f[p2>^]4?7!8,p( +BDFChar: 2467 2542 6 1 5 -2 8 +(`35Q!!'gM!8,p( +BDFChar: 2468 2543 6 1 5 -2 8 +f[p0(!!'gM!8,p( +BDFChar: 2469 2544 6 1 5 -2 8 +(`37g^];0c!8,p( +BDFChar: 2470 2545 6 1 5 -2 8 +f[p2>^];0c!8,p( +BDFChar: 2471 2546 6 1 5 -2 5 +(`35Q!!([( +BDFChar: 2472 2547 6 1 5 -2 8 +^q]pe(]XO9!8,p( +BDFChar: 2473 2548 6 1 5 -2 5 +f[p0(!!([( +BDFChar: 2474 2549 6 1 5 -2 8 +^q]s&fDkmO!8,p( +BDFChar: 2475 2550 6 1 5 -2 5 +(`37g^]<$> +BDFChar: 2476 2551 6 1 5 -2 8 +^q]pe(]_@e!8,p( +BDFChar: 2477 2552 6 1 5 -2 5 +f[p2>^]<$> +BDFChar: 2478 2553 6 1 5 -2 8 +^q]s&fDr_&!8,p( +BDFChar: 2479 2554 6 1 5 -2 8 +(`35i(]XO9!8,p( +BDFChar: 2480 2555 6 1 5 -2 8 +f[p0@(]XO9!8,p( +BDFChar: 2481 2556 6 1 5 -2 8 +(`38*fDkmO!8,p( +BDFChar: 2482 2557 6 1 5 -2 8 +f[p2VfDkmO!8,p( +BDFChar: 2483 2558 6 1 5 -2 8 +(`35i(]_@e!8,p( +BDFChar: 2484 2559 6 1 5 -2 8 +f[p0@(]_@e!8,p( +BDFChar: 2485 2560 6 1 5 -2 8 +(`38*fDr_&!8,p( +BDFChar: 2486 2561 6 1 5 -2 8 +f[p2VfDr_&!8,p( +BDFChar: 2487 2562 6 1 5 -2 2 +(`38*fDkmO +BDFChar: 2488 2563 6 1 5 -2 8 +^q]pM!!!iQ!8,p( +BDFChar: 2489 2564 6 1 5 -2 5 +^q]pe(]`4@ +BDFChar: 2490 2565 6 1 5 -2 8 +^q]rc^]52g!8,p( +BDFChar: 2491 2566 6 1 5 -2 2 +f[p2VfDkmO +BDFChar: 2492 2567 6 1 5 -2 8 +^q]pM!!([(!8,p( +BDFChar: 2493 2568 6 1 5 -2 5 +^q]s&fDsRV +BDFChar: 2494 2569 6 1 5 -2 8 +^q]rc^]<$>!8,p( +BDFChar: 2495 2570 6 1 5 -2 8 +(`35Q!!!iQ!8,p( +BDFChar: 2496 2571 6 1 5 -2 8 +f[p0(!!!iQ!8,p( +BDFChar: 2497 2572 6 1 5 -2 8 +(`37g^]52g!8,p( +BDFChar: 2498 2573 6 1 5 -2 8 +f[p2>^]52g!8,p( +BDFChar: 2499 2574 6 1 5 -2 8 +(`35Q!!([(!8,p( +BDFChar: 2500 2575 6 1 5 -2 8 +f[p0(!!([(!8,p( +BDFChar: 2501 2576 6 1 5 -2 8 +(`37g^]<$>!8,p( +BDFChar: 2502 2577 6 1 5 -2 8 +f[p2>^]<$>!8,p( +BDFChar: 2503 2578 6 1 5 -2 5 +(`35i(]`4@ +BDFChar: 2504 2579 6 1 5 -2 8 +^q]pe(]YBi!8,p( +BDFChar: 2505 6 6 1 5 1 6 ++<^GUE/4Jo +BDFChar: 2506 199 6 1 6 2 4 +5lY"hp +BDFChar: 2518 205 6 1 6 1 6 +#lFrnr'15^ +BDFChar: 2519 206 6 1 6 1 6 +86e\VkXY[R +BDFChar: 2520 2586 6 1 5 -2 8 +(`35i(]YBi!8,p( +BDFChar: 2521 2587 6 1 5 -2 8 +f[p0@(]YBi!8,p( +BDFChar: 2522 2588 6 1 5 -2 8 +(`38*fDla*!8,p( +BDFChar: 2523 2589 6 1 5 -2 8 +f[p2VfDla*!8,p( +BDFChar: 2524 2590 6 1 5 -2 8 +(`35i(]`4@!8,p( +BDFChar: 2525 2591 6 1 5 -2 8 +f[p0@(]`4@!8,p( +BDFChar: 2526 2592 6 1 5 -2 8 +(`38*fDsRV!8,p( +BDFChar: 2527 2593 6 1 5 -2 8 +f[p2VfDsRV!8,p( +BDFChar: 2528 2594 6 0 5 1 5 ++@,i1&-)\1 +BDFChar: 2529 2595 6 0 6 1 5 +<)iir;ucmu +BDFChar: 2530 2596 6 1 5 0 6 ++E7,Npi%>U +BDFChar: 2531 2597 6 1 6 2 4 +8Gl!Y +BDFChar: 2532 2598 6 2 4 1 6 +5i=mmi'78B +BDFChar: 2533 2599 6 1 6 1 6 +i4tus#Qt,- +BDFChar: 2534 2600 6 1 6 1 6 +*"3N(5_&h7 +BDFChar: 2535 2601 6 1 6 1 6 +J3Y4k$lf6I +BDFChar: 2536 2602 6 1 6 1 6 +":,R3^u,1m +BDFChar: 2537 2603 6 3 3 -2 8 +J,k*"J,k*"J,k*" +BDFChar: 2538 2604 6 1 3 -1 1 +5bL@B +BDFChar: 2539 159 6 0 6 -3 9 +JAC+4q#(-hq!d4WJ,fQL +BDFChar: 2540 2605 6 0 5 0 7 +^d(.e<)cih +BDFChar: 2541 160 6 0 6 -3 9 +!X9,U5(jrr2orrdK;[%KHJ/ +BDFChar: 2546 2608 6 0 6 0 7 ++:rqkqYkk% +BDFChar: 2547 163 6 0 5 -3 9 +J:PGNi8F+onG)eVqu?]s +BDFChar: 2548 2609 6 0 6 0 7 ++:rpPJq?BM +BDFChar: 2549 164 6 0 5 -3 9 +"9],A*#q('4FDPSqu?]s +BDFChar: 2550 2610 6 0 6 0 7 ++:rr"hX52> +BDFChar: 2551 165 6 0 5 -3 9 +r;??bnF5Aoi5!-YJ,fQL +BDFChar: 2552 2611 6 0 6 0 7 ++:rpPK)U-W +BDFChar: 2553 166 6 0 5 -3 9 +r;:qi4?OT'*"35Y"98E% +BDFChar: 2554 2612 6 0 6 0 8 ++@%%LrqcWhDu]k< +BDFChar: 2555 2613 6 0 6 0 7 +Hp1XH+^jlE8^u4_Wqu?]s +BDFChar: 2573 2631 6 1 6 -3 9 +r-UUH$j6P5$lhBWqu?]s +BDFChar: 2574 2632 6 0 7 -1 9 +&.g6d.#.\LG_1;C +BDFChar: 2575 2633 6 1 5 -2 9 ++Abm2:iLAmq"XW' +BDFChar: 2576 2634 6 1 5 -2 9 ++E2:=E,]c8q"XW' +BDFChar: 2577 2635 6 1 5 -2 9 ++Abm2:f'u-q"XW' +BDFChar: 2578 2636 6 0 5 1 6 +'JOXq*4u7O +BDFChar: 2579 2637 6 0 6 0 6 +3#MM3^+_MH +BDFChar: 2580 2638 6 0 6 0 6 +If>(fL9CFS +BDFChar: 2581 2639 6 0 7 -1 9 +&.g6d.#.\LG_1;C +BDFChar: 2582 2640 6 0 6 0 6 +3.1/FmX-to +BDFChar: 2583 2641 6 0 6 0 6 +IS+q_o^r%] +BDFChar: 2584 2642 6 0 6 0 6 +IS+q_o^r%] +BDFChar: 2585 2643 6 0 5 1 6 +q##f0Pl(L] +BDFChar: 2586 2644 6 1 5 1 5 +nCX\lp](9o +BDFChar: 2587 2645 6 1 5 1 5 +n>P!^]bkqG@ +BDFChar: 2589 2647 6 0 5 1 5 +n:5oap](9o +BDFChar: 2590 2648 6 1 5 1 5 +i;!*Bp](9o +BDFChar: 2591 2649 6 0 6 -3 9 +!X&c7#\YV;+`eFHn +BDFChar: 2599 2657 6 0 6 0 6 +FS;m:>Z?pf +BDFChar: 2600 2658 6 0 6 -1 7 +6u76uI/\LQ&-)\1 +BDFChar: 2601 2659 6 0 5 -2 7 +3(.<,q"T*Xb_,rr +BDFChar: 2602 2660 6 0 6 -1 7 +-q$HkJj`!p-ia5I +BDFChar: 2603 2661 6 0 6 0 6 +9N"\\6;iaB +BDFChar: 2604 2662 6 0 6 0 5 +r;ORaqL/DE +BDFChar: 2605 2663 6 0 6 1 5 +-q&YT-ia5I +BDFChar: 2606 2664 6 0 6 2 3 +\nh?H +BDFChar: 2607 2665 6 1 5 -2 7 +J3ZBpq"XW'E,YdW +BDFChar: 2608 2666 6 0 6 -1 7 +epMjmrd;Q=a( +BDFChar: 2632 2690 6 0 7 0 6 +&+Aren*^be +BDFChar: 2633 2691 6 0 6 0 6 +mUg9[E*tp2 +BDFChar: 2634 2692 6 0 6 0 6 +G.Q2ke@L#- +BDFChar: 2635 2693 6 0 5 -1 8 +&28'Bq#('f]QaDV +BDFChar: 2636 2694 6 0 6 0 9 +rquQ\i8F,"r;HZr +BDFChar: 2637 2695 6 0 6 0 5 +D#XE]3"Q&i +BDFChar: 2638 2696 6 0 6 0 6 +9N"\\6;iaB +BDFChar: 2639 2697 6 0 6 0 6 +9N"\\6;iaB +BDFChar: 2640 2698 6 0 5 -1 6 +(hA/aA-A9- +BDFChar: 2641 2699 6 0 6 -1 6 +!oAm)Z=-2X +BDFChar: 2647 2705 6 0 6 1 6 +Jjb"c])D[0 +BDFChar: 2648 2706 6 0 7 0 6 +&+Aren*^be +BDFChar: 2649 2707 6 0 5 0 7 +#S;CYq"T5Q +BDFChar: 2650 2708 6 0 6 0 7 +3)k9!I)`16 +BDFChar: 2651 2709 6 0 6 -1 7 +&:E'?`k'`K&-)\1 +BDFChar: 2652 2710 6 0 6 0 7 +&3,(*`l?#M +BDFChar: 2653 2711 6 1 6 1 6 +r.LU]:Ap +BDFChar: 2669 2727 6 0 6 -1 7 +i1Qa9Y,_IL2uipY +BDFChar: 2670 2728 6 0 6 0 6 +3'LDmSpWR! +BDFChar: 2677 2735 6 0 6 -1 7 +$j[,RS4G'L&-)\1 +BDFChar: 2678 2736 6 0 6 -1 7 +$j[,RS4G'L&-)\1 +BDFChar: 2679 2737 6 0 6 0 7 +'GQ!E./Zn< +BDFChar: 2680 2738 6 0 6 -3 9 +!X&c7#\YV;+ZJ/ +BDFChar: 2688 2746 6 1 4 -3 9 +@$#oC?i],HO8tB(Du]k< +BDFChar: 2689 2747 6 0 6 -2 7 +`lu6RroOE>`eFHn +BDFChar: 2690 2748 6 0 6 2 5 +-?e1c +BDFChar: 2691 2749 6 0 6 0 6 +9N"\\6;iaB +BDFChar: 2692 2750 6 0 6 1 5 +pf(3lrVuou +BDFChar: 2693 2751 6 0 5 1 6 +'JOXq*4u7O +BDFChar: 2694 2752 6 0 6 1 5 +rk@6prVuou +BDFChar: 2695 2753 6 0 7 1 5 +,YEnk1]RLU +BDFChar: 2696 2754 6 0 6 -1 5 +&3,(:IQe_O +BDFChar: 2697 2755 6 0 6 1 5 +J3Y5BNW9%Z +BDFChar: 2698 2756 6 0 6 0 8 +n;)a\U6:CcrVuou +BDFChar: 2699 8 6 0 6 0 7 +&.gi#HoPq1 +BDFChar: 2700 2757 6 0 6 0 6 +&1CM`<%&:X +BDFChar: 2701 2758 6 0 6 -1 6 +3(1?XZDp;P +BDFChar: 2702 2759 6 0 5 -1 9 +&3+XeJ9VJB3,fu? +BDFChar: 2703 2760 6 0 6 0 6 +rgK^]Y+GUm +BDFChar: 2704 2761 6 0 6 1 7 +&9.CGr46hI +BDFChar: 2705 2762 6 0 6 1 5 +`fbqF_>jQ9 +BDFChar: 2706 2763 6 0 6 -1 6 +rr1WSMQ6[T +BDFChar: 2707 2764 6 0 4 1 5 +kU7 +BDFChar: 2709 2766 6 0 6 0 6 +`k"Rh7(UA< +BDFChar: 2710 2767 6 0 5 -1 9 +*'??.=AZ5p?pHsW +BDFChar: 2711 2768 6 0 6 0 6 +mUg9[E+W,N +BDFChar: 2712 2769 6 1 5 1 5 +E;95'Du]k< +BDFChar: 2713 2770 6 1 5 1 5 +q"XXZp](9o +BDFChar: 2714 2771 6 1 5 1 5 +pkX`^p](9o +BDFChar: 2715 2772 6 1 5 1 5 +E/9=+Du]k< +BDFChar: 2716 2773 6 0 6 -1 7 +%R)Wl+sq3g5QCca +BDFChar: 2717 2774 6 0 6 0 6 +r^=bR`^Ke+ +BDFChar: 2718 2775 6 0 6 1 5 +h>lC4h>dNU +BDFChar: 2719 2776 6 1 5 0 6 +#RD9/n6d@= +BDFChar: 2720 2777 6 1 5 1 5 +f_BF\fDkmO +BDFChar: 2721 2778 6 0 6 0 6 +-oh3Br\u;+ +BDFChar: 2722 2779 6 0 5 0 8 +0`1pPe?%0$qu?]s +BDFChar: 2723 2780 6 0 6 1 6 +'KgdB<-/*? +BDFChar: 2724 2781 6 0 5 0 7 +nmR0#7 +BDFChar: 2763 2820 6 0 6 0 5 +#Rl0@Lk#I* +BDFChar: 2764 2821 6 0 5 1 6 +0JNG&0JEJ, +BDFChar: 2765 2822 6 0 5 3 4 +r;6Np +BDFChar: 2766 2823 6 0 5 1 6 +0`60?r%J*N +BDFChar: 2767 2824 6 0 6 0 6 +3,J$NrbOOo +BDFChar: 2768 2825 6 0 6 0 6 +&3)(SI.$t6 +BDFChar: 2769 2826 6 0 6 1 7 +7(WAtri5qt +BDFChar: 2770 2827 6 0 6 -1 5 +I/a-EHsj_i +BDFChar: 2771 2828 6 0 5 -1 6 +bfg(2bfp!0 +BDFChar: 2772 2829 6 1 5 1 5 +i;!*Bp](9o +BDFChar: 2773 2830 6 0 5 1 5 +n:5oap](9o +BDFChar: 2774 2831 6 0 6 0 6 +Ll/44Wdt'K +BDFChar: 2775 2832 6 0 5 1 6 +@'K-F*"2fI +BDFChar: 2776 2833 6 0 6 -1 7 +":eE+;#"!""98E% +BDFChar: 2777 2834 6 0 6 0 6 +$ka3Jq"XUa +BDFChar: 2778 2835 6 0 6 1 7 +n-J(fassCk +BDFChar: 2779 2836 6 0 6 1 5 +3(3c2rVuou +BDFChar: 2780 2837 6 0 6 0 7 +&3*'G7"YCL +BDFChar: 2781 2838 6 0 6 0 6 +3->#&P"[h8 +BDFChar: 2782 2839 6 0 6 -2 8 +rqcToro3nWrpp$g +BDFChar: 2783 2840 6 0 5 0 7 +r;:dn0JG0l +BDFChar: 2784 2841 6 0 6 -1 6 +HmgBk7"#"5 +BDFChar: 2785 2842 6 0 5 1 5 +bh+W%bQ%VC +BDFChar: 2786 2843 6 0 6 0 7 +GfZJ^U>d@\ +BDFChar: 2787 2844 6 0 6 0 5 +3)omgp1s^/ +BDFChar: 2788 2845 6 0 5 0 7 +4?.:fpb3gU +BDFChar: 2789 2846 6 0 6 0 6 +&3,&bI/XZW +BDFChar: 2790 2847 6 0 7 -1 5 +IXQWnHiX-G +BDFChar: 2791 2848 6 0 5 0 7 +n0E;(Q +BDFChar: 2809 2866 6 0 5 0 7 +n8cShk +BDFChar: 2813 2870 6 0 6 0 6 +7.*J2<&bEh +BDFChar: 2814 2871 6 0 5 0 8 +#T++tr:p'bBE/#4 +BDFChar: 2815 2872 6 0 7 0 6 +&+Aren*^be +BDFChar: 2816 2873 6 0 6 1 6 +Jjb"c])D[0 +BDFChar: 2817 2874 6 0 6 0 7 +3)k9!I)`16 +BDFChar: 2818 2875 6 0 6 0 6 +.(X67Cq;"p +BDFChar: 2819 2876 6 0 6 0 6 +rW)r;rr2ls +BDFChar: 2820 2877 6 0 6 0 7 +34`'KmO3I7 +BDFChar: 2821 2878 6 0 5 0 6 +quHWpr!3i6 +BDFChar: 2822 2879 6 0 6 0 6 +&6sJJ4EM,7 +BDFChar: 2823 2880 6 0 5 1 5 +#S`YF+92BA +BDFChar: 2824 2881 6 0 6 0 6 +rq>VhNo'a8 +BDFChar: 2825 2882 6 0 6 -1 8 +&3(4\HoQNQ&.egA +BDFChar: 2826 2883 6 0 5 -1 8 +$k3(/3,j9C^q]pM +BDFChar: 2827 2884 6 0 6 0 7 +I)c/5Jp`/t +BDFChar: 2828 2885 6 0 5 0 7 +n1Ul +BDFChar: 2831 2888 6 0 5 0 7 +neX$b +BDFChar: 2838 2895 6 0 6 0 7 +&3<3Q<2+i' +BDFChar: 2839 2896 6 0 5 0 8 +0`1qK]^5R'qu?]s +BDFChar: 2840 2897 6 0 6 0 8 +3(/A0WkU +BDFChar: 2917 2974 6 0 6 -2 8 +rr2>;`l>Uhm`'hY +BDFChar: 2918 2975 6 0 5 0 7 +<)ds=<7G/P +BDFChar: 2919 2976 6 0 6 0 7 ++F#/`RZ^&u +BDFChar: 2920 2977 6 0 5 0 7 +nf+l +BDFChar: 2925 2982 6 0 6 1 5 +Uu^U>U]:Ap +BDFChar: 2926 2983 6 0 6 0 8 +3<"MWWiE(NrVuou +BDFChar: 2927 2984 6 0 6 0 8 +&.mF(P(N]42uipY +BDFChar: 2928 2985 6 0 6 -1 6 +HmgBk7"#"5 +BDFChar: 2929 2986 6 0 6 -2 8 +3&ilcP+$tj3&ikt +BDFChar: 2930 2987 6 0 6 0 6 +":>K2Wp6Sa +BDFChar: 2931 2988 6 0 6 1 7 +#T1#.?3#ES +BDFChar: 2932 2989 6 0 5 0 7 +nf+l +BDFChar: 2983 3040 6 0 6 -1 8 +&1Bqu`i>2$3"Q&i +BDFChar: 2984 3041 6 0 6 0 7 +I)c/5Jp`/t +BDFChar: 2985 3042 6 0 5 1 6 +E/=9sS6u1Ul +BDFChar: 2991 3048 6 0 5 0 7 +nEAs2N6JC$ +BDFChar: 2992 3049 6 0 5 0 7 +n&fDkmO +BDFChar: 3003 3060 6 0 6 0 6 +rl2O\P*5eE +BDFChar: 3004 3061 6 1 5 -1 5 +E/9>&fDqiM +BDFChar: 3005 3062 6 1 5 -1 5 +E/9>&fEa/2 +BDFChar: 3006 3063 6 0 6 -1 6 +!^'.UCi"bA +BDFChar: 3007 3064 6 0 6 0 7 ++F#/`RZ^&u +BDFChar: 3008 3065 6 0 6 0 6 +3,JT^mVFi_ +BDFChar: 3009 3066 6 0 5 1 6 +@'K-F*"2fI +BDFChar: 3010 3067 6 0 6 -1 7 +3%-`tr^?1SmJm4e +BDFChar: 3011 3068 6 0 6 -2 8 +@$#o'^6H?rJ<4.= +BDFChar: 3012 3069 6 0 6 0 6 +3#MM3^+_MH +BDFChar: 3013 3070 6 0 6 -1 4 +C7:URJrB[0 +BDFChar: 3014 3071 6 0 6 0 6 +4sI_<^4>tY +BDFChar: 3015 3072 6 0 6 0 6 +4u0RD^4>tY +BDFChar: 3016 3073 6 0 6 0 6 +4uT.D^4>tY +BDFChar: 3017 3074 6 1 5 -1 6 +E;95'E,Yer +BDFChar: 3018 3075 6 1 5 -1 6 +E/9=+:iHDR +BDFChar: 3019 3076 6 0 6 1 5 +CkB6MC]FG8 +BDFChar: 3020 3077 6 0 6 0 6 +J8CskMJN=o +BDFChar: 3021 3078 6 0 6 0 7 +3)k9!I)`16 +BDFChar: 3022 3079 6 2 5 0 6 +?r0*R5et/8 +BDFChar: 3023 3080 6 0 6 1 5 +[Z\(n[K$:- +BDFChar: 3024 3081 6 0 6 0 5 +I+J;.r*TL) +BDFChar: 3025 3082 6 0 6 0 5 +r('@L8jiXZ +BDFChar: 3026 3083 6 0 6 0 6 +"=!-rl66?2 +BDFChar: 3027 3084 6 0 2 1 5 ++Q229+92BA +BDFChar: 3028 3085 6 0 4 1 5 ++R&%Q+92BA +BDFChar: 3029 3086 6 0 6 -3 8 +J:L$slK\4$$jZt= +BDFChar: 3030 3087 6 1 6 1 7 +G_@bA!&-), +BDFChar: 3031 3088 6 1 6 -1 8 +J9]!dBFljW#Qt,- +BDFChar: 3032 3089 6 2 5 -1 7 +OHAs>?smAM?iU0, +BDFChar: 3033 3090 6 0 7 1 5 +,YEnk1]RLU +BDFChar: 3034 3091 6 0 6 0 6 +p`M%/-m/cq +BDFChar: 3035 3092 6 0 6 -2 8 +I/a-Err.9V3;tl; +BDFChar: 3036 3093 6 0 6 0 7 +rdp;r\rq[E +BDFChar: 3037 3094 6 0 6 1 5 ++QVtO+92BA +BDFChar: 3038 3095 6 0 6 1 5 ++Q2\G+92BA +BDFChar: 3039 3096 6 1 6 1 6 +J5C3(GSC,X +BDFChar: 3040 3097 6 0 6 0 6 +!^'.UCi"V% +BDFChar: 3041 3098 6 0 6 0 6 +JFL&K3Z\>& +BDFChar: 3042 3099 6 0 6 0 6 +0PG:hcGgn* +BDFChar: 3043 3100 6 0 6 0 7 +5igqilK[Bi +BDFChar: 3044 3101 6 0 6 0 7 +5bt-SWiDfS +BDFChar: 3045 3102 6 0 6 0 7 +5bt-SWiG(> +BDFChar: 3046 3103 6 0 6 0 7 +5bt-SWp8U) +BDFChar: 3047 3104 6 0 6 0 7 +5bt-SWp8U) +BDFChar: 3048 3105 6 0 6 0 7 +5bt-SlK[Bi +BDFChar: 3049 3106 6 0 6 0 7 +5bt.>lK[Bi +BDFChar: 3050 3107 6 0 6 0 7 +5bt.>lK[Bi +BDFChar: 3051 3108 6 0 6 0 7 +5c!E)lK[Bi +BDFChar: 3052 3109 6 0 6 0 7 +5c!E)lK[Bi +BDFChar: 3053 3110 6 0 6 0 7 +5ieZ>Wp6>> +BDFChar: 3054 3111 6 0 6 0 7 +5bt-SWiDfS +BDFChar: 3055 3112 6 0 6 1 5 +rfYiqrVuou +BDFChar: 3056 3113 6 0 5 1 7 +bfiUKGVCfO +BDFChar: 3057 3114 6 1 2 -3 2 +5QCca5_&h7 +BDFChar: 3058 3115 6 2 2 -2 2 +J,fQLJ,fQL +BDFChar: 3059 3116 6 1 3 -2 3 +5bK5b!'gMa +BDFChar: 3060 3117 6 2 2 -2 3 +J:N0#!.Y%L +BDFChar: 3061 3118 6 1 5 0 0 +p](9o +BDFChar: 3062 3119 6 2 3 -3 3 +5X9jMJ3Z@" +BDFChar: 3063 3120 6 2 3 -3 3 +J:KmM5_+@b +BDFChar: 3064 3121 6 1 3 -3 3 +?pHu-5X8]W +BDFChar: 3065 3122 6 1 3 -3 3 +^d(.-5X<*b +BDFChar: 3066 3123 6 1 3 -3 3 ++M`MXJA<9- +BDFChar: 3067 3124 6 1 3 -3 3 +J7'KB+CK^" +BDFChar: 3068 3125 6 1 5 -2 2 +;#!l^:]LIq +BDFChar: 3069 3126 6 1 5 -2 3 ++Abn-OD"Uo +BDFChar: 3070 3127 6 1 5 -1 3 ++K06U:]LIq +BDFChar: 3071 3128 6 1 3 -1 1 +5i=m- +BDFChar: 3072 3129 6 1 3 0 0 +huE`W +BDFChar: 3073 3130 6 1 3 -2 2 ++@(HB+92BA +BDFChar: 3074 3131 6 1 3 -2 2 +J3Y5BJ,fQL +BDFChar: 3075 3132 6 1 3 -1 1 +huM[8 +BDFChar: 3076 3133 6 2 3 -2 3 +J:N/85X5;L +BDFChar: 3077 3134 6 1 4 -3 3 +5]D6]&E"Z2 +BDFChar: 3078 3135 6 0 6 -2 3 +8>o?!.O4uo +BDFChar: 3079 3136 6 0 5 -2 4 +3(1ET\3r:V +BDFChar: 3080 3137 13 3 11 1 7 +#QP,1#QXmT#QP,1#QOi) +BDFChar: 3081 3138 13 2 11 0 8 +rr@S"J3\X8rr@TMJ:N/8J3X)7 +BDFChar: 3082 3139 13 2 11 0 6 +It3&7!'l%LJ3\\$IR!l5 +BDFChar: 3083 3140 13 2 11 0 6 +^Au'"J3\WMJ3\WMJ3X)7 +BDFChar: 3084 3141 13 2 11 0 6 +It3&7J,k(L!'l'"It.M! +BDFChar: 3085 3142 6 1 5 0 8 +pkX`Vn;r`nO8o7\ +BDFChar: 3086 3143 6 2 4 0 8 +i'9Om5X7S"huE`W +BDFChar: 3087 3144 6 1 5 0 8 +0L1/=Y_\*kDu]k< +BDFChar: 3088 3145 6 1 5 0 8 +LkpkCpkX`^L]@DT +BDFChar: 3089 3146 6 1 5 0 8 +^b@/Z+Z?F +BDFChar: 3093 3150 6 1 5 0 7 +E2]Fk81:EU +BDFChar: 3094 3151 6 1 5 0 7 +Lks]^W)-;e +BDFChar: 3095 3152 6 0 5 0 7 +jK)H[-tq,# +BDFChar: 3096 3153 6 1 5 0 8 +3)EH(:f'tbDu]k< +BDFChar: 3097 3154 6 1 5 -3 5 +Gc7R>W+[S-n,NFg +BDFChar: 3098 3155 6 1 5 0 5 +n>N"QT\oeM +BDFChar: 3099 3156 6 1 5 0 5 +GbC-h..@3: +BDFChar: 3100 3157 6 1 5 0 5 +LtJZ):f%,l +BDFChar: 3101 3158 6 0 5 0 5 +jJYm'<1Epg +BDFChar: 3102 3159 12 1 10 -1 8 +*WU\?It7R7s1nZMs1j,7It/R? +BDFChar: 3103 3160 12 1 10 -1 8 +*WUJ9I";2]r]pHJr]kj]H%6q9 +BDFChar: 3104 3161 12 1 10 -1 8 +*WUJ9G_#QSpd"U>pcs(SH%6q9 +BDFChar: 3105 3162 12 1 10 -1 8 +*WUJ9E.Hk3i'?3ci';73H%6q9 +BDFChar: 3106 3163 12 1 10 -1 8 +*WTW!5_+AMJ3\WMJ3ZAM@=TC! +BDFChar: 3107 3164 12 1 10 -1 8 +*WTi'6\'a'J\ZiPJ\XX'B7M$' +BDFChar: 3108 3165 12 1 10 -1 8 +*WTi'7t?B1LVS\\LVQE1B7M$' +BDFChar: 3109 3166 12 1 10 -1 8 +*WTi':Oo(QT>7)7T>46QB7M$' +BDFChar: 3110 3167 6 0 7 0 7 +<'A*"_F(sc +BDFChar: 3111 3168 6 0 6 0 6 +i,B5C*"WY] +BDFChar: 3112 3169 6 0 6 -1 8 +I/a-Err.9n-o_2, +BDFChar: 3113 3170 12 2 9 -2 8 +*e07NP+lb(Ck@$7 +BDFChar: 3114 3171 12 1 10 -2 8 +1B:+!561`!N'REY9Rofe9RofeIt.M! +BDFChar: 3115 3172 12 1 10 0 7 +"+UTk(VgA]Hea& +BDFChar: 3118 3175 12 1 10 -1 8 +TE%dgGQ8Q\)uqMi%KI7E#J^__ +BDFChar: 3119 3176 12 1 11 -1 8 +0E>3?pg>.N5CbtK5!TB=#Tssl +BDFChar: 3120 3177 12 1 11 -1 6 +63-0KIt/X!%tFq9&3pdl +BDFChar: 3121 3178 12 1 11 0 7 +9n;\_It/X!%tFq9&3pdl +BDFChar: 3122 3179 12 2 10 -1 8 +!J!B7IfNi+It7QL#Co0l-NJMo +BDFChar: 3123 3180 6 -1 7 0 7 +G5tnK@fSdp<<,Sj8H?2L +BDFChar: 3124 3181 6 0 6 0 6 +G_Cs7BIF\t +BDFChar: 3125 3182 6 0 6 1 7 +(_lgu@Nlcl +BDFChar: 3126 3183 12 1 11 -2 8 +*rnNUF26bm^gPPt^gPPtc=#Sghd?Ea +BDFChar: 3127 3184 12 1 11 -2 9 +*ro]a5X9iBZ(S_%Rijs]5X6TF&HE:@ +BDFChar: 3128 3185 6 0 6 1 6 +I/]M +BDFChar: 3135 3192 12 1 11 -1 6 +4+P7W`*gMk`*gMks5M6^&X/n\c@<^rVuou +BDFChar: 3137 3194 12 1 10 -1 8 +#64aS7R1BIF[.nd)usjVk5auO +BDFChar: 3138 3195 12 3 9 0 9 +-q&[d\q7eNK)P`M +BDFChar: 3139 3196 12 1 11 -2 8 +%KHh9)Z]Edb$_$5_+?7 +BDFChar: 3149 3206 6 0 6 -1 8 +K)S/iVLk\66oY/H +BDFChar: 3150 3207 12 1 11 -2 8 +*rmF65X:GSWh=kbJ09ss:-]qP*rl9@ +BDFChar: 3151 3208 12 1 11 -2 8 +*rmF65X>A-qr#)ZJ09ss:-]qP*rl9@ +BDFChar: 3152 3209 12 0 11 -2 9 +!,qt#"qV*6E1l,S,X?U)\H'AEMZE;J +BDFChar: 3153 3210 12 0 11 -2 9 +&-+]*I=V-TnaQG6T)]?$*rnBQEPN]I +BDFChar: 3154 3211 6 0 6 -2 7 +P5bI[rr.:m3"Q&i +BDFChar: 3155 3212 12 0 11 -1 8 +%fd/k.6o"@-:%(iM%Fjg5JTM! +BDFChar: 3156 3213 12 1 10 0 6 +J3]en^qa9,56,#?+TMKB +BDFChar: 3157 3214 12 1 11 -2 6 +i8C4M^S$(lDSUb;`*b>, + pub pending_cycles: usize, + cycle_count: usize, +} + +impl Cpu { + pub fn new(memory: Arc>) -> Self { + Cpu { + a: 0x00, + x: 0x00, + y: 0x00, + pc: 0x0000, + s: 0xFF, + p: 0b0010_0100, + irq: false, + nmi: false, + memory, + pending_cycles: 0, + cycle_count: 0, + } + } + pub fn reset(&mut self) -> Result<(), ExecutionError> { + let reset_vector_pointer = self.read_word(0xFFFC)?; + self.pending_cycles = 8; + self.pc = reset_vector_pointer; + Ok(()) + } + pub fn read(&self, address: Word) -> Result { + let memory = match self.memory.try_read() { + Ok(read) => read, + Err(_) => { + println!("Couldn't acquire read lock on memory in cpu thread"); + return Err(MemoryError::NoDataAtAddress); + } // TODO: upgrade this error type to a `GeorgeError` and make an errorkind for thread lock errors + }; + memory.read(address) + } + pub fn read_word(&self, address: Word) -> Result { + let low_byte = self.read(address)?; + let high_byte = self.read(address + 0x1)?; + Ok((high_byte as u16) << 8 | (low_byte as u16)) + } + + fn stack_addr(&self) -> Word { + // Dunno if this is necessary, i just don't like adding the 0x0100 every time + 0x0100 + self.s as u16 + } + + pub fn push_stack(&mut self, data: Byte) -> Result<(), ExecutionError> { + self.s -= 0x1; + self.write(self.stack_addr(), data)?; + Ok(()) + } + + pub fn push_stack_word(&mut self, address: Word) -> Result<(), ExecutionError> { + self.s -= 0x1; + self.write(self.stack_addr(), address.to_le_bytes()[1])?; // Upper byte first + self.s -= 0x1; + self.write(self.stack_addr(), address.to_le_bytes()[0])?; // Lower byte second + Ok(()) + } + + pub fn pop_stack(&mut self) -> Result { + let byte = self.read(self.stack_addr())?; + self.s += 0x1; + Ok(byte) + } + + pub fn pop_stack_word(&mut self) -> Result { + let low_byte = self.pop_stack()?; + let high_byte = self.pop_stack()?; + let word = ((high_byte as Word) << 8) + low_byte as u16; + Ok(word) + } + + pub fn set_flag(&mut self, flag: StatusFlag, value: bool) { + self.p &= !(flag as Byte); + if value { + self.p |= flag as Byte + } + } + + pub fn get_flag(&self, flag: StatusFlag) -> bool { + (self.p & flag as Byte) > 0 + } + pub fn is_negative(&self, value: Byte) -> bool { + value & 0b1000_0000 == 0b1000_0000 + } + + pub fn write(&mut self, address: Word, data: Byte) -> Result<(), MemoryError> { + let mut memory = match self.memory.write() { + Ok(write) => write, + Err(_) => { + println!("Couldn't acquire write lock on memory in cpu thread"); + return Err(MemoryError::NoDataAtAddress); + } // TODO: upgrade this error type to a `GeorgeError` and make an errorkind for thread lock errors + }; + memory.write(address, data)?; + Ok(()) + } + + pub fn execute(&mut self) { + self.cycle().unwrap(); + while self.pending_cycles != 0 { + self.cycle().unwrap(); + } + } + + pub fn wait_for_interrupt(&self) { + unimplemented!() + } + + // fn handle_interrupt(&mut self) -> Result<(), ExecutionError> { + // match self.get_flag(StatusFlag::IrqDisable) { + // // Check that interrupts aren't disabled + // true => Ok(self.execute()), + // false => { + // if self.irq { + // let irq_vector = 0xFFFE; + // match self.read_word(irq_vector) { + // Err(error) => Err(ExecutionError::MemoryError(error)), + // Ok(address) => { + // let isr_address = address; + // match self.read(isr_address) { + // Ok(_opcode) => Ok(self.execute()), + // Err(error) => Err(ExecutionError::MemoryError(error)), + // } + // } + // } + // } else { + // Ok(()) + // } + // } + // } + // } + pub fn cycle(&mut self) -> Result<(), GeorgeError> { + sleep(Duration::from_nanos(500)); + if self.pending_cycles == 0 { + if self.nmi || (self.irq && !self.get_flag(StatusFlag::IrqDisable)) { + let _ = self.push_stack_word(self.pc); + self.set_flag(StatusFlag::BrkIrq, true); + let _ = self.push_stack(self.p); + self.set_flag(StatusFlag::IrqDisable, true); + if self.nmi { + match self.read_word(0xFFFA) { + Ok(word) => self.pc = word, + Err(error) => { + return Err(GeorgeError { + kind: GeorgeErrorKind::Memory(error), + desc: String::from_str("Couldn't read NMI vector").unwrap(), + }) + } + }; + self.pending_cycles = 8; + } else { + match self.read_word(0xFFFE) { + Ok(word) => self.pc = word, + Err(error) => { + return Err(GeorgeError { + kind: GeorgeErrorKind::Memory(error), + desc: String::from_str("Couldn't read IRQ vector").unwrap(), + }) + } + }; + self.pending_cycles = 7 + } + self.nmi = false; + self.irq = false; + } + } else { + let opcode = match self.read(self.pc) { + Ok(byte) => byte, + Err(error) => { + return Err(GeorgeError { + desc: String::from_str("Failed to read the program counter!").unwrap(), + kind: GeorgeErrorKind::Memory(error), + }) + } + }; + let instruction = get_instruction(opcode); + match instruction { + Instruction::Valid(valid_instruction) => { + println!("Instruction: {:?}, {:?}", valid_instruction.opcode, opcode); + println!("a: {a:#04x}, x: {x:#04x}, y: {y:#04x}, pc: {pc:#06x}, sp: {s:#04x}, sr: {p:#010b}, irq: {irq:?}, nmi: {nmi:?}", a = self.a, x = self.x, y = self.y, pc = self.pc, s = self.s, p = self.p, irq = self.irq, nmi = self.nmi); + println!(""); + self.pc += 1; + match valid_instruction.opcode.call(self) { + Ok(_) => { + self.pending_cycles += valid_instruction.cycles as usize; + }, + Err(error) => return Err(GeorgeError{ + desc: format!("An IncompatibleAddrMode was used at address {:#06x} for instruction {:?}", + self.pc, valid_instruction).to_string(), kind: error}) + }; + } + Instruction::Invalid(invalid_instruction) => { + return Err(GeorgeError { + kind: GeorgeErrorKind::Execution(ExecutionError::InvalidInstruction), + desc: format!( + "An invalid instruction with opcode {:#04x} was called at address {:#06x}", + invalid_instruction.opcode, self.pc + ), + }) + } + } + } + self.pending_cycles -= 1; + self.cycle_count += 1; + Ok(()) + } + + pub fn stop(&mut self) { + unimplemented!() + } +} diff --git a/src/error.rs b/src/error.rs new file mode 100644 index 0000000..ffb15e4 --- /dev/null +++ b/src/error.rs @@ -0,0 +1,66 @@ +#[derive(Debug)] +pub enum GeorgeErrorKind { + Memory(MemoryError), + Execution(ExecutionError), + AddrMode(AddressingModeError), +} + +impl From for GeorgeErrorKind { + fn from(value: MemoryError) -> Self { + Self::Memory(value) + } +} +impl From for GeorgeErrorKind { + fn from(value: AddressingModeError) -> Self { + Self::AddrMode(value) + } +} +impl From for GeorgeErrorKind { + fn from(value: ExecutionError) -> Self { + Self::Execution(value) + } +} + +#[derive(Debug)] +pub enum ExecutionError { + InvalidInstruction, + InterruptsDisabled, + StackOverflow, + MemoryError(MemoryError), +} + +#[derive(Debug)] +pub enum AddressingModeError { + IncompatibleAddrMode, +} + +impl From for AddressingModeError { + fn from(_value: ExecutionError) -> Self { + Self::IncompatibleAddrMode + } +} + +impl From for ExecutionError { + fn from(error: MemoryError) -> Self { + ExecutionError::MemoryError(error) + } +} + +#[derive(Debug)] +pub struct GeorgeError { + pub desc: String, + pub kind: GeorgeErrorKind, +} + +#[derive(Debug)] +pub enum MemoryError { + Unmapped, + NoDataAtAddress, + Unwritable, +} + +#[derive(Debug)] +pub enum MappingError { + RegionOccupied, + InvalidPage, +} diff --git a/src/george b/src/george index dea6a22ad931bd5d2bea3d7453a695ab54db000e..b9b7bd4073056727abfb0e197b4e7ebfa78b5476 100644 GIT binary patch delta 29 kcmZo@U} Instruction { + let opcodes: HashMap = HashMap::from([ + ( + 0x00, + Instruction::Valid(ValidInstruction { + opcode: Opcode::BRK(AddressingMode::Implied), + cycles: 7, + }), + ), + ( + 0x01, + Instruction::Valid(ValidInstruction { + opcode: Opcode::ORA(AddressingMode::ZeroPageIndexedIndirect), + cycles: 6, + }), + ), + ( + 0x02, + Instruction::Invalid(InvalidInstruction { opcode: 0x02 }), + ), + ( + 0x03, + Instruction::Invalid(InvalidInstruction { opcode: 0x03 }), + ), + ( + 0x04, + Instruction::Valid(ValidInstruction { + opcode: Opcode::TSB(AddressingMode::ZeroPage), + cycles: 5, + }), + ), + ( + 0x05, + Instruction::Valid(ValidInstruction { + opcode: Opcode::ORA(AddressingMode::ZeroPage), + cycles: 3, + }), + ), + ( + 0x06, + Instruction::Valid(ValidInstruction { + opcode: Opcode::ASL(AddressingMode::ZeroPage), + cycles: 5, + }), + ), + ( + 0x07, + Instruction::Valid(ValidInstruction { + opcode: Opcode::RMB0(AddressingMode::ZeroPage), + cycles: 5, + }), + ), + ( + 0x08, + Instruction::Valid(ValidInstruction { + opcode: Opcode::PHP(AddressingMode::Stack), + cycles: 3, + }), + ), + ( + 0x09, + Instruction::Valid(ValidInstruction { + opcode: Opcode::ORA(AddressingMode::Immediate), + cycles: 2, + }), + ), + ( + 0x0a, + Instruction::Valid(ValidInstruction { + opcode: Opcode::ASL(AddressingMode::Accumulator), + cycles: 2, + }), + ), + ( + 0x0b, + Instruction::Invalid(InvalidInstruction { opcode: 0x0b }), + ), + ( + 0x0c, + Instruction::Valid(ValidInstruction { + opcode: Opcode::TSB(AddressingMode::AbsoluteA), + cycles: 6, + }), + ), + ( + 0x0d, + Instruction::Valid(ValidInstruction { + opcode: Opcode::ORA(AddressingMode::AbsoluteA), + cycles: 4, + }), + ), + ( + 0x0e, + Instruction::Valid(ValidInstruction { + opcode: Opcode::ASL(AddressingMode::AbsoluteA), + cycles: 6, + }), + ), + ( + 0x0f, + Instruction::Valid(ValidInstruction { + opcode: Opcode::BBR0(AddressingMode::ProgramCounterRelativeTest), + cycles: 4, + }), + ), + ( + 0x10, + Instruction::Valid(ValidInstruction { + opcode: Opcode::BPL(AddressingMode::ProgramCounterRelative), + cycles: 2, + }), + ), + ( + 0x11, + Instruction::Valid(ValidInstruction { + opcode: Opcode::ORA(AddressingMode::AbsoluteIndexedWithY), + cycles: 5, + }), + ), + ( + 0x12, + Instruction::Valid(ValidInstruction { + opcode: Opcode::ORA(AddressingMode::ZeroPageIndirect), + cycles: 5, + }), + ), + ( + 0x13, + Instruction::Invalid(InvalidInstruction { opcode: 0x13 }), + ), + ( + 0x14, + Instruction::Valid(ValidInstruction { + opcode: Opcode::TRB(AddressingMode::ZeroPage), + cycles: 5, + }), + ), + ( + 0x15, + Instruction::Valid(ValidInstruction { + opcode: Opcode::ORA(AddressingMode::ZeroPageIndexedWithX), + cycles: 4, + }), + ), + ( + 0x16, + Instruction::Valid(ValidInstruction { + opcode: Opcode::ASL(AddressingMode::ZeroPageIndexedWithX), + cycles: 6, + }), + ), + ( + 0x17, + Instruction::Valid(ValidInstruction { + opcode: Opcode::RMB1(AddressingMode::ZeroPage), + cycles: 5, + }), + ), + ( + 0x18, + Instruction::Valid(ValidInstruction { + opcode: Opcode::CLC(AddressingMode::Implied), + cycles: 2, + }), + ), + ( + 0x19, + Instruction::Valid(ValidInstruction { + opcode: Opcode::ORA(AddressingMode::AbsoluteIndexedWithY), + cycles: 4, + }), + ), + ( + 0x1a, + Instruction::Valid(ValidInstruction { + opcode: Opcode::INC(AddressingMode::Accumulator), + cycles: 2, + }), + ), + ( + 0x1b, + Instruction::Invalid(InvalidInstruction { opcode: 0x1b }), + ), + ( + 0x1c, + Instruction::Valid(ValidInstruction { + opcode: Opcode::TRB(AddressingMode::AbsoluteA), + cycles: 6, + }), + ), + ( + 0x1d, + Instruction::Valid(ValidInstruction { + opcode: Opcode::ORA(AddressingMode::AbsoluteIndexedWithX), + cycles: 4, + }), + ), + ( + 0x1e, + Instruction::Valid(ValidInstruction { + opcode: Opcode::ASL(AddressingMode::AbsoluteIndexedWithX), + cycles: 7, + }), + ), + ( + 0x1f, + Instruction::Valid(ValidInstruction { + opcode: Opcode::BBR1(AddressingMode::ProgramCounterRelativeTest), + cycles: 4, + }), + ), + ( + 0x20, + Instruction::Valid(ValidInstruction { + opcode: Opcode::JSR(AddressingMode::AbsoluteA), + cycles: 6, + }), + ), + ( + 0x21, + Instruction::Valid(ValidInstruction { + opcode: Opcode::AND(AddressingMode::ZeroPageIndexedIndirect), + cycles: 6, + }), + ), + ( + 0x22, + Instruction::Invalid(InvalidInstruction { opcode: 0x22 }), + ), + ( + 0x23, + Instruction::Invalid(InvalidInstruction { opcode: 0x23 }), + ), + ( + 0x24, + Instruction::Valid(ValidInstruction { + opcode: Opcode::BIT(AddressingMode::ZeroPage), + cycles: 3, + }), + ), + ( + 0x25, + Instruction::Valid(ValidInstruction { + opcode: Opcode::AND(AddressingMode::ZeroPage), + cycles: 3, + }), + ), + ( + 0x26, + Instruction::Valid(ValidInstruction { + opcode: Opcode::ROL(AddressingMode::ZeroPage), + cycles: 5, + }), + ), + ( + 0x27, + Instruction::Valid(ValidInstruction { + opcode: Opcode::RMB2(AddressingMode::ZeroPage), + cycles: 5, + }), + ), + ( + 0x28, + Instruction::Valid(ValidInstruction { + opcode: Opcode::PLP(AddressingMode::Stack), + cycles: 4, + }), + ), + ( + 0x29, + Instruction::Valid(ValidInstruction { + opcode: Opcode::AND(AddressingMode::Immediate), + cycles: 2, + }), + ), + ( + 0x2a, + Instruction::Valid(ValidInstruction { + opcode: Opcode::ROL(AddressingMode::Accumulator), + cycles: 2, + }), + ), + ( + 0x2b, + Instruction::Invalid(InvalidInstruction { opcode: 0x2b }), + ), + ( + 0x2c, + Instruction::Valid(ValidInstruction { + opcode: Opcode::BIT(AddressingMode::AbsoluteA), + cycles: 4, + }), + ), + ( + 0x2d, + Instruction::Valid(ValidInstruction { + opcode: Opcode::AND(AddressingMode::AbsoluteA), + cycles: 4, + }), + ), + ( + 0x2e, + Instruction::Valid(ValidInstruction { + opcode: Opcode::ROL(AddressingMode::AbsoluteA), + cycles: 6, + }), + ), + ( + 0x2f, + Instruction::Valid(ValidInstruction { + opcode: Opcode::BBR2(AddressingMode::ProgramCounterRelativeTest), + cycles: 4, + }), + ), + ( + 0x30, + Instruction::Valid(ValidInstruction { + opcode: Opcode::BMI(AddressingMode::ProgramCounterRelative), + cycles: 2, + }), + ), + ( + 0x31, + Instruction::Valid(ValidInstruction { + opcode: Opcode::AND(AddressingMode::ZeroPageIndirectIndexedWithY), + cycles: 5, + }), + ), + ( + 0x32, + Instruction::Valid(ValidInstruction { + opcode: Opcode::AND(AddressingMode::ZeroPageIndirect), + cycles: 5, + }), + ), + ( + 0x33, + Instruction::Invalid(InvalidInstruction { opcode: 0x33 }), + ), + ( + 0x34, + Instruction::Valid(ValidInstruction { + opcode: Opcode::BIT(AddressingMode::ZeroPageIndexedWithX), + cycles: 3, + }), + ), + ( + 0x35, + Instruction::Valid(ValidInstruction { + opcode: Opcode::AND(AddressingMode::ZeroPageIndexedWithX), + cycles: 4, + }), + ), + ( + 0x36, + Instruction::Valid(ValidInstruction { + opcode: Opcode::ROL(AddressingMode::ZeroPageIndexedWithX), + cycles: 6, + }), + ), + ( + 0x37, + Instruction::Valid(ValidInstruction { + opcode: Opcode::RMB3(AddressingMode::ZeroPage), + cycles: 5, + }), + ), + ( + 0x38, + Instruction::Valid(ValidInstruction { + opcode: Opcode::SEC(AddressingMode::Implied), + cycles: 2, + }), + ), + ( + 0x39, + Instruction::Valid(ValidInstruction { + opcode: Opcode::AND(AddressingMode::AbsoluteIndexedWithY), + cycles: 4, + }), + ), + ( + 0x3a, + Instruction::Valid(ValidInstruction { + opcode: Opcode::DEC(AddressingMode::Accumulator), + cycles: 2, + }), + ), + ( + 0x3b, + Instruction::Invalid(InvalidInstruction { opcode: 0x3b }), + ), + ( + 0x3c, + Instruction::Valid(ValidInstruction { + opcode: Opcode::BIT(AddressingMode::AbsoluteIndexedWithX), + cycles: 4, + }), + ), + ( + 0x3d, + Instruction::Valid(ValidInstruction { + opcode: Opcode::AND(AddressingMode::AbsoluteIndexedWithX), + cycles: 4, + }), + ), + ( + 0x3e, + Instruction::Valid(ValidInstruction { + opcode: Opcode::ROL(AddressingMode::AbsoluteIndexedWithX), + cycles: 7, + }), + ), + ( + 0x3f, + Instruction::Valid(ValidInstruction { + opcode: Opcode::BBR3(AddressingMode::ProgramCounterRelativeTest), + cycles: 4, + }), + ), + ( + 0x40, + Instruction::Valid(ValidInstruction { + opcode: Opcode::RTI(AddressingMode::Stack), + cycles: 6, + }), + ), + ( + 0x41, + Instruction::Valid(ValidInstruction { + opcode: Opcode::EOR(AddressingMode::ZeroPageIndexedIndirect), + cycles: 6, + }), + ), + ( + 0x42, + Instruction::Invalid(InvalidInstruction { opcode: 0x42 }), + ), + ( + 0x43, + Instruction::Invalid(InvalidInstruction { opcode: 0x43 }), + ), + ( + 0x44, + Instruction::Invalid(InvalidInstruction { opcode: 0x44 }), + ), + ( + 0x45, + Instruction::Valid(ValidInstruction { + opcode: Opcode::EOR(AddressingMode::ZeroPage), + cycles: 3, + }), + ), + ( + 0x46, + Instruction::Valid(ValidInstruction { + opcode: Opcode::LSR(AddressingMode::ZeroPage), + cycles: 5, + }), + ), + ( + 0x47, + Instruction::Valid(ValidInstruction { + opcode: Opcode::RMB4(AddressingMode::ZeroPage), + cycles: 5, + }), + ), + ( + 0x48, + Instruction::Valid(ValidInstruction { + opcode: Opcode::PHA(AddressingMode::Stack), + cycles: 3, + }), + ), + ( + 0x49, + Instruction::Valid(ValidInstruction { + opcode: Opcode::EOR(AddressingMode::Immediate), + cycles: 2, + }), + ), + ( + 0x4a, + Instruction::Valid(ValidInstruction { + opcode: Opcode::LSR(AddressingMode::Accumulator), + cycles: 2, + }), + ), + ( + 0x4b, + Instruction::Invalid(InvalidInstruction { opcode: 0x4b }), + ), + ( + 0x4c, + Instruction::Valid(ValidInstruction { + opcode: Opcode::JMP(AddressingMode::AbsoluteA), + cycles: 3, + }), + ), + ( + 0x4d, + Instruction::Valid(ValidInstruction { + opcode: Opcode::EOR(AddressingMode::AbsoluteA), + cycles: 4, + }), + ), + ( + 0x4e, + Instruction::Valid(ValidInstruction { + opcode: Opcode::LSR(AddressingMode::AbsoluteA), + cycles: 6, + }), + ), + ( + 0x4f, + Instruction::Valid(ValidInstruction { + opcode: Opcode::BBR4(AddressingMode::ProgramCounterRelativeTest), + cycles: 4, + }), + ), + ( + 0x50, + Instruction::Valid(ValidInstruction { + opcode: Opcode::BVC(AddressingMode::ProgramCounterRelative), + cycles: 2, + }), + ), + ( + 0x51, + Instruction::Valid(ValidInstruction { + opcode: Opcode::EOR(AddressingMode::ZeroPageIndirectIndexedWithY), + cycles: 5, + }), + ), + ( + 0x52, + Instruction::Valid(ValidInstruction { + opcode: Opcode::EOR(AddressingMode::ZeroPageIndirect), + cycles: 5, + }), + ), + ( + 0x53, + Instruction::Invalid(InvalidInstruction { opcode: 0x53 }), + ), + ( + 0x54, + Instruction::Invalid(InvalidInstruction { opcode: 0x54 }), + ), + ( + 0x55, + Instruction::Valid(ValidInstruction { + opcode: Opcode::EOR(AddressingMode::ZeroPageIndexedWithX), + cycles: 4, + }), + ), + ( + 0x56, + Instruction::Valid(ValidInstruction { + opcode: Opcode::LSR(AddressingMode::ZeroPageIndexedWithX), + cycles: 6, + }), + ), + ( + 0x57, + Instruction::Valid(ValidInstruction { + opcode: Opcode::RMB5(AddressingMode::ZeroPage), + cycles: 5, + }), + ), + ( + 0x58, + Instruction::Valid(ValidInstruction { + opcode: Opcode::CLI(AddressingMode::Implied), + cycles: 2, + }), + ), + ( + 0x59, + Instruction::Valid(ValidInstruction { + opcode: Opcode::EOR(AddressingMode::AbsoluteIndexedWithY), + cycles: 4, + }), + ), + ( + 0x5a, + Instruction::Valid(ValidInstruction { + opcode: Opcode::PHY(AddressingMode::Stack), + cycles: 3, + }), + ), + ( + 0x5b, + Instruction::Invalid(InvalidInstruction { opcode: 0x5b }), + ), + ( + 0x5c, + Instruction::Invalid(InvalidInstruction { opcode: 0x5c }), + ), + ( + 0x5d, + Instruction::Valid(ValidInstruction { + opcode: Opcode::EOR(AddressingMode::AbsoluteIndexedWithX), + cycles: 4, + }), + ), + ( + 0x5e, + Instruction::Valid(ValidInstruction { + opcode: Opcode::LSR(AddressingMode::AbsoluteIndexedWithX), + cycles: 7, + }), + ), + ( + 0x5f, + Instruction::Valid(ValidInstruction { + opcode: Opcode::BBR5(AddressingMode::ProgramCounterRelativeTest), + cycles: 4, + }), + ), + ( + 0x60, + Instruction::Valid(ValidInstruction { + opcode: Opcode::RTS(AddressingMode::Stack), + cycles: 6, + }), + ), + ( + 0x61, + Instruction::Valid(ValidInstruction { + opcode: Opcode::ADC(AddressingMode::ZeroPageIndexedIndirect), + cycles: 6, + }), + ), + ( + 0x62, + Instruction::Invalid(InvalidInstruction { opcode: 0x62 }), + ), + ( + 0x63, + Instruction::Invalid(InvalidInstruction { opcode: 0x63 }), + ), + ( + 0x64, + Instruction::Valid(ValidInstruction { + opcode: Opcode::STZ(AddressingMode::ZeroPage), + cycles: 3, + }), + ), + ( + 0x65, + Instruction::Valid(ValidInstruction { + opcode: Opcode::ADC(AddressingMode::ZeroPage), + cycles: 3, + }), + ), + ( + 0x66, + Instruction::Valid(ValidInstruction { + opcode: Opcode::ROR(AddressingMode::ZeroPage), + cycles: 5, + }), + ), + ( + 0x67, + Instruction::Valid(ValidInstruction { + opcode: Opcode::RMB6(AddressingMode::ZeroPage), + cycles: 5, + }), + ), + ( + 0x68, + Instruction::Valid(ValidInstruction { + opcode: Opcode::PLA(AddressingMode::Stack), + cycles: 4, + }), + ), + ( + 0x69, + Instruction::Valid(ValidInstruction { + opcode: Opcode::ADC(AddressingMode::Immediate), + cycles: 2, + }), + ), + ( + 0x6a, + Instruction::Valid(ValidInstruction { + opcode: Opcode::ROR(AddressingMode::Accumulator), + cycles: 2, + }), + ), + ( + 0x6b, + Instruction::Invalid(InvalidInstruction { opcode: 0x6b }), + ), + ( + 0x6c, + Instruction::Valid(ValidInstruction { + opcode: Opcode::JMP(AddressingMode::AbsoluteIndirect), + cycles: 5, + }), + ), + ( + 0x6d, + Instruction::Valid(ValidInstruction { + opcode: Opcode::ADC(AddressingMode::AbsoluteA), + cycles: 4, + }), + ), + ( + 0x6e, + Instruction::Valid(ValidInstruction { + opcode: Opcode::ROR(AddressingMode::AbsoluteA), + cycles: 6, + }), + ), + ( + 0x6f, + Instruction::Valid(ValidInstruction { + opcode: Opcode::BBR6(AddressingMode::ProgramCounterRelativeTest), + cycles: 4, + }), + ), + ( + 0x70, + Instruction::Valid(ValidInstruction { + opcode: Opcode::BVS(AddressingMode::ProgramCounterRelative), + cycles: 2, + }), + ), + ( + 0x71, + Instruction::Valid(ValidInstruction { + opcode: Opcode::ADC(AddressingMode::ZeroPageIndirectIndexedWithY), + cycles: 5, + }), + ), + ( + 0x72, + Instruction::Valid(ValidInstruction { + opcode: Opcode::ADC(AddressingMode::ZeroPageIndirect), + cycles: 5, + }), + ), + ( + 0x73, + Instruction::Invalid(InvalidInstruction { opcode: 0x73 }), + ), + ( + 0x74, + Instruction::Valid(ValidInstruction { + opcode: Opcode::STZ(AddressingMode::ZeroPageIndexedWithX), + cycles: 4, + }), + ), + ( + 0x75, + Instruction::Valid(ValidInstruction { + opcode: Opcode::ADC(AddressingMode::ZeroPageIndexedWithX), + cycles: 4, + }), + ), + ( + 0x76, + Instruction::Valid(ValidInstruction { + opcode: Opcode::ROR(AddressingMode::ZeroPageIndexedWithX), + cycles: 6, + }), + ), + ( + 0x77, + Instruction::Valid(ValidInstruction { + opcode: Opcode::RMB7(AddressingMode::ZeroPage), + cycles: 5, + }), + ), + ( + 0x78, + Instruction::Valid(ValidInstruction { + opcode: Opcode::SEI(AddressingMode::Implied), + cycles: 2, + }), + ), + ( + 0x79, + Instruction::Valid(ValidInstruction { + opcode: Opcode::ADC(AddressingMode::AbsoluteIndexedWithY), + cycles: 4, + }), + ), + ( + 0x7a, + Instruction::Valid(ValidInstruction { + opcode: Opcode::PLY(AddressingMode::Stack), + cycles: 4, + }), + ), + ( + 0x7b, + Instruction::Invalid(InvalidInstruction { opcode: 0x7b }), + ), + ( + 0x7c, + Instruction::Valid(ValidInstruction { + opcode: Opcode::JMP(AddressingMode::AbsoluteIndexedIndirect), + cycles: 6, + }), + ), + ( + 0x7d, + Instruction::Valid(ValidInstruction { + opcode: Opcode::ADC(AddressingMode::AbsoluteIndexedWithX), + cycles: 4, + }), + ), + ( + 0x7e, + Instruction::Valid(ValidInstruction { + opcode: Opcode::ROR(AddressingMode::AbsoluteIndexedWithX), + cycles: 7, + }), + ), + ( + 0x7f, + Instruction::Valid(ValidInstruction { + opcode: Opcode::BBR7(AddressingMode::ProgramCounterRelativeTest), + cycles: 4, + }), + ), + ( + 0x80, + Instruction::Valid(ValidInstruction { + opcode: Opcode::BRA(AddressingMode::ProgramCounterRelative), + cycles: 3, + }), + ), + ( + 0x81, + Instruction::Valid(ValidInstruction { + opcode: Opcode::STA(AddressingMode::ZeroPageIndexedIndirect), + cycles: 6, + }), + ), + ( + 0x82, + Instruction::Invalid(InvalidInstruction { opcode: 0x82 }), + ), + ( + 0x83, + Instruction::Invalid(InvalidInstruction { opcode: 0x83 }), + ), + ( + 0x84, + Instruction::Valid(ValidInstruction { + opcode: Opcode::STY(AddressingMode::ZeroPage), + cycles: 3, + }), + ), + ( + 0x85, + Instruction::Valid(ValidInstruction { + opcode: Opcode::STA(AddressingMode::ZeroPage), + cycles: 3, + }), + ), + ( + 0x86, + Instruction::Valid(ValidInstruction { + opcode: Opcode::STX(AddressingMode::ZeroPage), + cycles: 3, + }), + ), + ( + 0x87, + Instruction::Valid(ValidInstruction { + opcode: Opcode::SMB0(AddressingMode::ZeroPage), + cycles: 5, + }), + ), + ( + 0x88, + Instruction::Valid(ValidInstruction { + opcode: Opcode::DEY(AddressingMode::Implied), + cycles: 2, + }), + ), + ( + 0x89, + Instruction::Valid(ValidInstruction { + opcode: Opcode::BIT(AddressingMode::Immediate), + cycles: 3, + }), + ), + ( + 0x8a, + Instruction::Valid(ValidInstruction { + opcode: Opcode::TXA(AddressingMode::Implied), + cycles: 2, + }), + ), + ( + 0x8b, + Instruction::Invalid(InvalidInstruction { opcode: 0x8b }), + ), + ( + 0x8c, + Instruction::Valid(ValidInstruction { + opcode: Opcode::STY(AddressingMode::AbsoluteA), + cycles: 4, + }), + ), + ( + 0x8d, + Instruction::Valid(ValidInstruction { + opcode: Opcode::STA(AddressingMode::AbsoluteA), + cycles: 4, + }), + ), + ( + 0x8e, + Instruction::Valid(ValidInstruction { + opcode: Opcode::STX(AddressingMode::AbsoluteA), + cycles: 4, + }), + ), + ( + 0x8f, + Instruction::Valid(ValidInstruction { + opcode: Opcode::BBS0(AddressingMode::ProgramCounterRelativeTest), + cycles: 4, + }), + ), + ( + 0x90, + Instruction::Valid(ValidInstruction { + opcode: Opcode::BCC(AddressingMode::ProgramCounterRelative), + cycles: 2, + }), + ), + ( + 0x91, + Instruction::Valid(ValidInstruction { + opcode: Opcode::STA(AddressingMode::ZeroPageIndirectIndexedWithY), + cycles: 6, + }), + ), + ( + 0x92, + Instruction::Valid(ValidInstruction { + opcode: Opcode::STA(AddressingMode::ZeroPageIndirect), + cycles: 5, + }), + ), + ( + 0x93, + Instruction::Invalid(InvalidInstruction { opcode: 0x93 }), + ), + ( + 0x94, + Instruction::Valid(ValidInstruction { + opcode: Opcode::STY(AddressingMode::ZeroPageIndexedWithX), + cycles: 4, + }), + ), + ( + 0x95, + Instruction::Valid(ValidInstruction { + opcode: Opcode::STA(AddressingMode::ZeroPageIndexedWithX), + cycles: 4, + }), + ), + ( + 0x96, + Instruction::Valid(ValidInstruction { + opcode: Opcode::STX(AddressingMode::ZeroPageIndexedWithY), + cycles: 4, + }), + ), + ( + 0x97, + Instruction::Valid(ValidInstruction { + opcode: Opcode::SMB1(AddressingMode::ZeroPage), + cycles: 5, + }), + ), + ( + 0x98, + Instruction::Valid(ValidInstruction { + opcode: Opcode::TYA(AddressingMode::Implied), + cycles: 2, + }), + ), + ( + 0x99, + Instruction::Valid(ValidInstruction { + opcode: Opcode::STA(AddressingMode::AbsoluteIndexedWithY), + cycles: 5, + }), + ), + ( + 0x9a, + Instruction::Valid(ValidInstruction { + opcode: Opcode::TXS(AddressingMode::Implied), + cycles: 2, + }), + ), + ( + 0x9b, + Instruction::Invalid(InvalidInstruction { opcode: 0x9b }), + ), + ( + 0x9c, + Instruction::Valid(ValidInstruction { + opcode: Opcode::STZ(AddressingMode::AbsoluteA), + cycles: 4, + }), + ), + ( + 0x9d, + Instruction::Valid(ValidInstruction { + opcode: Opcode::STA(AddressingMode::AbsoluteIndexedWithX), + cycles: 5, + }), + ), + ( + 0x9e, + Instruction::Valid(ValidInstruction { + opcode: Opcode::STZ(AddressingMode::AbsoluteIndexedWithX), + cycles: 5, + }), + ), + ( + 0x9f, + Instruction::Valid(ValidInstruction { + opcode: Opcode::BBS1(AddressingMode::ProgramCounterRelativeTest), + cycles: 4, + }), + ), + ( + 0xa0, + Instruction::Valid(ValidInstruction { + opcode: Opcode::LDY(AddressingMode::Immediate), + cycles: 2, + }), + ), + ( + 0xa1, + Instruction::Valid(ValidInstruction { + opcode: Opcode::LDA(AddressingMode::ZeroPageIndexedIndirect), + cycles: 6, + }), + ), + ( + 0xa2, + Instruction::Valid(ValidInstruction { + opcode: Opcode::LDX(AddressingMode::Immediate), + cycles: 2, + }), + ), + ( + 0xa3, + Instruction::Invalid(InvalidInstruction { opcode: 0xa3 }), + ), + ( + 0xa4, + Instruction::Valid(ValidInstruction { + opcode: Opcode::LDY(AddressingMode::ZeroPage), + cycles: 3, + }), + ), + ( + 0xa5, + Instruction::Valid(ValidInstruction { + opcode: Opcode::LDA(AddressingMode::ZeroPage), + cycles: 3, + }), + ), + ( + 0xa6, + Instruction::Valid(ValidInstruction { + opcode: Opcode::LDX(AddressingMode::ZeroPage), + cycles: 3, + }), + ), + ( + 0xa7, + Instruction::Valid(ValidInstruction { + opcode: Opcode::SMB2(AddressingMode::ZeroPage), + cycles: 5, + }), + ), + ( + 0xa8, + Instruction::Valid(ValidInstruction { + opcode: Opcode::TAY(AddressingMode::Implied), + cycles: 2, + }), + ), + ( + 0xa9, + Instruction::Valid(ValidInstruction { + opcode: Opcode::LDA(AddressingMode::Immediate), + cycles: 2, + }), + ), + ( + 0xaa, + Instruction::Valid(ValidInstruction { + opcode: Opcode::TAX(AddressingMode::Implied), + cycles: 2, + }), + ), + ( + 0xab, + Instruction::Invalid(InvalidInstruction { opcode: 0xab }), + ), + ( + 0xac, + Instruction::Valid(ValidInstruction { + opcode: Opcode::LDY(AddressingMode::AbsoluteA), + cycles: 4, + }), + ), + ( + 0xad, + Instruction::Valid(ValidInstruction { + opcode: Opcode::LDA(AddressingMode::AbsoluteA), + cycles: 4, + }), + ), + ( + 0xae, + Instruction::Valid(ValidInstruction { + opcode: Opcode::LDX(AddressingMode::AbsoluteA), + cycles: 4, + }), + ), + ( + 0xaf, + Instruction::Valid(ValidInstruction { + opcode: Opcode::BBS2(AddressingMode::ProgramCounterRelativeTest), + cycles: 4, + }), + ), + ( + 0xb0, + Instruction::Valid(ValidInstruction { + opcode: Opcode::BCS(AddressingMode::ProgramCounterRelative), + cycles: 2, + }), + ), + ( + 0xb1, + Instruction::Valid(ValidInstruction { + opcode: Opcode::LDA(AddressingMode::ZeroPageIndirectIndexedWithY), + cycles: 5, + }), + ), + ( + 0xb2, + Instruction::Valid(ValidInstruction { + opcode: Opcode::LDA(AddressingMode::ZeroPageIndirect), + cycles: 5, // Unsure, see https://cx16.dk/65c02/reference.html#LDA + }), + ), + ( + 0xb3, + Instruction::Invalid(InvalidInstruction { opcode: 0xb3 }), + ), + ( + 0xb4, + Instruction::Valid(ValidInstruction { + opcode: Opcode::LDY(AddressingMode::ZeroPageIndexedWithX), + cycles: 4, + }), + ), + ( + 0xb5, + Instruction::Valid(ValidInstruction { + opcode: Opcode::LDA(AddressingMode::ZeroPageIndexedWithX), + cycles: 4, + }), + ), + ( + 0xb6, + Instruction::Valid(ValidInstruction { + opcode: Opcode::LDX(AddressingMode::ZeroPageIndexedWithY), + cycles: 4, + }), + ), + ( + 0xb7, + Instruction::Valid(ValidInstruction { + opcode: Opcode::SMB3(AddressingMode::ZeroPage), + cycles: 5, + }), + ), + ( + 0xb8, + Instruction::Valid(ValidInstruction { + opcode: Opcode::CLV(AddressingMode::Implied), + cycles: 2, + }), + ), + ( + 0xb9, + Instruction::Valid(ValidInstruction { + opcode: Opcode::LDA(AddressingMode::AbsoluteIndexedWithY), + cycles: 4, + }), + ), + ( + 0xba, + Instruction::Valid(ValidInstruction { + opcode: Opcode::TSX(AddressingMode::Implied), + cycles: 2, + }), + ), + ( + 0xbb, + Instruction::Invalid(InvalidInstruction { opcode: 0xbb }), + ), + ( + 0xbc, + Instruction::Valid(ValidInstruction { + opcode: Opcode::LDY(AddressingMode::AbsoluteIndexedWithX), + cycles: 4, + }), + ), + ( + 0xbd, + Instruction::Valid(ValidInstruction { + opcode: Opcode::LDA(AddressingMode::AbsoluteIndexedWithX), + cycles: 4, + }), + ), + ( + 0xbe, + Instruction::Valid(ValidInstruction { + opcode: Opcode::LDX(AddressingMode::AbsoluteIndexedWithY), + cycles: 4, + }), + ), + ( + 0xbf, + Instruction::Valid(ValidInstruction { + opcode: Opcode::BBS3(AddressingMode::ProgramCounterRelativeTest), + cycles: 4, + }), + ), + ( + 0xc0, + Instruction::Valid(ValidInstruction { + opcode: Opcode::CPY(AddressingMode::Immediate), + cycles: 2, + }), + ), + ( + 0xc1, + Instruction::Valid(ValidInstruction { + opcode: Opcode::CMP(AddressingMode::ZeroPageIndexedIndirect), + cycles: 6, + }), + ), + ( + 0xc2, + Instruction::Invalid(InvalidInstruction { opcode: 0xc2 }), + ), + ( + 0xc3, + Instruction::Invalid(InvalidInstruction { opcode: 0xc3 }), + ), + ( + 0xc4, + Instruction::Valid(ValidInstruction { + opcode: Opcode::CPY(AddressingMode::ZeroPage), + cycles: 3, + }), + ), + ( + 0xc5, + Instruction::Valid(ValidInstruction { + opcode: Opcode::CMP(AddressingMode::ZeroPage), + cycles: 3, + }), + ), + ( + 0xc6, + Instruction::Valid(ValidInstruction { + opcode: Opcode::DEC(AddressingMode::ZeroPage), + cycles: 5, + }), + ), + ( + 0xc7, + Instruction::Valid(ValidInstruction { + opcode: Opcode::SMB4(AddressingMode::ZeroPage), + cycles: 5, + }), + ), + ( + 0xc8, + Instruction::Valid(ValidInstruction { + opcode: Opcode::INY(AddressingMode::Implied), + cycles: 2, + }), + ), + ( + 0xc9, + Instruction::Valid(ValidInstruction { + opcode: Opcode::CMP(AddressingMode::Immediate), + cycles: 2, + }), + ), + ( + 0xca, + Instruction::Valid(ValidInstruction { + opcode: Opcode::DEX(AddressingMode::Implied), + cycles: 2, + }), + ), + ( + 0xcb, + Instruction::Valid(ValidInstruction { + opcode: Opcode::WAI(AddressingMode::Implied), + cycles: 3, + }), + ), + ( + 0xcc, + Instruction::Valid(ValidInstruction { + opcode: Opcode::CPY(AddressingMode::AbsoluteA), + cycles: 4, + }), + ), + ( + 0xcd, + Instruction::Valid(ValidInstruction { + opcode: Opcode::CMP(AddressingMode::AbsoluteA), + cycles: 4, + }), + ), + ( + 0xce, + Instruction::Valid(ValidInstruction { + opcode: Opcode::DEC(AddressingMode::AbsoluteA), + cycles: 6, + }), + ), + ( + 0xcf, + Instruction::Valid(ValidInstruction { + opcode: Opcode::BBS4(AddressingMode::ProgramCounterRelativeTest), + cycles: 4, + }), + ), + ( + 0xd0, + Instruction::Valid(ValidInstruction { + opcode: Opcode::BNE(AddressingMode::ProgramCounterRelative), + cycles: 2, + }), + ), + ( + 0xd1, + Instruction::Valid(ValidInstruction { + opcode: Opcode::CMP(AddressingMode::ZeroPageIndirectIndexedWithY), + cycles: 5, + }), + ), + ( + 0xd2, + Instruction::Valid(ValidInstruction { + opcode: Opcode::CMP(AddressingMode::ZeroPageIndirect), + cycles: 5, // Unsure, look here: https://cx16.dk/65c02/reference.html#CMP + }), + ), + ( + 0xd3, + Instruction::Invalid(InvalidInstruction { opcode: 0xd3 }), + ), + ( + 0xd4, + Instruction::Invalid(InvalidInstruction { opcode: 0xd4 }), + ), + ( + 0xd5, + Instruction::Valid(ValidInstruction { + opcode: Opcode::CMP(AddressingMode::ZeroPageIndexedWithX), + cycles: 4, + }), + ), + ( + 0xd6, + Instruction::Valid(ValidInstruction { + opcode: Opcode::DEC(AddressingMode::ZeroPageIndexedWithX), + cycles: 6, + }), + ), + ( + 0xd7, + Instruction::Valid(ValidInstruction { + opcode: Opcode::SMB5(AddressingMode::ZeroPage), + cycles: 5, + }), + ), + ( + 0xd8, + Instruction::Valid(ValidInstruction { + opcode: Opcode::CLD(AddressingMode::Implied), + cycles: 2, + }), + ), + ( + 0xd9, + Instruction::Valid(ValidInstruction { + opcode: Opcode::CMP(AddressingMode::AbsoluteIndexedWithY), + cycles: 4, + }), + ), + ( + 0xda, + Instruction::Valid(ValidInstruction { + opcode: Opcode::PHX(AddressingMode::Stack), + cycles: 3, + }), + ), + ( + 0xdb, + Instruction::Valid(ValidInstruction { + opcode: Opcode::STP(AddressingMode::Implied), + cycles: 3, + }), + ), + ( + 0xdc, + Instruction::Invalid(InvalidInstruction { opcode: 0xdc }), + ), + ( + 0xdd, + Instruction::Valid(ValidInstruction { + opcode: Opcode::CMP(AddressingMode::AbsoluteIndexedWithX), + cycles: 4, + }), + ), + ( + 0xde, + Instruction::Valid(ValidInstruction { + opcode: Opcode::DEC(AddressingMode::AbsoluteIndexedWithX), + cycles: 7, + }), + ), + ( + 0xdf, + Instruction::Valid(ValidInstruction { + opcode: Opcode::BBS5(AddressingMode::ProgramCounterRelativeTest), + cycles: 4, + }), + ), + ( + 0xe0, + Instruction::Valid(ValidInstruction { + opcode: Opcode::CPX(AddressingMode::Immediate), + cycles: 2, + }), + ), + ( + 0xe1, + Instruction::Valid(ValidInstruction { + opcode: Opcode::SBC(AddressingMode::ZeroPageIndexedIndirect), + cycles: 6, + }), + ), + ( + 0xe2, + Instruction::Invalid(InvalidInstruction { opcode: 0xe2 }), + ), + ( + 0xe3, + Instruction::Invalid(InvalidInstruction { opcode: 0xe3 }), + ), + ( + 0xe4, + Instruction::Valid(ValidInstruction { + opcode: Opcode::CPX(AddressingMode::ZeroPage), + cycles: 3, + }), + ), + ( + 0xe5, + Instruction::Valid(ValidInstruction { + opcode: Opcode::SBC(AddressingMode::ZeroPage), + cycles: 3, + }), + ), + ( + 0xe6, + Instruction::Valid(ValidInstruction { + opcode: Opcode::INC(AddressingMode::ZeroPage), + cycles: 5, + }), + ), + ( + 0xe7, + Instruction::Valid(ValidInstruction { + opcode: Opcode::SMB6(AddressingMode::ZeroPage), + cycles: 5, + }), + ), + ( + 0xe8, + Instruction::Valid(ValidInstruction { + opcode: Opcode::INX(AddressingMode::Implied), + cycles: 2, + }), + ), + ( + 0xe9, + Instruction::Valid(ValidInstruction { + opcode: Opcode::SBC(AddressingMode::Immediate), + cycles: 2, + }), + ), + ( + 0xea, + Instruction::Valid(ValidInstruction { + opcode: Opcode::NOP(AddressingMode::Implied), + cycles: 2, + }), + ), + ( + 0xeb, + Instruction::Invalid(InvalidInstruction { opcode: 0xeb }), + ), + ( + 0xec, + Instruction::Valid(ValidInstruction { + opcode: Opcode::CPX(AddressingMode::AbsoluteA), + cycles: 4, + }), + ), + ( + 0xed, + Instruction::Valid(ValidInstruction { + opcode: Opcode::SBC(AddressingMode::AbsoluteA), + cycles: 4, + }), + ), + ( + 0xee, + Instruction::Valid(ValidInstruction { + opcode: Opcode::INC(AddressingMode::AbsoluteA), + cycles: 6, + }), + ), + ( + 0xef, + Instruction::Valid(ValidInstruction { + opcode: Opcode::BBS6(AddressingMode::ProgramCounterRelativeTest), + cycles: 4, + }), + ), + ( + 0xf0, + Instruction::Valid(ValidInstruction { + opcode: Opcode::BEQ(AddressingMode::ProgramCounterRelative), + cycles: 2, + }), + ), + ( + 0xf1, + Instruction::Valid(ValidInstruction { + opcode: Opcode::SBC(AddressingMode::ZeroPageIndirectIndexedWithY), + cycles: 5, + }), + ), + ( + 0xf2, + Instruction::Valid(ValidInstruction { + opcode: Opcode::SBC(AddressingMode::ZeroPageIndirect), + cycles: 5, + }), + ), + ( + 0xf3, + Instruction::Invalid(InvalidInstruction { opcode: 0xf3 }), + ), + ( + 0xf4, + Instruction::Invalid(InvalidInstruction { opcode: 0xf4 }), + ), + ( + 0xf5, + Instruction::Valid(ValidInstruction { + opcode: Opcode::SBC(AddressingMode::ZeroPageIndexedWithX), + cycles: 4, + }), + ), + ( + 0xf6, + Instruction::Valid(ValidInstruction { + opcode: Opcode::INC(AddressingMode::ZeroPageIndexedWithX), + cycles: 6, + }), + ), + ( + 0xf7, + Instruction::Valid(ValidInstruction { + opcode: Opcode::SMB7(AddressingMode::ZeroPage), + cycles: 5, + }), + ), + ( + 0xf8, + Instruction::Valid(ValidInstruction { + opcode: Opcode::SED(AddressingMode::Implied), + cycles: 2, + }), + ), + ( + 0xf9, + Instruction::Valid(ValidInstruction { + opcode: Opcode::SBC(AddressingMode::AbsoluteIndexedWithY), + cycles: 4, + }), + ), + ( + 0xfa, + Instruction::Valid(ValidInstruction { + opcode: Opcode::PLX(AddressingMode::Stack), + cycles: 4, + }), + ), + ( + 0xfb, + Instruction::Invalid(InvalidInstruction { opcode: 0xfb }), + ), + ( + 0xfc, + Instruction::Invalid(InvalidInstruction { opcode: 0xfc }), + ), + ( + 0xfd, + Instruction::Valid(ValidInstruction { + opcode: Opcode::SBC(AddressingMode::AbsoluteIndexedWithX), + cycles: 4, + }), + ), + ( + 0xfe, + Instruction::Valid(ValidInstruction { + opcode: Opcode::INC(AddressingMode::AbsoluteIndexedWithX), + cycles: 7, + }), + ), + ( + 0xff, + Instruction::Valid(ValidInstruction { + opcode: Opcode::BBS7(AddressingMode::ProgramCounterRelativeTest), + cycles: 4, + }), + ), + ]); + opcodes.get(&opcode).unwrap().clone() +} + +#[derive(Clone, Debug)] +pub enum Opcode { + ADC(AddressingMode), + AND(AddressingMode), + ASL(AddressingMode), + BBR0(AddressingMode), + BBR1(AddressingMode), + BBR2(AddressingMode), + BBR3(AddressingMode), + BBR4(AddressingMode), + BBR5(AddressingMode), + BBR6(AddressingMode), + BBR7(AddressingMode), + BBS0(AddressingMode), + BBS1(AddressingMode), + BBS2(AddressingMode), + BBS3(AddressingMode), + BBS4(AddressingMode), + BBS5(AddressingMode), + BBS6(AddressingMode), + BBS7(AddressingMode), + BCC(AddressingMode), + BCS(AddressingMode), + BEQ(AddressingMode), + BIT(AddressingMode), + BMI(AddressingMode), + BNE(AddressingMode), + BPL(AddressingMode), + BRA(AddressingMode), + BRK(AddressingMode), + BVC(AddressingMode), + BVS(AddressingMode), + CLC(AddressingMode), + CLD(AddressingMode), + CLI(AddressingMode), + CLV(AddressingMode), + CMP(AddressingMode), + CPX(AddressingMode), + CPY(AddressingMode), + DEC(AddressingMode), + DEX(AddressingMode), + DEY(AddressingMode), + EOR(AddressingMode), + INC(AddressingMode), + INX(AddressingMode), + INY(AddressingMode), + JMP(AddressingMode), + JSR(AddressingMode), + LDA(AddressingMode), + LDX(AddressingMode), + LDY(AddressingMode), + LSR(AddressingMode), + NOP(AddressingMode), + ORA(AddressingMode), + PHA(AddressingMode), + PHP(AddressingMode), + PHX(AddressingMode), + PHY(AddressingMode), + PLA(AddressingMode), + PLP(AddressingMode), + PLX(AddressingMode), + PLY(AddressingMode), + RMB0(AddressingMode), + RMB1(AddressingMode), + RMB2(AddressingMode), + RMB3(AddressingMode), + RMB4(AddressingMode), + RMB5(AddressingMode), + RMB6(AddressingMode), + RMB7(AddressingMode), + ROL(AddressingMode), + ROR(AddressingMode), + RTI(AddressingMode), + RTS(AddressingMode), + SBC(AddressingMode), + SEC(AddressingMode), + SED(AddressingMode), + SEI(AddressingMode), + SMB0(AddressingMode), + SMB1(AddressingMode), + SMB2(AddressingMode), + SMB3(AddressingMode), + SMB4(AddressingMode), + SMB5(AddressingMode), + SMB6(AddressingMode), + SMB7(AddressingMode), + STA(AddressingMode), + STP(AddressingMode), + STX(AddressingMode), + STY(AddressingMode), + STZ(AddressingMode), + TAX(AddressingMode), + TAY(AddressingMode), + TRB(AddressingMode), + TSB(AddressingMode), + TSX(AddressingMode), + TXA(AddressingMode), + TXS(AddressingMode), + TYA(AddressingMode), + WAI(AddressingMode), +} + +#[derive(Clone, Copy)] +enum AddressingModeValue { + Implied, // Used when an instruction doesn't need an operation, e.g. RTS + Relative(Byte), // Used by branch instructions to offset the program counter + RelativeTest(Byte, Byte), // Used by branch instructions to offset the program counter + Absolute(Word), // Just a plain ol' address + Accumulator(Byte), // This isn't technically accurate, since the datasheet says this would be + // Implied, but we do use the value of the accumulator as the operand so this + // is how i'm gonna do it +} + +impl TryFrom for Word { + type Error = AddressingModeError; + fn try_from(value: AddressingModeValue) -> Result { + match value { + AddressingModeValue::Implied => Err(AddressingModeError::IncompatibleAddrMode), + AddressingModeValue::RelativeTest(_zero_page, offset) => Ok(offset as Word), + AddressingModeValue::Relative(inner_value) => Ok(inner_value as Word), + AddressingModeValue::Absolute(inner_value) => Ok(inner_value), + AddressingModeValue::Accumulator(inner_value) => Ok(inner_value as Word), + } + } +} + +fn get_address( + mode: &AddressingMode, + cpu: &mut Cpu, +) -> Result { + fn accumulator(cpu: &mut Cpu) -> AddressingModeValue { + let byte = cpu.a; + AddressingModeValue::Accumulator(byte) + } + + fn implied(_cpu: &mut Cpu) -> AddressingModeValue { + // i + AddressingModeValue::Implied + } + + fn immediate(cpu: &mut Cpu) -> AddressingModeValue { + // # + let address: Word = cpu.pc; + cpu.pc += 1; + AddressingModeValue::Absolute(address) + } + + fn absolute_a(cpu: &mut Cpu) -> Result { + // a + let address = cpu.read_word(cpu.pc)?; + cpu.pc += 2; + Ok(AddressingModeValue::Absolute(address)) + } + + fn zero_page(cpu: &mut Cpu) -> Result { + // zp + let address = cpu.read(cpu.pc)?; + cpu.pc += 2; + Ok(AddressingModeValue::Absolute(address as Word)) + } + + fn absolute_indexed_with_x( + // a, y + cpu: &mut Cpu, + ) -> Result { + let word = cpu.read_word(cpu.pc)?; + cpu.pc += 2; + let address: Word = word + cpu.x as Word; + Ok(AddressingModeValue::Absolute(address)) + } + + fn absolute_indexed_with_y( + // a, y + cpu: &mut Cpu, + ) -> Result { + let word = cpu.read_word(cpu.pc)?; + cpu.pc += 2; + let address: Word = word + cpu.y as Word; + Ok(AddressingModeValue::Absolute(address)) + } + + fn zero_page_indexed_with_x( + // zp, x + cpu: &mut Cpu, + ) -> Result { + let byte = cpu.read(cpu.pc)?; + cpu.pc += 1; + let address: Word = (byte + cpu.x) as Word; + Ok(AddressingModeValue::Absolute(address)) + } + + fn zero_page_indexed_with_y( + // zp, y + cpu: &mut Cpu, + ) -> Result { + let byte = cpu.read(cpu.pc)?; + cpu.pc += 1; + let address: Word = (byte + cpu.y) as Word; + Ok(AddressingModeValue::Absolute(address)) + } + + fn absolute_indirect( + // (a) + cpu: &mut Cpu, + ) -> Result { + let word = cpu.read_word(cpu.pc)?; + let address = cpu.read_word(word)?; + cpu.pc += 2; + Ok(AddressingModeValue::Absolute(address)) + } + + fn absolute_indexed_indirect( + // (a, x), only used with the JMP instruction + cpu: &mut Cpu, + ) -> Result { + let word = cpu.read_word(cpu.pc)?; + let address = cpu.read_word(word + cpu.x as Word)?; + cpu.pc += 2; + Ok(AddressingModeValue::Absolute(address)) + } + + fn zero_page_indexed_indirect( + // (zp, x) + cpu: &mut Cpu, + ) -> Result { + let byte = cpu.read(cpu.pc)?; + let address = cpu.read_word((byte + cpu.x) as Word)?; // Anytime you see something like `byte as Word`, it's using the byte as a zero-page address + cpu.pc += 1; + Ok(AddressingModeValue::Absolute(address)) + } + + fn zero_page_indirect_indexed_with_y( + // (zp), y + cpu: &mut Cpu, + ) -> Result { + let byte: Byte = cpu.read(cpu.pc)?; + let address: Word = cpu.read_word(byte as Word)?; + cpu.pc += 1; + Ok(AddressingModeValue::Absolute(address + cpu.y as Word)) + } + + fn relative( + // r + cpu: &mut Cpu, + ) -> Result { + let byte: Byte = cpu.read(cpu.pc)?; + cpu.pc += 1; + Ok(AddressingModeValue::Relative(byte)) + } + + fn relative_test( + // r + cpu: &mut Cpu, + ) -> Result { + let byte: Byte = cpu.read(cpu.pc)?; + cpu.pc += 1; + let address = cpu.read(cpu.pc)?; + cpu.pc += 1; + Ok(AddressingModeValue::RelativeTest(byte, address)) + } + + match mode { + AddressingMode::AbsoluteA => absolute_a(cpu), + AddressingMode::AbsoluteIndexedWithX => absolute_indexed_with_x(cpu), + AddressingMode::AbsoluteIndexedWithY => absolute_indexed_with_y(cpu), + AddressingMode::AbsoluteIndirect => absolute_indirect(cpu), + AddressingMode::AbsoluteIndexedIndirect => absolute_indexed_indirect(cpu), + AddressingMode::Immediate => Ok(immediate(cpu)), + AddressingMode::ProgramCounterRelative => relative(cpu), + AddressingMode::ZeroPage => zero_page(cpu), + AddressingMode::ZeroPageIndexedWithX => zero_page_indexed_with_x(cpu), + AddressingMode::ZeroPageIndexedWithY => zero_page_indexed_with_y(cpu), + AddressingMode::ZeroPageIndirect => todo!(), + AddressingMode::ZeroPageIndexedIndirect => zero_page_indexed_indirect(cpu), + AddressingMode::ZeroPageIndirectIndexedWithY => zero_page_indirect_indexed_with_y(cpu), + AddressingMode::Accumulator => Ok(accumulator(cpu)), + AddressingMode::ProgramCounterRelativeTest => relative_test(cpu), + _ => Ok(implied(cpu)), + } +} + +fn signed_byte_to_word(value: Byte) -> Word { + let mut value = Word::from(value); + if value & 0x80 > 0 { + value |= 0xff00; + } + value +} + +fn branch( + cpu: &mut Cpu, + condition: bool, + value: AddressingModeValue, +) -> Result<(), AddressingModeError> { + match value { + AddressingModeValue::Relative(address) => { + let address = signed_byte_to_word(address).wrapping_add(cpu.pc); + if condition { + if address & 0xff00 != cpu.pc & 0xff00 { + cpu.pending_cycles += 2; + } else { + cpu.pending_cycles += 1; + } + cpu.pc = address; + } + Ok(()) + } + AddressingModeValue::RelativeTest(_zero_page, address) => { + let address = signed_byte_to_word(address).wrapping_add(cpu.pc); + if condition { + if address & 0xff00 != cpu.pc & 0xff00 { + cpu.pending_cycles += 2; + } else { + cpu.pending_cycles += 1; + } + cpu.pc = address; + } + Ok(()) + } + _ => Err(AddressingModeError::IncompatibleAddrMode), + } +} + +impl Opcode { + pub fn call(&self, cpu: &mut Cpu) -> Result<(), GeorgeErrorKind> { + match self { + Opcode::ADC(mode) => match mode { + AddressingMode::Immediate + | AddressingMode::ZeroPage + | AddressingMode::ZeroPageIndexedWithX + | AddressingMode::AbsoluteA + | AddressingMode::AbsoluteIndexedWithX + | AddressingMode::AbsoluteIndexedWithY + | AddressingMode::ZeroPageIndirect + | AddressingMode::ZeroPageIndexedIndirect + | AddressingMode::ZeroPageIndirectIndexedWithY => { + let address = get_address(mode, cpu)?; + let byte = cpu.read(address.try_into()?)?; + let carry = cpu.get_flag(StatusFlag::Carry); + let result = cpu.a as Word + byte as Word + carry as Word; + cpu.set_flag(StatusFlag::Carry, result > Word::from(u8::max_value())); + cpu.set_flag(StatusFlag::Zero, result as Byte == 0); + cpu.set_flag( + StatusFlag::Overflow, + (cpu.a ^ byte) & (cpu.a ^ result as Byte) & 0b1000_0000 > 0, + // Truly have no idea what's happening here, + // check out https://docs.rs/emulator_6502/latest/src/emulator_6502/opcodes/mod.rs.html + ); + cpu.set_flag(StatusFlag::Negative, cpu.is_negative(result as Byte)); + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::AND(mode) => match mode { + AddressingMode::Immediate + | AddressingMode::ZeroPage + | AddressingMode::ZeroPageIndexedWithX + | AddressingMode::AbsoluteA + | AddressingMode::AbsoluteIndexedWithX + | AddressingMode::AbsoluteIndexedWithY + | AddressingMode::ZeroPageIndirect + | AddressingMode::ZeroPageIndexedIndirect + | AddressingMode::ZeroPageIndirectIndexedWithY => { + let address = get_address(mode, cpu)?; + cpu.a &= cpu.read(address.try_into()?)?; + cpu.set_flag(StatusFlag::Zero, cpu.a == 0); + cpu.set_flag(StatusFlag::Negative, cpu.is_negative(cpu.a)); + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::ASL(mode) => { + fn asl(cpu: &mut Cpu, value: Byte) -> Byte { + cpu.set_flag(StatusFlag::Carry, value & 0b1000_0000 == 0b1000_0000); + let shifted_value = value << 1; + cpu.set_flag( + StatusFlag::Negative, + value & StatusFlag::Negative as Byte > 0, + ); + cpu.set_flag(StatusFlag::Zero, shifted_value == 0); + shifted_value + } + match mode { + AddressingMode::Accumulator => { + cpu.a = asl(cpu, cpu.a); + Ok(()) + } + AddressingMode::AbsoluteA + | AddressingMode::AbsoluteIndexedWithX + | AddressingMode::ZeroPage + | AddressingMode::ZeroPageIndexedWithX => { + let address = get_address(mode, cpu)?; + let value = cpu.read(address.try_into()?)?; + let result = asl(cpu, value); + cpu.write(address.try_into()?, result)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + } + } + Opcode::BBR0(mode) => match mode { + // These instructions are weird, cause they're relative, except the byte being tested is immediate, + // so i'm not sure if what i've already written is going to model this accurately + AddressingMode::ProgramCounterRelativeTest => match get_address(mode, cpu) { + Ok(value) => match value { + AddressingModeValue::RelativeTest(byte, _address) => { + let zero_page_address = byte as Word; + let test_byte = cpu.read(zero_page_address)?; + branch(cpu, test_byte & 0b0000_0001 != 0b0000_0001, value)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Err(error) => Err(GeorgeErrorKind::Execution(error)), + }, + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::BBR1(mode) => match mode { + AddressingMode::ProgramCounterRelativeTest => match get_address(mode, cpu) { + Ok(value) => match value { + AddressingModeValue::RelativeTest(byte, _address) => { + let zero_page_address = byte as Word; + let test_byte = cpu.read(zero_page_address)?; + branch(cpu, test_byte & 0b0000_0010 != 0b0000_0010, value)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Err(error) => Err(GeorgeErrorKind::Execution(error)), + }, + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::BBR2(mode) => match mode { + AddressingMode::ProgramCounterRelativeTest => match get_address(mode, cpu) { + Ok(value) => match value { + AddressingModeValue::RelativeTest(byte, _address) => { + let zero_page_address = byte as Word; + let test_byte = cpu.read(zero_page_address)?; + branch(cpu, test_byte & 0b0000_0100 != 0b0000_0100, value)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Err(error) => Err(GeorgeErrorKind::Execution(error)), + }, + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::BBR3(mode) => match mode { + AddressingMode::ProgramCounterRelativeTest => match get_address(mode, cpu) { + Ok(value) => match value { + AddressingModeValue::RelativeTest(byte, _address) => { + let zero_page_address = byte as Word; + let test_byte = cpu.read(zero_page_address)?; + branch(cpu, test_byte & 0b0000_1000 != 0b0000_1000, value)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Err(error) => Err(GeorgeErrorKind::Execution(error)), + }, + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::BBR4(mode) => match mode { + AddressingMode::ProgramCounterRelativeTest => match get_address(mode, cpu) { + Ok(value) => match value { + AddressingModeValue::RelativeTest(byte, _address) => { + let zero_page_address = byte as Word; + let test_byte = cpu.read(zero_page_address)?; + branch(cpu, test_byte & 0b0001_0000 != 0b0001_0000, value)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Err(error) => Err(GeorgeErrorKind::Execution(error)), + }, + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::BBR5(mode) => match mode { + AddressingMode::ProgramCounterRelativeTest => match get_address(mode, cpu) { + Ok(value) => match value { + AddressingModeValue::RelativeTest(byte, _address) => { + let zero_page_address = byte as Word; + let test_byte = cpu.read(zero_page_address)?; + branch(cpu, test_byte & 0b0010_0000 != 0b0010_0000, value)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Err(error) => Err(GeorgeErrorKind::Execution(error)), + }, + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::BBR6(mode) => match mode { + AddressingMode::ProgramCounterRelativeTest => match get_address(mode, cpu) { + Ok(value) => match value { + AddressingModeValue::RelativeTest(byte, _address) => { + let zero_page_address = byte as Word; + let test_byte = cpu.read(zero_page_address)?; + branch(cpu, test_byte & 0b0100_0000 != 0b0100_0000, value)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Err(error) => Err(GeorgeErrorKind::Execution(error)), + }, + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::BBR7(mode) => match mode { + AddressingMode::ProgramCounterRelativeTest => match get_address(mode, cpu) { + Ok(value) => match value { + AddressingModeValue::RelativeTest(byte, _address) => { + let zero_page_address = byte as Word; + let test_byte = cpu.read(zero_page_address)?; + branch(cpu, test_byte & 0b1000_0000 != 0b1000_0000, value)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Err(error) => Err(GeorgeErrorKind::Execution(error)), + }, + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::BBS0(mode) => match mode { + AddressingMode::ProgramCounterRelativeTest => match get_address(mode, cpu) { + Ok(value) => match value { + AddressingModeValue::RelativeTest(byte, _address) => { + let zero_page_address = byte as Word; + let test_byte = cpu.read(zero_page_address)?; + branch(cpu, test_byte & 0b0000_0001 == 0b0000_0001, value)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Err(error) => Err(GeorgeErrorKind::Execution(error)), + }, + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::BBS1(mode) => match mode { + AddressingMode::ProgramCounterRelativeTest => match get_address(mode, cpu) { + Ok(value) => match value { + AddressingModeValue::RelativeTest(byte, _address) => { + let zero_page_address = byte as Word; + let test_byte = cpu.read(zero_page_address)?; + branch(cpu, test_byte & 0b0000_0010 == 0b0000_0010, value)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Err(error) => Err(GeorgeErrorKind::Execution(error)), + }, + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::BBS2(mode) => match mode { + AddressingMode::ProgramCounterRelativeTest => match get_address(mode, cpu) { + Ok(value) => match value { + AddressingModeValue::RelativeTest(byte, _address) => { + let zero_page_address = byte as Word; + let test_byte = cpu.read(zero_page_address)?; + branch(cpu, test_byte & 0b0000_0100 == 0b0000_0100, value)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Err(error) => Err(GeorgeErrorKind::Execution(error)), + }, + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::BBS3(mode) => match mode { + AddressingMode::ProgramCounterRelativeTest => match get_address(mode, cpu) { + Ok(value) => match value { + AddressingModeValue::RelativeTest(byte, _address) => { + let zero_page_address = byte as Word; + let test_byte = cpu.read(zero_page_address)?; + branch(cpu, test_byte & 0b0000_1000 == 0b0000_1000, value)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Err(error) => Err(GeorgeErrorKind::Execution(error)), + }, + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::BBS4(mode) => match mode { + AddressingMode::ProgramCounterRelativeTest => match get_address(mode, cpu) { + Ok(value) => match value { + AddressingModeValue::RelativeTest(byte, _address) => { + let zero_page_address = byte as Word; + let test_byte = cpu.read(zero_page_address)?; + branch(cpu, test_byte & 0b0001_0000 == 0b0001_0000, value)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Err(error) => Err(GeorgeErrorKind::Execution(error)), + }, + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::BBS5(mode) => match mode { + AddressingMode::ProgramCounterRelativeTest => match get_address(mode, cpu) { + Ok(value) => match value { + AddressingModeValue::RelativeTest(byte, _address) => { + let zero_page_address = byte as Word; + let test_byte = cpu.read(zero_page_address)?; + branch(cpu, test_byte & 0b0010_0000 == 0b0010_0000, value)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Err(error) => Err(GeorgeErrorKind::Execution(error)), + }, + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::BBS6(mode) => match mode { + AddressingMode::ProgramCounterRelativeTest => match get_address(mode, cpu) { + Ok(value) => match value { + AddressingModeValue::RelativeTest(byte, _address) => { + let zero_page_address = byte as Word; + let test_byte = cpu.read(zero_page_address)?; + branch(cpu, test_byte & 0b0100_0000 == 0b0100_0000, value)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Err(error) => Err(GeorgeErrorKind::Execution(error)), + }, + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::BBS7(mode) => match mode { + AddressingMode::ProgramCounterRelativeTest => match get_address(mode, cpu) { + Ok(value) => match value { + AddressingModeValue::RelativeTest(byte, _address) => { + let zero_page_address = byte as Word; + let test_byte = cpu.read(zero_page_address)?; + branch(cpu, test_byte & 0b1000_0000 == 0b1000_0000, value)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Err(error) => Err(GeorgeErrorKind::Execution(error)), + }, + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::BCC(mode) => match mode { + AddressingMode::ProgramCounterRelative => { + let address = get_address(mode, cpu)?; + branch(cpu, !cpu.get_flag(StatusFlag::Carry), address)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::BCS(mode) => match mode { + AddressingMode::ProgramCounterRelative => { + let address = get_address(mode, cpu)?; + branch(cpu, cpu.get_flag(StatusFlag::Carry), address)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::BEQ(mode) => match mode { + AddressingMode::ProgramCounterRelative => { + let address = get_address(mode, cpu)?; + branch(cpu, cpu.get_flag(StatusFlag::Zero), address)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::BIT(mode) => match mode { + AddressingMode::Immediate + | AddressingMode::ZeroPage + | AddressingMode::ZeroPageIndexedWithX + | AddressingMode::AbsoluteA + | AddressingMode::AbsoluteIndexedWithX => { + let address = get_address(mode, cpu)?; + let result = cpu.a & cpu.read(address.try_into()?)?; + cpu.set_flag(StatusFlag::Zero, result == 0); + cpu.set_flag( + StatusFlag::Overflow, + result & StatusFlag::Overflow as Byte == StatusFlag::Overflow as Byte, + ); + cpu.set_flag( + StatusFlag::Negative, + result & StatusFlag::Negative as Byte == StatusFlag::Negative as Byte, + ); + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::BMI(mode) => match mode { + AddressingMode::ProgramCounterRelative => { + let address = get_address(mode, cpu)?; + branch(cpu, cpu.get_flag(StatusFlag::Negative), address)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::BNE(mode) => match mode { + AddressingMode::ProgramCounterRelative => { + let address = get_address(mode, cpu)?; + branch(cpu, !cpu.get_flag(StatusFlag::Zero), address)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::BPL(mode) => match mode { + AddressingMode::ProgramCounterRelative => { + let address = get_address(mode, cpu)?; + branch(cpu, !cpu.get_flag(StatusFlag::Negative), address)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::BRA(mode) => match mode { + AddressingMode::ProgramCounterRelative => { + let address = get_address(mode, cpu)?; + branch(cpu, true, address)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::BRK(mode) => match mode { + AddressingMode::Implied => { + cpu.set_flag(StatusFlag::Brk, true); + panic!("Interrupts unimplemented!"); + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::BVC(mode) => match mode { + AddressingMode::ProgramCounterRelative => { + let address = get_address(mode, cpu)?; + branch(cpu, !cpu.get_flag(StatusFlag::Overflow), address)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::BVS(mode) => match mode { + AddressingMode::ProgramCounterRelative => { + let address = get_address(mode, cpu)?; + branch(cpu, cpu.get_flag(StatusFlag::Overflow), address)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::CLC(mode) => match mode { + AddressingMode::Implied => { + cpu.set_flag(StatusFlag::Carry, false); + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::CLD(mode) => match mode { + AddressingMode::Implied => { + cpu.set_flag(StatusFlag::Decimal, false); + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::CLI(mode) => match mode { + AddressingMode::Implied => { + cpu.set_flag(StatusFlag::IrqDisable, false); + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::CLV(mode) => match mode { + AddressingMode::Implied => { + cpu.set_flag(StatusFlag::Overflow, false); + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::CMP(mode) => match mode { + AddressingMode::Immediate + | AddressingMode::ZeroPage + | AddressingMode::ZeroPageIndexedWithX + | AddressingMode::AbsoluteA + | AddressingMode::AbsoluteIndexedWithX + | AddressingMode::AbsoluteIndexedWithY + | AddressingMode::ZeroPageIndirect + | AddressingMode::ZeroPageIndexedIndirect + | AddressingMode::ZeroPageIndirectIndexedWithY => { + let address = get_address(mode, cpu)?; + let byte = cpu.read(address.try_into()?)?; + cpu.set_flag(StatusFlag::Carry, cpu.a >= byte); + cpu.set_flag(StatusFlag::Zero, cpu.a == byte); + cpu.set_flag(StatusFlag::Negative, cpu.is_negative(cpu.a - byte)); + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::CPX(mode) => match mode { + AddressingMode::Immediate + | AddressingMode::ZeroPage + | AddressingMode::AbsoluteA => { + let address = get_address(mode, cpu)?; + let byte = cpu.read(address.try_into()?)?; + cpu.set_flag(StatusFlag::Carry, cpu.x >= byte); + cpu.set_flag(StatusFlag::Zero, cpu.x == byte); + cpu.set_flag(StatusFlag::Negative, cpu.is_negative(cpu.x - byte)); + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::CPY(mode) => match mode { + AddressingMode::Immediate + | AddressingMode::ZeroPage + | AddressingMode::AbsoluteA => { + let address = get_address(mode, cpu)?; + let byte = cpu.read(address.try_into()?)?; + cpu.set_flag(StatusFlag::Carry, cpu.y >= byte); + cpu.set_flag(StatusFlag::Zero, cpu.y == byte); + cpu.set_flag(StatusFlag::Negative, cpu.is_negative(cpu.y - byte)); + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::DEC(mode) => match mode { + AddressingMode::ZeroPage + | AddressingMode::ZeroPageIndexedWithX + | AddressingMode::AbsoluteA + | AddressingMode::AbsoluteIndexedWithX => { + let address = get_address(mode, cpu)?; + cpu.write(address.try_into()?, cpu.read(address.try_into()?)? - 1)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::DEX(mode) => match mode { + AddressingMode::Implied => { + cpu.x -= 1; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::DEY(mode) => match mode { + AddressingMode::Implied => { + cpu.y -= 1; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::EOR(mode) => match mode { + AddressingMode::Immediate + | AddressingMode::ZeroPage + | AddressingMode::ZeroPageIndexedWithX + | AddressingMode::AbsoluteA + | AddressingMode::AbsoluteIndexedWithX + | AddressingMode::AbsoluteIndexedWithY + | AddressingMode::ZeroPageIndirect + | AddressingMode::ZeroPageIndexedIndirect + | AddressingMode::ZeroPageIndirectIndexedWithY => { + let address = get_address(mode, cpu)?; + cpu.a ^= cpu.read(address.try_into()?)?; + cpu.set_flag(StatusFlag::Zero, cpu.a == 0); + cpu.set_flag(StatusFlag::Negative, cpu.is_negative(cpu.a)); + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::INC(mode) => match mode { + AddressingMode::Accumulator => { + cpu.a += 1; + cpu.set_flag(StatusFlag::Zero, cpu.a == 0); + cpu.set_flag(StatusFlag::Negative, cpu.is_negative(cpu.a)); + Ok(()) + } + AddressingMode::ZeroPage + | AddressingMode::ZeroPageIndexedWithX + | AddressingMode::AbsoluteA + | AddressingMode::AbsoluteIndexedWithX => { + let address = get_address(mode, cpu)?; + let byte = cpu.read(address.try_into()?)?; + cpu.set_flag(StatusFlag::Zero, byte + 1 == 0); + cpu.set_flag(StatusFlag::Negative, cpu.is_negative(byte + 1)); + cpu.write(address.try_into()?, byte + 1)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::INX(mode) => match mode { + AddressingMode::Implied => { + cpu.x += 1; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::INY(mode) => match mode { + AddressingMode::Implied => { + cpu.y += 1; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::JMP(mode) => match mode { + AddressingMode::AbsoluteA + | AddressingMode::AbsoluteIndirect + | AddressingMode::AbsoluteIndexedIndirect => { + let address = get_address(mode, cpu)?; + cpu.pc = address.try_into()?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::JSR(mode) => match mode { + AddressingMode::AbsoluteA => { + let return_address = cpu.pc - 1; + cpu.push_stack_word(return_address)?; + let address = get_address(mode, cpu)?; + cpu.pc = address.try_into()?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::LDA(mode) => match mode { + AddressingMode::AbsoluteA + | AddressingMode::AbsoluteIndexedWithX + | AddressingMode::AbsoluteIndexedWithY + | AddressingMode::Immediate + | AddressingMode::ZeroPage + | AddressingMode::ZeroPageIndirect + | AddressingMode::ZeroPageIndexedIndirect + | AddressingMode::ZeroPageIndexedWithX + | AddressingMode::ZeroPageIndirectIndexedWithY => { + let address = get_address(mode, cpu)?; + let byte = cpu.read(address.try_into()?)?; + cpu.a = byte; + cpu.set_flag(StatusFlag::Negative, cpu.is_negative(cpu.a)); + cpu.set_flag(StatusFlag::Zero, cpu.a == 0); + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::LDX(mode) => match mode { + AddressingMode::AbsoluteA + | AddressingMode::AbsoluteIndexedWithY + | AddressingMode::Immediate + | AddressingMode::ZeroPage + | AddressingMode::ZeroPageIndexedWithY => { + let address = get_address(mode, cpu)?; + let byte = cpu.read(address.try_into()?)?; + cpu.x = byte; + cpu.set_flag(StatusFlag::Negative, cpu.is_negative(cpu.x)); + cpu.set_flag(StatusFlag::Zero, cpu.x == 0); + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::LDY(mode) => match mode { + AddressingMode::AbsoluteA + | AddressingMode::AbsoluteIndexedWithX + | AddressingMode::Immediate + | AddressingMode::ZeroPage + | AddressingMode::ZeroPageIndexedWithX => { + let address = get_address(mode, cpu)?; + let byte = cpu.read(address.try_into()?)?; + cpu.y = byte; + cpu.set_flag(StatusFlag::Negative, cpu.is_negative(cpu.y)); + cpu.set_flag(StatusFlag::Zero, cpu.y == 0); + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::LSR(mode) => { + fn lsr(cpu: &mut Cpu, value: Byte) -> Byte { + cpu.set_flag(StatusFlag::Carry, value & 1 == 1); + let shifted_value = value >> 1; + cpu.set_flag( + StatusFlag::Negative, + value & StatusFlag::Negative as Byte > 0, + ); + cpu.set_flag(StatusFlag::Zero, shifted_value == 0); + shifted_value + } + match mode { + AddressingMode::Accumulator => { + cpu.a = lsr(cpu, cpu.a); + Ok(()) + } + AddressingMode::AbsoluteA + | AddressingMode::AbsoluteIndexedWithX + | AddressingMode::ZeroPage + | AddressingMode::ZeroPageIndexedWithX => { + let address = get_address(mode, cpu)?; + let value = cpu.read(address.try_into()?)?; + let result = lsr(cpu, value); + cpu.write(address.try_into()?, result)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + } + } + Opcode::NOP(_mode) => { + cpu.pc += 1; + Ok(()) + } + Opcode::ORA(mode) => match mode { + AddressingMode::Immediate + | AddressingMode::ZeroPage + | AddressingMode::ZeroPageIndexedWithX + | AddressingMode::AbsoluteA + | AddressingMode::AbsoluteIndexedWithX + | AddressingMode::AbsoluteIndexedWithY + | AddressingMode::ZeroPageIndirect + | AddressingMode::ZeroPageIndexedIndirect + | AddressingMode::ZeroPageIndirectIndexedWithY => { + let address = get_address(mode, cpu)?; + cpu.a |= cpu.read(address.try_into()?)?; + cpu.set_flag(StatusFlag::Zero, cpu.a == 0); + cpu.set_flag(StatusFlag::Negative, cpu.is_negative(cpu.a)); + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::PHA(mode) => match mode { + AddressingMode::Stack => { + cpu.push_stack(cpu.a)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::PHP(mode) => match mode { + AddressingMode::Stack => { + cpu.push_stack(cpu.p)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::PHX(mode) => match mode { + AddressingMode::Stack => { + cpu.push_stack(cpu.x)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::PHY(mode) => match mode { + AddressingMode::Stack => { + cpu.push_stack(cpu.y)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::PLA(mode) => match mode { + AddressingMode::Stack => { + cpu.a = cpu.pop_stack()?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::PLP(mode) => match mode { + AddressingMode::Stack => { + cpu.p = cpu.pop_stack()?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::PLX(mode) => match mode { + AddressingMode::Stack => { + cpu.x = cpu.pop_stack()?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::PLY(mode) => match mode { + AddressingMode::Stack => { + cpu.y = cpu.pop_stack()?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::RMB0(mode) => match mode { + AddressingMode::ZeroPage => { + let address = get_address(mode, cpu)?; + let byte = cpu.read(address.try_into()?)?; + let reset_byte = byte & 0b1111_1110; + cpu.write(address.try_into()?, reset_byte)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::RMB1(mode) => match mode { + AddressingMode::ZeroPage => { + let address = get_address(mode, cpu)?; + let byte = cpu.read(address.try_into()?)?; + let reset_byte = byte & 0b1111_1101; + cpu.write(address.try_into()?, reset_byte)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::RMB2(mode) => match mode { + AddressingMode::ZeroPage => { + let address = get_address(mode, cpu)?; + let byte = cpu.read(address.try_into()?)?; + let reset_byte = byte & 0b1111_1011; + cpu.write(address.try_into()?, reset_byte)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::RMB3(mode) => match mode { + AddressingMode::ZeroPage => { + let address = get_address(mode, cpu)?; + let byte = cpu.read(address.try_into()?)?; + let reset_byte = byte & 0b1111_0111; + cpu.write(address.try_into()?, reset_byte)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::RMB4(mode) => match mode { + AddressingMode::ZeroPage => { + let address = get_address(mode, cpu)?; + let byte = cpu.read(address.try_into()?)?; + let reset_byte = byte & 0b1110_1111; + cpu.write(address.try_into()?, reset_byte)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::RMB5(mode) => match mode { + AddressingMode::ZeroPage => { + let address = get_address(mode, cpu)?; + let byte = cpu.read(address.try_into()?)?; + let reset_byte = byte & 0b1101_1111; + cpu.write(address.try_into()?, reset_byte)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::RMB6(mode) => match mode { + AddressingMode::ZeroPage => { + let address = get_address(mode, cpu)?; + let byte = cpu.read(address.try_into()?)?; + let reset_byte = byte & 0b1011_1111; + cpu.write(address.try_into()?, reset_byte)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::RMB7(mode) => match mode { + AddressingMode::ZeroPage => { + let address = get_address(mode, cpu)?; + let byte = cpu.read(address.try_into()?)?; + let reset_byte = byte & 0b0111_1111; + cpu.write(address.try_into()?, reset_byte)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::ROL(mode) => { + fn rol(cpu: &mut Cpu, value: Byte) -> Byte { + let carry = cpu.get_flag(StatusFlag::Carry) as Byte; + cpu.set_flag(StatusFlag::Carry, value >> 7 == 1); + let shifted_value = (value << 1) + carry; + cpu.set_flag( + StatusFlag::Negative, + shifted_value & StatusFlag::Negative as Byte > 0, + ); + cpu.set_flag(StatusFlag::Zero, shifted_value == 0); + shifted_value + } + match mode { + AddressingMode::Accumulator => { + cpu.a = rol(cpu, cpu.a); + Ok(()) + } + AddressingMode::AbsoluteA + | AddressingMode::AbsoluteIndexedWithX + | AddressingMode::ZeroPage + | AddressingMode::ZeroPageIndexedWithX => { + let address = get_address(mode, cpu)?; + let value = cpu.read(address.try_into()?)?; + let result = rol(cpu, value); + cpu.write(address.try_into()?, result)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + } + } + Opcode::ROR(mode) => { + fn ror(cpu: &mut Cpu, value: Byte) -> Byte { + let carry = cpu.get_flag(StatusFlag::Carry) as Byte; + cpu.set_flag(StatusFlag::Carry, value & 1 == 1); + let shifted_value = (value >> 1) + (carry << 7); + cpu.set_flag( + StatusFlag::Negative, + shifted_value & StatusFlag::Negative as Byte > 0, + ); + cpu.set_flag(StatusFlag::Zero, shifted_value == 0); + shifted_value + } + match mode { + AddressingMode::Accumulator => { + cpu.a = ror(cpu, cpu.a); + Ok(()) + } + AddressingMode::AbsoluteA + | AddressingMode::AbsoluteIndexedWithX + | AddressingMode::ZeroPage + | AddressingMode::ZeroPageIndexedWithX => { + let address = get_address(mode, cpu)?; + let value = cpu.read(address.try_into()?)?; + let result = ror(cpu, value); + cpu.write(address.try_into()?, result)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + } + } + Opcode::RTI(mode) => match mode { + AddressingMode::Implied => { + cpu.s = cpu.pop_stack()?; + cpu.p = cpu.pop_stack()?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::RTS(mode) => match mode { + AddressingMode::Implied => { + let return_address = cpu.pop_stack_word()?; + cpu.pc = return_address + 1; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::SBC(mode) => match mode { + AddressingMode::Immediate + | AddressingMode::ZeroPage + | AddressingMode::ZeroPageIndexedWithX + | AddressingMode::AbsoluteA + | AddressingMode::AbsoluteIndexedWithX + | AddressingMode::AbsoluteIndexedWithY + | AddressingMode::ZeroPageIndirect + | AddressingMode::ZeroPageIndexedIndirect + | AddressingMode::ZeroPageIndirectIndexedWithY => { + let address = get_address(mode, cpu)?; + let byte = cpu.read(address.try_into()?)?; + let carry = cpu.get_flag(StatusFlag::Carry); + let result = cpu.a as Word + byte as Word + !carry as Word; + cpu.set_flag(StatusFlag::Carry, result > Word::from(u8::max_value())); + cpu.set_flag(StatusFlag::Zero, result as Byte == 0); + cpu.set_flag( + StatusFlag::Overflow, + (cpu.a ^ byte) & (cpu.a ^ result as Byte) & 0b1000_0000 > 0, + // Truly have no idea what's happening here, + // check out https://docs.rs/emulator_6502/latest/src/emulator_6502/opcodes/mod.rs.html + ); + cpu.set_flag(StatusFlag::Negative, cpu.is_negative(result as Byte)); + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::SEC(mode) => match mode { + AddressingMode::Implied => { + cpu.set_flag(StatusFlag::Carry, true); + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::SED(mode) => match mode { + AddressingMode::Implied => { + cpu.set_flag(StatusFlag::Decimal, true); + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::SEI(mode) => match mode { + AddressingMode::Implied => { + cpu.set_flag(StatusFlag::IrqDisable, true); + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::SMB0(mode) => match mode { + AddressingMode::ZeroPage => { + let address = get_address(mode, cpu)?; + let byte = cpu.read(address.try_into()?)?; + let reset_byte = byte | 0b0000_0001; + cpu.write(address.try_into()?, reset_byte)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::SMB1(mode) => match mode { + AddressingMode::ZeroPage => { + let address = get_address(mode, cpu)?; + let byte = cpu.read(address.try_into()?)?; + let reset_byte = byte | 0b0000_0010; + cpu.write(address.try_into()?, reset_byte)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::SMB2(mode) => match mode { + AddressingMode::ZeroPage => { + let address = get_address(mode, cpu)?; + let byte = cpu.read(address.try_into()?)?; + let reset_byte = byte | 0b0000_0100; + cpu.write(address.try_into()?, reset_byte)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::SMB3(mode) => match mode { + AddressingMode::ZeroPage => { + let address = get_address(mode, cpu)?; + let byte = cpu.read(address.try_into()?)?; + let reset_byte = byte | 0b0000_1000; + cpu.write(address.try_into()?, reset_byte)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::SMB4(mode) => match mode { + AddressingMode::ZeroPage => { + let address = get_address(mode, cpu)?; + let byte = cpu.read(address.try_into()?)?; + let reset_byte = byte | 0b0001_0000; + cpu.write(address.try_into()?, reset_byte)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::SMB5(mode) => match mode { + AddressingMode::ZeroPage => { + let address = get_address(mode, cpu)?; + let byte = cpu.read(address.try_into()?)?; + let reset_byte = byte | 0b0010_0000; + cpu.write(address.try_into()?, reset_byte)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::SMB6(mode) => match mode { + AddressingMode::ZeroPage => { + let address = get_address(mode, cpu)?; + let byte = cpu.read(address.try_into()?)?; + let reset_byte = byte & 0b0100_0000; + cpu.write(address.try_into()?, reset_byte)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::SMB7(mode) => match mode { + AddressingMode::ZeroPage => { + let address = get_address(mode, cpu)?; + let byte = cpu.read(address.try_into()?)?; + let reset_byte = byte | 0b1000_0000; + cpu.write(address.try_into()?, reset_byte)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::STA(mode) => match mode { + AddressingMode::AbsoluteA + | AddressingMode::AbsoluteIndexedWithX + | AddressingMode::AbsoluteIndexedWithY + | AddressingMode::ZeroPage + | AddressingMode::ZeroPageIndirect + | AddressingMode::ZeroPageIndexedIndirect + | AddressingMode::ZeroPageIndexedWithX + | AddressingMode::ZeroPageIndirectIndexedWithY => { + let address = get_address(mode, cpu)?; + cpu.write(address.try_into()?, cpu.a)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::STP(mode) => match mode { + AddressingMode::Implied => { + cpu.stop(); + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::STX(mode) => match mode { + AddressingMode::AbsoluteA + | AddressingMode::ZeroPage + | AddressingMode::ZeroPageIndexedWithY => { + let address = get_address(mode, cpu)?; + cpu.write(address.try_into()?, cpu.x)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::STY(mode) => match mode { + AddressingMode::AbsoluteA + | AddressingMode::ZeroPage + | AddressingMode::ZeroPageIndexedWithX => { + let address = get_address(mode, cpu)?; + cpu.write(address.try_into()?, cpu.y)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::STZ(mode) => match mode { + AddressingMode::AbsoluteA + | AddressingMode::AbsoluteIndexedWithX + | AddressingMode::ZeroPage + | AddressingMode::ZeroPageIndexedWithX => { + let address = get_address(mode, cpu)?; + cpu.write(address.try_into()?, 0)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::TAX(mode) => match mode { + AddressingMode::Implied => { + cpu.x = cpu.a; + cpu.set_flag(StatusFlag::Negative, cpu.is_negative(cpu.x)); + cpu.set_flag(StatusFlag::Zero, cpu.x == 0); + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::TAY(mode) => match mode { + AddressingMode::Implied => { + cpu.y = cpu.a; + cpu.set_flag(StatusFlag::Negative, cpu.is_negative(cpu.y)); + cpu.set_flag(StatusFlag::Zero, cpu.y == 0); + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::TRB(mode) => match mode { + // Still not really sure when you would + // use TRB or TSB, but this was helpful + // (Garth rocks) http://forum.6502.org/viewtopic.php?t=48 + AddressingMode::AbsoluteA | AddressingMode::ZeroPage => { + let address = get_address(mode, cpu)?; + let byte = cpu.read(address.try_into()?)?; + cpu.write(address.try_into()?, !cpu.a & byte)?; + cpu.set_flag(StatusFlag::Zero, cpu.a & byte > 0); + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::TSB(mode) => match mode { + AddressingMode::AbsoluteA | AddressingMode::ZeroPage => { + let address = get_address(mode, cpu)?; + let byte = cpu.read(address.try_into()?)?; + cpu.write(address.try_into()?, cpu.a | byte)?; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::TSX(mode) => match mode { + AddressingMode::Implied => { + cpu.x = cpu.s; + cpu.set_flag(StatusFlag::Negative, cpu.is_negative(cpu.x)); + cpu.set_flag(StatusFlag::Zero, cpu.x == 0); + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::TXA(mode) => match mode { + AddressingMode::Implied => { + cpu.a = cpu.x; + cpu.set_flag(StatusFlag::Negative, cpu.is_negative(cpu.a)); + cpu.set_flag(StatusFlag::Zero, cpu.a == 0); + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::TXS(mode) => match mode { + AddressingMode::Implied => { + cpu.s = cpu.x; + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::TYA(mode) => match mode { + AddressingMode::Implied => { + cpu.a = cpu.y; + cpu.set_flag(StatusFlag::Negative, cpu.is_negative(cpu.a)); + cpu.set_flag(StatusFlag::Zero, cpu.a == 0); + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + Opcode::WAI(mode) => match mode { + AddressingMode::Implied => { + cpu.wait_for_interrupt(); + Ok(()) + } + _ => Err(GeorgeErrorKind::AddrMode( + AddressingModeError::IncompatibleAddrMode, + )), + }, + } + } +} diff --git a/src/main.rs b/src/main.rs index ba8b7ae..35dce43 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3989 +1,52 @@ -#![allow(dead_code)] -use minifb::{Window, WindowOptions}; +// #![allow(dead_code)] + +mod cpu; +mod error; +mod instructions; +mod memory; +mod types; +mod video; + +use crate::cpu::Cpu; +use crate::memory::{Mem, MemMappedDevice}; +use crate::video::Crtc; + use std::{ - borrow::{Borrow, BorrowMut}, - collections::HashMap, - fs::{self, File}, - io::Read, path::PathBuf, - str::FromStr, - sync::{Arc, Mutex, RwLock}, - thread::{self, sleep}, - time::{Duration, Instant}, - u16, + sync::{Arc, RwLock}, + thread, }; -type Byte = u8; -type Word = u16; - -#[derive(Debug)] -enum GeorgeErrorKind { - Memory(MemoryError), - Execution(ExecutionError), - AddrMode(AddressingModeError), -} - -impl From for GeorgeErrorKind { - fn from(value: MemoryError) -> Self { - Self::Memory(value) - } -} -impl From for GeorgeErrorKind { - fn from(value: AddressingModeError) -> Self { - Self::AddrMode(value) - } -} -impl From for GeorgeErrorKind { - fn from(value: ExecutionError) -> Self { - Self::Execution(value) - } -} - -#[derive(Debug)] -struct GeorgeError { - desc: String, - kind: GeorgeErrorKind, -} - -#[derive(Debug)] -enum MemoryError { - Unmapped, - NoDataAtAddress, - Unwritable, -} - -#[derive(Debug)] -enum MappingError { - RegionOccupied, - InvalidPage, -} - -struct Crtc { - char_width: u8, - char_height: u8, - graphics_mode: bool, - data: Vec, - start: Word, - end: Word, - page: usize, - pages: usize, -} - -impl Crtc { - fn new( - char_width: u8, - char_height: u8, - _graphics_mode: bool, - start: Word, - end: Word, - pages: usize, - ) -> Self { - Self { - char_height, - char_width, - graphics_mode: true, - data: vec![0x00; (end as usize + 1 - start as usize) * pages], - start, - end, - page: 0, - pages, - } - } - - fn get_buffer(&self) -> Result, GeorgeError> { - // let bitmask = [128, 64, 32, 16, 8, 4, 2, 1]; - let bitmask = [1, 2, 4, 8, 16, 32, 64, 128]; // I think this is how the bytes will be - // serialized? low bits first? - let mut buffer = vec![0; (self.end - self.start + 1) as usize * 8]; - for addr in self.start..self.end { - // eventually this will access memory in the weird interleaved way the hardware is - // designed, but this is easiest to implement for now - let byte = self.data[addr as usize]; - for i in 0..8 { - match byte & bitmask[i] == 0 { - true => buffer[(addr - self.start) as usize * 8 + i] = 0x110500, - false => buffer[(addr - 0x6000) as usize * 8 + i] = 0xFFCC00, - } - } - } - Ok(buffer) - } -} - -#[derive(Debug, Clone)] -struct MemMappedDevice { - start: Word, - end: Word, - pages: usize, - page: usize, - data: Vec, - label: String, -} - -impl MemMappedDevice { - fn new(start: Word, end: Word, pages: usize, label: String) -> Self { - Self { - start, - end, - pages, - page: 0, - data: vec![0x00; (end as usize + 1 - start as usize) * pages], - label, - } - } - fn contains(&self, address: Word) -> bool { - self.start <= address && self.end >= address - } - fn swap_page(&mut self, page: usize) -> Result<(), MappingError> { - match page > self.pages { - true => Err(MappingError::InvalidPage), - false => { - self.page = page; - Ok(()) - } - } - } - fn size(&self) -> Word { - self.end - self.start + 1 - } - fn translate_address(&self, address: Word) -> Word { - (address - self.start) + self.size() * (self.page as Word) - } // This needs to translate memory address from CPU land to local land, so - // for rom an address like 0xFFFF needs to be translated to Page X, 0xFFF -} - -#[derive(Debug, Clone)] -struct Mem { - areas: Vec, -} - -impl Mem { - fn new(area: MemMappedDevice) -> Self { - Self { areas: vec![area] } - } - fn add_area(&mut self, area: MemMappedDevice) -> Result<(), MappingError> { - for existing_area in &self.areas { - if existing_area.contains(area.end) || existing_area.contains(area.start) { - return Err(MappingError::RegionOccupied); - } - } - self.areas.push(area); - Ok(()) - } - fn read(&self, address: Word) -> Result { - for area in &self.areas { - if area.contains(address) { - let translated_address = area.translate_address(address); - match area.data.get(translated_address as usize) { - Some(data) => return Ok(*data), - None => return Err(MemoryError::NoDataAtAddress), - } - } - } - Err(MemoryError::Unmapped) - } - - fn write(&mut self, address: Word, data: Byte) -> Result<(), MemoryError> { - for area in self.areas.iter_mut() { - if area.contains(address) { - // println!("Writing to area {label}", label = area.label); - let translated_address = area.translate_address(address); - area.data[translated_address as usize] = data; - return Ok(()); - }; - } - Err(MemoryError::Unmapped) - } - - fn read_from_bin(&mut self, f: File) -> Result<(), MemoryError> { - let bytes = f.bytes(); - for (address, byte) in bytes.enumerate() { - match byte { - Ok(value) => self.write(address as u16, value)?, - Err(_) => return Err(MemoryError::Unwritable), - } - } - Ok(()) - } -} -#[derive(Debug)] -enum ExecutionError { - InvalidInstruction, - InterruptsDisabled, - StackOverflow, - MemoryError(MemoryError), -} - -#[derive(Debug)] -enum AddressingModeError { - IncompatibleAddrMode, -} - -impl From for AddressingModeError { - fn from(value: ExecutionError) -> Self { - Self::IncompatibleAddrMode - } -} - -impl From for ExecutionError { - fn from(error: MemoryError) -> Self { - ExecutionError::MemoryError(error) - } -} - -#[derive(Clone, Copy)] -enum StatusFlag { - Negative = 0b1000_0000, - Overflow = 0b0100_0000, - Brk = 0b0011_0000, - BrkIrq = 0b0010_0000, - Decimal = 0b0000_1000, - IrqDisable = 0b0000_0100, - Zero = 0b000_0010, - Carry = 0b0000_0001, -} - -struct Cpu { - a: Byte, // Accumulator Register - x: Byte, // X Register - y: Byte, // Y Register - pc: Word, // Program Counter - s: Byte, // Stack Pointer - p: Byte, // Status Register - irq: bool, - nmi: bool, - memory: Arc>, - pending_cycles: usize, - cycle_count: usize, -} - -impl Cpu { - fn new(memory: Arc>) -> Self { - Cpu { - a: 0x00, - x: 0x00, - y: 0x00, - pc: 0x0000, - s: 0xFF, - p: 0b0010_0100, - irq: false, - nmi: false, - memory, - pending_cycles: 0, - cycle_count: 0, - } - } - fn reset(&mut self) -> Result<(), ExecutionError> { - let reset_vector_pointer = self.read_word(0xFFFC)?; - self.pending_cycles = 8; - self.pc = reset_vector_pointer; - Ok(()) - } - fn read(&self, address: Word) -> Result { - let memory = match self.memory.try_read() { - Ok(read) => read, - Err(_) => { - println!("Couldn't acquire read lock on memory in cpu thread"); - return Err(MemoryError::NoDataAtAddress); - } // TODO: upgrade this error type to a `GeorgeError` and make an errorkind for thread lock errors - }; - memory.read(address) - } - fn read_word(&self, address: Word) -> Result { - let low_byte = self.read(address)?; - let high_byte = self.read(address + 0x1)?; - Ok((high_byte as u16) << 8 | (low_byte as u16)) - } - - fn stack_addr(&self) -> Word { - // Dunno if this is necessary, i just don't like adding the 0x0100 every time - 0x0100 + self.s as u16 - } - - fn push_stack(&mut self, data: Byte) -> Result<(), ExecutionError> { - self.s -= 0x1; - self.write(self.stack_addr(), data)?; - Ok(()) - } - - fn push_stack_word(&mut self, address: Word) -> Result<(), ExecutionError> { - self.s -= 0x1; - self.write(self.stack_addr(), address.to_le_bytes()[1])?; // Upper byte first - self.s -= 0x1; - self.write(self.stack_addr(), address.to_le_bytes()[0])?; // Lower byte second - Ok(()) - } - - fn pop_stack(&mut self) -> Result { - let byte = self.read(self.stack_addr())?; - self.s += 0x1; - Ok(byte) - } - - fn pop_stack_word(&mut self) -> Result { - let low_byte = self.pop_stack()?; - let high_byte = self.pop_stack()?; - let word = ((high_byte as Word) << 8) + low_byte as u16; - Ok(word) - } - - fn set_flag(&mut self, flag: StatusFlag, value: bool) { - self.p &= !(flag as Byte); - if value { - self.p |= flag as Byte - } - } - - fn get_flag(&self, flag: StatusFlag) -> bool { - (self.p & flag as Byte) > 0 - } - fn is_negative(&self, value: Byte) -> bool { - value & 0b1000_0000 == 0b1000_0000 - } - - fn write(&mut self, address: Word, data: Byte) -> Result<(), MemoryError> { - let mut memory = match self.memory.write() { - Ok(write) => write, - Err(_) => { - println!("Couldn't acquire write lock on memory in cpu thread"); - return Err(MemoryError::NoDataAtAddress); - } // TODO: upgrade this error type to a `GeorgeError` and make an errorkind for thread lock errors - }; - memory.write(address, data)?; - Ok(()) - } - - fn execute(&mut self) { - self.cycle().unwrap(); - while self.pending_cycles != 0 { - self.cycle().unwrap(); - } - } - - fn wait_for_interrupt(&self) { - unimplemented!() - } - - // fn handle_interrupt(&mut self) -> Result<(), ExecutionError> { - // match self.get_flag(StatusFlag::IrqDisable) { - // // Check that interrupts aren't disabled - // true => Ok(self.execute()), - // false => { - // if self.irq { - // let irq_vector = 0xFFFE; - // match self.read_word(irq_vector) { - // Err(error) => Err(ExecutionError::MemoryError(error)), - // Ok(address) => { - // let isr_address = address; - // match self.read(isr_address) { - // Ok(_opcode) => Ok(self.execute()), - // Err(error) => Err(ExecutionError::MemoryError(error)), - // } - // } - // } - // } else { - // Ok(()) - // } - // } - // } - // } - fn cycle(&mut self) -> Result<(), GeorgeError> { - sleep(Duration::from_nanos(500)); - if self.pending_cycles == 0 { - if self.nmi || (self.irq && !self.get_flag(StatusFlag::IrqDisable)) { - let _ = self.push_stack_word(self.pc); - self.set_flag(StatusFlag::BrkIrq, true); - let _ = self.push_stack(self.p); - self.set_flag(StatusFlag::IrqDisable, true); - if self.nmi { - match self.read_word(0xFFFA) { - Ok(word) => self.pc = word, - Err(error) => { - return Err(GeorgeError { - kind: GeorgeErrorKind::Memory(error), - desc: String::from_str("Couldn't read NMI vector").unwrap(), - }) - } - }; - self.pending_cycles = 8; - } else { - match self.read_word(0xFFFE) { - Ok(word) => self.pc = word, - Err(error) => { - return Err(GeorgeError { - kind: GeorgeErrorKind::Memory(error), - desc: String::from_str("Couldn't read IRQ vector").unwrap(), - }) - } - }; - self.pending_cycles = 7 - } - self.nmi = false; - self.irq = false; - } - } else { - let opcode = match self.read(self.pc) { - Ok(byte) => byte, - Err(error) => { - return Err(GeorgeError { - desc: String::from_str("Failed to read the program counter!").unwrap(), - kind: GeorgeErrorKind::Memory(error), - }) - } - }; - let instruction = get_instruction(opcode); - match instruction { - Instruction::Valid(valid_instruction) => { - println!("Instruction: {:?}, {:?}", valid_instruction.opcode, opcode); - println!("a: {a:#04x}, x: {x:#04x}, y: {y:#04x}, pc: {pc:#06x}, sp: {s:#04x}, sr: {p:#010b}, irq: {irq:?}, nmi: {nmi:?}", a = self.a, x = self.x, y = self.y, pc = self.pc, s = self.s, p = self.p, irq = self.irq, nmi = self.nmi); - println!(""); - self.pc += 1; - match valid_instruction.opcode.call(self) { - Ok(_) => { - self.pending_cycles += valid_instruction.cycles as usize; - }, - Err(error) => return Err(GeorgeError{ - desc: format!("An IncompatibleAddrMode was used at address {:#06x} for instruction {:?}", - self.pc, valid_instruction).to_string(), kind: error}) - }; - } - Instruction::Invalid(invalid_instruction) => { - return Err(GeorgeError { - kind: GeorgeErrorKind::Execution(ExecutionError::InvalidInstruction), - desc: format!( - "An invalid instruction with opcode {:#04x} was called at address {:#06x}", - invalid_instruction.opcode, self.pc - ), - }) - } - } - } - self.pending_cycles -= 1; - self.cycle_count += 1; - Ok(()) - } - - fn stop(&mut self) { - unimplemented!() - } -} - -#[derive(Clone, Debug)] -enum Instruction { - Valid(ValidInstruction), - Invalid(InvalidInstruction), -} - -#[derive(Clone, Debug)] -struct ValidInstruction { - opcode: Opcode, - cycles: Byte, -} - -#[derive(Clone, Debug)] -struct InvalidInstruction { - opcode: Byte, -} - -#[derive(Clone, Debug)] -enum AddressingMode { - AbsoluteA, // a - AbsoluteIndexedWithX, // a, x - AbsoluteIndexedWithY, // a, y - AbsoluteIndirect, // (a) - AbsoluteIndexedIndirect, // (a,x) (4), only used with the JMP instruction - Accumulator, // A - Immediate, // # - Implied, // i - ProgramCounterRelative, // r - ProgramCounterRelativeTest, // r, but for instructions like BBR0-7, where the first operand - // is a zero-page address, and the second is the relative branch - // address - Stack, // s - ZeroPage, // zp - ZeroPageIndexedWithX, // zp, x - ZeroPageIndexedWithY, // zp, y - ZeroPageIndirect, // (zp) (4) - ZeroPageIndexedIndirect, // (zp, x) - ZeroPageIndirectIndexedWithY, // (zp), y -} - -// if you want to optimize this later https://llx.com/Neil/a2/opcodes.html -fn get_instruction(opcode: u8) -> Instruction { - let opcodes: HashMap = HashMap::from([ - ( - 0x00, - Instruction::Valid(ValidInstruction { - opcode: Opcode::BRK(AddressingMode::Implied), - cycles: 7, - }), - ), - ( - 0x01, - Instruction::Valid(ValidInstruction { - opcode: Opcode::ORA(AddressingMode::ZeroPageIndexedIndirect), - cycles: 6, - }), - ), - ( - 0x02, - Instruction::Invalid(InvalidInstruction { opcode: 0x02 }), - ), - ( - 0x03, - Instruction::Invalid(InvalidInstruction { opcode: 0x03 }), - ), - ( - 0x04, - Instruction::Valid(ValidInstruction { - opcode: Opcode::TSB(AddressingMode::ZeroPage), - cycles: 5, - }), - ), - ( - 0x05, - Instruction::Valid(ValidInstruction { - opcode: Opcode::ORA(AddressingMode::ZeroPage), - cycles: 3, - }), - ), - ( - 0x06, - Instruction::Valid(ValidInstruction { - opcode: Opcode::ASL(AddressingMode::ZeroPage), - cycles: 5, - }), - ), - ( - 0x07, - Instruction::Valid(ValidInstruction { - opcode: Opcode::RMB0(AddressingMode::ZeroPage), - cycles: 5, - }), - ), - ( - 0x08, - Instruction::Valid(ValidInstruction { - opcode: Opcode::PHP(AddressingMode::Stack), - cycles: 3, - }), - ), - ( - 0x09, - Instruction::Valid(ValidInstruction { - opcode: Opcode::ORA(AddressingMode::Immediate), - cycles: 2, - }), - ), - ( - 0x0a, - Instruction::Valid(ValidInstruction { - opcode: Opcode::ASL(AddressingMode::Accumulator), - cycles: 2, - }), - ), - ( - 0x0b, - Instruction::Invalid(InvalidInstruction { opcode: 0x0b }), - ), - ( - 0x0c, - Instruction::Valid(ValidInstruction { - opcode: Opcode::TSB(AddressingMode::AbsoluteA), - cycles: 6, - }), - ), - ( - 0x0d, - Instruction::Valid(ValidInstruction { - opcode: Opcode::ORA(AddressingMode::AbsoluteA), - cycles: 4, - }), - ), - ( - 0x0e, - Instruction::Valid(ValidInstruction { - opcode: Opcode::ASL(AddressingMode::AbsoluteA), - cycles: 6, - }), - ), - ( - 0x0f, - Instruction::Valid(ValidInstruction { - opcode: Opcode::BBR0(AddressingMode::ProgramCounterRelativeTest), - cycles: 4, - }), - ), - ( - 0x10, - Instruction::Valid(ValidInstruction { - opcode: Opcode::BPL(AddressingMode::ProgramCounterRelative), - cycles: 2, - }), - ), - ( - 0x11, - Instruction::Valid(ValidInstruction { - opcode: Opcode::ORA(AddressingMode::AbsoluteIndexedWithY), - cycles: 5, - }), - ), - ( - 0x12, - Instruction::Valid(ValidInstruction { - opcode: Opcode::ORA(AddressingMode::ZeroPageIndirect), - cycles: 5, - }), - ), - ( - 0x13, - Instruction::Invalid(InvalidInstruction { opcode: 0x13 }), - ), - ( - 0x14, - Instruction::Valid(ValidInstruction { - opcode: Opcode::TRB(AddressingMode::ZeroPage), - cycles: 5, - }), - ), - ( - 0x15, - Instruction::Valid(ValidInstruction { - opcode: Opcode::ORA(AddressingMode::ZeroPageIndexedWithX), - cycles: 4, - }), - ), - ( - 0x16, - Instruction::Valid(ValidInstruction { - opcode: Opcode::ASL(AddressingMode::ZeroPageIndexedWithX), - cycles: 6, - }), - ), - ( - 0x17, - Instruction::Valid(ValidInstruction { - opcode: Opcode::RMB1(AddressingMode::ZeroPage), - cycles: 5, - }), - ), - ( - 0x18, - Instruction::Valid(ValidInstruction { - opcode: Opcode::CLC(AddressingMode::Implied), - cycles: 2, - }), - ), - ( - 0x19, - Instruction::Valid(ValidInstruction { - opcode: Opcode::ORA(AddressingMode::AbsoluteIndexedWithY), - cycles: 4, - }), - ), - ( - 0x1a, - Instruction::Valid(ValidInstruction { - opcode: Opcode::INC(AddressingMode::Accumulator), - cycles: 2, - }), - ), - ( - 0x1b, - Instruction::Invalid(InvalidInstruction { opcode: 0x1b }), - ), - ( - 0x1c, - Instruction::Valid(ValidInstruction { - opcode: Opcode::TRB(AddressingMode::AbsoluteA), - cycles: 6, - }), - ), - ( - 0x1d, - Instruction::Valid(ValidInstruction { - opcode: Opcode::ORA(AddressingMode::AbsoluteIndexedWithX), - cycles: 4, - }), - ), - ( - 0x1e, - Instruction::Valid(ValidInstruction { - opcode: Opcode::ASL(AddressingMode::AbsoluteIndexedWithX), - cycles: 7, - }), - ), - ( - 0x1f, - Instruction::Valid(ValidInstruction { - opcode: Opcode::BBR1(AddressingMode::ProgramCounterRelativeTest), - cycles: 4, - }), - ), - ( - 0x20, - Instruction::Valid(ValidInstruction { - opcode: Opcode::JSR(AddressingMode::AbsoluteA), - cycles: 6, - }), - ), - ( - 0x21, - Instruction::Valid(ValidInstruction { - opcode: Opcode::AND(AddressingMode::ZeroPageIndexedIndirect), - cycles: 6, - }), - ), - ( - 0x22, - Instruction::Invalid(InvalidInstruction { opcode: 0x22 }), - ), - ( - 0x23, - Instruction::Invalid(InvalidInstruction { opcode: 0x23 }), - ), - ( - 0x24, - Instruction::Valid(ValidInstruction { - opcode: Opcode::BIT(AddressingMode::ZeroPage), - cycles: 3, - }), - ), - ( - 0x25, - Instruction::Valid(ValidInstruction { - opcode: Opcode::AND(AddressingMode::ZeroPage), - cycles: 3, - }), - ), - ( - 0x26, - Instruction::Valid(ValidInstruction { - opcode: Opcode::ROL(AddressingMode::ZeroPage), - cycles: 5, - }), - ), - ( - 0x27, - Instruction::Valid(ValidInstruction { - opcode: Opcode::RMB2(AddressingMode::ZeroPage), - cycles: 5, - }), - ), - ( - 0x28, - Instruction::Valid(ValidInstruction { - opcode: Opcode::PLP(AddressingMode::Stack), - cycles: 4, - }), - ), - ( - 0x29, - Instruction::Valid(ValidInstruction { - opcode: Opcode::AND(AddressingMode::Immediate), - cycles: 2, - }), - ), - ( - 0x2a, - Instruction::Valid(ValidInstruction { - opcode: Opcode::ROL(AddressingMode::Accumulator), - cycles: 2, - }), - ), - ( - 0x2b, - Instruction::Invalid(InvalidInstruction { opcode: 0x2b }), - ), - ( - 0x2c, - Instruction::Valid(ValidInstruction { - opcode: Opcode::BIT(AddressingMode::AbsoluteA), - cycles: 4, - }), - ), - ( - 0x2d, - Instruction::Valid(ValidInstruction { - opcode: Opcode::AND(AddressingMode::AbsoluteA), - cycles: 4, - }), - ), - ( - 0x2e, - Instruction::Valid(ValidInstruction { - opcode: Opcode::ROL(AddressingMode::AbsoluteA), - cycles: 6, - }), - ), - ( - 0x2f, - Instruction::Valid(ValidInstruction { - opcode: Opcode::BBR2(AddressingMode::ProgramCounterRelativeTest), - cycles: 4, - }), - ), - ( - 0x30, - Instruction::Valid(ValidInstruction { - opcode: Opcode::BMI(AddressingMode::ProgramCounterRelative), - cycles: 2, - }), - ), - ( - 0x31, - Instruction::Valid(ValidInstruction { - opcode: Opcode::AND(AddressingMode::ZeroPageIndirectIndexedWithY), - cycles: 5, - }), - ), - ( - 0x32, - Instruction::Valid(ValidInstruction { - opcode: Opcode::AND(AddressingMode::ZeroPageIndirect), - cycles: 5, - }), - ), - ( - 0x33, - Instruction::Invalid(InvalidInstruction { opcode: 0x33 }), - ), - ( - 0x34, - Instruction::Valid(ValidInstruction { - opcode: Opcode::BIT(AddressingMode::ZeroPageIndexedWithX), - cycles: 3, - }), - ), - ( - 0x35, - Instruction::Valid(ValidInstruction { - opcode: Opcode::AND(AddressingMode::ZeroPageIndexedWithX), - cycles: 4, - }), - ), - ( - 0x36, - Instruction::Valid(ValidInstruction { - opcode: Opcode::ROL(AddressingMode::ZeroPageIndexedWithX), - cycles: 6, - }), - ), - ( - 0x37, - Instruction::Valid(ValidInstruction { - opcode: Opcode::RMB3(AddressingMode::ZeroPage), - cycles: 5, - }), - ), - ( - 0x38, - Instruction::Valid(ValidInstruction { - opcode: Opcode::SEC(AddressingMode::Implied), - cycles: 2, - }), - ), - ( - 0x39, - Instruction::Valid(ValidInstruction { - opcode: Opcode::AND(AddressingMode::AbsoluteIndexedWithY), - cycles: 4, - }), - ), - ( - 0x3a, - Instruction::Valid(ValidInstruction { - opcode: Opcode::DEC(AddressingMode::Accumulator), - cycles: 2, - }), - ), - ( - 0x3b, - Instruction::Invalid(InvalidInstruction { opcode: 0x3b }), - ), - ( - 0x3c, - Instruction::Valid(ValidInstruction { - opcode: Opcode::BIT(AddressingMode::AbsoluteIndexedWithX), - cycles: 4, - }), - ), - ( - 0x3d, - Instruction::Valid(ValidInstruction { - opcode: Opcode::AND(AddressingMode::AbsoluteIndexedWithX), - cycles: 4, - }), - ), - ( - 0x3e, - Instruction::Valid(ValidInstruction { - opcode: Opcode::ROL(AddressingMode::AbsoluteIndexedWithX), - cycles: 7, - }), - ), - ( - 0x3f, - Instruction::Valid(ValidInstruction { - opcode: Opcode::BBR3(AddressingMode::ProgramCounterRelativeTest), - cycles: 4, - }), - ), - ( - 0x40, - Instruction::Valid(ValidInstruction { - opcode: Opcode::RTI(AddressingMode::Stack), - cycles: 6, - }), - ), - ( - 0x41, - Instruction::Valid(ValidInstruction { - opcode: Opcode::EOR(AddressingMode::ZeroPageIndexedIndirect), - cycles: 6, - }), - ), - ( - 0x42, - Instruction::Invalid(InvalidInstruction { opcode: 0x42 }), - ), - ( - 0x43, - Instruction::Invalid(InvalidInstruction { opcode: 0x43 }), - ), - ( - 0x44, - Instruction::Invalid(InvalidInstruction { opcode: 0x44 }), - ), - ( - 0x45, - Instruction::Valid(ValidInstruction { - opcode: Opcode::EOR(AddressingMode::ZeroPage), - cycles: 3, - }), - ), - ( - 0x46, - Instruction::Valid(ValidInstruction { - opcode: Opcode::LSR(AddressingMode::ZeroPage), - cycles: 5, - }), - ), - ( - 0x47, - Instruction::Valid(ValidInstruction { - opcode: Opcode::RMB4(AddressingMode::ZeroPage), - cycles: 5, - }), - ), - ( - 0x48, - Instruction::Valid(ValidInstruction { - opcode: Opcode::PHA(AddressingMode::Stack), - cycles: 3, - }), - ), - ( - 0x49, - Instruction::Valid(ValidInstruction { - opcode: Opcode::EOR(AddressingMode::Immediate), - cycles: 2, - }), - ), - ( - 0x4a, - Instruction::Valid(ValidInstruction { - opcode: Opcode::LSR(AddressingMode::Accumulator), - cycles: 2, - }), - ), - ( - 0x4b, - Instruction::Invalid(InvalidInstruction { opcode: 0x4b }), - ), - ( - 0x4c, - Instruction::Valid(ValidInstruction { - opcode: Opcode::JMP(AddressingMode::AbsoluteA), - cycles: 3, - }), - ), - ( - 0x4d, - Instruction::Valid(ValidInstruction { - opcode: Opcode::EOR(AddressingMode::AbsoluteA), - cycles: 4, - }), - ), - ( - 0x4e, - Instruction::Valid(ValidInstruction { - opcode: Opcode::LSR(AddressingMode::AbsoluteA), - cycles: 6, - }), - ), - ( - 0x4f, - Instruction::Valid(ValidInstruction { - opcode: Opcode::BBR4(AddressingMode::ProgramCounterRelativeTest), - cycles: 4, - }), - ), - ( - 0x50, - Instruction::Valid(ValidInstruction { - opcode: Opcode::BVC(AddressingMode::ProgramCounterRelative), - cycles: 2, - }), - ), - ( - 0x51, - Instruction::Valid(ValidInstruction { - opcode: Opcode::EOR(AddressingMode::ZeroPageIndirectIndexedWithY), - cycles: 5, - }), - ), - ( - 0x52, - Instruction::Valid(ValidInstruction { - opcode: Opcode::EOR(AddressingMode::ZeroPageIndirect), - cycles: 5, - }), - ), - ( - 0x53, - Instruction::Invalid(InvalidInstruction { opcode: 0x53 }), - ), - ( - 0x54, - Instruction::Invalid(InvalidInstruction { opcode: 0x54 }), - ), - ( - 0x55, - Instruction::Valid(ValidInstruction { - opcode: Opcode::EOR(AddressingMode::ZeroPageIndexedWithX), - cycles: 4, - }), - ), - ( - 0x56, - Instruction::Valid(ValidInstruction { - opcode: Opcode::LSR(AddressingMode::ZeroPageIndexedWithX), - cycles: 6, - }), - ), - ( - 0x57, - Instruction::Valid(ValidInstruction { - opcode: Opcode::RMB5(AddressingMode::ZeroPage), - cycles: 5, - }), - ), - ( - 0x58, - Instruction::Valid(ValidInstruction { - opcode: Opcode::CLI(AddressingMode::Implied), - cycles: 2, - }), - ), - ( - 0x59, - Instruction::Valid(ValidInstruction { - opcode: Opcode::EOR(AddressingMode::AbsoluteIndexedWithY), - cycles: 4, - }), - ), - ( - 0x5a, - Instruction::Valid(ValidInstruction { - opcode: Opcode::PHY(AddressingMode::Stack), - cycles: 3, - }), - ), - ( - 0x5b, - Instruction::Invalid(InvalidInstruction { opcode: 0x5b }), - ), - ( - 0x5c, - Instruction::Invalid(InvalidInstruction { opcode: 0x5c }), - ), - ( - 0x5d, - Instruction::Valid(ValidInstruction { - opcode: Opcode::EOR(AddressingMode::AbsoluteIndexedWithX), - cycles: 4, - }), - ), - ( - 0x5e, - Instruction::Valid(ValidInstruction { - opcode: Opcode::LSR(AddressingMode::AbsoluteIndexedWithX), - cycles: 7, - }), - ), - ( - 0x5f, - Instruction::Valid(ValidInstruction { - opcode: Opcode::BBR5(AddressingMode::ProgramCounterRelativeTest), - cycles: 4, - }), - ), - ( - 0x60, - Instruction::Valid(ValidInstruction { - opcode: Opcode::RTS(AddressingMode::Stack), - cycles: 6, - }), - ), - ( - 0x61, - Instruction::Valid(ValidInstruction { - opcode: Opcode::ADC(AddressingMode::ZeroPageIndexedIndirect), - cycles: 6, - }), - ), - ( - 0x62, - Instruction::Invalid(InvalidInstruction { opcode: 0x62 }), - ), - ( - 0x63, - Instruction::Invalid(InvalidInstruction { opcode: 0x63 }), - ), - ( - 0x64, - Instruction::Valid(ValidInstruction { - opcode: Opcode::STZ(AddressingMode::ZeroPage), - cycles: 3, - }), - ), - ( - 0x65, - Instruction::Valid(ValidInstruction { - opcode: Opcode::ADC(AddressingMode::ZeroPage), - cycles: 3, - }), - ), - ( - 0x66, - Instruction::Valid(ValidInstruction { - opcode: Opcode::ROR(AddressingMode::ZeroPage), - cycles: 5, - }), - ), - ( - 0x67, - Instruction::Valid(ValidInstruction { - opcode: Opcode::RMB6(AddressingMode::ZeroPage), - cycles: 5, - }), - ), - ( - 0x68, - Instruction::Valid(ValidInstruction { - opcode: Opcode::PLA(AddressingMode::Stack), - cycles: 4, - }), - ), - ( - 0x69, - Instruction::Valid(ValidInstruction { - opcode: Opcode::ADC(AddressingMode::Immediate), - cycles: 2, - }), - ), - ( - 0x6a, - Instruction::Valid(ValidInstruction { - opcode: Opcode::ROR(AddressingMode::Accumulator), - cycles: 2, - }), - ), - ( - 0x6b, - Instruction::Invalid(InvalidInstruction { opcode: 0x6b }), - ), - ( - 0x6c, - Instruction::Valid(ValidInstruction { - opcode: Opcode::JMP(AddressingMode::AbsoluteIndirect), - cycles: 5, - }), - ), - ( - 0x6d, - Instruction::Valid(ValidInstruction { - opcode: Opcode::ADC(AddressingMode::AbsoluteA), - cycles: 4, - }), - ), - ( - 0x6e, - Instruction::Valid(ValidInstruction { - opcode: Opcode::ROR(AddressingMode::AbsoluteA), - cycles: 6, - }), - ), - ( - 0x6f, - Instruction::Valid(ValidInstruction { - opcode: Opcode::BBR6(AddressingMode::ProgramCounterRelativeTest), - cycles: 4, - }), - ), - ( - 0x70, - Instruction::Valid(ValidInstruction { - opcode: Opcode::BVS(AddressingMode::ProgramCounterRelative), - cycles: 2, - }), - ), - ( - 0x71, - Instruction::Valid(ValidInstruction { - opcode: Opcode::ADC(AddressingMode::ZeroPageIndirectIndexedWithY), - cycles: 5, - }), - ), - ( - 0x72, - Instruction::Valid(ValidInstruction { - opcode: Opcode::ADC(AddressingMode::ZeroPageIndirect), - cycles: 5, - }), - ), - ( - 0x73, - Instruction::Invalid(InvalidInstruction { opcode: 0x73 }), - ), - ( - 0x74, - Instruction::Valid(ValidInstruction { - opcode: Opcode::STZ(AddressingMode::ZeroPageIndexedWithX), - cycles: 4, - }), - ), - ( - 0x75, - Instruction::Valid(ValidInstruction { - opcode: Opcode::ADC(AddressingMode::ZeroPageIndexedWithX), - cycles: 4, - }), - ), - ( - 0x76, - Instruction::Valid(ValidInstruction { - opcode: Opcode::ROR(AddressingMode::ZeroPageIndexedWithX), - cycles: 6, - }), - ), - ( - 0x77, - Instruction::Valid(ValidInstruction { - opcode: Opcode::RMB7(AddressingMode::ZeroPage), - cycles: 5, - }), - ), - ( - 0x78, - Instruction::Valid(ValidInstruction { - opcode: Opcode::SEI(AddressingMode::Implied), - cycles: 2, - }), - ), - ( - 0x79, - Instruction::Valid(ValidInstruction { - opcode: Opcode::ADC(AddressingMode::AbsoluteIndexedWithY), - cycles: 4, - }), - ), - ( - 0x7a, - Instruction::Valid(ValidInstruction { - opcode: Opcode::PLY(AddressingMode::Stack), - cycles: 4, - }), - ), - ( - 0x7b, - Instruction::Invalid(InvalidInstruction { opcode: 0x7b }), - ), - ( - 0x7c, - Instruction::Valid(ValidInstruction { - opcode: Opcode::JMP(AddressingMode::AbsoluteIndexedIndirect), - cycles: 6, - }), - ), - ( - 0x7d, - Instruction::Valid(ValidInstruction { - opcode: Opcode::ADC(AddressingMode::AbsoluteIndexedWithX), - cycles: 4, - }), - ), - ( - 0x7e, - Instruction::Valid(ValidInstruction { - opcode: Opcode::ROR(AddressingMode::AbsoluteIndexedWithX), - cycles: 7, - }), - ), - ( - 0x7f, - Instruction::Valid(ValidInstruction { - opcode: Opcode::BBR7(AddressingMode::ProgramCounterRelativeTest), - cycles: 4, - }), - ), - ( - 0x80, - Instruction::Valid(ValidInstruction { - opcode: Opcode::BRA(AddressingMode::ProgramCounterRelative), - cycles: 3, - }), - ), - ( - 0x81, - Instruction::Valid(ValidInstruction { - opcode: Opcode::STA(AddressingMode::ZeroPageIndexedIndirect), - cycles: 6, - }), - ), - ( - 0x82, - Instruction::Invalid(InvalidInstruction { opcode: 0x82 }), - ), - ( - 0x83, - Instruction::Invalid(InvalidInstruction { opcode: 0x83 }), - ), - ( - 0x84, - Instruction::Valid(ValidInstruction { - opcode: Opcode::STY(AddressingMode::ZeroPage), - cycles: 3, - }), - ), - ( - 0x85, - Instruction::Valid(ValidInstruction { - opcode: Opcode::STA(AddressingMode::ZeroPage), - cycles: 3, - }), - ), - ( - 0x86, - Instruction::Valid(ValidInstruction { - opcode: Opcode::STX(AddressingMode::ZeroPage), - cycles: 3, - }), - ), - ( - 0x87, - Instruction::Valid(ValidInstruction { - opcode: Opcode::SMB0(AddressingMode::ZeroPage), - cycles: 5, - }), - ), - ( - 0x88, - Instruction::Valid(ValidInstruction { - opcode: Opcode::DEY(AddressingMode::Implied), - cycles: 2, - }), - ), - ( - 0x89, - Instruction::Valid(ValidInstruction { - opcode: Opcode::BIT(AddressingMode::Immediate), - cycles: 3, - }), - ), - ( - 0x8a, - Instruction::Valid(ValidInstruction { - opcode: Opcode::TXA(AddressingMode::Implied), - cycles: 2, - }), - ), - ( - 0x8b, - Instruction::Invalid(InvalidInstruction { opcode: 0x8b }), - ), - ( - 0x8c, - Instruction::Valid(ValidInstruction { - opcode: Opcode::STY(AddressingMode::AbsoluteA), - cycles: 4, - }), - ), - ( - 0x8d, - Instruction::Valid(ValidInstruction { - opcode: Opcode::STA(AddressingMode::AbsoluteA), - cycles: 4, - }), - ), - ( - 0x8e, - Instruction::Valid(ValidInstruction { - opcode: Opcode::STX(AddressingMode::AbsoluteA), - cycles: 4, - }), - ), - ( - 0x8f, - Instruction::Valid(ValidInstruction { - opcode: Opcode::BBS0(AddressingMode::ProgramCounterRelativeTest), - cycles: 4, - }), - ), - ( - 0x90, - Instruction::Valid(ValidInstruction { - opcode: Opcode::BCC(AddressingMode::ProgramCounterRelative), - cycles: 2, - }), - ), - ( - 0x91, - Instruction::Valid(ValidInstruction { - opcode: Opcode::STA(AddressingMode::ZeroPageIndirectIndexedWithY), - cycles: 6, - }), - ), - ( - 0x92, - Instruction::Valid(ValidInstruction { - opcode: Opcode::STA(AddressingMode::ZeroPageIndirect), - cycles: 5, - }), - ), - ( - 0x93, - Instruction::Invalid(InvalidInstruction { opcode: 0x93 }), - ), - ( - 0x94, - Instruction::Valid(ValidInstruction { - opcode: Opcode::STY(AddressingMode::ZeroPageIndexedWithX), - cycles: 4, - }), - ), - ( - 0x95, - Instruction::Valid(ValidInstruction { - opcode: Opcode::STA(AddressingMode::ZeroPageIndexedWithX), - cycles: 4, - }), - ), - ( - 0x96, - Instruction::Valid(ValidInstruction { - opcode: Opcode::STX(AddressingMode::ZeroPageIndexedWithY), - cycles: 4, - }), - ), - ( - 0x97, - Instruction::Valid(ValidInstruction { - opcode: Opcode::SMB1(AddressingMode::ZeroPage), - cycles: 5, - }), - ), - ( - 0x98, - Instruction::Valid(ValidInstruction { - opcode: Opcode::TYA(AddressingMode::Implied), - cycles: 2, - }), - ), - ( - 0x99, - Instruction::Valid(ValidInstruction { - opcode: Opcode::STA(AddressingMode::AbsoluteIndexedWithY), - cycles: 5, - }), - ), - ( - 0x9a, - Instruction::Valid(ValidInstruction { - opcode: Opcode::TXS(AddressingMode::Implied), - cycles: 2, - }), - ), - ( - 0x9b, - Instruction::Invalid(InvalidInstruction { opcode: 0x9b }), - ), - ( - 0x9c, - Instruction::Valid(ValidInstruction { - opcode: Opcode::STZ(AddressingMode::AbsoluteA), - cycles: 4, - }), - ), - ( - 0x9d, - Instruction::Valid(ValidInstruction { - opcode: Opcode::STA(AddressingMode::AbsoluteIndexedWithX), - cycles: 5, - }), - ), - ( - 0x9e, - Instruction::Valid(ValidInstruction { - opcode: Opcode::STZ(AddressingMode::AbsoluteIndexedWithX), - cycles: 5, - }), - ), - ( - 0x9f, - Instruction::Valid(ValidInstruction { - opcode: Opcode::BBS1(AddressingMode::ProgramCounterRelativeTest), - cycles: 4, - }), - ), - ( - 0xa0, - Instruction::Valid(ValidInstruction { - opcode: Opcode::LDY(AddressingMode::Immediate), - cycles: 2, - }), - ), - ( - 0xa1, - Instruction::Valid(ValidInstruction { - opcode: Opcode::LDA(AddressingMode::ZeroPageIndexedIndirect), - cycles: 6, - }), - ), - ( - 0xa2, - Instruction::Valid(ValidInstruction { - opcode: Opcode::LDX(AddressingMode::Immediate), - cycles: 2, - }), - ), - ( - 0xa3, - Instruction::Invalid(InvalidInstruction { opcode: 0xa3 }), - ), - ( - 0xa4, - Instruction::Valid(ValidInstruction { - opcode: Opcode::LDY(AddressingMode::ZeroPage), - cycles: 3, - }), - ), - ( - 0xa5, - Instruction::Valid(ValidInstruction { - opcode: Opcode::LDA(AddressingMode::ZeroPage), - cycles: 3, - }), - ), - ( - 0xa6, - Instruction::Valid(ValidInstruction { - opcode: Opcode::LDX(AddressingMode::ZeroPage), - cycles: 3, - }), - ), - ( - 0xa7, - Instruction::Valid(ValidInstruction { - opcode: Opcode::SMB2(AddressingMode::ZeroPage), - cycles: 5, - }), - ), - ( - 0xa8, - Instruction::Valid(ValidInstruction { - opcode: Opcode::TAY(AddressingMode::Implied), - cycles: 2, - }), - ), - ( - 0xa9, - Instruction::Valid(ValidInstruction { - opcode: Opcode::LDA(AddressingMode::Immediate), - cycles: 2, - }), - ), - ( - 0xaa, - Instruction::Valid(ValidInstruction { - opcode: Opcode::TAX(AddressingMode::Implied), - cycles: 2, - }), - ), - ( - 0xab, - Instruction::Invalid(InvalidInstruction { opcode: 0xab }), - ), - ( - 0xac, - Instruction::Valid(ValidInstruction { - opcode: Opcode::LDY(AddressingMode::AbsoluteA), - cycles: 4, - }), - ), - ( - 0xad, - Instruction::Valid(ValidInstruction { - opcode: Opcode::LDA(AddressingMode::AbsoluteA), - cycles: 4, - }), - ), - ( - 0xae, - Instruction::Valid(ValidInstruction { - opcode: Opcode::LDX(AddressingMode::AbsoluteA), - cycles: 4, - }), - ), - ( - 0xaf, - Instruction::Valid(ValidInstruction { - opcode: Opcode::BBS2(AddressingMode::ProgramCounterRelativeTest), - cycles: 4, - }), - ), - ( - 0xb0, - Instruction::Valid(ValidInstruction { - opcode: Opcode::BCS(AddressingMode::ProgramCounterRelative), - cycles: 2, - }), - ), - ( - 0xb1, - Instruction::Valid(ValidInstruction { - opcode: Opcode::LDA(AddressingMode::ZeroPageIndirectIndexedWithY), - cycles: 5, - }), - ), - ( - 0xb2, - Instruction::Valid(ValidInstruction { - opcode: Opcode::LDA(AddressingMode::ZeroPageIndirect), - cycles: 5, // Unsure, see https://cx16.dk/65c02/reference.html#LDA - }), - ), - ( - 0xb3, - Instruction::Invalid(InvalidInstruction { opcode: 0xb3 }), - ), - ( - 0xb4, - Instruction::Valid(ValidInstruction { - opcode: Opcode::LDY(AddressingMode::ZeroPageIndexedWithX), - cycles: 4, - }), - ), - ( - 0xb5, - Instruction::Valid(ValidInstruction { - opcode: Opcode::LDA(AddressingMode::ZeroPageIndexedWithX), - cycles: 4, - }), - ), - ( - 0xb6, - Instruction::Valid(ValidInstruction { - opcode: Opcode::LDX(AddressingMode::ZeroPageIndexedWithY), - cycles: 4, - }), - ), - ( - 0xb7, - Instruction::Valid(ValidInstruction { - opcode: Opcode::SMB3(AddressingMode::ZeroPage), - cycles: 5, - }), - ), - ( - 0xb8, - Instruction::Valid(ValidInstruction { - opcode: Opcode::CLV(AddressingMode::Implied), - cycles: 2, - }), - ), - ( - 0xb9, - Instruction::Valid(ValidInstruction { - opcode: Opcode::LDA(AddressingMode::AbsoluteIndexedWithY), - cycles: 4, - }), - ), - ( - 0xba, - Instruction::Valid(ValidInstruction { - opcode: Opcode::TSX(AddressingMode::Implied), - cycles: 2, - }), - ), - ( - 0xbb, - Instruction::Invalid(InvalidInstruction { opcode: 0xbb }), - ), - ( - 0xbc, - Instruction::Valid(ValidInstruction { - opcode: Opcode::LDY(AddressingMode::AbsoluteIndexedWithX), - cycles: 4, - }), - ), - ( - 0xbd, - Instruction::Valid(ValidInstruction { - opcode: Opcode::LDA(AddressingMode::AbsoluteIndexedWithX), - cycles: 4, - }), - ), - ( - 0xbe, - Instruction::Valid(ValidInstruction { - opcode: Opcode::LDX(AddressingMode::AbsoluteIndexedWithY), - cycles: 4, - }), - ), - ( - 0xbf, - Instruction::Valid(ValidInstruction { - opcode: Opcode::BBS3(AddressingMode::ProgramCounterRelativeTest), - cycles: 4, - }), - ), - ( - 0xc0, - Instruction::Valid(ValidInstruction { - opcode: Opcode::CPY(AddressingMode::Immediate), - cycles: 2, - }), - ), - ( - 0xc1, - Instruction::Valid(ValidInstruction { - opcode: Opcode::CMP(AddressingMode::ZeroPageIndexedIndirect), - cycles: 6, - }), - ), - ( - 0xc2, - Instruction::Invalid(InvalidInstruction { opcode: 0xc2 }), - ), - ( - 0xc3, - Instruction::Invalid(InvalidInstruction { opcode: 0xc3 }), - ), - ( - 0xc4, - Instruction::Valid(ValidInstruction { - opcode: Opcode::CPY(AddressingMode::ZeroPage), - cycles: 3, - }), - ), - ( - 0xc5, - Instruction::Valid(ValidInstruction { - opcode: Opcode::CMP(AddressingMode::ZeroPage), - cycles: 3, - }), - ), - ( - 0xc6, - Instruction::Valid(ValidInstruction { - opcode: Opcode::DEC(AddressingMode::ZeroPage), - cycles: 5, - }), - ), - ( - 0xc7, - Instruction::Valid(ValidInstruction { - opcode: Opcode::SMB4(AddressingMode::ZeroPage), - cycles: 5, - }), - ), - ( - 0xc8, - Instruction::Valid(ValidInstruction { - opcode: Opcode::INY(AddressingMode::Implied), - cycles: 2, - }), - ), - ( - 0xc9, - Instruction::Valid(ValidInstruction { - opcode: Opcode::CMP(AddressingMode::Immediate), - cycles: 2, - }), - ), - ( - 0xca, - Instruction::Valid(ValidInstruction { - opcode: Opcode::DEX(AddressingMode::Implied), - cycles: 2, - }), - ), - ( - 0xcb, - Instruction::Valid(ValidInstruction { - opcode: Opcode::WAI(AddressingMode::Implied), - cycles: 3, - }), - ), - ( - 0xcc, - Instruction::Valid(ValidInstruction { - opcode: Opcode::CPY(AddressingMode::AbsoluteA), - cycles: 4, - }), - ), - ( - 0xcd, - Instruction::Valid(ValidInstruction { - opcode: Opcode::CMP(AddressingMode::AbsoluteA), - cycles: 4, - }), - ), - ( - 0xce, - Instruction::Valid(ValidInstruction { - opcode: Opcode::DEC(AddressingMode::AbsoluteA), - cycles: 6, - }), - ), - ( - 0xcf, - Instruction::Valid(ValidInstruction { - opcode: Opcode::BBS4(AddressingMode::ProgramCounterRelativeTest), - cycles: 4, - }), - ), - ( - 0xd0, - Instruction::Valid(ValidInstruction { - opcode: Opcode::BNE(AddressingMode::ProgramCounterRelative), - cycles: 2, - }), - ), - ( - 0xd1, - Instruction::Valid(ValidInstruction { - opcode: Opcode::CMP(AddressingMode::ZeroPageIndirectIndexedWithY), - cycles: 5, - }), - ), - ( - 0xd2, - Instruction::Valid(ValidInstruction { - opcode: Opcode::CMP(AddressingMode::ZeroPageIndirect), - cycles: 5, // Unsure, look here: https://cx16.dk/65c02/reference.html#CMP - }), - ), - ( - 0xd3, - Instruction::Invalid(InvalidInstruction { opcode: 0xd3 }), - ), - ( - 0xd4, - Instruction::Invalid(InvalidInstruction { opcode: 0xd4 }), - ), - ( - 0xd5, - Instruction::Valid(ValidInstruction { - opcode: Opcode::CMP(AddressingMode::ZeroPageIndexedWithX), - cycles: 4, - }), - ), - ( - 0xd6, - Instruction::Valid(ValidInstruction { - opcode: Opcode::DEC(AddressingMode::ZeroPageIndexedWithX), - cycles: 6, - }), - ), - ( - 0xd7, - Instruction::Valid(ValidInstruction { - opcode: Opcode::SMB5(AddressingMode::ZeroPage), - cycles: 5, - }), - ), - ( - 0xd8, - Instruction::Valid(ValidInstruction { - opcode: Opcode::CLD(AddressingMode::Implied), - cycles: 2, - }), - ), - ( - 0xd9, - Instruction::Valid(ValidInstruction { - opcode: Opcode::CMP(AddressingMode::AbsoluteIndexedWithY), - cycles: 4, - }), - ), - ( - 0xda, - Instruction::Valid(ValidInstruction { - opcode: Opcode::PHX(AddressingMode::Stack), - cycles: 3, - }), - ), - ( - 0xdb, - Instruction::Valid(ValidInstruction { - opcode: Opcode::STP(AddressingMode::Implied), - cycles: 3, - }), - ), - ( - 0xdc, - Instruction::Invalid(InvalidInstruction { opcode: 0xdc }), - ), - ( - 0xdd, - Instruction::Valid(ValidInstruction { - opcode: Opcode::CMP(AddressingMode::AbsoluteIndexedWithX), - cycles: 4, - }), - ), - ( - 0xde, - Instruction::Valid(ValidInstruction { - opcode: Opcode::DEC(AddressingMode::AbsoluteIndexedWithX), - cycles: 7, - }), - ), - ( - 0xdf, - Instruction::Valid(ValidInstruction { - opcode: Opcode::BBS5(AddressingMode::ProgramCounterRelativeTest), - cycles: 4, - }), - ), - ( - 0xe0, - Instruction::Valid(ValidInstruction { - opcode: Opcode::CPX(AddressingMode::Immediate), - cycles: 2, - }), - ), - ( - 0xe1, - Instruction::Valid(ValidInstruction { - opcode: Opcode::SBC(AddressingMode::ZeroPageIndexedIndirect), - cycles: 6, - }), - ), - ( - 0xe2, - Instruction::Invalid(InvalidInstruction { opcode: 0xe2 }), - ), - ( - 0xe3, - Instruction::Invalid(InvalidInstruction { opcode: 0xe3 }), - ), - ( - 0xe4, - Instruction::Valid(ValidInstruction { - opcode: Opcode::CPX(AddressingMode::ZeroPage), - cycles: 3, - }), - ), - ( - 0xe5, - Instruction::Valid(ValidInstruction { - opcode: Opcode::SBC(AddressingMode::ZeroPage), - cycles: 3, - }), - ), - ( - 0xe6, - Instruction::Valid(ValidInstruction { - opcode: Opcode::INC(AddressingMode::ZeroPage), - cycles: 5, - }), - ), - ( - 0xe7, - Instruction::Valid(ValidInstruction { - opcode: Opcode::SMB6(AddressingMode::ZeroPage), - cycles: 5, - }), - ), - ( - 0xe8, - Instruction::Valid(ValidInstruction { - opcode: Opcode::INX(AddressingMode::Implied), - cycles: 2, - }), - ), - ( - 0xe9, - Instruction::Valid(ValidInstruction { - opcode: Opcode::SBC(AddressingMode::Immediate), - cycles: 2, - }), - ), - ( - 0xea, - Instruction::Valid(ValidInstruction { - opcode: Opcode::NOP(AddressingMode::Implied), - cycles: 2, - }), - ), - ( - 0xeb, - Instruction::Invalid(InvalidInstruction { opcode: 0xeb }), - ), - ( - 0xec, - Instruction::Valid(ValidInstruction { - opcode: Opcode::CPX(AddressingMode::AbsoluteA), - cycles: 4, - }), - ), - ( - 0xed, - Instruction::Valid(ValidInstruction { - opcode: Opcode::SBC(AddressingMode::AbsoluteA), - cycles: 4, - }), - ), - ( - 0xee, - Instruction::Valid(ValidInstruction { - opcode: Opcode::INC(AddressingMode::AbsoluteA), - cycles: 6, - }), - ), - ( - 0xef, - Instruction::Valid(ValidInstruction { - opcode: Opcode::BBS6(AddressingMode::ProgramCounterRelativeTest), - cycles: 4, - }), - ), - ( - 0xf0, - Instruction::Valid(ValidInstruction { - opcode: Opcode::BEQ(AddressingMode::ProgramCounterRelative), - cycles: 2, - }), - ), - ( - 0xf1, - Instruction::Valid(ValidInstruction { - opcode: Opcode::SBC(AddressingMode::ZeroPageIndirectIndexedWithY), - cycles: 5, - }), - ), - ( - 0xf2, - Instruction::Valid(ValidInstruction { - opcode: Opcode::SBC(AddressingMode::ZeroPageIndirect), - cycles: 5, - }), - ), - ( - 0xf3, - Instruction::Invalid(InvalidInstruction { opcode: 0xf3 }), - ), - ( - 0xf4, - Instruction::Invalid(InvalidInstruction { opcode: 0xf4 }), - ), - ( - 0xf5, - Instruction::Valid(ValidInstruction { - opcode: Opcode::SBC(AddressingMode::ZeroPageIndexedWithX), - cycles: 4, - }), - ), - ( - 0xf6, - Instruction::Valid(ValidInstruction { - opcode: Opcode::INC(AddressingMode::ZeroPageIndexedWithX), - cycles: 6, - }), - ), - ( - 0xf7, - Instruction::Valid(ValidInstruction { - opcode: Opcode::SMB7(AddressingMode::ZeroPage), - cycles: 5, - }), - ), - ( - 0xf8, - Instruction::Valid(ValidInstruction { - opcode: Opcode::SED(AddressingMode::Implied), - cycles: 2, - }), - ), - ( - 0xf9, - Instruction::Valid(ValidInstruction { - opcode: Opcode::SBC(AddressingMode::AbsoluteIndexedWithY), - cycles: 4, - }), - ), - ( - 0xfa, - Instruction::Valid(ValidInstruction { - opcode: Opcode::PLX(AddressingMode::Stack), - cycles: 4, - }), - ), - ( - 0xfb, - Instruction::Invalid(InvalidInstruction { opcode: 0xfb }), - ), - ( - 0xfc, - Instruction::Invalid(InvalidInstruction { opcode: 0xfc }), - ), - ( - 0xfd, - Instruction::Valid(ValidInstruction { - opcode: Opcode::SBC(AddressingMode::AbsoluteIndexedWithX), - cycles: 4, - }), - ), - ( - 0xfe, - Instruction::Valid(ValidInstruction { - opcode: Opcode::INC(AddressingMode::AbsoluteIndexedWithX), - cycles: 7, - }), - ), - ( - 0xff, - Instruction::Valid(ValidInstruction { - opcode: Opcode::BBS7(AddressingMode::ProgramCounterRelativeTest), - cycles: 4, - }), - ), - ]); - opcodes.get(&opcode).unwrap().clone() -} - -#[derive(Clone, Debug)] -enum Opcode { - ADC(AddressingMode), - AND(AddressingMode), - ASL(AddressingMode), - BBR0(AddressingMode), - BBR1(AddressingMode), - BBR2(AddressingMode), - BBR3(AddressingMode), - BBR4(AddressingMode), - BBR5(AddressingMode), - BBR6(AddressingMode), - BBR7(AddressingMode), - BBS0(AddressingMode), - BBS1(AddressingMode), - BBS2(AddressingMode), - BBS3(AddressingMode), - BBS4(AddressingMode), - BBS5(AddressingMode), - BBS6(AddressingMode), - BBS7(AddressingMode), - BCC(AddressingMode), - BCS(AddressingMode), - BEQ(AddressingMode), - BIT(AddressingMode), - BMI(AddressingMode), - BNE(AddressingMode), - BPL(AddressingMode), - BRA(AddressingMode), - BRK(AddressingMode), - BVC(AddressingMode), - BVS(AddressingMode), - CLC(AddressingMode), - CLD(AddressingMode), - CLI(AddressingMode), - CLV(AddressingMode), - CMP(AddressingMode), - CPX(AddressingMode), - CPY(AddressingMode), - DEC(AddressingMode), - DEX(AddressingMode), - DEY(AddressingMode), - EOR(AddressingMode), - INC(AddressingMode), - INX(AddressingMode), - INY(AddressingMode), - JMP(AddressingMode), - JSR(AddressingMode), - LDA(AddressingMode), - LDX(AddressingMode), - LDY(AddressingMode), - LSR(AddressingMode), - NOP(AddressingMode), - ORA(AddressingMode), - PHA(AddressingMode), - PHP(AddressingMode), - PHX(AddressingMode), - PHY(AddressingMode), - PLA(AddressingMode), - PLP(AddressingMode), - PLX(AddressingMode), - PLY(AddressingMode), - RMB0(AddressingMode), - RMB1(AddressingMode), - RMB2(AddressingMode), - RMB3(AddressingMode), - RMB4(AddressingMode), - RMB5(AddressingMode), - RMB6(AddressingMode), - RMB7(AddressingMode), - ROL(AddressingMode), - ROR(AddressingMode), - RTI(AddressingMode), - RTS(AddressingMode), - SBC(AddressingMode), - SEC(AddressingMode), - SED(AddressingMode), - SEI(AddressingMode), - SMB0(AddressingMode), - SMB1(AddressingMode), - SMB2(AddressingMode), - SMB3(AddressingMode), - SMB4(AddressingMode), - SMB5(AddressingMode), - SMB6(AddressingMode), - SMB7(AddressingMode), - STA(AddressingMode), - STP(AddressingMode), - STX(AddressingMode), - STY(AddressingMode), - STZ(AddressingMode), - TAX(AddressingMode), - TAY(AddressingMode), - TRB(AddressingMode), - TSB(AddressingMode), - TSX(AddressingMode), - TXA(AddressingMode), - TXS(AddressingMode), - TYA(AddressingMode), - WAI(AddressingMode), -} - -#[derive(Clone, Copy)] -enum AddressingModeValue { - Implied, // Used when an instruction doesn't need an operation, e.g. RTS - Relative(Byte), // Used by branch instructions to offset the program counter - RelativeTest(Byte, Byte), // Used by branch instructions to offset the program counter - Absolute(Word), // Just a plain ol' address - Accumulator(Byte), // This isn't technically accurate, since the datasheet says this would be - // Implied, but we do use the value of the accumulator as the operand so this - // is how i'm gonna do it -} - -impl TryFrom for u16 { - type Error = AddressingModeError; - fn try_from(value: AddressingModeValue) -> Result { - match value { - AddressingModeValue::Implied => Err(AddressingModeError::IncompatibleAddrMode), - AddressingModeValue::RelativeTest(_zero_page, offset) => Ok(offset as u16), - AddressingModeValue::Relative(inner_value) => Ok(inner_value as u16), - AddressingModeValue::Absolute(inner_value) => Ok(inner_value), - AddressingModeValue::Accumulator(inner_value) => Ok(inner_value as u16), - } - } -} - -// These functions also need to increment the cpu program counter by the number of bytes they read from memory -type AddressingModeFunction = fn(&mut Cpu) -> AddressingModeValue; - -fn get_address( - mode: &AddressingMode, - cpu: &mut Cpu, -) -> Result { - fn accumulator(cpu: &mut Cpu) -> AddressingModeValue { - let byte = cpu.a; - AddressingModeValue::Accumulator(byte) - } - - fn implied(_cpu: &mut Cpu) -> AddressingModeValue { - // i - AddressingModeValue::Implied - } - - fn immediate(cpu: &mut Cpu) -> AddressingModeValue { - // # - let address: Word = cpu.pc; - cpu.pc += 1; - AddressingModeValue::Absolute(address) - } - - fn absolute_a(cpu: &mut Cpu) -> Result { - // a - let address = cpu.read_word(cpu.pc)?; - cpu.pc += 2; - Ok(AddressingModeValue::Absolute(address)) - } - - fn zero_page(cpu: &mut Cpu) -> Result { - // zp - let address = cpu.read(cpu.pc)?; - cpu.pc += 2; - Ok(AddressingModeValue::Absolute(address as Word)) - } - - fn absolute_indexed_with_x( - // a, y - cpu: &mut Cpu, - ) -> Result { - let word = cpu.read_word(cpu.pc)?; - cpu.pc += 2; - let address: Word = word + cpu.x as u16; - Ok(AddressingModeValue::Absolute(address)) - } - - fn absolute_indexed_with_y( - // a, y - cpu: &mut Cpu, - ) -> Result { - let word = cpu.read_word(cpu.pc)?; - cpu.pc += 2; - let address: Word = word + cpu.y as u16; - Ok(AddressingModeValue::Absolute(address)) - } - - fn zero_page_indexed_with_x( - // zp, x - cpu: &mut Cpu, - ) -> Result { - let byte = cpu.read(cpu.pc)?; - cpu.pc += 1; - let address: Word = (byte + cpu.x) as u16; - Ok(AddressingModeValue::Absolute(address)) - } - - fn zero_page_indexed_with_y( - // zp, y - cpu: &mut Cpu, - ) -> Result { - let byte = cpu.read(cpu.pc)?; - cpu.pc += 1; - let address: Word = (byte + cpu.y) as u16; - Ok(AddressingModeValue::Absolute(address)) - } - - fn absolute_indirect( - // (a) - cpu: &mut Cpu, - ) -> Result { - let word = cpu.read_word(cpu.pc)?; - let address = cpu.read_word(word)?; - cpu.pc += 2; - Ok(AddressingModeValue::Absolute(address)) - } - - fn absolute_indexed_indirect( - // (a, x), only used with the JMP instruction - cpu: &mut Cpu, - ) -> Result { - let word = cpu.read_word(cpu.pc)?; - let address = cpu.read_word(word + cpu.x as Word)?; - cpu.pc += 2; - Ok(AddressingModeValue::Absolute(address)) - } - - fn zero_page_indexed_indirect( - // (zp, x) - cpu: &mut Cpu, - ) -> Result { - let byte = cpu.read(cpu.pc)?; - let address = cpu.read_word((byte + cpu.x) as Word)?; // Anytime you see something like `byte as Word`, it's using the byte as a zero-page address - cpu.pc += 1; - Ok(AddressingModeValue::Absolute(address)) - } - - fn zero_page_indirect_indexed_with_y( - // (zp), y - cpu: &mut Cpu, - ) -> Result { - let byte: Byte = cpu.read(cpu.pc)?; - let address: Word = cpu.read_word(byte as Word)?; - cpu.pc += 1; - Ok(AddressingModeValue::Absolute(address + cpu.y as Word)) - } - - fn relative( - // r - cpu: &mut Cpu, - ) -> Result { - let byte: Byte = cpu.read(cpu.pc)?; - cpu.pc += 1; - Ok(AddressingModeValue::Relative(byte)) - } - - fn relative_test( - // r - cpu: &mut Cpu, - ) -> Result { - let byte: Byte = cpu.read(cpu.pc)?; - cpu.pc += 1; - let address = cpu.read(cpu.pc)?; - cpu.pc += 1; - Ok(AddressingModeValue::RelativeTest(byte, address)) - } - - match mode { - AddressingMode::AbsoluteA => absolute_a(cpu), - AddressingMode::AbsoluteIndexedWithX => absolute_indexed_with_x(cpu), - AddressingMode::AbsoluteIndexedWithY => absolute_indexed_with_y(cpu), - AddressingMode::AbsoluteIndirect => absolute_indirect(cpu), - AddressingMode::AbsoluteIndexedIndirect => absolute_indexed_indirect(cpu), - AddressingMode::Immediate => Ok(immediate(cpu)), - AddressingMode::ProgramCounterRelative => relative(cpu), - AddressingMode::ZeroPage => zero_page(cpu), - AddressingMode::ZeroPageIndexedWithX => zero_page_indexed_with_x(cpu), - AddressingMode::ZeroPageIndexedWithY => zero_page_indexed_with_y(cpu), - AddressingMode::ZeroPageIndirect => todo!(), - AddressingMode::ZeroPageIndexedIndirect => zero_page_indexed_indirect(cpu), - AddressingMode::ZeroPageIndirectIndexedWithY => zero_page_indirect_indexed_with_y(cpu), - AddressingMode::Accumulator => Ok(accumulator(cpu)), - AddressingMode::ProgramCounterRelativeTest => relative_test(cpu), - _ => Ok(implied(cpu)), - } -} - -fn signed_byte_to_word(value: Byte) -> Word { - let mut value = u16::from(value); - if value & 0x80 > 0 { - value |= 0xff00; - } - value -} - -fn branch( - cpu: &mut Cpu, - condition: bool, - value: AddressingModeValue, -) -> Result<(), AddressingModeError> { - match value { - AddressingModeValue::Relative(address) => { - let address = signed_byte_to_word(address).wrapping_add(cpu.pc); - if condition { - if address & 0xff00 != cpu.pc & 0xff00 { - cpu.pending_cycles += 2; - } else { - cpu.pending_cycles += 1; - } - cpu.pc = address; - } - Ok(()) - } - AddressingModeValue::RelativeTest(_zero_page, address) => { - let address = signed_byte_to_word(address).wrapping_add(cpu.pc); - if condition { - if address & 0xff00 != cpu.pc & 0xff00 { - cpu.pending_cycles += 2; - } else { - cpu.pending_cycles += 1; - } - cpu.pc = address; - } - Ok(()) - } - _ => Err(AddressingModeError::IncompatibleAddrMode), - } -} - -impl Opcode { - fn call(&self, cpu: &mut Cpu) -> Result<(), GeorgeErrorKind> { - match self { - Opcode::ADC(mode) => match mode { - AddressingMode::Immediate - | AddressingMode::ZeroPage - | AddressingMode::ZeroPageIndexedWithX - | AddressingMode::AbsoluteA - | AddressingMode::AbsoluteIndexedWithX - | AddressingMode::AbsoluteIndexedWithY - | AddressingMode::ZeroPageIndirect - | AddressingMode::ZeroPageIndexedIndirect - | AddressingMode::ZeroPageIndirectIndexedWithY => { - let address = get_address(mode, cpu)?; - let byte = cpu.read(address.try_into()?)?; - let carry = cpu.get_flag(StatusFlag::Carry); - let result = cpu.a as Word + byte as Word + carry as Word; - cpu.set_flag(StatusFlag::Carry, result > u16::from(u8::max_value())); - cpu.set_flag(StatusFlag::Zero, result as Byte == 0); - cpu.set_flag( - StatusFlag::Overflow, - (cpu.a ^ byte) & (cpu.a ^ result as Byte) & 0b1000_0000 > 0, - // Truly have no idea what's happening here, - // check out https://docs.rs/emulator_6502/latest/src/emulator_6502/opcodes/mod.rs.html - ); - cpu.set_flag(StatusFlag::Negative, cpu.is_negative(result as Byte)); - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::AND(mode) => match mode { - AddressingMode::Immediate - | AddressingMode::ZeroPage - | AddressingMode::ZeroPageIndexedWithX - | AddressingMode::AbsoluteA - | AddressingMode::AbsoluteIndexedWithX - | AddressingMode::AbsoluteIndexedWithY - | AddressingMode::ZeroPageIndirect - | AddressingMode::ZeroPageIndexedIndirect - | AddressingMode::ZeroPageIndirectIndexedWithY => { - let address = get_address(mode, cpu)?; - cpu.a &= cpu.read(address.try_into()?)?; - cpu.set_flag(StatusFlag::Zero, cpu.a == 0); - cpu.set_flag(StatusFlag::Negative, cpu.is_negative(cpu.a)); - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::ASL(mode) => { - fn asl(cpu: &mut Cpu, value: Byte) -> Byte { - cpu.set_flag(StatusFlag::Carry, value & 0b1000_0000 == 0b1000_0000); - let shifted_value = value << 1; - cpu.set_flag( - StatusFlag::Negative, - value & StatusFlag::Negative as Byte > 0, - ); - cpu.set_flag(StatusFlag::Zero, shifted_value == 0); - shifted_value - } - match mode { - AddressingMode::Accumulator => { - cpu.a = asl(cpu, cpu.a); - Ok(()) - } - AddressingMode::AbsoluteA - | AddressingMode::AbsoluteIndexedWithX - | AddressingMode::ZeroPage - | AddressingMode::ZeroPageIndexedWithX => { - let address = get_address(mode, cpu)?; - let value = cpu.read(address.try_into()?)?; - let result = asl(cpu, value); - cpu.write(address.try_into()?, result)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - } - } - Opcode::BBR0(mode) => match mode { - // These instructions are weird, cause they're relative, except the byte being tested is immediate, - // so i'm not sure if what i've already written is going to model this accurately - AddressingMode::ProgramCounterRelativeTest => match get_address(mode, cpu) { - Ok(value) => match value { - AddressingModeValue::RelativeTest(byte, _address) => { - let zero_page_address = byte as Word; - let test_byte = cpu.read(zero_page_address)?; - branch(cpu, test_byte & 0b0000_0001 != 0b0000_0001, value)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Err(error) => Err(GeorgeErrorKind::Execution(error)), - }, - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::BBR1(mode) => match mode { - AddressingMode::ProgramCounterRelativeTest => match get_address(mode, cpu) { - Ok(value) => match value { - AddressingModeValue::RelativeTest(byte, _address) => { - let zero_page_address = byte as Word; - let test_byte = cpu.read(zero_page_address)?; - branch(cpu, test_byte & 0b0000_0010 != 0b0000_0010, value)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Err(error) => Err(GeorgeErrorKind::Execution(error)), - }, - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::BBR2(mode) => match mode { - AddressingMode::ProgramCounterRelativeTest => match get_address(mode, cpu) { - Ok(value) => match value { - AddressingModeValue::RelativeTest(byte, _address) => { - let zero_page_address = byte as Word; - let test_byte = cpu.read(zero_page_address)?; - branch(cpu, test_byte & 0b0000_0100 != 0b0000_0100, value)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Err(error) => Err(GeorgeErrorKind::Execution(error)), - }, - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::BBR3(mode) => match mode { - AddressingMode::ProgramCounterRelativeTest => match get_address(mode, cpu) { - Ok(value) => match value { - AddressingModeValue::RelativeTest(byte, _address) => { - let zero_page_address = byte as Word; - let test_byte = cpu.read(zero_page_address)?; - branch(cpu, test_byte & 0b0000_1000 != 0b0000_1000, value)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Err(error) => Err(GeorgeErrorKind::Execution(error)), - }, - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::BBR4(mode) => match mode { - AddressingMode::ProgramCounterRelativeTest => match get_address(mode, cpu) { - Ok(value) => match value { - AddressingModeValue::RelativeTest(byte, _address) => { - let zero_page_address = byte as Word; - let test_byte = cpu.read(zero_page_address)?; - branch(cpu, test_byte & 0b0001_0000 != 0b0001_0000, value)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Err(error) => Err(GeorgeErrorKind::Execution(error)), - }, - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::BBR5(mode) => match mode { - AddressingMode::ProgramCounterRelativeTest => match get_address(mode, cpu) { - Ok(value) => match value { - AddressingModeValue::RelativeTest(byte, _address) => { - let zero_page_address = byte as Word; - let test_byte = cpu.read(zero_page_address)?; - branch(cpu, test_byte & 0b0010_0000 != 0b0010_0000, value)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Err(error) => Err(GeorgeErrorKind::Execution(error)), - }, - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::BBR6(mode) => match mode { - AddressingMode::ProgramCounterRelativeTest => match get_address(mode, cpu) { - Ok(value) => match value { - AddressingModeValue::RelativeTest(byte, _address) => { - let zero_page_address = byte as Word; - let test_byte = cpu.read(zero_page_address)?; - branch(cpu, test_byte & 0b0100_0000 != 0b0100_0000, value)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Err(error) => Err(GeorgeErrorKind::Execution(error)), - }, - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::BBR7(mode) => match mode { - AddressingMode::ProgramCounterRelativeTest => match get_address(mode, cpu) { - Ok(value) => match value { - AddressingModeValue::RelativeTest(byte, _address) => { - let zero_page_address = byte as Word; - let test_byte = cpu.read(zero_page_address)?; - branch(cpu, test_byte & 0b1000_0000 != 0b1000_0000, value)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Err(error) => Err(GeorgeErrorKind::Execution(error)), - }, - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::BBS0(mode) => match mode { - AddressingMode::ProgramCounterRelativeTest => match get_address(mode, cpu) { - Ok(value) => match value { - AddressingModeValue::RelativeTest(byte, _address) => { - let zero_page_address = byte as Word; - let test_byte = cpu.read(zero_page_address)?; - branch(cpu, test_byte & 0b0000_0001 == 0b0000_0001, value)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Err(error) => Err(GeorgeErrorKind::Execution(error)), - }, - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::BBS1(mode) => match mode { - AddressingMode::ProgramCounterRelativeTest => match get_address(mode, cpu) { - Ok(value) => match value { - AddressingModeValue::RelativeTest(byte, _address) => { - let zero_page_address = byte as Word; - let test_byte = cpu.read(zero_page_address)?; - branch(cpu, test_byte & 0b0000_0010 == 0b0000_0010, value)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Err(error) => Err(GeorgeErrorKind::Execution(error)), - }, - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::BBS2(mode) => match mode { - AddressingMode::ProgramCounterRelativeTest => match get_address(mode, cpu) { - Ok(value) => match value { - AddressingModeValue::RelativeTest(byte, _address) => { - let zero_page_address = byte as Word; - let test_byte = cpu.read(zero_page_address)?; - branch(cpu, test_byte & 0b0000_0100 == 0b0000_0100, value)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Err(error) => Err(GeorgeErrorKind::Execution(error)), - }, - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::BBS3(mode) => match mode { - AddressingMode::ProgramCounterRelativeTest => match get_address(mode, cpu) { - Ok(value) => match value { - AddressingModeValue::RelativeTest(byte, _address) => { - let zero_page_address = byte as Word; - let test_byte = cpu.read(zero_page_address)?; - branch(cpu, test_byte & 0b0000_1000 == 0b0000_1000, value)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Err(error) => Err(GeorgeErrorKind::Execution(error)), - }, - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::BBS4(mode) => match mode { - AddressingMode::ProgramCounterRelativeTest => match get_address(mode, cpu) { - Ok(value) => match value { - AddressingModeValue::RelativeTest(byte, _address) => { - let zero_page_address = byte as Word; - let test_byte = cpu.read(zero_page_address)?; - branch(cpu, test_byte & 0b0001_0000 == 0b0001_0000, value)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Err(error) => Err(GeorgeErrorKind::Execution(error)), - }, - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::BBS5(mode) => match mode { - AddressingMode::ProgramCounterRelativeTest => match get_address(mode, cpu) { - Ok(value) => match value { - AddressingModeValue::RelativeTest(byte, _address) => { - let zero_page_address = byte as Word; - let test_byte = cpu.read(zero_page_address)?; - branch(cpu, test_byte & 0b0010_0000 == 0b0010_0000, value)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Err(error) => Err(GeorgeErrorKind::Execution(error)), - }, - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::BBS6(mode) => match mode { - AddressingMode::ProgramCounterRelativeTest => match get_address(mode, cpu) { - Ok(value) => match value { - AddressingModeValue::RelativeTest(byte, _address) => { - let zero_page_address = byte as Word; - let test_byte = cpu.read(zero_page_address)?; - branch(cpu, test_byte & 0b0100_0000 == 0b0100_0000, value)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Err(error) => Err(GeorgeErrorKind::Execution(error)), - }, - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::BBS7(mode) => match mode { - AddressingMode::ProgramCounterRelativeTest => match get_address(mode, cpu) { - Ok(value) => match value { - AddressingModeValue::RelativeTest(byte, _address) => { - let zero_page_address = byte as Word; - let test_byte = cpu.read(zero_page_address)?; - branch(cpu, test_byte & 0b1000_0000 == 0b1000_0000, value)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Err(error) => Err(GeorgeErrorKind::Execution(error)), - }, - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::BCC(mode) => match mode { - AddressingMode::ProgramCounterRelative => { - let address = get_address(mode, cpu)?; - branch(cpu, !cpu.get_flag(StatusFlag::Carry), address)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::BCS(mode) => match mode { - AddressingMode::ProgramCounterRelative => { - let address = get_address(mode, cpu)?; - branch(cpu, cpu.get_flag(StatusFlag::Carry), address)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::BEQ(mode) => match mode { - AddressingMode::ProgramCounterRelative => { - let address = get_address(mode, cpu)?; - branch(cpu, cpu.get_flag(StatusFlag::Zero), address)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::BIT(mode) => match mode { - AddressingMode::Immediate - | AddressingMode::ZeroPage - | AddressingMode::ZeroPageIndexedWithX - | AddressingMode::AbsoluteA - | AddressingMode::AbsoluteIndexedWithX => { - let address = get_address(mode, cpu)?; - let result = cpu.a & cpu.read(address.try_into()?)?; - cpu.set_flag(StatusFlag::Zero, result == 0); - cpu.set_flag( - StatusFlag::Overflow, - result & StatusFlag::Overflow as Byte == StatusFlag::Overflow as Byte, - ); - cpu.set_flag( - StatusFlag::Negative, - result & StatusFlag::Negative as Byte == StatusFlag::Negative as Byte, - ); - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::BMI(mode) => match mode { - AddressingMode::ProgramCounterRelative => { - let address = get_address(mode, cpu)?; - branch(cpu, cpu.get_flag(StatusFlag::Negative), address)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::BNE(mode) => match mode { - AddressingMode::ProgramCounterRelative => { - let address = get_address(mode, cpu)?; - branch(cpu, !cpu.get_flag(StatusFlag::Zero), address)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::BPL(mode) => match mode { - AddressingMode::ProgramCounterRelative => { - let address = get_address(mode, cpu)?; - branch(cpu, !cpu.get_flag(StatusFlag::Negative), address)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::BRA(mode) => match mode { - AddressingMode::ProgramCounterRelative => { - let address = get_address(mode, cpu)?; - branch(cpu, true, address)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::BRK(mode) => match mode { - AddressingMode::Implied => { - cpu.set_flag(StatusFlag::Brk, true); - panic!("Interrupts unimplemented!"); - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::BVC(mode) => match mode { - AddressingMode::ProgramCounterRelative => { - let address = get_address(mode, cpu)?; - branch(cpu, !cpu.get_flag(StatusFlag::Overflow), address)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::BVS(mode) => match mode { - AddressingMode::ProgramCounterRelative => { - let address = get_address(mode, cpu)?; - branch(cpu, cpu.get_flag(StatusFlag::Overflow), address)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::CLC(mode) => match mode { - AddressingMode::Implied => { - cpu.set_flag(StatusFlag::Carry, false); - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::CLD(mode) => match mode { - AddressingMode::Implied => { - cpu.set_flag(StatusFlag::Decimal, false); - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::CLI(mode) => match mode { - AddressingMode::Implied => { - cpu.set_flag(StatusFlag::IrqDisable, false); - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::CLV(mode) => match mode { - AddressingMode::Implied => { - cpu.set_flag(StatusFlag::Overflow, false); - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::CMP(mode) => match mode { - AddressingMode::Immediate - | AddressingMode::ZeroPage - | AddressingMode::ZeroPageIndexedWithX - | AddressingMode::AbsoluteA - | AddressingMode::AbsoluteIndexedWithX - | AddressingMode::AbsoluteIndexedWithY - | AddressingMode::ZeroPageIndirect - | AddressingMode::ZeroPageIndexedIndirect - | AddressingMode::ZeroPageIndirectIndexedWithY => { - let address = get_address(mode, cpu)?; - let byte = cpu.read(address.try_into()?)?; - cpu.set_flag(StatusFlag::Carry, cpu.a >= byte); - cpu.set_flag(StatusFlag::Zero, cpu.a == byte); - cpu.set_flag(StatusFlag::Negative, cpu.is_negative(cpu.a - byte)); - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::CPX(mode) => match mode { - AddressingMode::Immediate - | AddressingMode::ZeroPage - | AddressingMode::AbsoluteA => { - let address = get_address(mode, cpu)?; - let byte = cpu.read(address.try_into()?)?; - cpu.set_flag(StatusFlag::Carry, cpu.x >= byte); - cpu.set_flag(StatusFlag::Zero, cpu.x == byte); - cpu.set_flag(StatusFlag::Negative, cpu.is_negative(cpu.x - byte)); - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::CPY(mode) => match mode { - AddressingMode::Immediate - | AddressingMode::ZeroPage - | AddressingMode::AbsoluteA => { - let address = get_address(mode, cpu)?; - let byte = cpu.read(address.try_into()?)?; - cpu.set_flag(StatusFlag::Carry, cpu.y >= byte); - cpu.set_flag(StatusFlag::Zero, cpu.y == byte); - cpu.set_flag(StatusFlag::Negative, cpu.is_negative(cpu.y - byte)); - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::DEC(mode) => match mode { - AddressingMode::ZeroPage - | AddressingMode::ZeroPageIndexedWithX - | AddressingMode::AbsoluteA - | AddressingMode::AbsoluteIndexedWithX => { - let address = get_address(mode, cpu)?; - cpu.write(address.try_into()?, cpu.read(address.try_into()?)? - 1)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::DEX(mode) => match mode { - AddressingMode::Implied => { - cpu.x -= 1; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::DEY(mode) => match mode { - AddressingMode::Implied => { - cpu.y -= 1; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::EOR(mode) => match mode { - AddressingMode::Immediate - | AddressingMode::ZeroPage - | AddressingMode::ZeroPageIndexedWithX - | AddressingMode::AbsoluteA - | AddressingMode::AbsoluteIndexedWithX - | AddressingMode::AbsoluteIndexedWithY - | AddressingMode::ZeroPageIndirect - | AddressingMode::ZeroPageIndexedIndirect - | AddressingMode::ZeroPageIndirectIndexedWithY => { - let address = get_address(mode, cpu)?; - cpu.a ^= cpu.read(address.try_into()?)?; - cpu.set_flag(StatusFlag::Zero, cpu.a == 0); - cpu.set_flag(StatusFlag::Negative, cpu.is_negative(cpu.a)); - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::INC(mode) => match mode { - AddressingMode::Accumulator => { - cpu.a += 1; - cpu.set_flag(StatusFlag::Zero, cpu.a == 0); - cpu.set_flag(StatusFlag::Negative, cpu.is_negative(cpu.a)); - Ok(()) - } - AddressingMode::ZeroPage - | AddressingMode::ZeroPageIndexedWithX - | AddressingMode::AbsoluteA - | AddressingMode::AbsoluteIndexedWithX => { - let address = get_address(mode, cpu)?; - let byte = cpu.read(address.try_into()?)?; - cpu.set_flag(StatusFlag::Zero, byte + 1 == 0); - cpu.set_flag(StatusFlag::Negative, cpu.is_negative(byte + 1)); - cpu.write(address.try_into()?, byte + 1)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::INX(mode) => match mode { - AddressingMode::Implied => { - cpu.x += 1; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::INY(mode) => match mode { - AddressingMode::Implied => { - cpu.y += 1; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::JMP(mode) => match mode { - AddressingMode::AbsoluteA - | AddressingMode::AbsoluteIndirect - | AddressingMode::AbsoluteIndexedIndirect => { - let address = get_address(mode, cpu)?; - cpu.pc = address.try_into()?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::JSR(mode) => match mode { - AddressingMode::AbsoluteA => { - let return_address = cpu.pc - 1; - cpu.push_stack_word(return_address)?; - let address = get_address(mode, cpu)?; - cpu.pc = address.try_into()?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::LDA(mode) => match mode { - AddressingMode::AbsoluteA - | AddressingMode::AbsoluteIndexedWithX - | AddressingMode::AbsoluteIndexedWithY - | AddressingMode::Immediate - | AddressingMode::ZeroPage - | AddressingMode::ZeroPageIndirect - | AddressingMode::ZeroPageIndexedIndirect - | AddressingMode::ZeroPageIndexedWithX - | AddressingMode::ZeroPageIndirectIndexedWithY => { - let address = get_address(mode, cpu)?; - let byte = cpu.read(address.try_into()?)?; - cpu.a = byte; - cpu.set_flag(StatusFlag::Negative, cpu.is_negative(cpu.a)); - cpu.set_flag(StatusFlag::Zero, cpu.a == 0); - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::LDX(mode) => match mode { - AddressingMode::AbsoluteA - | AddressingMode::AbsoluteIndexedWithY - | AddressingMode::Immediate - | AddressingMode::ZeroPage - | AddressingMode::ZeroPageIndexedWithY => { - let address = get_address(mode, cpu)?; - let byte = cpu.read(address.try_into()?)?; - cpu.x = byte; - cpu.set_flag(StatusFlag::Negative, cpu.is_negative(cpu.x)); - cpu.set_flag(StatusFlag::Zero, cpu.x == 0); - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::LDY(mode) => match mode { - AddressingMode::AbsoluteA - | AddressingMode::AbsoluteIndexedWithX - | AddressingMode::Immediate - | AddressingMode::ZeroPage - | AddressingMode::ZeroPageIndexedWithX => { - let address = get_address(mode, cpu)?; - let byte = cpu.read(address.try_into()?)?; - cpu.y = byte; - cpu.set_flag(StatusFlag::Negative, cpu.is_negative(cpu.y)); - cpu.set_flag(StatusFlag::Zero, cpu.y == 0); - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::LSR(mode) => { - fn lsr(cpu: &mut Cpu, value: Byte) -> Byte { - cpu.set_flag(StatusFlag::Carry, value & 1 == 1); - let shifted_value = value >> 1; - cpu.set_flag( - StatusFlag::Negative, - value & StatusFlag::Negative as Byte > 0, - ); - cpu.set_flag(StatusFlag::Zero, shifted_value == 0); - shifted_value - } - match mode { - AddressingMode::Accumulator => { - cpu.a = lsr(cpu, cpu.a); - Ok(()) - } - AddressingMode::AbsoluteA - | AddressingMode::AbsoluteIndexedWithX - | AddressingMode::ZeroPage - | AddressingMode::ZeroPageIndexedWithX => { - let address = get_address(mode, cpu)?; - let value = cpu.read(address.try_into()?)?; - let result = lsr(cpu, value); - cpu.write(address.try_into()?, result)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - } - } - Opcode::NOP(_mode) => { - cpu.pc += 1; - Ok(()) - } - Opcode::ORA(mode) => match mode { - AddressingMode::Immediate - | AddressingMode::ZeroPage - | AddressingMode::ZeroPageIndexedWithX - | AddressingMode::AbsoluteA - | AddressingMode::AbsoluteIndexedWithX - | AddressingMode::AbsoluteIndexedWithY - | AddressingMode::ZeroPageIndirect - | AddressingMode::ZeroPageIndexedIndirect - | AddressingMode::ZeroPageIndirectIndexedWithY => { - let address = get_address(mode, cpu)?; - cpu.a |= cpu.read(address.try_into()?)?; - cpu.set_flag(StatusFlag::Zero, cpu.a == 0); - cpu.set_flag(StatusFlag::Negative, cpu.is_negative(cpu.a)); - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::PHA(mode) => match mode { - AddressingMode::Stack => { - cpu.push_stack(cpu.a)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::PHP(mode) => match mode { - AddressingMode::Stack => { - cpu.push_stack(cpu.p)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::PHX(mode) => match mode { - AddressingMode::Stack => { - cpu.push_stack(cpu.x)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::PHY(mode) => match mode { - AddressingMode::Stack => { - cpu.push_stack(cpu.y)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::PLA(mode) => match mode { - AddressingMode::Stack => { - cpu.a = cpu.pop_stack()?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::PLP(mode) => match mode { - AddressingMode::Stack => { - cpu.p = cpu.pop_stack()?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::PLX(mode) => match mode { - AddressingMode::Stack => { - cpu.x = cpu.pop_stack()?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::PLY(mode) => match mode { - AddressingMode::Stack => { - cpu.y = cpu.pop_stack()?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::RMB0(mode) => match mode { - AddressingMode::ZeroPage => { - let address = get_address(mode, cpu)?; - let byte = cpu.read(address.try_into()?)?; - let reset_byte = byte & 0b1111_1110; - cpu.write(address.try_into()?, reset_byte)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::RMB1(mode) => match mode { - AddressingMode::ZeroPage => { - let address = get_address(mode, cpu)?; - let byte = cpu.read(address.try_into()?)?; - let reset_byte = byte & 0b1111_1101; - cpu.write(address.try_into()?, reset_byte)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::RMB2(mode) => match mode { - AddressingMode::ZeroPage => { - let address = get_address(mode, cpu)?; - let byte = cpu.read(address.try_into()?)?; - let reset_byte = byte & 0b1111_1011; - cpu.write(address.try_into()?, reset_byte)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::RMB3(mode) => match mode { - AddressingMode::ZeroPage => { - let address = get_address(mode, cpu)?; - let byte = cpu.read(address.try_into()?)?; - let reset_byte = byte & 0b1111_0111; - cpu.write(address.try_into()?, reset_byte)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::RMB4(mode) => match mode { - AddressingMode::ZeroPage => { - let address = get_address(mode, cpu)?; - let byte = cpu.read(address.try_into()?)?; - let reset_byte = byte & 0b1110_1111; - cpu.write(address.try_into()?, reset_byte)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::RMB5(mode) => match mode { - AddressingMode::ZeroPage => { - let address = get_address(mode, cpu)?; - let byte = cpu.read(address.try_into()?)?; - let reset_byte = byte & 0b1101_1111; - cpu.write(address.try_into()?, reset_byte)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::RMB6(mode) => match mode { - AddressingMode::ZeroPage => { - let address = get_address(mode, cpu)?; - let byte = cpu.read(address.try_into()?)?; - let reset_byte = byte & 0b1011_1111; - cpu.write(address.try_into()?, reset_byte)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::RMB7(mode) => match mode { - AddressingMode::ZeroPage => { - let address = get_address(mode, cpu)?; - let byte = cpu.read(address.try_into()?)?; - let reset_byte = byte & 0b0111_1111; - cpu.write(address.try_into()?, reset_byte)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::ROL(mode) => { - fn rol(cpu: &mut Cpu, value: Byte) -> Byte { - let carry = cpu.get_flag(StatusFlag::Carry) as Byte; - cpu.set_flag(StatusFlag::Carry, value >> 7 == 1); - let shifted_value = (value << 1) + carry; - cpu.set_flag( - StatusFlag::Negative, - shifted_value & StatusFlag::Negative as Byte > 0, - ); - cpu.set_flag(StatusFlag::Zero, shifted_value == 0); - shifted_value - } - match mode { - AddressingMode::Accumulator => { - cpu.a = rol(cpu, cpu.a); - Ok(()) - } - AddressingMode::AbsoluteA - | AddressingMode::AbsoluteIndexedWithX - | AddressingMode::ZeroPage - | AddressingMode::ZeroPageIndexedWithX => { - let address = get_address(mode, cpu)?; - let value = cpu.read(address.try_into()?)?; - let result = rol(cpu, value); - cpu.write(address.try_into()?, result)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - } - } - Opcode::ROR(mode) => { - fn ror(cpu: &mut Cpu, value: Byte) -> Byte { - let carry = cpu.get_flag(StatusFlag::Carry) as Byte; - cpu.set_flag(StatusFlag::Carry, value & 1 == 1); - let shifted_value = (value >> 1) + (carry << 7); - cpu.set_flag( - StatusFlag::Negative, - shifted_value & StatusFlag::Negative as Byte > 0, - ); - cpu.set_flag(StatusFlag::Zero, shifted_value == 0); - shifted_value - } - match mode { - AddressingMode::Accumulator => { - cpu.a = ror(cpu, cpu.a); - Ok(()) - } - AddressingMode::AbsoluteA - | AddressingMode::AbsoluteIndexedWithX - | AddressingMode::ZeroPage - | AddressingMode::ZeroPageIndexedWithX => { - let address = get_address(mode, cpu)?; - let value = cpu.read(address.try_into()?)?; - let result = ror(cpu, value); - cpu.write(address.try_into()?, result)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - } - } - Opcode::RTI(mode) => match mode { - AddressingMode::Implied => { - cpu.s = cpu.pop_stack()?; - cpu.p = cpu.pop_stack()?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::RTS(mode) => match mode { - AddressingMode::Implied => { - let return_address = cpu.pop_stack_word()?; - cpu.pc = return_address + 1; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::SBC(mode) => match mode { - AddressingMode::Immediate - | AddressingMode::ZeroPage - | AddressingMode::ZeroPageIndexedWithX - | AddressingMode::AbsoluteA - | AddressingMode::AbsoluteIndexedWithX - | AddressingMode::AbsoluteIndexedWithY - | AddressingMode::ZeroPageIndirect - | AddressingMode::ZeroPageIndexedIndirect - | AddressingMode::ZeroPageIndirectIndexedWithY => { - let address = get_address(mode, cpu)?; - let byte = cpu.read(address.try_into()?)?; - let carry = cpu.get_flag(StatusFlag::Carry); - let result = cpu.a as Word + byte as Word + !carry as Word; - cpu.set_flag(StatusFlag::Carry, result > u16::from(u8::max_value())); - cpu.set_flag(StatusFlag::Zero, result as Byte == 0); - cpu.set_flag( - StatusFlag::Overflow, - (cpu.a ^ byte) & (cpu.a ^ result as Byte) & 0b1000_0000 > 0, - // Truly have no idea what's happening here, - // check out https://docs.rs/emulator_6502/latest/src/emulator_6502/opcodes/mod.rs.html - ); - cpu.set_flag(StatusFlag::Negative, cpu.is_negative(result as Byte)); - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::SEC(mode) => match mode { - AddressingMode::Implied => { - cpu.set_flag(StatusFlag::Carry, true); - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::SED(mode) => match mode { - AddressingMode::Implied => { - cpu.set_flag(StatusFlag::Decimal, true); - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::SEI(mode) => match mode { - AddressingMode::Implied => { - cpu.set_flag(StatusFlag::IrqDisable, true); - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::SMB0(mode) => match mode { - AddressingMode::ZeroPage => { - let address = get_address(mode, cpu)?; - let byte = cpu.read(address.try_into()?)?; - let reset_byte = byte | 0b0000_0001; - cpu.write(address.try_into()?, reset_byte)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::SMB1(mode) => match mode { - AddressingMode::ZeroPage => { - let address = get_address(mode, cpu)?; - let byte = cpu.read(address.try_into()?)?; - let reset_byte = byte | 0b0000_0010; - cpu.write(address.try_into()?, reset_byte)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::SMB2(mode) => match mode { - AddressingMode::ZeroPage => { - let address = get_address(mode, cpu)?; - let byte = cpu.read(address.try_into()?)?; - let reset_byte = byte | 0b0000_0100; - cpu.write(address.try_into()?, reset_byte)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::SMB3(mode) => match mode { - AddressingMode::ZeroPage => { - let address = get_address(mode, cpu)?; - let byte = cpu.read(address.try_into()?)?; - let reset_byte = byte | 0b0000_1000; - cpu.write(address.try_into()?, reset_byte)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::SMB4(mode) => match mode { - AddressingMode::ZeroPage => { - let address = get_address(mode, cpu)?; - let byte = cpu.read(address.try_into()?)?; - let reset_byte = byte | 0b0001_0000; - cpu.write(address.try_into()?, reset_byte)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::SMB5(mode) => match mode { - AddressingMode::ZeroPage => { - let address = get_address(mode, cpu)?; - let byte = cpu.read(address.try_into()?)?; - let reset_byte = byte | 0b0010_0000; - cpu.write(address.try_into()?, reset_byte)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::SMB6(mode) => match mode { - AddressingMode::ZeroPage => { - let address = get_address(mode, cpu)?; - let byte = cpu.read(address.try_into()?)?; - let reset_byte = byte & 0b0100_0000; - cpu.write(address.try_into()?, reset_byte)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::SMB7(mode) => match mode { - AddressingMode::ZeroPage => { - let address = get_address(mode, cpu)?; - let byte = cpu.read(address.try_into()?)?; - let reset_byte = byte | 0b1000_0000; - cpu.write(address.try_into()?, reset_byte)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::STA(mode) => match mode { - AddressingMode::AbsoluteA - | AddressingMode::AbsoluteIndexedWithX - | AddressingMode::AbsoluteIndexedWithY - | AddressingMode::ZeroPage - | AddressingMode::ZeroPageIndirect - | AddressingMode::ZeroPageIndexedIndirect - | AddressingMode::ZeroPageIndexedWithX - | AddressingMode::ZeroPageIndirectIndexedWithY => { - let address = get_address(mode, cpu)?; - cpu.write(address.try_into()?, cpu.a)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::STP(mode) => match mode { - AddressingMode::Implied => { - cpu.stop(); - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::STX(mode) => match mode { - AddressingMode::AbsoluteA - | AddressingMode::ZeroPage - | AddressingMode::ZeroPageIndexedWithY => { - let address = get_address(mode, cpu)?; - cpu.write(address.try_into()?, cpu.x)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::STY(mode) => match mode { - AddressingMode::AbsoluteA - | AddressingMode::ZeroPage - | AddressingMode::ZeroPageIndexedWithX => { - let address = get_address(mode, cpu)?; - cpu.write(address.try_into()?, cpu.y)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::STZ(mode) => match mode { - AddressingMode::AbsoluteA - | AddressingMode::AbsoluteIndexedWithX - | AddressingMode::ZeroPage - | AddressingMode::ZeroPageIndexedWithX => { - let address = get_address(mode, cpu)?; - cpu.write(address.try_into()?, 0)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::TAX(mode) => match mode { - AddressingMode::Implied => { - cpu.x = cpu.a; - cpu.set_flag(StatusFlag::Negative, cpu.is_negative(cpu.x)); - cpu.set_flag(StatusFlag::Zero, cpu.x == 0); - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::TAY(mode) => match mode { - AddressingMode::Implied => { - cpu.y = cpu.a; - cpu.set_flag(StatusFlag::Negative, cpu.is_negative(cpu.y)); - cpu.set_flag(StatusFlag::Zero, cpu.y == 0); - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::TRB(mode) => match mode { - // Still not really sure when you would - // use TRB or TSB, but this was helpful - // (Garth rocks) http://forum.6502.org/viewtopic.php?t=48 - AddressingMode::AbsoluteA | AddressingMode::ZeroPage => { - let address = get_address(mode, cpu)?; - let byte = cpu.read(address.try_into()?)?; - cpu.write(address.try_into()?, !cpu.a & byte)?; - cpu.set_flag(StatusFlag::Zero, cpu.a & byte > 0); - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::TSB(mode) => match mode { - AddressingMode::AbsoluteA | AddressingMode::ZeroPage => { - let address = get_address(mode, cpu)?; - let byte = cpu.read(address.try_into()?)?; - cpu.write(address.try_into()?, cpu.a | byte)?; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::TSX(mode) => match mode { - AddressingMode::Implied => { - cpu.x = cpu.s; - cpu.set_flag(StatusFlag::Negative, cpu.is_negative(cpu.x)); - cpu.set_flag(StatusFlag::Zero, cpu.x == 0); - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::TXA(mode) => match mode { - AddressingMode::Implied => { - cpu.a = cpu.x; - cpu.set_flag(StatusFlag::Negative, cpu.is_negative(cpu.a)); - cpu.set_flag(StatusFlag::Zero, cpu.a == 0); - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::TXS(mode) => match mode { - AddressingMode::Implied => { - cpu.s = cpu.x; - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::TYA(mode) => match mode { - AddressingMode::Implied => { - cpu.a = cpu.y; - cpu.set_flag(StatusFlag::Negative, cpu.is_negative(cpu.a)); - cpu.set_flag(StatusFlag::Zero, cpu.a == 0); - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - Opcode::WAI(mode) => match mode { - AddressingMode::Implied => { - cpu.wait_for_interrupt(); - Ok(()) - } - _ => Err(GeorgeErrorKind::AddrMode( - AddressingModeError::IncompatibleAddrMode, - )), - }, - } - } -} - -struct Screen { - memory: Arc>, - buffer: Vec, - window: minifb::Window, -} - -impl Screen { - fn new(memory: Arc>) -> Self { - Self { - memory, - buffer: vec![0; 512 * 380 * 8], - window: Window::new("screen", 512, 380, WindowOptions::default()).unwrap(), - } - } - fn draw(&mut self) { - let memory = match self.memory.try_read() { - Ok(read) => read, - Err(_) => { - println!("Couldn't acquire read on shared memory in main thread"); - return; - } - }; - // let bitmask = [128, 64, 32, 16, 8, 4, 2, 1]; - let bitmask = [1, 2, 4, 8, 16, 32, 64, 128]; // I think this is how the bytes will be - // serialized? low bits first? - - for addr in 0x6000..0xDFFF { - // eventually this will access memory in the weird interleaved way the hardware is - // designed, but this is easiest to implement for now - let byte = memory.read(addr).unwrap(); - for i in 0..8 { - match byte & bitmask[i] == 0 { - true => self.buffer[(addr - 0x6000) as usize * 8 + i] = 0x110500, - false => self.buffer[(addr - 0x6000) as usize * 8 + i] = 0xFFCC00, - } - } - } - self.window - .update_with_buffer(&self.buffer, 512, 380) - .unwrap(); - } - fn run(&mut self) { - let frame_duration = Duration::from_millis(16); - let mut previous_draw = Instant::now(); - - loop { - let now = Instant::now(); - if now - previous_draw > frame_duration { - self.draw(); - previous_draw = now; - } - sleep(Duration::from_millis(1)); - } - } -} - fn main() { let ram = MemMappedDevice::new(0x0000, 0x3FFF, 2, "ram".into()); let control = MemMappedDevice::new(0x4000, 0x5FFF, 4, "control".into()); let vram = MemMappedDevice::new(0x6000, 0xDFFF, 1, "vram".into()); let rom = MemMappedDevice::new(0xE000, 0xFFFF, 4, "rom".into()); let mut memory = Mem::new(ram); - match memory.add_area(control) { - Err(error) => println!("Error adding vram: {:?}", error), - Ok(()) => {} + if let Err(error) = memory.add_area(control) { + println!("Error adding vram: {:?}", error); }; - match memory.add_area(vram) { - Err(error) => println!("Error adding vram: {:?}", error), - Ok(()) => {} + if let Err(error) = memory.add_area(vram) { + println!("Error adding vram: {:?}", error); }; - match memory.add_area(rom) { - Err(error) => println!("Error adding rom: {:?}", error), - Ok(()) => {} + if let Err(error) = memory.add_area(rom) { + println!("Error adding rom: {:?}", error); }; - let binary = match fs::File::open(PathBuf::from( + let binary = match std::fs::File::open(PathBuf::from( "/Users/kline/projects/winter/george-emu/src/george", )) { Ok(file) => file, Err(error) => panic!("Couldn't open binary file! {:?}", error), }; - match memory.read_from_bin(binary) { - Err(error) => println!("{:?}", error), - Ok(_) => {} + if let Err(error) = memory.read_from_bin(binary) { + println!("{:?}", error); }; let shared_memory = Arc::new(RwLock::new(memory)); let cpu_memory = shared_memory.clone(); let display_memory = shared_memory.clone(); - let mut screen = Screen::new(display_memory); + let mut screen = Crtc::new(display_memory); thread::spawn(move || { let mut cpu = Cpu::new(cpu_memory); diff --git a/src/memory.rs b/src/memory.rs new file mode 100644 index 0000000..15c9a77 --- /dev/null +++ b/src/memory.rs @@ -0,0 +1,106 @@ +use crate::error::{GeorgeError, GeorgeErrorKind, MappingError, MemoryError}; +use crate::types::{Byte, Word}; +use std::{fs::File, io::Read}; + +#[derive(Debug, Clone)] +pub struct MemMappedDevice { + start: Word, + end: Word, + pages: usize, + page: usize, + data: Vec, + label: String, +} + +impl MemMappedDevice { + pub fn new(start: Word, end: Word, pages: usize, label: String) -> Self { + Self { + start, + end, + pages, + page: 0, + data: vec![0x00; (end as usize + 1 - start as usize) * pages], + label, + } + } + fn contains(&self, address: Word) -> bool { + self.start <= address && self.end >= address + } + fn swap_page(&mut self, page: usize) -> Result<(), GeorgeError> { + match page > self.pages { + true => Err(GeorgeError { + kind: GeorgeErrorKind::Memory(MemoryError::Unmapped), //TODO: should be MappingError::InvalidPage, + desc: format!( + "{:?} tried to swap to a page outside of its range", + self.label + ), + }), + false => { + self.page = page; + Ok(()) + } + } + } + fn size(&self) -> Word { + self.end - self.start + 1 + } + fn translate_address(&self, address: Word) -> Word { + (address - self.start) + self.size() * (self.page as Word) + } // This needs to translate memory address from CPU land to local land, so + // for rom an address like 0xFFFF needs to be translated to Page X, 0xFFF +} + +#[derive(Debug, Clone)] +pub struct Mem { + areas: Vec, +} + +impl Mem { + pub fn new(area: MemMappedDevice) -> Self { + Self { areas: vec![area] } + } + pub fn add_area(&mut self, area: MemMappedDevice) -> Result<(), MappingError> { + for existing_area in &self.areas { + if existing_area.contains(area.end) || existing_area.contains(area.start) { + return Err(MappingError::RegionOccupied); + } + } + self.areas.push(area); + Ok(()) + } + pub fn read(&self, address: Word) -> Result { + for area in &self.areas { + if area.contains(address) { + let translated_address = area.translate_address(address); + match area.data.get(translated_address as usize) { + Some(data) => return Ok(*data), + None => return Err(MemoryError::NoDataAtAddress), + } + } + } + Err(MemoryError::Unmapped) + } + + pub fn write(&mut self, address: Word, data: Byte) -> Result<(), MemoryError> { + for area in self.areas.iter_mut() { + if area.contains(address) { + // println!("Writing to area {label}", label = area.label); + let translated_address = area.translate_address(address); + area.data[translated_address as usize] = data; + return Ok(()); + }; + } + Err(MemoryError::Unmapped) + } + + pub fn read_from_bin(&mut self, f: File) -> Result<(), MemoryError> { + let bytes = f.bytes(); + for (address, byte) in bytes.enumerate() { + match byte { + Ok(value) => self.write(address as Word, value)?, + Err(_) => return Err(MemoryError::Unwritable), + } + } + Ok(()) + } +} diff --git a/src/types.rs b/src/types.rs new file mode 100644 index 0000000..b94fa9c --- /dev/null +++ b/src/types.rs @@ -0,0 +1,4 @@ +use std::{u16, u8}; + +pub type Byte = u8; +pub type Word = u16; diff --git a/src/video.rs b/src/video.rs new file mode 100644 index 0000000..74b41f0 --- /dev/null +++ b/src/video.rs @@ -0,0 +1,64 @@ +use crate::Mem; +use minifb::{Window, WindowOptions}; +use std::{ + sync::{Arc, RwLock}, + thread::sleep, + time::{Duration, Instant}, +}; + +pub struct Crtc { + memory: Arc>, + buffer: Vec, + window: minifb::Window, +} + +impl Crtc { + pub fn new(memory: Arc>) -> Self { + let window = Window::new("screen", 512, 380, WindowOptions::default()).unwrap(); + Self { + memory, + buffer: vec![0; 512 * 380], + window, + } + } + fn draw(&mut self) { + let memory = match self.memory.try_read() { + Ok(read) => read, + Err(_) => { + println!("Couldn't acquire read on shared memory in main thread"); + return; + } + }; + // let bitmask = [128, 64, 32, 16, 8, 4, 2, 1]; + let bitmask = [1, 2, 4, 8, 16, 32, 64, 128]; // I think this is how the bytes will be + // serialized? low bits first? + + for addr in 0x6000..0xBF00 { + // TODO: eventually this will access memory in the weird interleaved way the hardware is + // designed, but this is easiest to implement for now + let byte = memory.read(addr).unwrap(); + for (i, mask) in bitmask.iter().enumerate() { + match byte & mask == 0 { + true => self.buffer[(addr - 0x6000) as usize * 8 + i] = 0x110500, + false => self.buffer[(addr - 0x6000) as usize * 8 + i] = 0xFFCC00, + } + } + } + self.window + .update_with_buffer(&self.buffer, 512, 380) + .unwrap(); + } + pub fn run(&mut self) { + let frame_duration = Duration::from_millis(16); + let mut previous_draw = Instant::now(); + + loop { + let now = Instant::now(); + if now - previous_draw > frame_duration { + self.draw(); + previous_draw = now; + } + sleep(Duration::from_millis(1)); + } + } +}