tests.rsannotatedtests.rssource1464 lines · 121.5 KB · raw
1use super::*;
2
3fn new_vdp() -> Vdp {
4    Vdp::new(
5        TimingMode::Ntsc,
6        VdpConfig {
7            enforce_sprite_limits: true,
8            non_linear_color_scale: false,
9            color_adjustment: DarkenColors::No,
10            deinterlace: true,
11            render_vertical_border: false,
12            render_horizontal_border: false,
13            plane_a_enabled: true,
14            plane_b_enabled: true,
15            window_enabled: true,
16            sprites_enabled: true,
17        },
18    )
19}
20
21fn v_counter_test(expected: &[u8], vdp: &mut Vdp) {
22    for (line, expected) in expected.iter().copied().enumerate() {
23        vdp.state.scanline = line as u16;
24        let VCounter { counter, .. } = vdp.v_counter(0);
25        assert_eq!(
26            expected, counter,
27            "V counter for line {line}: expected 0x{expected:02X}, actual 0x{counter:02X}"
28        )
29    }
30}
31
32#[test]
33fn v_counter_ntsc_progressive() {
34    const EXPECTED: &[u8; NTSC_SCANLINES_PER_FRAME as usize] = &[
35        0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E,
36        0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D,
37        0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C,
38        0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B,
39        0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A,
40        0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
41        0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
42        0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
43        0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86,
44        0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95,
45        0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4,
46        0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3,
47        0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2,
48        0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1,
49        0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0,
50        0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9,
51        0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8,
52        0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF,
53    ];
54
55    let mut vdp = new_vdp();
56    vdp.timing_mode = TimingMode::Ntsc;
57    v_counter_test(EXPECTED, &mut vdp);
58}
59
60#[test]
61fn v_counter_pal_v28_progressive() {
62    const EXPECTED: &[u8; PAL_SCANLINES_PER_FRAME as usize] = &[
63        0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E,
64        0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D,
65        0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C,
66        0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B,
67        0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A,
68        0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
69        0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
70        0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
71        0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86,
72        0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95,
73        0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4,
74        0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3,
75        0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2,
76        0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1,
77        0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0,
78        0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
79        0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE,
80        0xFF, 0x00, 0x01, 0x02, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1, 0xD2, 0xD3, 0xD4,
81        0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, 0xE3,
82        0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2,
83        0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF,
84    ];
85
86    let mut vdp = new_vdp();
87    vdp.timing_mode = TimingMode::Pal;
88    vdp.registers.vertical_display_size = VerticalDisplaySize::TwentyEightCell;
89    v_counter_test(EXPECTED, &mut vdp);
90}
91
92#[test]
93fn v_counter_pal_v30_progressive() {
94    const EXPECTED: &[u8; PAL_SCANLINES_PER_FRAME as usize] = &[
95        0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E,
96        0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D,
97        0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C,
98        0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B,
99        0x3C, 0x3D, 0x3E, 0x3F, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A,
100        0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
101        0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
102        0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
103        0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86,
104        0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95,
105        0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4,
106        0xA5, 0xA6, 0xA7, 0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3,
107        0xB4, 0xB5, 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2,
108        0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF, 0xD0, 0xD1,
109        0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0,
110        0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
111        0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE,
112        0xFF, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0xD2, 0xD3, 0xD4,
113        0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, 0xE3,
114        0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2,
115        0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF,
116    ];
117
118    let mut vdp = new_vdp();
119    vdp.timing_mode = TimingMode::Pal;
120    vdp.registers.vertical_display_size = VerticalDisplaySize::ThirtyCell;
121    v_counter_test(EXPECTED, &mut vdp);
122}
123
124#[test]
125fn v_counter_ntsc_interlaced_single_even_frame() {
126    const EXPECTED: &[u8; NTSC_SCANLINES_PER_FRAME as usize] = &[
127        0x00, 0x00, 0x02, 0x02, 0x04, 0x04, 0x06, 0x06, 0x08, 0x08, 0x0A, 0x0A, 0x0C, 0x0C, 0x0E,
128        0x0E, 0x10, 0x10, 0x12, 0x12, 0x14, 0x14, 0x16, 0x16, 0x18, 0x18, 0x1A, 0x1A, 0x1C, 0x1C,
129        0x1E, 0x1E, 0x20, 0x20, 0x22, 0x22, 0x24, 0x24, 0x26, 0x26, 0x28, 0x28, 0x2A, 0x2A, 0x2C,
130        0x2C, 0x2E, 0x2E, 0x30, 0x30, 0x32, 0x32, 0x34, 0x34, 0x36, 0x36, 0x38, 0x38, 0x3A, 0x3A,
131        0x3C, 0x3C, 0x3E, 0x3E, 0x40, 0x40, 0x42, 0x42, 0x44, 0x44, 0x46, 0x46, 0x48, 0x48, 0x4A,
132        0x4A, 0x4C, 0x4C, 0x4E, 0x4E, 0x50, 0x50, 0x52, 0x52, 0x54, 0x54, 0x56, 0x56, 0x58, 0x58,
133        0x5A, 0x5A, 0x5C, 0x5C, 0x5E, 0x5E, 0x60, 0x60, 0x62, 0x62, 0x64, 0x64, 0x66, 0x66, 0x68,
134        0x68, 0x6A, 0x6A, 0x6C, 0x6C, 0x6E, 0x6E, 0x70, 0x70, 0x72, 0x72, 0x74, 0x74, 0x76, 0x76,
135        0x78, 0x78, 0x7A, 0x7A, 0x7C, 0x7C, 0x7E, 0x7E, 0x80, 0x80, 0x82, 0x82, 0x84, 0x84, 0x86,
136        0x86, 0x88, 0x88, 0x8A, 0x8A, 0x8C, 0x8C, 0x8E, 0x8E, 0x90, 0x90, 0x92, 0x92, 0x94, 0x94,
137        0x96, 0x96, 0x98, 0x98, 0x9A, 0x9A, 0x9C, 0x9C, 0x9E, 0x9E, 0xA0, 0xA0, 0xA2, 0xA2, 0xA4,
138        0xA4, 0xA6, 0xA6, 0xA8, 0xA8, 0xAA, 0xAA, 0xAC, 0xAC, 0xAE, 0xAE, 0xB0, 0xB0, 0xB2, 0xB2,
139        0xB4, 0xB4, 0xB6, 0xB6, 0xB8, 0xB8, 0xBA, 0xBA, 0xBC, 0xBC, 0xBE, 0xBE, 0xC0, 0xC0, 0xC2,
140        0xC2, 0xC4, 0xC4, 0xC6, 0xC6, 0xC8, 0xC8, 0xCA, 0xCA, 0xCC, 0xCC, 0xCE, 0xCE, 0xD0, 0xD0,
141        0xD2, 0xD2, 0xD4, 0xD4, 0xD6, 0xD6, 0xD8, 0xD8, 0xDA, 0xDA, 0xDC, 0xDC, 0xDE, 0xDE, 0xE0,
142        0xE0, 0xE2, 0xE2, 0xE4, 0xE4, 0xE6, 0xE6, 0xE8, 0xE8, 0xEA, 0xE5, 0xE7, 0xE7, 0xE9, 0xE9,
143        0xEB, 0xEB, 0xED, 0xED, 0xEF, 0xEF, 0xF1, 0xF1, 0xF3, 0xF3, 0xF5, 0xF5, 0xF7, 0xF7, 0xF9,
144        0xF9, 0xFB, 0xFB, 0xFD, 0xFD, 0xFF, 0xFF,
145    ];
146
147    let mut vdp = new_vdp();
148    vdp.timing_mode = TimingMode::Ntsc;
149    vdp.registers.interlacing_mode = InterlacingMode::Interlaced;
150    vdp.state.interlaced_frame = true;
151    vdp.state.interlaced_odd = false;
152    v_counter_test(EXPECTED, &mut vdp);
153}
154
155#[test]
156fn v_counter_ntsc_interlaced_single_odd_frame() {
157    const EXPECTED: &[u8; (NTSC_SCANLINES_PER_FRAME + 1) as usize] = &[
158        0x00, 0x00, 0x02, 0x02, 0x04, 0x04, 0x06, 0x06, 0x08, 0x08, 0x0A, 0x0A, 0x0C, 0x0C, 0x0E,
159        0x0E, 0x10, 0x10, 0x12, 0x12, 0x14, 0x14, 0x16, 0x16, 0x18, 0x18, 0x1A, 0x1A, 0x1C, 0x1C,
160        0x1E, 0x1E, 0x20, 0x20, 0x22, 0x22, 0x24, 0x24, 0x26, 0x26, 0x28, 0x28, 0x2A, 0x2A, 0x2C,
161        0x2C, 0x2E, 0x2E, 0x30, 0x30, 0x32, 0x32, 0x34, 0x34, 0x36, 0x36, 0x38, 0x38, 0x3A, 0x3A,
162        0x3C, 0x3C, 0x3E, 0x3E, 0x40, 0x40, 0x42, 0x42, 0x44, 0x44, 0x46, 0x46, 0x48, 0x48, 0x4A,
163        0x4A, 0x4C, 0x4C, 0x4E, 0x4E, 0x50, 0x50, 0x52, 0x52, 0x54, 0x54, 0x56, 0x56, 0x58, 0x58,
164        0x5A, 0x5A, 0x5C, 0x5C, 0x5E, 0x5E, 0x60, 0x60, 0x62, 0x62, 0x64, 0x64, 0x66, 0x66, 0x68,
165        0x68, 0x6A, 0x6A, 0x6C, 0x6C, 0x6E, 0x6E, 0x70, 0x70, 0x72, 0x72, 0x74, 0x74, 0x76, 0x76,
166        0x78, 0x78, 0x7A, 0x7A, 0x7C, 0x7C, 0x7E, 0x7E, 0x80, 0x80, 0x82, 0x82, 0x84, 0x84, 0x86,
167        0x86, 0x88, 0x88, 0x8A, 0x8A, 0x8C, 0x8C, 0x8E, 0x8E, 0x90, 0x90, 0x92, 0x92, 0x94, 0x94,
168        0x96, 0x96, 0x98, 0x98, 0x9A, 0x9A, 0x9C, 0x9C, 0x9E, 0x9E, 0xA0, 0xA0, 0xA2, 0xA2, 0xA4,
169        0xA4, 0xA6, 0xA6, 0xA8, 0xA8, 0xAA, 0xAA, 0xAC, 0xAC, 0xAE, 0xAE, 0xB0, 0xB0, 0xB2, 0xB2,
170        0xB4, 0xB4, 0xB6, 0xB6, 0xB8, 0xB8, 0xBA, 0xBA, 0xBC, 0xBC, 0xBE, 0xBE, 0xC0, 0xC0, 0xC2,
171        0xC2, 0xC4, 0xC4, 0xC6, 0xC6, 0xC8, 0xC8, 0xCA, 0xCA, 0xCC, 0xCC, 0xCE, 0xCE, 0xD0, 0xD0,
172        0xD2, 0xD2, 0xD4, 0xD4, 0xD6, 0xD6, 0xD8, 0xD8, 0xDA, 0xDA, 0xDC, 0xDC, 0xDE, 0xDE, 0xE0,
173        0xE0, 0xE2, 0xE2, 0xE4, 0xE4, 0xE6, 0xE6, 0xE8, 0xE8, 0xEA, 0xE5, 0xE5, 0xE7, 0xE7, 0xE9,
174        0xE9, 0xEB, 0xEB, 0xED, 0xED, 0xEF, 0xEF, 0xF1, 0xF1, 0xF3, 0xF3, 0xF5, 0xF5, 0xF7, 0xF7,
175        0xF9, 0xF9, 0xFB, 0xFB, 0xFD, 0xFD, 0xFF, 0xFF,
176    ];
177
178    let mut vdp = new_vdp();
179    vdp.timing_mode = TimingMode::Ntsc;
180    vdp.registers.interlacing_mode = InterlacingMode::Interlaced;
181    vdp.state.interlaced_frame = true;
182    vdp.state.interlaced_odd = true;
183    v_counter_test(EXPECTED, &mut vdp);
184}
185
186#[test]
187fn v_counter_pal_v28_interlaced_single_even_frame() {
188    const EXPECTED: &[u8; (PAL_SCANLINES_PER_FRAME - 1) as usize] = &[
189        0x00, 0x00, 0x02, 0x02, 0x04, 0x04, 0x06, 0x06, 0x08, 0x08, 0x0A, 0x0A, 0x0C, 0x0C, 0x0E,
190        0x0E, 0x10, 0x10, 0x12, 0x12, 0x14, 0x14, 0x16, 0x16, 0x18, 0x18, 0x1A, 0x1A, 0x1C, 0x1C,
191        0x1E, 0x1E, 0x20, 0x20, 0x22, 0x22, 0x24, 0x24, 0x26, 0x26, 0x28, 0x28, 0x2A, 0x2A, 0x2C,
192        0x2C, 0x2E, 0x2E, 0x30, 0x30, 0x32, 0x32, 0x34, 0x34, 0x36, 0x36, 0x38, 0x38, 0x3A, 0x3A,
193        0x3C, 0x3C, 0x3E, 0x3E, 0x40, 0x40, 0x42, 0x42, 0x44, 0x44, 0x46, 0x46, 0x48, 0x48, 0x4A,
194        0x4A, 0x4C, 0x4C, 0x4E, 0x4E, 0x50, 0x50, 0x52, 0x52, 0x54, 0x54, 0x56, 0x56, 0x58, 0x58,
195        0x5A, 0x5A, 0x5C, 0x5C, 0x5E, 0x5E, 0x60, 0x60, 0x62, 0x62, 0x64, 0x64, 0x66, 0x66, 0x68,
196        0x68, 0x6A, 0x6A, 0x6C, 0x6C, 0x6E, 0x6E, 0x70, 0x70, 0x72, 0x72, 0x74, 0x74, 0x76, 0x76,
197        0x78, 0x78, 0x7A, 0x7A, 0x7C, 0x7C, 0x7E, 0x7E, 0x80, 0x80, 0x82, 0x82, 0x84, 0x84, 0x86,
198        0x86, 0x88, 0x88, 0x8A, 0x8A, 0x8C, 0x8C, 0x8E, 0x8E, 0x90, 0x90, 0x92, 0x92, 0x94, 0x94,
199        0x96, 0x96, 0x98, 0x98, 0x9A, 0x9A, 0x9C, 0x9C, 0x9E, 0x9E, 0xA0, 0xA0, 0xA2, 0xA2, 0xA4,
200        0xA4, 0xA6, 0xA6, 0xA8, 0xA8, 0xAA, 0xAA, 0xAC, 0xAC, 0xAE, 0xAE, 0xB0, 0xB0, 0xB2, 0xB2,
201        0xB4, 0xB4, 0xB6, 0xB6, 0xB8, 0xB8, 0xBA, 0xBA, 0xBC, 0xBC, 0xBE, 0xBE, 0xC0, 0xC0, 0xC2,
202        0xC2, 0xC4, 0xC4, 0xC6, 0xC6, 0xC8, 0xC8, 0xCA, 0xCA, 0xCC, 0xCC, 0xCE, 0xCE, 0xD0, 0xD0,
203        0xD2, 0xD2, 0xD4, 0xD4, 0xD6, 0xD6, 0xD8, 0xD8, 0xDA, 0xDA, 0xDC, 0xDC, 0xDE, 0xDE, 0xE0,
204        0xE0, 0xE2, 0xE2, 0xE4, 0xE4, 0xE6, 0xE6, 0xE8, 0xE8, 0xEA, 0xEA, 0xEC, 0xEC, 0xEE, 0xEE,
205        0xF0, 0xF0, 0xF2, 0xF2, 0xF4, 0xF4, 0xF6, 0xF6, 0xF8, 0xF8, 0xFA, 0xFA, 0xFC, 0xFC, 0xFE,
206        0xFE, 0x01, 0x01, 0xCB, 0xCB, 0xCD, 0xCD, 0xCF, 0xCF, 0xD1, 0xD1, 0xD3, 0xD3, 0xD5, 0xD5,
207        0xD7, 0xD7, 0xD9, 0xD9, 0xDB, 0xDB, 0xDD, 0xDD, 0xDF, 0xDF, 0xE1, 0xE1, 0xE3, 0xE3, 0xE5,
208        0xE5, 0xE7, 0xE7, 0xE9, 0xE9, 0xEB, 0xEB, 0xED, 0xED, 0xEF, 0xEF, 0xF1, 0xF1, 0xF3, 0xF3,
209        0xF5, 0xF5, 0xF7, 0xF7, 0xF9, 0xF9, 0xFB, 0xFB, 0xFD, 0xFD, 0xFF, 0xFF,
210    ];
211
212    let mut vdp = new_vdp();
213    vdp.timing_mode = TimingMode::Pal;
214    vdp.registers.vertical_display_size = VerticalDisplaySize::TwentyEightCell;
215    vdp.registers.interlacing_mode = InterlacingMode::Interlaced;
216    vdp.state.interlaced_frame = true;
217    vdp.state.interlaced_odd = false;
218    v_counter_test(EXPECTED, &mut vdp);
219}
220
221#[test]
222fn v_counter_pal_v28_interlaced_single_odd_frame() {
223    const EXPECTED: &[u8; PAL_SCANLINES_PER_FRAME as usize] = &[
224        0x00, 0x00, 0x02, 0x02, 0x04, 0x04, 0x06, 0x06, 0x08, 0x08, 0x0A, 0x0A, 0x0C, 0x0C, 0x0E,
225        0x0E, 0x10, 0x10, 0x12, 0x12, 0x14, 0x14, 0x16, 0x16, 0x18, 0x18, 0x1A, 0x1A, 0x1C, 0x1C,
226        0x1E, 0x1E, 0x20, 0x20, 0x22, 0x22, 0x24, 0x24, 0x26, 0x26, 0x28, 0x28, 0x2A, 0x2A, 0x2C,
227        0x2C, 0x2E, 0x2E, 0x30, 0x30, 0x32, 0x32, 0x34, 0x34, 0x36, 0x36, 0x38, 0x38, 0x3A, 0x3A,
228        0x3C, 0x3C, 0x3E, 0x3E, 0x40, 0x40, 0x42, 0x42, 0x44, 0x44, 0x46, 0x46, 0x48, 0x48, 0x4A,
229        0x4A, 0x4C, 0x4C, 0x4E, 0x4E, 0x50, 0x50, 0x52, 0x52, 0x54, 0x54, 0x56, 0x56, 0x58, 0x58,
230        0x5A, 0x5A, 0x5C, 0x5C, 0x5E, 0x5E, 0x60, 0x60, 0x62, 0x62, 0x64, 0x64, 0x66, 0x66, 0x68,
231        0x68, 0x6A, 0x6A, 0x6C, 0x6C, 0x6E, 0x6E, 0x70, 0x70, 0x72, 0x72, 0x74, 0x74, 0x76, 0x76,
232        0x78, 0x78, 0x7A, 0x7A, 0x7C, 0x7C, 0x7E, 0x7E, 0x80, 0x80, 0x82, 0x82, 0x84, 0x84, 0x86,
233        0x86, 0x88, 0x88, 0x8A, 0x8A, 0x8C, 0x8C, 0x8E, 0x8E, 0x90, 0x90, 0x92, 0x92, 0x94, 0x94,
234        0x96, 0x96, 0x98, 0x98, 0x9A, 0x9A, 0x9C, 0x9C, 0x9E, 0x9E, 0xA0, 0xA0, 0xA2, 0xA2, 0xA4,
235        0xA4, 0xA6, 0xA6, 0xA8, 0xA8, 0xAA, 0xAA, 0xAC, 0xAC, 0xAE, 0xAE, 0xB0, 0xB0, 0xB2, 0xB2,
236        0xB4, 0xB4, 0xB6, 0xB6, 0xB8, 0xB8, 0xBA, 0xBA, 0xBC, 0xBC, 0xBE, 0xBE, 0xC0, 0xC0, 0xC2,
237        0xC2, 0xC4, 0xC4, 0xC6, 0xC6, 0xC8, 0xC8, 0xCA, 0xCA, 0xCC, 0xCC, 0xCE, 0xCE, 0xD0, 0xD0,
238        0xD2, 0xD2, 0xD4, 0xD4, 0xD6, 0xD6, 0xD8, 0xD8, 0xDA, 0xDA, 0xDC, 0xDC, 0xDE, 0xDE, 0xE0,
239        0xE0, 0xE2, 0xE2, 0xE4, 0xE4, 0xE6, 0xE6, 0xE8, 0xE8, 0xEA, 0xEA, 0xEC, 0xEC, 0xEE, 0xEE,
240        0xF0, 0xF0, 0xF2, 0xF2, 0xF4, 0xF4, 0xF6, 0xF6, 0xF8, 0xF8, 0xFA, 0xFA, 0xFC, 0xFC, 0xFE,
241        0xFE, 0x01, 0x01, 0xC9, 0xCB, 0xCB, 0xCD, 0xCD, 0xCF, 0xCF, 0xD1, 0xD1, 0xD3, 0xD3, 0xD5,
242        0xD5, 0xD7, 0xD7, 0xD9, 0xD9, 0xDB, 0xDB, 0xDD, 0xDD, 0xDF, 0xDF, 0xE1, 0xE1, 0xE3, 0xE3,
243        0xE5, 0xE5, 0xE7, 0xE7, 0xE9, 0xE9, 0xEB, 0xEB, 0xED, 0xED, 0xEF, 0xEF, 0xF1, 0xF1, 0xF3,
244        0xF3, 0xF5, 0xF5, 0xF7, 0xF7, 0xF9, 0xF9, 0xFB, 0xFB, 0xFD, 0xFD, 0xFF, 0xFF,
245    ];
246
247    let mut vdp = new_vdp();
248    vdp.timing_mode = TimingMode::Pal;
249    vdp.registers.vertical_display_size = VerticalDisplaySize::TwentyEightCell;
250    vdp.registers.interlacing_mode = InterlacingMode::Interlaced;
251    vdp.state.interlaced_frame = true;
252    vdp.state.interlaced_odd = true;
253    v_counter_test(EXPECTED, &mut vdp);
254}
255
256#[test]
257fn v_counter_pal_v30_interlaced_single_even_frame() {
258    const EXPECTED: &[u8; (PAL_SCANLINES_PER_FRAME - 1) as usize] = &[
259        0x00, 0x00, 0x02, 0x02, 0x04, 0x04, 0x06, 0x06, 0x08, 0x08, 0x0A, 0x0A, 0x0C, 0x0C, 0x0E,
260        0x0E, 0x10, 0x10, 0x12, 0x12, 0x14, 0x14, 0x16, 0x16, 0x18, 0x18, 0x1A, 0x1A, 0x1C, 0x1C,
261        0x1E, 0x1E, 0x20, 0x20, 0x22, 0x22, 0x24, 0x24, 0x26, 0x26, 0x28, 0x28, 0x2A, 0x2A, 0x2C,
262        0x2C, 0x2E, 0x2E, 0x30, 0x30, 0x32, 0x32, 0x34, 0x34, 0x36, 0x36, 0x38, 0x38, 0x3A, 0x3A,
263        0x3C, 0x3C, 0x3E, 0x3E, 0x40, 0x40, 0x42, 0x42, 0x44, 0x44, 0x46, 0x46, 0x48, 0x48, 0x4A,
264        0x4A, 0x4C, 0x4C, 0x4E, 0x4E, 0x50, 0x50, 0x52, 0x52, 0x54, 0x54, 0x56, 0x56, 0x58, 0x58,
265        0x5A, 0x5A, 0x5C, 0x5C, 0x5E, 0x5E, 0x60, 0x60, 0x62, 0x62, 0x64, 0x64, 0x66, 0x66, 0x68,
266        0x68, 0x6A, 0x6A, 0x6C, 0x6C, 0x6E, 0x6E, 0x70, 0x70, 0x72, 0x72, 0x74, 0x74, 0x76, 0x76,
267        0x78, 0x78, 0x7A, 0x7A, 0x7C, 0x7C, 0x7E, 0x7E, 0x80, 0x80, 0x82, 0x82, 0x84, 0x84, 0x86,
268        0x86, 0x88, 0x88, 0x8A, 0x8A, 0x8C, 0x8C, 0x8E, 0x8E, 0x90, 0x90, 0x92, 0x92, 0x94, 0x94,
269        0x96, 0x96, 0x98, 0x98, 0x9A, 0x9A, 0x9C, 0x9C, 0x9E, 0x9E, 0xA0, 0xA0, 0xA2, 0xA2, 0xA4,
270        0xA4, 0xA6, 0xA6, 0xA8, 0xA8, 0xAA, 0xAA, 0xAC, 0xAC, 0xAE, 0xAE, 0xB0, 0xB0, 0xB2, 0xB2,
271        0xB4, 0xB4, 0xB6, 0xB6, 0xB8, 0xB8, 0xBA, 0xBA, 0xBC, 0xBC, 0xBE, 0xBE, 0xC0, 0xC0, 0xC2,
272        0xC2, 0xC4, 0xC4, 0xC6, 0xC6, 0xC8, 0xC8, 0xCA, 0xCA, 0xCC, 0xCC, 0xCE, 0xCE, 0xD0, 0xD0,
273        0xD2, 0xD2, 0xD4, 0xD4, 0xD6, 0xD6, 0xD8, 0xD8, 0xDA, 0xDA, 0xDC, 0xDC, 0xDE, 0xDE, 0xE0,
274        0xE0, 0xE2, 0xE2, 0xE4, 0xE4, 0xE6, 0xE6, 0xE8, 0xE8, 0xEA, 0xEA, 0xEC, 0xEC, 0xEE, 0xEE,
275        0xF0, 0xF0, 0xF2, 0xF2, 0xF4, 0xF4, 0xF6, 0xF6, 0xF8, 0xF8, 0xFA, 0xFA, 0xFC, 0xFC, 0xFE,
276        0xFE, 0x01, 0x01, 0x03, 0x03, 0x05, 0x05, 0x07, 0x07, 0x09, 0x09, 0xD3, 0xD3, 0xD5, 0xD5,
277        0xD7, 0xD7, 0xD9, 0xD9, 0xDB, 0xDB, 0xDD, 0xDD, 0xDF, 0xDF, 0xE1, 0xE1, 0xE3, 0xE3, 0xE5,
278        0xE5, 0xE7, 0xE7, 0xE9, 0xE9, 0xEB, 0xEB, 0xED, 0xED, 0xEF, 0xEF, 0xF1, 0xF1, 0xF3, 0xF3,
279        0xF5, 0xF5, 0xF7, 0xF7, 0xF9, 0xF9, 0xFB, 0xFB, 0xFD, 0xFD, 0xFF, 0xFF,
280    ];
281
282    let mut vdp = new_vdp();
283    vdp.timing_mode = TimingMode::Pal;
284    vdp.registers.vertical_display_size = VerticalDisplaySize::ThirtyCell;
285    vdp.registers.interlacing_mode = InterlacingMode::Interlaced;
286    vdp.state.interlaced_frame = true;
287    vdp.state.interlaced_odd = false;
288    v_counter_test(EXPECTED, &mut vdp);
289}
290
291#[test]
292fn v_counter_pal_v30_interlaced_single_odd_frame() {
293    const EXPECTED: &[u8; PAL_SCANLINES_PER_FRAME as usize] = &[
294        0x00, 0x00, 0x02, 0x02, 0x04, 0x04, 0x06, 0x06, 0x08, 0x08, 0x0A, 0x0A, 0x0C, 0x0C, 0x0E,
295        0x0E, 0x10, 0x10, 0x12, 0x12, 0x14, 0x14, 0x16, 0x16, 0x18, 0x18, 0x1A, 0x1A, 0x1C, 0x1C,
296        0x1E, 0x1E, 0x20, 0x20, 0x22, 0x22, 0x24, 0x24, 0x26, 0x26, 0x28, 0x28, 0x2A, 0x2A, 0x2C,
297        0x2C, 0x2E, 0x2E, 0x30, 0x30, 0x32, 0x32, 0x34, 0x34, 0x36, 0x36, 0x38, 0x38, 0x3A, 0x3A,
298        0x3C, 0x3C, 0x3E, 0x3E, 0x40, 0x40, 0x42, 0x42, 0x44, 0x44, 0x46, 0x46, 0x48, 0x48, 0x4A,
299        0x4A, 0x4C, 0x4C, 0x4E, 0x4E, 0x50, 0x50, 0x52, 0x52, 0x54, 0x54, 0x56, 0x56, 0x58, 0x58,
300        0x5A, 0x5A, 0x5C, 0x5C, 0x5E, 0x5E, 0x60, 0x60, 0x62, 0x62, 0x64, 0x64, 0x66, 0x66, 0x68,
301        0x68, 0x6A, 0x6A, 0x6C, 0x6C, 0x6E, 0x6E, 0x70, 0x70, 0x72, 0x72, 0x74, 0x74, 0x76, 0x76,
302        0x78, 0x78, 0x7A, 0x7A, 0x7C, 0x7C, 0x7E, 0x7E, 0x80, 0x80, 0x82, 0x82, 0x84, 0x84, 0x86,
303        0x86, 0x88, 0x88, 0x8A, 0x8A, 0x8C, 0x8C, 0x8E, 0x8E, 0x90, 0x90, 0x92, 0x92, 0x94, 0x94,
304        0x96, 0x96, 0x98, 0x98, 0x9A, 0x9A, 0x9C, 0x9C, 0x9E, 0x9E, 0xA0, 0xA0, 0xA2, 0xA2, 0xA4,
305        0xA4, 0xA6, 0xA6, 0xA8, 0xA8, 0xAA, 0xAA, 0xAC, 0xAC, 0xAE, 0xAE, 0xB0, 0xB0, 0xB2, 0xB2,
306        0xB4, 0xB4, 0xB6, 0xB6, 0xB8, 0xB8, 0xBA, 0xBA, 0xBC, 0xBC, 0xBE, 0xBE, 0xC0, 0xC0, 0xC2,
307        0xC2, 0xC4, 0xC4, 0xC6, 0xC6, 0xC8, 0xC8, 0xCA, 0xCA, 0xCC, 0xCC, 0xCE, 0xCE, 0xD0, 0xD0,
308        0xD2, 0xD2, 0xD4, 0xD4, 0xD6, 0xD6, 0xD8, 0xD8, 0xDA, 0xDA, 0xDC, 0xDC, 0xDE, 0xDE, 0xE0,
309        0xE0, 0xE2, 0xE2, 0xE4, 0xE4, 0xE6, 0xE6, 0xE8, 0xE8, 0xEA, 0xEA, 0xEC, 0xEC, 0xEE, 0xEE,
310        0xF0, 0xF0, 0xF2, 0xF2, 0xF4, 0xF4, 0xF6, 0xF6, 0xF8, 0xF8, 0xFA, 0xFA, 0xFC, 0xFC, 0xFE,
311        0xFE, 0x01, 0x01, 0x03, 0x03, 0x05, 0x05, 0x07, 0x07, 0x09, 0x09, 0xD1, 0xD3, 0xD3, 0xD5,
312        0xD5, 0xD7, 0xD7, 0xD9, 0xD9, 0xDB, 0xDB, 0xDD, 0xDD, 0xDF, 0xDF, 0xE1, 0xE1, 0xE3, 0xE3,
313        0xE5, 0xE5, 0xE7, 0xE7, 0xE9, 0xE9, 0xEB, 0xEB, 0xED, 0xED, 0xEF, 0xEF, 0xF1, 0xF1, 0xF3,
314        0xF3, 0xF5, 0xF5, 0xF7, 0xF7, 0xF9, 0xF9, 0xFB, 0xFB, 0xFD, 0xFD, 0xFF, 0xFF,
315    ];
316
317    let mut vdp = new_vdp();
318    vdp.timing_mode = TimingMode::Pal;
319    vdp.registers.vertical_display_size = VerticalDisplaySize::ThirtyCell;
320    vdp.registers.interlacing_mode = InterlacingMode::Interlaced;
321    vdp.state.interlaced_frame = true;
322    vdp.state.interlaced_odd = true;
323    v_counter_test(EXPECTED, &mut vdp);
324}
325
326#[test]
327fn v_counter_ntsc_interlaced_double_even_frame() {
328    const EXPECTED: &[u8; NTSC_SCANLINES_PER_FRAME as usize] = &[
329        0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C,
330        0x1E, 0x20, 0x22, 0x24, 0x26, 0x28, 0x2A, 0x2C, 0x2E, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3A,
331        0x3C, 0x3E, 0x40, 0x42, 0x44, 0x46, 0x48, 0x4A, 0x4C, 0x4E, 0x50, 0x52, 0x54, 0x56, 0x58,
332        0x5A, 0x5C, 0x5E, 0x60, 0x62, 0x64, 0x66, 0x68, 0x6A, 0x6C, 0x6E, 0x70, 0x72, 0x74, 0x76,
333        0x78, 0x7A, 0x7C, 0x7E, 0x80, 0x82, 0x84, 0x86, 0x88, 0x8A, 0x8C, 0x8E, 0x90, 0x92, 0x94,
334        0x96, 0x98, 0x9A, 0x9C, 0x9E, 0xA0, 0xA2, 0xA4, 0xA6, 0xA8, 0xAA, 0xAC, 0xAE, 0xB0, 0xB2,
335        0xB4, 0xB6, 0xB8, 0xBA, 0xBC, 0xBE, 0xC0, 0xC2, 0xC4, 0xC6, 0xC8, 0xCA, 0xCC, 0xCE, 0xD0,
336        0xD2, 0xD4, 0xD6, 0xD8, 0xDA, 0xDC, 0xDE, 0xE0, 0xE2, 0xE4, 0xE6, 0xE8, 0xEA, 0xEC, 0xEE,
337        0xF0, 0xF2, 0xF4, 0xF6, 0xF8, 0xFA, 0xFC, 0xFE, 0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D,
338        0x0F, 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F, 0x21, 0x23, 0x25, 0x27, 0x29, 0x2B,
339        0x2D, 0x2F, 0x31, 0x33, 0x35, 0x37, 0x39, 0x3B, 0x3D, 0x3F, 0x41, 0x43, 0x45, 0x47, 0x49,
340        0x4B, 0x4D, 0x4F, 0x51, 0x53, 0x55, 0x57, 0x59, 0x5B, 0x5D, 0x5F, 0x61, 0x63, 0x65, 0x67,
341        0x69, 0x6B, 0x6D, 0x6F, 0x71, 0x73, 0x75, 0x77, 0x79, 0x7B, 0x7D, 0x7F, 0x81, 0x83, 0x85,
342        0x87, 0x89, 0x8B, 0x8D, 0x8F, 0x91, 0x93, 0x95, 0x97, 0x99, 0x9B, 0x9D, 0x9F, 0xA1, 0xA3,
343        0xA5, 0xA7, 0xA9, 0xAB, 0xAD, 0xAF, 0xB1, 0xB3, 0xB5, 0xB7, 0xB9, 0xBB, 0xBD, 0xBF, 0xC1,
344        0xC3, 0xC5, 0xC7, 0xC9, 0xCB, 0xCD, 0xCF, 0xD1, 0xD3, 0xD5, 0xCB, 0xCD, 0xCF, 0xD1, 0xD3,
345        0xD5, 0xD7, 0xD9, 0xDB, 0xDD, 0xDF, 0xE1, 0xE3, 0xE5, 0xE7, 0xE9, 0xEB, 0xED, 0xEF, 0xF1,
346        0xF3, 0xF5, 0xF7, 0xF9, 0xFB, 0xFD, 0xFF,
347    ];
348
349    let mut vdp = new_vdp();
350    vdp.timing_mode = TimingMode::Ntsc;
351    vdp.registers.interlacing_mode = InterlacingMode::InterlacedDouble;
352    vdp.state.interlaced_frame = true;
353    vdp.state.interlaced_odd = false;
354    v_counter_test(EXPECTED, &mut vdp);
355}
356
357#[test]
358fn v_counter_ntsc_interlaced_double_odd_frame() {
359    const EXPECTED: &[u8; (NTSC_SCANLINES_PER_FRAME + 1) as usize] = &[
360        0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C,
361        0x1E, 0x20, 0x22, 0x24, 0x26, 0x28, 0x2A, 0x2C, 0x2E, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3A,
362        0x3C, 0x3E, 0x40, 0x42, 0x44, 0x46, 0x48, 0x4A, 0x4C, 0x4E, 0x50, 0x52, 0x54, 0x56, 0x58,
363        0x5A, 0x5C, 0x5E, 0x60, 0x62, 0x64, 0x66, 0x68, 0x6A, 0x6C, 0x6E, 0x70, 0x72, 0x74, 0x76,
364        0x78, 0x7A, 0x7C, 0x7E, 0x80, 0x82, 0x84, 0x86, 0x88, 0x8A, 0x8C, 0x8E, 0x90, 0x92, 0x94,
365        0x96, 0x98, 0x9A, 0x9C, 0x9E, 0xA0, 0xA2, 0xA4, 0xA6, 0xA8, 0xAA, 0xAC, 0xAE, 0xB0, 0xB2,
366        0xB4, 0xB6, 0xB8, 0xBA, 0xBC, 0xBE, 0xC0, 0xC2, 0xC4, 0xC6, 0xC8, 0xCA, 0xCC, 0xCE, 0xD0,
367        0xD2, 0xD4, 0xD6, 0xD8, 0xDA, 0xDC, 0xDE, 0xE0, 0xE2, 0xE4, 0xE6, 0xE8, 0xEA, 0xEC, 0xEE,
368        0xF0, 0xF2, 0xF4, 0xF6, 0xF8, 0xFA, 0xFC, 0xFE, 0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D,
369        0x0F, 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F, 0x21, 0x23, 0x25, 0x27, 0x29, 0x2B,
370        0x2D, 0x2F, 0x31, 0x33, 0x35, 0x37, 0x39, 0x3B, 0x3D, 0x3F, 0x41, 0x43, 0x45, 0x47, 0x49,
371        0x4B, 0x4D, 0x4F, 0x51, 0x53, 0x55, 0x57, 0x59, 0x5B, 0x5D, 0x5F, 0x61, 0x63, 0x65, 0x67,
372        0x69, 0x6B, 0x6D, 0x6F, 0x71, 0x73, 0x75, 0x77, 0x79, 0x7B, 0x7D, 0x7F, 0x81, 0x83, 0x85,
373        0x87, 0x89, 0x8B, 0x8D, 0x8F, 0x91, 0x93, 0x95, 0x97, 0x99, 0x9B, 0x9D, 0x9F, 0xA1, 0xA3,
374        0xA5, 0xA7, 0xA9, 0xAB, 0xAD, 0xAF, 0xB1, 0xB3, 0xB5, 0xB7, 0xB9, 0xBB, 0xBD, 0xBF, 0xC1,
375        0xC3, 0xC5, 0xC7, 0xC9, 0xCB, 0xCD, 0xCF, 0xD1, 0xD3, 0xD5, 0xC9, 0xCB, 0xCD, 0xCF, 0xD1,
376        0xD3, 0xD5, 0xD7, 0xD9, 0xDB, 0xDD, 0xDF, 0xE1, 0xE3, 0xE5, 0xE7, 0xE9, 0xEB, 0xED, 0xEF,
377        0xF1, 0xF3, 0xF5, 0xF7, 0xF9, 0xFB, 0xFD, 0xFF,
378    ];
379
380    let mut vdp = new_vdp();
381    vdp.timing_mode = TimingMode::Ntsc;
382    vdp.registers.interlacing_mode = InterlacingMode::InterlacedDouble;
383    vdp.state.interlaced_frame = true;
384    vdp.state.interlaced_odd = true;
385    v_counter_test(EXPECTED, &mut vdp);
386}
387
388#[test]
389fn v_counter_pal_v28_interlaced_double_even_frame() {
390    const EXPECTED: &[u8; (PAL_SCANLINES_PER_FRAME - 1) as usize] = &[
391        0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C,
392        0x1E, 0x20, 0x22, 0x24, 0x26, 0x28, 0x2A, 0x2C, 0x2E, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3A,
393        0x3C, 0x3E, 0x40, 0x42, 0x44, 0x46, 0x48, 0x4A, 0x4C, 0x4E, 0x50, 0x52, 0x54, 0x56, 0x58,
394        0x5A, 0x5C, 0x5E, 0x60, 0x62, 0x64, 0x66, 0x68, 0x6A, 0x6C, 0x6E, 0x70, 0x72, 0x74, 0x76,
395        0x78, 0x7A, 0x7C, 0x7E, 0x80, 0x82, 0x84, 0x86, 0x88, 0x8A, 0x8C, 0x8E, 0x90, 0x92, 0x94,
396        0x96, 0x98, 0x9A, 0x9C, 0x9E, 0xA0, 0xA2, 0xA4, 0xA6, 0xA8, 0xAA, 0xAC, 0xAE, 0xB0, 0xB2,
397        0xB4, 0xB6, 0xB8, 0xBA, 0xBC, 0xBE, 0xC0, 0xC2, 0xC4, 0xC6, 0xC8, 0xCA, 0xCC, 0xCE, 0xD0,
398        0xD2, 0xD4, 0xD6, 0xD8, 0xDA, 0xDC, 0xDE, 0xE0, 0xE2, 0xE4, 0xE6, 0xE8, 0xEA, 0xEC, 0xEE,
399        0xF0, 0xF2, 0xF4, 0xF6, 0xF8, 0xFA, 0xFC, 0xFE, 0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D,
400        0x0F, 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F, 0x21, 0x23, 0x25, 0x27, 0x29, 0x2B,
401        0x2D, 0x2F, 0x31, 0x33, 0x35, 0x37, 0x39, 0x3B, 0x3D, 0x3F, 0x41, 0x43, 0x45, 0x47, 0x49,
402        0x4B, 0x4D, 0x4F, 0x51, 0x53, 0x55, 0x57, 0x59, 0x5B, 0x5D, 0x5F, 0x61, 0x63, 0x65, 0x67,
403        0x69, 0x6B, 0x6D, 0x6F, 0x71, 0x73, 0x75, 0x77, 0x79, 0x7B, 0x7D, 0x7F, 0x81, 0x83, 0x85,
404        0x87, 0x89, 0x8B, 0x8D, 0x8F, 0x91, 0x93, 0x95, 0x97, 0x99, 0x9B, 0x9D, 0x9F, 0xA1, 0xA3,
405        0xA5, 0xA7, 0xA9, 0xAB, 0xAD, 0xAF, 0xB1, 0xB3, 0xB5, 0xB7, 0xB9, 0xBB, 0xBD, 0xBF, 0xC1,
406        0xC3, 0xC5, 0xC7, 0xC9, 0xCB, 0xCD, 0xCF, 0xD1, 0xD3, 0xD5, 0xD7, 0xD9, 0xDB, 0xDD, 0xDF,
407        0xE1, 0xE3, 0xE5, 0xE7, 0xE9, 0xEB, 0xED, 0xEF, 0xF1, 0xF3, 0xF5, 0xF7, 0xF9, 0xFB, 0xFD,
408        0xFF, 0x00, 0x02, 0x95, 0x97, 0x99, 0x9B, 0x9D, 0x9F, 0xA1, 0xA3, 0xA5, 0xA7, 0xA9, 0xAB,
409        0xAD, 0xAF, 0xB1, 0xB3, 0xB5, 0xB7, 0xB9, 0xBB, 0xBD, 0xBF, 0xC1, 0xC3, 0xC5, 0xC7, 0xC9,
410        0xCB, 0xCD, 0xCF, 0xD1, 0xD3, 0xD5, 0xD7, 0xD9, 0xDB, 0xDD, 0xDF, 0xE1, 0xE3, 0xE5, 0xE7,
411        0xE9, 0xEB, 0xED, 0xEF, 0xF1, 0xF3, 0xF5, 0xF7, 0xF9, 0xFB, 0xFD, 0xFF,
412    ];
413
414    let mut vdp = new_vdp();
415    vdp.timing_mode = TimingMode::Pal;
416    vdp.registers.vertical_display_size = VerticalDisplaySize::TwentyEightCell;
417    vdp.registers.interlacing_mode = InterlacingMode::InterlacedDouble;
418    vdp.state.interlaced_frame = true;
419    vdp.state.interlaced_odd = false;
420    v_counter_test(EXPECTED, &mut vdp);
421}
422
423#[test]
424fn v_counter_pal_v28_interlaced_double_odd_frame() {
425    const EXPECTED: &[u8; PAL_SCANLINES_PER_FRAME as usize] = &[
426        0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C,
427        0x1E, 0x20, 0x22, 0x24, 0x26, 0x28, 0x2A, 0x2C, 0x2E, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3A,
428        0x3C, 0x3E, 0x40, 0x42, 0x44, 0x46, 0x48, 0x4A, 0x4C, 0x4E, 0x50, 0x52, 0x54, 0x56, 0x58,
429        0x5A, 0x5C, 0x5E, 0x60, 0x62, 0x64, 0x66, 0x68, 0x6A, 0x6C, 0x6E, 0x70, 0x72, 0x74, 0x76,
430        0x78, 0x7A, 0x7C, 0x7E, 0x80, 0x82, 0x84, 0x86, 0x88, 0x8A, 0x8C, 0x8E, 0x90, 0x92, 0x94,
431        0x96, 0x98, 0x9A, 0x9C, 0x9E, 0xA0, 0xA2, 0xA4, 0xA6, 0xA8, 0xAA, 0xAC, 0xAE, 0xB0, 0xB2,
432        0xB4, 0xB6, 0xB8, 0xBA, 0xBC, 0xBE, 0xC0, 0xC2, 0xC4, 0xC6, 0xC8, 0xCA, 0xCC, 0xCE, 0xD0,
433        0xD2, 0xD4, 0xD6, 0xD8, 0xDA, 0xDC, 0xDE, 0xE0, 0xE2, 0xE4, 0xE6, 0xE8, 0xEA, 0xEC, 0xEE,
434        0xF0, 0xF2, 0xF4, 0xF6, 0xF8, 0xFA, 0xFC, 0xFE, 0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D,
435        0x0F, 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F, 0x21, 0x23, 0x25, 0x27, 0x29, 0x2B,
436        0x2D, 0x2F, 0x31, 0x33, 0x35, 0x37, 0x39, 0x3B, 0x3D, 0x3F, 0x41, 0x43, 0x45, 0x47, 0x49,
437        0x4B, 0x4D, 0x4F, 0x51, 0x53, 0x55, 0x57, 0x59, 0x5B, 0x5D, 0x5F, 0x61, 0x63, 0x65, 0x67,
438        0x69, 0x6B, 0x6D, 0x6F, 0x71, 0x73, 0x75, 0x77, 0x79, 0x7B, 0x7D, 0x7F, 0x81, 0x83, 0x85,
439        0x87, 0x89, 0x8B, 0x8D, 0x8F, 0x91, 0x93, 0x95, 0x97, 0x99, 0x9B, 0x9D, 0x9F, 0xA1, 0xA3,
440        0xA5, 0xA7, 0xA9, 0xAB, 0xAD, 0xAF, 0xB1, 0xB3, 0xB5, 0xB7, 0xB9, 0xBB, 0xBD, 0xBF, 0xC1,
441        0xC3, 0xC5, 0xC7, 0xC9, 0xCB, 0xCD, 0xCF, 0xD1, 0xD3, 0xD5, 0xD7, 0xD9, 0xDB, 0xDD, 0xDF,
442        0xE1, 0xE3, 0xE5, 0xE7, 0xE9, 0xEB, 0xED, 0xEF, 0xF1, 0xF3, 0xF5, 0xF7, 0xF9, 0xFB, 0xFD,
443        0xFF, 0x00, 0x02, 0x93, 0x95, 0x97, 0x99, 0x9B, 0x9D, 0x9F, 0xA1, 0xA3, 0xA5, 0xA7, 0xA9,
444        0xAB, 0xAD, 0xAF, 0xB1, 0xB3, 0xB5, 0xB7, 0xB9, 0xBB, 0xBD, 0xBF, 0xC1, 0xC3, 0xC5, 0xC7,
445        0xC9, 0xCB, 0xCD, 0xCF, 0xD1, 0xD3, 0xD5, 0xD7, 0xD9, 0xDB, 0xDD, 0xDF, 0xE1, 0xE3, 0xE5,
446        0xE7, 0xE9, 0xEB, 0xED, 0xEF, 0xF1, 0xF3, 0xF5, 0xF7, 0xF9, 0xFB, 0xFD, 0xFF,
447    ];
448
449    let mut vdp = new_vdp();
450    vdp.timing_mode = TimingMode::Pal;
451    vdp.registers.vertical_display_size = VerticalDisplaySize::TwentyEightCell;
452    vdp.registers.interlacing_mode = InterlacingMode::InterlacedDouble;
453    vdp.state.interlaced_frame = true;
454    vdp.state.interlaced_odd = true;
455    v_counter_test(EXPECTED, &mut vdp);
456}
457
458#[test]
459fn v_counter_pal_v30_interlaced_double_even_frame() {
460    const EXPECTED: &[u8; (PAL_SCANLINES_PER_FRAME - 1) as usize] = &[
461        0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C,
462        0x1E, 0x20, 0x22, 0x24, 0x26, 0x28, 0x2A, 0x2C, 0x2E, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3A,
463        0x3C, 0x3E, 0x40, 0x42, 0x44, 0x46, 0x48, 0x4A, 0x4C, 0x4E, 0x50, 0x52, 0x54, 0x56, 0x58,
464        0x5A, 0x5C, 0x5E, 0x60, 0x62, 0x64, 0x66, 0x68, 0x6A, 0x6C, 0x6E, 0x70, 0x72, 0x74, 0x76,
465        0x78, 0x7A, 0x7C, 0x7E, 0x80, 0x82, 0x84, 0x86, 0x88, 0x8A, 0x8C, 0x8E, 0x90, 0x92, 0x94,
466        0x96, 0x98, 0x9A, 0x9C, 0x9E, 0xA0, 0xA2, 0xA4, 0xA6, 0xA8, 0xAA, 0xAC, 0xAE, 0xB0, 0xB2,
467        0xB4, 0xB6, 0xB8, 0xBA, 0xBC, 0xBE, 0xC0, 0xC2, 0xC4, 0xC6, 0xC8, 0xCA, 0xCC, 0xCE, 0xD0,
468        0xD2, 0xD4, 0xD6, 0xD8, 0xDA, 0xDC, 0xDE, 0xE0, 0xE2, 0xE4, 0xE6, 0xE8, 0xEA, 0xEC, 0xEE,
469        0xF0, 0xF2, 0xF4, 0xF6, 0xF8, 0xFA, 0xFC, 0xFE, 0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D,
470        0x0F, 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F, 0x21, 0x23, 0x25, 0x27, 0x29, 0x2B,
471        0x2D, 0x2F, 0x31, 0x33, 0x35, 0x37, 0x39, 0x3B, 0x3D, 0x3F, 0x41, 0x43, 0x45, 0x47, 0x49,
472        0x4B, 0x4D, 0x4F, 0x51, 0x53, 0x55, 0x57, 0x59, 0x5B, 0x5D, 0x5F, 0x61, 0x63, 0x65, 0x67,
473        0x69, 0x6B, 0x6D, 0x6F, 0x71, 0x73, 0x75, 0x77, 0x79, 0x7B, 0x7D, 0x7F, 0x81, 0x83, 0x85,
474        0x87, 0x89, 0x8B, 0x8D, 0x8F, 0x91, 0x93, 0x95, 0x97, 0x99, 0x9B, 0x9D, 0x9F, 0xA1, 0xA3,
475        0xA5, 0xA7, 0xA9, 0xAB, 0xAD, 0xAF, 0xB1, 0xB3, 0xB5, 0xB7, 0xB9, 0xBB, 0xBD, 0xBF, 0xC1,
476        0xC3, 0xC5, 0xC7, 0xC9, 0xCB, 0xCD, 0xCF, 0xD1, 0xD3, 0xD5, 0xD7, 0xD9, 0xDB, 0xDD, 0xDF,
477        0xE1, 0xE3, 0xE5, 0xE7, 0xE9, 0xEB, 0xED, 0xEF, 0xF1, 0xF3, 0xF5, 0xF7, 0xF9, 0xFB, 0xFD,
478        0xFF, 0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E, 0x10, 0x12, 0xA5, 0xA7, 0xA9, 0xAB,
479        0xAD, 0xAF, 0xB1, 0xB3, 0xB5, 0xB7, 0xB9, 0xBB, 0xBD, 0xBF, 0xC1, 0xC3, 0xC5, 0xC7, 0xC9,
480        0xCB, 0xCD, 0xCF, 0xD1, 0xD3, 0xD5, 0xD7, 0xD9, 0xDB, 0xDD, 0xDF, 0xE1, 0xE3, 0xE5, 0xE7,
481        0xE9, 0xEB, 0xED, 0xEF, 0xF1, 0xF3, 0xF5, 0xF7, 0xF9, 0xFB, 0xFD, 0xFF,
482    ];
483
484    let mut vdp = new_vdp();
485    vdp.timing_mode = TimingMode::Pal;
486    vdp.registers.vertical_display_size = VerticalDisplaySize::ThirtyCell;
487    vdp.registers.interlacing_mode = InterlacingMode::InterlacedDouble;
488    vdp.state.interlaced_frame = true;
489    vdp.state.interlaced_odd = false;
490    v_counter_test(EXPECTED, &mut vdp);
491}
492
493#[test]
494fn v_counter_pal_v30_interlaced_double_odd_frame() {
495    const EXPECTED: &[u8; PAL_SCANLINES_PER_FRAME as usize] = &[
496        0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E, 0x10, 0x12, 0x14, 0x16, 0x18, 0x1A, 0x1C,
497        0x1E, 0x20, 0x22, 0x24, 0x26, 0x28, 0x2A, 0x2C, 0x2E, 0x30, 0x32, 0x34, 0x36, 0x38, 0x3A,
498        0x3C, 0x3E, 0x40, 0x42, 0x44, 0x46, 0x48, 0x4A, 0x4C, 0x4E, 0x50, 0x52, 0x54, 0x56, 0x58,
499        0x5A, 0x5C, 0x5E, 0x60, 0x62, 0x64, 0x66, 0x68, 0x6A, 0x6C, 0x6E, 0x70, 0x72, 0x74, 0x76,
500        0x78, 0x7A, 0x7C, 0x7E, 0x80, 0x82, 0x84, 0x86, 0x88, 0x8A, 0x8C, 0x8E, 0x90, 0x92, 0x94,
501        0x96, 0x98, 0x9A, 0x9C, 0x9E, 0xA0, 0xA2, 0xA4, 0xA6, 0xA8, 0xAA, 0xAC, 0xAE, 0xB0, 0xB2,
502        0xB4, 0xB6, 0xB8, 0xBA, 0xBC, 0xBE, 0xC0, 0xC2, 0xC4, 0xC6, 0xC8, 0xCA, 0xCC, 0xCE, 0xD0,
503        0xD2, 0xD4, 0xD6, 0xD8, 0xDA, 0xDC, 0xDE, 0xE0, 0xE2, 0xE4, 0xE6, 0xE8, 0xEA, 0xEC, 0xEE,
504        0xF0, 0xF2, 0xF4, 0xF6, 0xF8, 0xFA, 0xFC, 0xFE, 0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D,
505        0x0F, 0x11, 0x13, 0x15, 0x17, 0x19, 0x1B, 0x1D, 0x1F, 0x21, 0x23, 0x25, 0x27, 0x29, 0x2B,
506        0x2D, 0x2F, 0x31, 0x33, 0x35, 0x37, 0x39, 0x3B, 0x3D, 0x3F, 0x41, 0x43, 0x45, 0x47, 0x49,
507        0x4B, 0x4D, 0x4F, 0x51, 0x53, 0x55, 0x57, 0x59, 0x5B, 0x5D, 0x5F, 0x61, 0x63, 0x65, 0x67,
508        0x69, 0x6B, 0x6D, 0x6F, 0x71, 0x73, 0x75, 0x77, 0x79, 0x7B, 0x7D, 0x7F, 0x81, 0x83, 0x85,
509        0x87, 0x89, 0x8B, 0x8D, 0x8F, 0x91, 0x93, 0x95, 0x97, 0x99, 0x9B, 0x9D, 0x9F, 0xA1, 0xA3,
510        0xA5, 0xA7, 0xA9, 0xAB, 0xAD, 0xAF, 0xB1, 0xB3, 0xB5, 0xB7, 0xB9, 0xBB, 0xBD, 0xBF, 0xC1,
511        0xC3, 0xC5, 0xC7, 0xC9, 0xCB, 0xCD, 0xCF, 0xD1, 0xD3, 0xD5, 0xD7, 0xD9, 0xDB, 0xDD, 0xDF,
512        0xE1, 0xE3, 0xE5, 0xE7, 0xE9, 0xEB, 0xED, 0xEF, 0xF1, 0xF3, 0xF5, 0xF7, 0xF9, 0xFB, 0xFD,
513        0xFF, 0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0E, 0x10, 0x12, 0xA3, 0xA5, 0xA7, 0xA9,
514        0xAB, 0xAD, 0xAF, 0xB1, 0xB3, 0xB5, 0xB7, 0xB9, 0xBB, 0xBD, 0xBF, 0xC1, 0xC3, 0xC5, 0xC7,
515        0xC9, 0xCB, 0xCD, 0xCF, 0xD1, 0xD3, 0xD5, 0xD7, 0xD9, 0xDB, 0xDD, 0xDF, 0xE1, 0xE3, 0xE5,
516        0xE7, 0xE9, 0xEB, 0xED, 0xEF, 0xF1, 0xF3, 0xF5, 0xF7, 0xF9, 0xFB, 0xFD, 0xFF,
517    ];
518
519    let mut vdp = new_vdp();
520    vdp.timing_mode = TimingMode::Pal;
521    vdp.registers.vertical_display_size = VerticalDisplaySize::ThirtyCell;
522    vdp.registers.interlacing_mode = InterlacingMode::InterlacedDouble;
523    vdp.state.interlaced_frame = true;
524    vdp.state.interlaced_odd = true;
525    v_counter_test(EXPECTED, &mut vdp);
526}
527
528fn h_counter_test(
529    expected_pixels: &[u16; 3420],
530    expected_h: &[u16; 3420],
531    pixel_fn: fn(u64) -> u16,
532    h_fn: fn(u16) -> u16,
533) {
534    for mclk in 0..3420 {
535        let pixel = pixel_fn(mclk);
536        let h = h_fn(pixel);
537
538        assert_eq!(
539            pixel, expected_pixels[mclk as usize],
540            "Pixel mismatch for mclk={mclk}: expected {}, got {pixel}",
541            expected_pixels[mclk as usize]
542        );
543        assert_eq!(
544            h, expected_h[mclk as usize],
545            "Internal H mismatch for mclk={mclk}: expected 0x{:03X}, got 0x{h:03X}",
546            expected_h[mclk as usize]
547        );
548    }
549}
550
551#[test]
552fn h_counter_h32() {
553    const EXPECTED_PIXELS: &[u16; 3420] = &[
554        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
555        3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
556        6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
557        9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11,
558        11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13,
559        13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16,
560        16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18,
561        18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20,
562        20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
563        23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25,
564        25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27,
565        27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29,
566        29, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 32,
567        32, 32, 32, 32, 32, 32, 32, 32, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 34, 34, 34, 34, 34,
568        34, 34, 34, 34, 34, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 36, 36, 36, 36, 36, 36, 36, 36,
569        36, 36, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 39,
570        39, 39, 39, 39, 39, 39, 39, 39, 39, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 41, 41, 41, 41,
571        41, 41, 41, 41, 41, 41, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 43, 43, 43, 43, 43, 43, 43,
572        43, 43, 43, 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45,
573        46, 46, 46, 46, 46, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 48, 48, 48,
574        48, 48, 48, 48, 48, 48, 48, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 50, 50, 50, 50, 50, 50,
575        50, 50, 50, 50, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 52, 52, 52, 52, 52, 52, 52, 52, 52,
576        52, 53, 53, 53, 53, 53, 53, 53, 53, 53, 53, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 55, 55,
577        55, 55, 55, 55, 55, 55, 55, 55, 56, 56, 56, 56, 56, 56, 56, 56, 56, 56, 57, 57, 57, 57, 57,
578        57, 57, 57, 57, 57, 58, 58, 58, 58, 58, 58, 58, 58, 58, 58, 59, 59, 59, 59, 59, 59, 59, 59,
579        59, 59, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 62,
580        62, 62, 62, 62, 62, 62, 62, 62, 62, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 64, 64, 64, 64,
581        64, 64, 64, 64, 64, 64, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 66, 66, 66, 66, 66, 66, 66,
582        66, 66, 66, 67, 67, 67, 67, 67, 67, 67, 67, 67, 67, 68, 68, 68, 68, 68, 68, 68, 68, 68, 68,
583        69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 71, 71, 71,
584        71, 71, 71, 71, 71, 71, 71, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 73, 73, 73, 73, 73, 73,
585        73, 73, 73, 73, 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 75,
586        75, 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 78, 78,
587        78, 78, 78, 78, 78, 78, 78, 78, 79, 79, 79, 79, 79, 79, 79, 79, 79, 79, 80, 80, 80, 80, 80,
588        80, 80, 80, 80, 80, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 82, 82, 82, 82, 82, 82, 82, 82,
589        82, 82, 83, 83, 83, 83, 83, 83, 83, 83, 83, 83, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 85,
590        85, 85, 85, 85, 85, 85, 85, 85, 85, 86, 86, 86, 86, 86, 86, 86, 86, 86, 86, 87, 87, 87, 87,
591        87, 87, 87, 87, 87, 87, 88, 88, 88, 88, 88, 88, 88, 88, 88, 88, 89, 89, 89, 89, 89, 89, 89,
592        89, 89, 89, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 91, 91, 91, 91, 91, 91, 91, 91, 91, 91,
593        92, 92, 92, 92, 92, 92, 92, 92, 92, 92, 93, 93, 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, 94,
594        94, 94, 94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 96, 96, 96,
595        96, 96, 96, 96, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 98,
596        98, 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, 100, 100, 100, 100, 100, 100, 100, 100, 100,
597        100, 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, 102, 102, 102, 102, 102, 102, 102,
598        102, 102, 102, 103, 103, 103, 103, 103, 103, 103, 103, 103, 103, 104, 104, 104, 104, 104,
599        104, 104, 104, 104, 104, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106,
600        106, 106, 106, 106, 106, 106, 106, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 108,
601        108, 108, 108, 108, 108, 108, 108, 108, 108, 109, 109, 109, 109, 109, 109, 109, 109, 109,
602        109, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111, 111, 111, 111, 111, 111,
603        111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 113, 113,
604        113, 113, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 114, 114, 114, 115, 115, 115,
605        115, 115, 115, 115, 115, 115, 115, 116, 116, 116, 116, 116, 116, 116, 116, 116, 116, 117,
606        117, 117, 117, 117, 117, 117, 117, 117, 117, 118, 118, 118, 118, 118, 118, 118, 118, 118,
607        118, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 120, 120, 120, 120, 120, 120, 120,
608        120, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122, 122,
609        122, 122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124,
610        124, 124, 124, 124, 124, 124, 124, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 126,
611        126, 126, 126, 126, 126, 126, 126, 126, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127,
612        127, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, 129, 129, 129,
613        129, 129, 129, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131, 131,
614        131, 131, 131, 131, 131, 132, 132, 132, 132, 132, 132, 132, 132, 132, 132, 133, 133, 133,
615        133, 133, 133, 133, 133, 133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 134, 134, 135,
616        135, 135, 135, 135, 135, 135, 135, 135, 135, 136, 136, 136, 136, 136, 136, 136, 136, 136,
617        136, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 138, 138, 138, 138, 138, 138, 138,
618        138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 140, 140,
619        140, 140, 140, 140, 140, 141, 141, 141, 141, 141, 141, 141, 141, 141, 141, 142, 142, 142,
620        142, 142, 142, 142, 142, 142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 144,
621        144, 144, 144, 144, 144, 144, 144, 144, 144, 145, 145, 145, 145, 145, 145, 145, 145, 145,
622        145, 146, 146, 146, 146, 146, 146, 146, 146, 146, 146, 147, 147, 147, 147, 147, 147, 147,
623        147, 147, 147, 148, 148, 148, 148, 148, 148, 148, 148, 148, 148, 149, 149, 149, 149, 149,
624        149, 149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 151, 151, 151,
625        151, 151, 151, 151, 151, 151, 151, 152, 152, 152, 152, 152, 152, 152, 152, 152, 152, 153,
626        153, 153, 153, 153, 153, 153, 153, 153, 153, 154, 154, 154, 154, 154, 154, 154, 154, 154,
627        154, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 156, 156, 156, 156, 156, 156, 156,
628        156, 156, 156, 157, 157, 157, 157, 157, 157, 157, 157, 157, 157, 158, 158, 158, 158, 158,
629        158, 158, 158, 158, 158, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 160, 160, 160,
630        160, 160, 160, 160, 160, 160, 160, 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, 162,
631        162, 162, 162, 162, 162, 162, 162, 162, 162, 163, 163, 163, 163, 163, 163, 163, 163, 163,
632        163, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 165, 165, 165, 165, 165, 165, 165,
633        165, 165, 165, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 167, 167, 167, 167, 167,
634        167, 167, 167, 167, 167, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 169, 169, 169,
635        169, 169, 169, 169, 169, 169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 170, 170, 171,
636        171, 171, 171, 171, 171, 171, 171, 171, 171, 172, 172, 172, 172, 172, 172, 172, 172, 172,
637        172, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 174, 174, 174, 174, 174, 174, 174,
638        174, 174, 174, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 176, 176, 176, 176, 176,
639        176, 176, 176, 176, 176, 177, 177, 177, 177, 177, 177, 177, 177, 177, 177, 178, 178, 178,
640        178, 178, 178, 178, 178, 178, 178, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 180,
641        180, 180, 180, 180, 180, 180, 180, 180, 180, 181, 181, 181, 181, 181, 181, 181, 181, 181,
642        181, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 183, 183, 183, 183, 183, 183, 183,
643        183, 183, 183, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 185, 185, 185, 185, 185,
644        185, 185, 185, 185, 185, 186, 186, 186, 186, 186, 186, 186, 186, 186, 186, 187, 187, 187,
645        187, 187, 187, 187, 187, 187, 187, 188, 188, 188, 188, 188, 188, 188, 188, 188, 188, 189,
646        189, 189, 189, 189, 189, 189, 189, 189, 189, 190, 190, 190, 190, 190, 190, 190, 190, 190,
647        190, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 192, 192, 192, 192, 192, 192, 192,
648        192, 192, 192, 193, 193, 193, 193, 193, 193, 193, 193, 193, 193, 194, 194, 194, 194, 194,
649        194, 194, 194, 194, 194, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 196, 196, 196,
650        196, 196, 196, 196, 196, 196, 196, 197, 197, 197, 197, 197, 197, 197, 197, 197, 197, 198,
651        198, 198, 198, 198, 198, 198, 198, 198, 198, 199, 199, 199, 199, 199, 199, 199, 199, 199,
652        199, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 201, 201, 201, 201, 201, 201, 201,
653        201, 201, 201, 202, 202, 202, 202, 202, 202, 202, 202, 202, 202, 203, 203, 203, 203, 203,
654        203, 203, 203, 203, 203, 204, 204, 204, 204, 204, 204, 204, 204, 204, 204, 205, 205, 205,
655        205, 205, 205, 205, 205, 205, 205, 206, 206, 206, 206, 206, 206, 206, 206, 206, 206, 207,
656        207, 207, 207, 207, 207, 207, 207, 207, 207, 208, 208, 208, 208, 208, 208, 208, 208, 208,
657        208, 209, 209, 209, 209, 209, 209, 209, 209, 209, 209, 210, 210, 210, 210, 210, 210, 210,
658        210, 210, 210, 211, 211, 211, 211, 211, 211, 211, 211, 211, 211, 212, 212, 212, 212, 212,
659        212, 212, 212, 212, 212, 213, 213, 213, 213, 213, 213, 213, 213, 213, 213, 214, 214, 214,
660        214, 214, 214, 214, 214, 214, 214, 215, 215, 215, 215, 215, 215, 215, 215, 215, 215, 216,
661        216, 216, 216, 216, 216, 216, 216, 216, 216, 217, 217, 217, 217, 217, 217, 217, 217, 217,
662        217, 218, 218, 218, 218, 218, 218, 218, 218, 218, 218, 219, 219, 219, 219, 219, 219, 219,
663        219, 219, 219, 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, 221, 221, 221, 221, 221,
664        221, 221, 221, 221, 221, 222, 222, 222, 222, 222, 222, 222, 222, 222, 222, 223, 223, 223,
665        223, 223, 223, 223, 223, 223, 223, 224, 224, 224, 224, 224, 224, 224, 224, 224, 224, 225,
666        225, 225, 225, 225, 225, 225, 225, 225, 225, 226, 226, 226, 226, 226, 226, 226, 226, 226,
667        226, 227, 227, 227, 227, 227, 227, 227, 227, 227, 227, 228, 228, 228, 228, 228, 228, 228,
668        228, 228, 228, 229, 229, 229, 229, 229, 229, 229, 229, 229, 229, 230, 230, 230, 230, 230,
669        230, 230, 230, 230, 230, 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, 232, 232, 232,
670        232, 232, 232, 232, 232, 232, 232, 233, 233, 233, 233, 233, 233, 233, 233, 233, 233, 234,
671        234, 234, 234, 234, 234, 234, 234, 234, 234, 235, 235, 235, 235, 235, 235, 235, 235, 235,
672        235, 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 237, 237, 237, 237, 237, 237, 237,
673        237, 237, 237, 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, 239, 239, 239, 239, 239,
674        239, 239, 239, 239, 239, 240, 240, 240, 240, 240, 240, 240, 240, 240, 240, 241, 241, 241,
675        241, 241, 241, 241, 241, 241, 241, 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, 243,
676        243, 243, 243, 243, 243, 243, 243, 243, 243, 244, 244, 244, 244, 244, 244, 244, 244, 244,
677        244, 245, 245, 245, 245, 245, 245, 245, 245, 245, 245, 246, 246, 246, 246, 246, 246, 246,
678        246, 246, 246, 247, 247, 247, 247, 247, 247, 247, 247, 247, 247, 248, 248, 248, 248, 248,
679        248, 248, 248, 248, 248, 249, 249, 249, 249, 249, 249, 249, 249, 249, 249, 250, 250, 250,
680        250, 250, 250, 250, 250, 250, 250, 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, 252,
681        252, 252, 252, 252, 252, 252, 252, 252, 252, 253, 253, 253, 253, 253, 253, 253, 253, 253,
682        253, 254, 254, 254, 254, 254, 254, 254, 254, 254, 254, 255, 255, 255, 255, 255, 255, 255,
683        255, 255, 255, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 257, 257, 257, 257, 257,
684        257, 257, 257, 257, 257, 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, 259, 259, 259,
685        259, 259, 259, 259, 259, 259, 259, 260, 260, 260, 260, 260, 260, 260, 260, 260, 260, 261,
686        261, 261, 261, 261, 261, 261, 261, 261, 261, 262, 262, 262, 262, 262, 262, 262, 262, 262,
687        262, 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, 264, 264, 264, 264, 264, 264, 264,
688        264, 264, 264, 265, 265, 265, 265, 265, 265, 265, 265, 265, 265, 266, 266, 266, 266, 266,
689        266, 266, 266, 266, 266, 267, 267, 267, 267, 267, 267, 267, 267, 267, 267, 268, 268, 268,
690        268, 268, 268, 268, 268, 268, 268, 269, 269, 269, 269, 269, 269, 269, 269, 269, 269, 270,
691        270, 270, 270, 270, 270, 270, 270, 270, 270, 271, 271, 271, 271, 271, 271, 271, 271, 271,
692        271, 272, 272, 272, 272, 272, 272, 272, 272, 272, 272, 273, 273, 273, 273, 273, 273, 273,
693        273, 273, 273, 274, 274, 274, 274, 274, 274, 274, 274, 274, 274, 275, 275, 275, 275, 275,
694        275, 275, 275, 275, 275, 276, 276, 276, 276, 276, 276, 276, 276, 276, 276, 277, 277, 277,
695        277, 277, 277, 277, 277, 277, 277, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 279,
696        279, 279, 279, 279, 279, 279, 279, 279, 279, 280, 280, 280, 280, 280, 280, 280, 280, 280,
697        280, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 282, 282, 282, 282, 282, 282, 282,
698        282, 282, 282, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 284, 284, 284, 284, 284,
699        284, 284, 284, 284, 284, 285, 285, 285, 285, 285, 285, 285, 285, 285, 285, 286, 286, 286,
700        286, 286, 286, 286, 286, 286, 286, 287, 287, 287, 287, 287, 287, 287, 287, 287, 287, 288,
701        288, 288, 288, 288, 288, 288, 288, 288, 288, 289, 289, 289, 289, 289, 289, 289, 289, 289,
702        289, 290, 290, 290, 290, 290, 290, 290, 290, 290, 290, 291, 291, 291, 291, 291, 291, 291,
703        291, 291, 291, 292, 292, 292, 292, 292, 292, 292, 292, 292, 292, 293, 293, 293, 293, 293,
704        293, 293, 293, 293, 293, 294, 294, 294, 294, 294, 294, 294, 294, 294, 294, 295, 295, 295,
705        295, 295, 295, 295, 295, 295, 295, 296, 296, 296, 296, 296, 296, 296, 296, 296, 296, 297,
706        297, 297, 297, 297, 297, 297, 297, 297, 297, 298, 298, 298, 298, 298, 298, 298, 298, 298,
707        298, 299, 299, 299, 299, 299, 299, 299, 299, 299, 299, 300, 300, 300, 300, 300, 300, 300,
708        300, 300, 300, 301, 301, 301, 301, 301, 301, 301, 301, 301, 301, 302, 302, 302, 302, 302,
709        302, 302, 302, 302, 302, 303, 303, 303, 303, 303, 303, 303, 303, 303, 303, 304, 304, 304,
710        304, 304, 304, 304, 304, 304, 304, 305, 305, 305, 305, 305, 305, 305, 305, 305, 305, 306,
711        306, 306, 306, 306, 306, 306, 306, 306, 306, 307, 307, 307, 307, 307, 307, 307, 307, 307,
712        307, 308, 308, 308, 308, 308, 308, 308, 308, 308, 308, 309, 309, 309, 309, 309, 309, 309,
713        309, 309, 309, 310, 310, 310, 310, 310, 310, 310, 310, 310, 310, 311, 311, 311, 311, 311,
714        311, 311, 311, 311, 311, 312, 312, 312, 312, 312, 312, 312, 312, 312, 312, 313, 313, 313,
715        313, 313, 313, 313, 313, 313, 313, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 315,
716        315, 315, 315, 315, 315, 315, 315, 315, 315, 316, 316, 316, 316, 316, 316, 316, 316, 316,
717        316, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 318, 318, 318, 318, 318, 318, 318,
718        318, 318, 318, 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, 320, 320, 320, 320, 320,
719        320, 320, 320, 320, 320, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 322, 322, 322,
720        322, 322, 322, 322, 322, 322, 322, 323, 323, 323, 323, 323, 323, 323, 323, 323, 323, 324,
721        324, 324, 324, 324, 324, 324, 324, 324, 324, 325, 325, 325, 325, 325, 325, 325, 325, 325,
722        325, 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, 327, 327, 327, 327, 327, 327, 327,
723        327, 327, 327, 328, 328, 328, 328, 328, 328, 328, 328, 328, 328, 329, 329, 329, 329, 329,
724        329, 329, 329, 329, 329, 330, 330, 330, 330, 330, 330, 330, 330, 330, 330, 331, 331, 331,
725        331, 331, 331, 331, 331, 331, 331, 332, 332, 332, 332, 332, 332, 332, 332, 332, 332, 333,
726        333, 333, 333, 333, 333, 333, 333, 333, 333, 334, 334, 334, 334, 334, 334, 334, 334, 334,
727        334, 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, 336, 336, 336, 336, 336, 336, 336,
728        336, 336, 336, 337, 337, 337, 337, 337, 337, 337, 337, 337, 337, 338, 338, 338, 338, 338,
729        338, 338, 338, 338, 338, 339, 339, 339, 339, 339, 339, 339, 339, 339, 339, 340, 340, 340,
730        340, 340, 340, 340, 340, 340, 340, 341, 341, 341, 341, 341, 341, 341, 341, 341, 341,
731    ];
732    const EXPECTED_H: &[u16; 3420] = &[
733        0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x001, 0x001,
734        0x001, 0x001, 0x001, 0x001, 0x001, 0x001, 0x001, 0x002, 0x002, 0x002, 0x002, 0x002, 0x002,
735        0x002, 0x002, 0x002, 0x002, 0x003, 0x003, 0x003, 0x003, 0x003, 0x003, 0x003, 0x003, 0x003,
736        0x003, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x005, 0x005,
737        0x005, 0x005, 0x005, 0x005, 0x005, 0x005, 0x005, 0x005, 0x006, 0x006, 0x006, 0x006, 0x006,
738        0x006, 0x006, 0x006, 0x006, 0x006, 0x007, 0x007, 0x007, 0x007, 0x007, 0x007, 0x007, 0x007,
739        0x007, 0x007, 0x008, 0x008, 0x008, 0x008, 0x008, 0x008, 0x008, 0x008, 0x008, 0x008, 0x009,
740        0x009, 0x009, 0x009, 0x009, 0x009, 0x009, 0x009, 0x009, 0x009, 0x00A, 0x00A, 0x00A, 0x00A,
741        0x00A, 0x00A, 0x00A, 0x00A, 0x00A, 0x00A, 0x00B, 0x00B, 0x00B, 0x00B, 0x00B, 0x00B, 0x00B,
742        0x00B, 0x00B, 0x00B, 0x00C, 0x00C, 0x00C, 0x00C, 0x00C, 0x00C, 0x00C, 0x00C, 0x00C, 0x00C,
743        0x00D, 0x00D, 0x00D, 0x00D, 0x00D, 0x00D, 0x00D, 0x00D, 0x00D, 0x00D, 0x00E, 0x00E, 0x00E,
744        0x00E, 0x00E, 0x00E, 0x00E, 0x00E, 0x00E, 0x00E, 0x00F, 0x00F, 0x00F, 0x00F, 0x00F, 0x00F,
745        0x00F, 0x00F, 0x00F, 0x00F, 0x010, 0x010, 0x010, 0x010, 0x010, 0x010, 0x010, 0x010, 0x010,
746        0x010, 0x011, 0x011, 0x011, 0x011, 0x011, 0x011, 0x011, 0x011, 0x011, 0x011, 0x012, 0x012,
747        0x012, 0x012, 0x012, 0x012, 0x012, 0x012, 0x012, 0x012, 0x013, 0x013, 0x013, 0x013, 0x013,
748        0x013, 0x013, 0x013, 0x013, 0x013, 0x014, 0x014, 0x014, 0x014, 0x014, 0x014, 0x014, 0x014,
749        0x014, 0x014, 0x015, 0x015, 0x015, 0x015, 0x015, 0x015, 0x015, 0x015, 0x015, 0x015, 0x016,
750        0x016, 0x016, 0x016, 0x016, 0x016, 0x016, 0x016, 0x016, 0x016, 0x017, 0x017, 0x017, 0x017,
751        0x017, 0x017, 0x017, 0x017, 0x017, 0x017, 0x018, 0x018, 0x018, 0x018, 0x018, 0x018, 0x018,
752        0x018, 0x018, 0x018, 0x019, 0x019, 0x019, 0x019, 0x019, 0x019, 0x019, 0x019, 0x019, 0x019,
753        0x01A, 0x01A, 0x01A, 0x01A, 0x01A, 0x01A, 0x01A, 0x01A, 0x01A, 0x01A, 0x01B, 0x01B, 0x01B,
754        0x01B, 0x01B, 0x01B, 0x01B, 0x01B, 0x01B, 0x01B, 0x01C, 0x01C, 0x01C, 0x01C, 0x01C, 0x01C,
755        0x01C, 0x01C, 0x01C, 0x01C, 0x01D, 0x01D, 0x01D, 0x01D, 0x01D, 0x01D, 0x01D, 0x01D, 0x01D,
756        0x01D, 0x01E, 0x01E, 0x01E, 0x01E, 0x01E, 0x01E, 0x01E, 0x01E, 0x01E, 0x01E, 0x01F, 0x01F,
757        0x01F, 0x01F, 0x01F, 0x01F, 0x01F, 0x01F, 0x01F, 0x01F, 0x020, 0x020, 0x020, 0x020, 0x020,
758        0x020, 0x020, 0x020, 0x020, 0x020, 0x021, 0x021, 0x021, 0x021, 0x021, 0x021, 0x021, 0x021,
759        0x021, 0x021, 0x022, 0x022, 0x022, 0x022, 0x022, 0x022, 0x022, 0x022, 0x022, 0x022, 0x023,
760        0x023, 0x023, 0x023, 0x023, 0x023, 0x023, 0x023, 0x023, 0x023, 0x024, 0x024, 0x024, 0x024,
761        0x024, 0x024, 0x024, 0x024, 0x024, 0x024, 0x025, 0x025, 0x025, 0x025, 0x025, 0x025, 0x025,
762        0x025, 0x025, 0x025, 0x026, 0x026, 0x026, 0x026, 0x026, 0x026, 0x026, 0x026, 0x026, 0x026,
763        0x027, 0x027, 0x027, 0x027, 0x027, 0x027, 0x027, 0x027, 0x027, 0x027, 0x028, 0x028, 0x028,
764        0x028, 0x028, 0x028, 0x028, 0x028, 0x028, 0x028, 0x029, 0x029, 0x029, 0x029, 0x029, 0x029,
765        0x029, 0x029, 0x029, 0x029, 0x02A, 0x02A, 0x02A, 0x02A, 0x02A, 0x02A, 0x02A, 0x02A, 0x02A,
766        0x02A, 0x02B, 0x02B, 0x02B, 0x02B, 0x02B, 0x02B, 0x02B, 0x02B, 0x02B, 0x02B, 0x02C, 0x02C,
767        0x02C, 0x02C, 0x02C, 0x02C, 0x02C, 0x02C, 0x02C, 0x02C, 0x02D, 0x02D, 0x02D, 0x02D, 0x02D,
768        0x02D, 0x02D, 0x02D, 0x02D, 0x02D, 0x02E, 0x02E, 0x02E, 0x02E, 0x02E, 0x02E, 0x02E, 0x02E,
769        0x02E, 0x02E, 0x02F, 0x02F, 0x02F, 0x02F, 0x02F, 0x02F, 0x02F, 0x02F, 0x02F, 0x02F, 0x030,
770        0x030, 0x030, 0x030, 0x030, 0x030, 0x030, 0x030, 0x030, 0x030, 0x031, 0x031, 0x031, 0x031,
771        0x031, 0x031, 0x031, 0x031, 0x031, 0x031, 0x032, 0x032, 0x032, 0x032, 0x032, 0x032, 0x032,
772        0x032, 0x032, 0x032, 0x033, 0x033, 0x033, 0x033, 0x033, 0x033, 0x033, 0x033, 0x033, 0x033,
773        0x034, 0x034, 0x034, 0x034, 0x034, 0x034, 0x034, 0x034, 0x034, 0x034, 0x035, 0x035, 0x035,
774        0x035, 0x035, 0x035, 0x035, 0x035, 0x035, 0x035, 0x036, 0x036, 0x036, 0x036, 0x036, 0x036,
775        0x036, 0x036, 0x036, 0x036, 0x037, 0x037, 0x037, 0x037, 0x037, 0x037, 0x037, 0x037, 0x037,
776        0x037, 0x038, 0x038, 0x038, 0x038, 0x038, 0x038, 0x038, 0x038, 0x038, 0x038, 0x039, 0x039,
777        0x039, 0x039, 0x039, 0x039, 0x039, 0x039, 0x039, 0x039, 0x03A, 0x03A, 0x03A, 0x03A, 0x03A,
778        0x03A, 0x03A, 0x03A, 0x03A, 0x03A, 0x03B, 0x03B, 0x03B, 0x03B, 0x03B, 0x03B, 0x03B, 0x03B,
779        0x03B, 0x03B, 0x03C, 0x03C, 0x03C, 0x03C, 0x03C, 0x03C, 0x03C, 0x03C, 0x03C, 0x03C, 0x03D,
780        0x03D, 0x03D, 0x03D, 0x03D, 0x03D, 0x03D, 0x03D, 0x03D, 0x03D, 0x03E, 0x03E, 0x03E, 0x03E,
781        0x03E, 0x03E, 0x03E, 0x03E, 0x03E, 0x03E, 0x03F, 0x03F, 0x03F, 0x03F, 0x03F, 0x03F, 0x03F,
782        0x03F, 0x03F, 0x03F, 0x040, 0x040, 0x040, 0x040, 0x040, 0x040, 0x040, 0x040, 0x040, 0x040,
783        0x041, 0x041, 0x041, 0x041, 0x041, 0x041, 0x041, 0x041, 0x041, 0x041, 0x042, 0x042, 0x042,
784        0x042, 0x042, 0x042, 0x042, 0x042, 0x042, 0x042, 0x043, 0x043, 0x043, 0x043, 0x043, 0x043,
785        0x043, 0x043, 0x043, 0x043, 0x044, 0x044, 0x044, 0x044, 0x044, 0x044, 0x044, 0x044, 0x044,
786        0x044, 0x045, 0x045, 0x045, 0x045, 0x045, 0x045, 0x045, 0x045, 0x045, 0x045, 0x046, 0x046,
787        0x046, 0x046, 0x046, 0x046, 0x046, 0x046, 0x046, 0x046, 0x047, 0x047, 0x047, 0x047, 0x047,
788        0x047, 0x047, 0x047, 0x047, 0x047, 0x048, 0x048, 0x048, 0x048, 0x048, 0x048, 0x048, 0x048,
789        0x048, 0x048, 0x049, 0x049, 0x049, 0x049, 0x049, 0x049, 0x049, 0x049, 0x049, 0x049, 0x04A,
790        0x04A, 0x04A, 0x04A, 0x04A, 0x04A, 0x04A, 0x04A, 0x04A, 0x04A, 0x04B, 0x04B, 0x04B, 0x04B,
791        0x04B, 0x04B, 0x04B, 0x04B, 0x04B, 0x04B, 0x04C, 0x04C, 0x04C, 0x04C, 0x04C, 0x04C, 0x04C,
792        0x04C, 0x04C, 0x04C, 0x04D, 0x04D, 0x04D, 0x04D, 0x04D, 0x04D, 0x04D, 0x04D, 0x04D, 0x04D,
793        0x04E, 0x04E, 0x04E, 0x04E, 0x04E, 0x04E, 0x04E, 0x04E, 0x04E, 0x04E, 0x04F, 0x04F, 0x04F,
794        0x04F, 0x04F, 0x04F, 0x04F, 0x04F, 0x04F, 0x04F, 0x050, 0x050, 0x050, 0x050, 0x050, 0x050,
795        0x050, 0x050, 0x050, 0x050, 0x051, 0x051, 0x051, 0x051, 0x051, 0x051, 0x051, 0x051, 0x051,
796        0x051, 0x052, 0x052, 0x052, 0x052, 0x052, 0x052, 0x052, 0x052, 0x052, 0x052, 0x053, 0x053,
797        0x053, 0x053, 0x053, 0x053, 0x053, 0x053, 0x053, 0x053, 0x054, 0x054, 0x054, 0x054, 0x054,
798        0x054, 0x054, 0x054, 0x054, 0x054, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055,
799        0x055, 0x055, 0x056, 0x056, 0x056, 0x056, 0x056, 0x056, 0x056, 0x056, 0x056, 0x056, 0x057,
800        0x057, 0x057, 0x057, 0x057, 0x057, 0x057, 0x057, 0x057, 0x057, 0x058, 0x058, 0x058, 0x058,
801        0x058, 0x058, 0x058, 0x058, 0x058, 0x058, 0x059, 0x059, 0x059, 0x059, 0x059, 0x059, 0x059,
802        0x059, 0x059, 0x059, 0x05A, 0x05A, 0x05A, 0x05A, 0x05A, 0x05A, 0x05A, 0x05A, 0x05A, 0x05A,
803        0x05B, 0x05B, 0x05B, 0x05B, 0x05B, 0x05B, 0x05B, 0x05B, 0x05B, 0x05B, 0x05C, 0x05C, 0x05C,
804        0x05C, 0x05C, 0x05C, 0x05C, 0x05C, 0x05C, 0x05C, 0x05D, 0x05D, 0x05D, 0x05D, 0x05D, 0x05D,
805        0x05D, 0x05D, 0x05D, 0x05D, 0x05E, 0x05E, 0x05E, 0x05E, 0x05E, 0x05E, 0x05E, 0x05E, 0x05E,
806        0x05E, 0x05F, 0x05F, 0x05F, 0x05F, 0x05F, 0x05F, 0x05F, 0x05F, 0x05F, 0x05F, 0x060, 0x060,
807        0x060, 0x060, 0x060, 0x060, 0x060, 0x060, 0x060, 0x060, 0x061, 0x061, 0x061, 0x061, 0x061,
808        0x061, 0x061, 0x061, 0x061, 0x061, 0x062, 0x062, 0x062, 0x062, 0x062, 0x062, 0x062, 0x062,
809        0x062, 0x062, 0x063, 0x063, 0x063, 0x063, 0x063, 0x063, 0x063, 0x063, 0x063, 0x063, 0x064,
810        0x064, 0x064, 0x064, 0x064, 0x064, 0x064, 0x064, 0x064, 0x064, 0x065, 0x065, 0x065, 0x065,
811        0x065, 0x065, 0x065, 0x065, 0x065, 0x065, 0x066, 0x066, 0x066, 0x066, 0x066, 0x066, 0x066,
812        0x066, 0x066, 0x066, 0x067, 0x067, 0x067, 0x067, 0x067, 0x067, 0x067, 0x067, 0x067, 0x067,
813        0x068, 0x068, 0x068, 0x068, 0x068, 0x068, 0x068, 0x068, 0x068, 0x068, 0x069, 0x069, 0x069,
814        0x069, 0x069, 0x069, 0x069, 0x069, 0x069, 0x069, 0x06A, 0x06A, 0x06A, 0x06A, 0x06A, 0x06A,
815        0x06A, 0x06A, 0x06A, 0x06A, 0x06B, 0x06B, 0x06B, 0x06B, 0x06B, 0x06B, 0x06B, 0x06B, 0x06B,
816        0x06B, 0x06C, 0x06C, 0x06C, 0x06C, 0x06C, 0x06C, 0x06C, 0x06C, 0x06C, 0x06C, 0x06D, 0x06D,
817        0x06D, 0x06D, 0x06D, 0x06D, 0x06D, 0x06D, 0x06D, 0x06D, 0x06E, 0x06E, 0x06E, 0x06E, 0x06E,
818        0x06E, 0x06E, 0x06E, 0x06E, 0x06E, 0x06F, 0x06F, 0x06F, 0x06F, 0x06F, 0x06F, 0x06F, 0x06F,
819        0x06F, 0x06F, 0x070, 0x070, 0x070, 0x070, 0x070, 0x070, 0x070, 0x070, 0x070, 0x070, 0x071,
820        0x071, 0x071, 0x071, 0x071, 0x071, 0x071, 0x071, 0x071, 0x071, 0x072, 0x072, 0x072, 0x072,
821        0x072, 0x072, 0x072, 0x072, 0x072, 0x072, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073, 0x073,
822        0x073, 0x073, 0x073, 0x074, 0x074, 0x074, 0x074, 0x074, 0x074, 0x074, 0x074, 0x074, 0x074,
823        0x075, 0x075, 0x075, 0x075, 0x075, 0x075, 0x075, 0x075, 0x075, 0x075, 0x076, 0x076, 0x076,
824        0x076, 0x076, 0x076, 0x076, 0x076, 0x076, 0x076, 0x077, 0x077, 0x077, 0x077, 0x077, 0x077,
825        0x077, 0x077, 0x077, 0x077, 0x078, 0x078, 0x078, 0x078, 0x078, 0x078, 0x078, 0x078, 0x078,
826        0x078, 0x079, 0x079, 0x079, 0x079, 0x079, 0x079, 0x079, 0x079, 0x079, 0x079, 0x07A, 0x07A,
827        0x07A, 0x07A, 0x07A, 0x07A, 0x07A, 0x07A, 0x07A, 0x07A, 0x07B, 0x07B, 0x07B, 0x07B, 0x07B,
828        0x07B, 0x07B, 0x07B, 0x07B, 0x07B, 0x07C, 0x07C, 0x07C, 0x07C, 0x07C, 0x07C, 0x07C, 0x07C,
829        0x07C, 0x07C, 0x07D, 0x07D, 0x07D, 0x07D, 0x07D, 0x07D, 0x07D, 0x07D, 0x07D, 0x07D, 0x07E,
830        0x07E, 0x07E, 0x07E, 0x07E, 0x07E, 0x07E, 0x07E, 0x07E, 0x07E, 0x07F, 0x07F, 0x07F, 0x07F,
831        0x07F, 0x07F, 0x07F, 0x07F, 0x07F, 0x07F, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080, 0x080,
832        0x080, 0x080, 0x080, 0x081, 0x081, 0x081, 0x081, 0x081, 0x081, 0x081, 0x081, 0x081, 0x081,
833        0x082, 0x082, 0x082, 0x082, 0x082, 0x082, 0x082, 0x082, 0x082, 0x082, 0x083, 0x083, 0x083,
834        0x083, 0x083, 0x083, 0x083, 0x083, 0x083, 0x083, 0x084, 0x084, 0x084, 0x084, 0x084, 0x084,
835        0x084, 0x084, 0x084, 0x084, 0x085, 0x085, 0x085, 0x085, 0x085, 0x085, 0x085, 0x085, 0x085,
836        0x085, 0x086, 0x086, 0x086, 0x086, 0x086, 0x086, 0x086, 0x086, 0x086, 0x086, 0x087, 0x087,
837        0x087, 0x087, 0x087, 0x087, 0x087, 0x087, 0x087, 0x087, 0x088, 0x088, 0x088, 0x088, 0x088,
838        0x088, 0x088, 0x088, 0x088, 0x088, 0x089, 0x089, 0x089, 0x089, 0x089, 0x089, 0x089, 0x089,
839        0x089, 0x089, 0x08A, 0x08A, 0x08A, 0x08A, 0x08A, 0x08A, 0x08A, 0x08A, 0x08A, 0x08A, 0x08B,
840        0x08B, 0x08B, 0x08B, 0x08B, 0x08B, 0x08B, 0x08B, 0x08B, 0x08B, 0x08C, 0x08C, 0x08C, 0x08C,
841        0x08C, 0x08C, 0x08C, 0x08C, 0x08C, 0x08C, 0x08D, 0x08D, 0x08D, 0x08D, 0x08D, 0x08D, 0x08D,
842        0x08D, 0x08D, 0x08D, 0x08E, 0x08E, 0x08E, 0x08E, 0x08E, 0x08E, 0x08E, 0x08E, 0x08E, 0x08E,
843        0x08F, 0x08F, 0x08F, 0x08F, 0x08F, 0x08F, 0x08F, 0x08F, 0x08F, 0x08F, 0x090, 0x090, 0x090,
844        0x090, 0x090, 0x090, 0x090, 0x090, 0x090, 0x090, 0x091, 0x091, 0x091, 0x091, 0x091, 0x091,
845        0x091, 0x091, 0x091, 0x091, 0x092, 0x092, 0x092, 0x092, 0x092, 0x092, 0x092, 0x092, 0x092,
846        0x092, 0x093, 0x093, 0x093, 0x093, 0x093, 0x093, 0x093, 0x093, 0x093, 0x093, 0x094, 0x094,
847        0x094, 0x094, 0x094, 0x094, 0x094, 0x094, 0x094, 0x094, 0x095, 0x095, 0x095, 0x095, 0x095,
848        0x095, 0x095, 0x095, 0x095, 0x095, 0x096, 0x096, 0x096, 0x096, 0x096, 0x096, 0x096, 0x096,
849        0x096, 0x096, 0x097, 0x097, 0x097, 0x097, 0x097, 0x097, 0x097, 0x097, 0x097, 0x097, 0x098,
850        0x098, 0x098, 0x098, 0x098, 0x098, 0x098, 0x098, 0x098, 0x098, 0x099, 0x099, 0x099, 0x099,
851        0x099, 0x099, 0x099, 0x099, 0x099, 0x099, 0x09A, 0x09A, 0x09A, 0x09A, 0x09A, 0x09A, 0x09A,
852        0x09A, 0x09A, 0x09A, 0x09B, 0x09B, 0x09B, 0x09B, 0x09B, 0x09B, 0x09B, 0x09B, 0x09B, 0x09B,
853        0x09C, 0x09C, 0x09C, 0x09C, 0x09C, 0x09C, 0x09C, 0x09C, 0x09C, 0x09C, 0x09D, 0x09D, 0x09D,
854        0x09D, 0x09D, 0x09D, 0x09D, 0x09D, 0x09D, 0x09D, 0x09E, 0x09E, 0x09E, 0x09E, 0x09E, 0x09E,
855        0x09E, 0x09E, 0x09E, 0x09E, 0x09F, 0x09F, 0x09F, 0x09F, 0x09F, 0x09F, 0x09F, 0x09F, 0x09F,
856        0x09F, 0x0A0, 0x0A0, 0x0A0, 0x0A0, 0x0A0, 0x0A0, 0x0A0, 0x0A0, 0x0A0, 0x0A0, 0x0A1, 0x0A1,
857        0x0A1, 0x0A1, 0x0A1, 0x0A1, 0x0A1, 0x0A1, 0x0A1, 0x0A1, 0x0A2, 0x0A2, 0x0A2, 0x0A2, 0x0A2,
858        0x0A2, 0x0A2, 0x0A2, 0x0A2, 0x0A2, 0x0A3, 0x0A3, 0x0A3, 0x0A3, 0x0A3, 0x0A3, 0x0A3, 0x0A3,
859        0x0A3, 0x0A3, 0x0A4, 0x0A4, 0x0A4, 0x0A4, 0x0A4, 0x0A4, 0x0A4, 0x0A4, 0x0A4, 0x0A4, 0x0A5,
860        0x0A5, 0x0A5, 0x0A5, 0x0A5, 0x0A5, 0x0A5, 0x0A5, 0x0A5, 0x0A5, 0x0A6, 0x0A6, 0x0A6, 0x0A6,
861        0x0A6, 0x0A6, 0x0A6, 0x0A6, 0x0A6, 0x0A6, 0x0A7, 0x0A7, 0x0A7, 0x0A7, 0x0A7, 0x0A7, 0x0A7,
862        0x0A7, 0x0A7, 0x0A7, 0x0A8, 0x0A8, 0x0A8, 0x0A8, 0x0A8, 0x0A8, 0x0A8, 0x0A8, 0x0A8, 0x0A8,
863        0x0A9, 0x0A9, 0x0A9, 0x0A9, 0x0A9, 0x0A9, 0x0A9, 0x0A9, 0x0A9, 0x0A9, 0x0AA, 0x0AA, 0x0AA,
864        0x0AA, 0x0AA, 0x0AA, 0x0AA, 0x0AA, 0x0AA, 0x0AA, 0x0AB, 0x0AB, 0x0AB, 0x0AB, 0x0AB, 0x0AB,
865        0x0AB, 0x0AB, 0x0AB, 0x0AB, 0x0AC, 0x0AC, 0x0AC, 0x0AC, 0x0AC, 0x0AC, 0x0AC, 0x0AC, 0x0AC,
866        0x0AC, 0x0AD, 0x0AD, 0x0AD, 0x0AD, 0x0AD, 0x0AD, 0x0AD, 0x0AD, 0x0AD, 0x0AD, 0x0AE, 0x0AE,
867        0x0AE, 0x0AE, 0x0AE, 0x0AE, 0x0AE, 0x0AE, 0x0AE, 0x0AE, 0x0AF, 0x0AF, 0x0AF, 0x0AF, 0x0AF,
868        0x0AF, 0x0AF, 0x0AF, 0x0AF, 0x0AF, 0x0B0, 0x0B0, 0x0B0, 0x0B0, 0x0B0, 0x0B0, 0x0B0, 0x0B0,
869        0x0B0, 0x0B0, 0x0B1, 0x0B1, 0x0B1, 0x0B1, 0x0B1, 0x0B1, 0x0B1, 0x0B1, 0x0B1, 0x0B1, 0x0B2,
870        0x0B2, 0x0B2, 0x0B2, 0x0B2, 0x0B2, 0x0B2, 0x0B2, 0x0B2, 0x0B2, 0x0B3, 0x0B3, 0x0B3, 0x0B3,
871        0x0B3, 0x0B3, 0x0B3, 0x0B3, 0x0B3, 0x0B3, 0x0B4, 0x0B4, 0x0B4, 0x0B4, 0x0B4, 0x0B4, 0x0B4,
872        0x0B4, 0x0B4, 0x0B4, 0x0B5, 0x0B5, 0x0B5, 0x0B5, 0x0B5, 0x0B5, 0x0B5, 0x0B5, 0x0B5, 0x0B5,
873        0x0B6, 0x0B6, 0x0B6, 0x0B6, 0x0B6, 0x0B6, 0x0B6, 0x0B6, 0x0B6, 0x0B6, 0x0B7, 0x0B7, 0x0B7,
874        0x0B7, 0x0B7, 0x0B7, 0x0B7, 0x0B7, 0x0B7, 0x0B7, 0x0B8, 0x0B8, 0x0B8, 0x0B8, 0x0B8, 0x0B8,
875        0x0B8, 0x0B8, 0x0B8, 0x0B8, 0x0B9, 0x0B9, 0x0B9, 0x0B9, 0x0B9, 0x0B9, 0x0B9, 0x0B9, 0x0B9,
876        0x0B9, 0x0BA, 0x0BA, 0x0BA, 0x0BA, 0x0BA, 0x0BA, 0x0BA, 0x0BA, 0x0BA, 0x0BA, 0x0BB, 0x0BB,
877        0x0BB, 0x0BB, 0x0BB, 0x0BB, 0x0BB, 0x0BB, 0x0BB, 0x0BB, 0x0BC, 0x0BC, 0x0BC, 0x0BC, 0x0BC,
878        0x0BC, 0x0BC, 0x0BC, 0x0BC, 0x0BC, 0x0BD, 0x0BD, 0x0BD, 0x0BD, 0x0BD, 0x0BD, 0x0BD, 0x0BD,
879        0x0BD, 0x0BD, 0x0BE, 0x0BE, 0x0BE, 0x0BE, 0x0BE, 0x0BE, 0x0BE, 0x0BE, 0x0BE, 0x0BE, 0x0BF,
880        0x0BF, 0x0BF, 0x0BF, 0x0BF, 0x0BF, 0x0BF, 0x0BF, 0x0BF, 0x0BF, 0x0C0, 0x0C0, 0x0C0, 0x0C0,
881        0x0C0, 0x0C0, 0x0C0, 0x0C0, 0x0C0, 0x0C0, 0x0C1, 0x0C1, 0x0C1, 0x0C1, 0x0C1, 0x0C1, 0x0C1,
882        0x0C1, 0x0C1, 0x0C1, 0x0C2, 0x0C2, 0x0C2, 0x0C2, 0x0C2, 0x0C2, 0x0C2, 0x0C2, 0x0C2, 0x0C2,
883        0x0C3, 0x0C3, 0x0C3, 0x0C3, 0x0C3, 0x0C3, 0x0C3, 0x0C3, 0x0C3, 0x0C3, 0x0C4, 0x0C4, 0x0C4,
884        0x0C4, 0x0C4, 0x0C4, 0x0C4, 0x0C4, 0x0C4, 0x0C4, 0x0C5, 0x0C5, 0x0C5, 0x0C5, 0x0C5, 0x0C5,
885        0x0C5, 0x0C5, 0x0C5, 0x0C5, 0x0C6, 0x0C6, 0x0C6, 0x0C6, 0x0C6, 0x0C6, 0x0C6, 0x0C6, 0x0C6,
886        0x0C6, 0x0C7, 0x0C7, 0x0C7, 0x0C7, 0x0C7, 0x0C7, 0x0C7, 0x0C7, 0x0C7, 0x0C7, 0x0C8, 0x0C8,
887        0x0C8, 0x0C8, 0x0C8, 0x0C8, 0x0C8, 0x0C8, 0x0C8, 0x0C8, 0x0C9, 0x0C9, 0x0C9, 0x0C9, 0x0C9,
888        0x0C9, 0x0C9, 0x0C9, 0x0C9, 0x0C9, 0x0CA, 0x0CA, 0x0CA, 0x0CA, 0x0CA, 0x0CA, 0x0CA, 0x0CA,
889        0x0CA, 0x0CA, 0x0CB, 0x0CB, 0x0CB, 0x0CB, 0x0CB, 0x0CB, 0x0CB, 0x0CB, 0x0CB, 0x0CB, 0x0CC,
890        0x0CC, 0x0CC, 0x0CC, 0x0CC, 0x0CC, 0x0CC, 0x0CC, 0x0CC, 0x0CC, 0x0CD, 0x0CD, 0x0CD, 0x0CD,
891        0x0CD, 0x0CD, 0x0CD, 0x0CD, 0x0CD, 0x0CD, 0x0CE, 0x0CE, 0x0CE, 0x0CE, 0x0CE, 0x0CE, 0x0CE,
892        0x0CE, 0x0CE, 0x0CE, 0x0CF, 0x0CF, 0x0CF, 0x0CF, 0x0CF, 0x0CF, 0x0CF, 0x0CF, 0x0CF, 0x0CF,
893        0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D1, 0x0D1, 0x0D1,
894        0x0D1, 0x0D1, 0x0D1, 0x0D1, 0x0D1, 0x0D1, 0x0D1, 0x0D2, 0x0D2, 0x0D2, 0x0D2, 0x0D2, 0x0D2,
895        0x0D2, 0x0D2, 0x0D2, 0x0D2, 0x0D3, 0x0D3, 0x0D3, 0x0D3, 0x0D3, 0x0D3, 0x0D3, 0x0D3, 0x0D3,
896        0x0D3, 0x0D4, 0x0D4, 0x0D4, 0x0D4, 0x0D4, 0x0D4, 0x0D4, 0x0D4, 0x0D4, 0x0D4, 0x0D5, 0x0D5,
897        0x0D5, 0x0D5, 0x0D5, 0x0D5, 0x0D5, 0x0D5, 0x0D5, 0x0D5, 0x0D6, 0x0D6, 0x0D6, 0x0D6, 0x0D6,
898        0x0D6, 0x0D6, 0x0D6, 0x0D6, 0x0D6, 0x0D7, 0x0D7, 0x0D7, 0x0D7, 0x0D7, 0x0D7, 0x0D7, 0x0D7,
899        0x0D7, 0x0D7, 0x0D8, 0x0D8, 0x0D8, 0x0D8, 0x0D8, 0x0D8, 0x0D8, 0x0D8, 0x0D8, 0x0D8, 0x0D9,
900        0x0D9, 0x0D9, 0x0D9, 0x0D9, 0x0D9, 0x0D9, 0x0D9, 0x0D9, 0x0D9, 0x0DA, 0x0DA, 0x0DA, 0x0DA,
901        0x0DA, 0x0DA, 0x0DA, 0x0DA, 0x0DA, 0x0DA, 0x0DB, 0x0DB, 0x0DB, 0x0DB, 0x0DB, 0x0DB, 0x0DB,
902        0x0DB, 0x0DB, 0x0DB, 0x0DC, 0x0DC, 0x0DC, 0x0DC, 0x0DC, 0x0DC, 0x0DC, 0x0DC, 0x0DC, 0x0DC,
903        0x0DD, 0x0DD, 0x0DD, 0x0DD, 0x0DD, 0x0DD, 0x0DD, 0x0DD, 0x0DD, 0x0DD, 0x0DE, 0x0DE, 0x0DE,
904        0x0DE, 0x0DE, 0x0DE, 0x0DE, 0x0DE, 0x0DE, 0x0DE, 0x0DF, 0x0DF, 0x0DF, 0x0DF, 0x0DF, 0x0DF,
905        0x0DF, 0x0DF, 0x0DF, 0x0DF, 0x0E0, 0x0E0, 0x0E0, 0x0E0, 0x0E0, 0x0E0, 0x0E0, 0x0E0, 0x0E0,
906        0x0E0, 0x0E1, 0x0E1, 0x0E1, 0x0E1, 0x0E1, 0x0E1, 0x0E1, 0x0E1, 0x0E1, 0x0E1, 0x0E2, 0x0E2,
907        0x0E2, 0x0E2, 0x0E2, 0x0E2, 0x0E2, 0x0E2, 0x0E2, 0x0E2, 0x0E3, 0x0E3, 0x0E3, 0x0E3, 0x0E3,
908        0x0E3, 0x0E3, 0x0E3, 0x0E3, 0x0E3, 0x0E4, 0x0E4, 0x0E4, 0x0E4, 0x0E4, 0x0E4, 0x0E4, 0x0E4,
909        0x0E4, 0x0E4, 0x0E5, 0x0E5, 0x0E5, 0x0E5, 0x0E5, 0x0E5, 0x0E5, 0x0E5, 0x0E5, 0x0E5, 0x0E6,
910        0x0E6, 0x0E6, 0x0E6, 0x0E6, 0x0E6, 0x0E6, 0x0E6, 0x0E6, 0x0E6, 0x0E7, 0x0E7, 0x0E7, 0x0E7,
911        0x0E7, 0x0E7, 0x0E7, 0x0E7, 0x0E7, 0x0E7, 0x0E8, 0x0E8, 0x0E8, 0x0E8, 0x0E8, 0x0E8, 0x0E8,
912        0x0E8, 0x0E8, 0x0E8, 0x0E9, 0x0E9, 0x0E9, 0x0E9, 0x0E9, 0x0E9, 0x0E9, 0x0E9, 0x0E9, 0x0E9,
913        0x0EA, 0x0EA, 0x0EA, 0x0EA, 0x0EA, 0x0EA, 0x0EA, 0x0EA, 0x0EA, 0x0EA, 0x0EB, 0x0EB, 0x0EB,
914        0x0EB, 0x0EB, 0x0EB, 0x0EB, 0x0EB, 0x0EB, 0x0EB, 0x0EC, 0x0EC, 0x0EC, 0x0EC, 0x0EC, 0x0EC,
915        0x0EC, 0x0EC, 0x0EC, 0x0EC, 0x0ED, 0x0ED, 0x0ED, 0x0ED, 0x0ED, 0x0ED, 0x0ED, 0x0ED, 0x0ED,
916        0x0ED, 0x0EE, 0x0EE, 0x0EE, 0x0EE, 0x0EE, 0x0EE, 0x0EE, 0x0EE, 0x0EE, 0x0EE, 0x0EF, 0x0EF,
917        0x0EF, 0x0EF, 0x0EF, 0x0EF, 0x0EF, 0x0EF, 0x0EF, 0x0EF, 0x0F0, 0x0F0, 0x0F0, 0x0F0, 0x0F0,
918        0x0F0, 0x0F0, 0x0F0, 0x0F0, 0x0F0, 0x0F1, 0x0F1, 0x0F1, 0x0F1, 0x0F1, 0x0F1, 0x0F1, 0x0F1,
919        0x0F1, 0x0F1, 0x0F2, 0x0F2, 0x0F2, 0x0F2, 0x0F2, 0x0F2, 0x0F2, 0x0F2, 0x0F2, 0x0F2, 0x0F3,
920        0x0F3, 0x0F3, 0x0F3, 0x0F3, 0x0F3, 0x0F3, 0x0F3, 0x0F3, 0x0F3, 0x0F4, 0x0F4, 0x0F4, 0x0F4,
921        0x0F4, 0x0F4, 0x0F4, 0x0F4, 0x0F4, 0x0F4, 0x0F5, 0x0F5, 0x0F5, 0x0F5, 0x0F5, 0x0F5, 0x0F5,
922        0x0F5, 0x0F5, 0x0F5, 0x0F6, 0x0F6, 0x0F6, 0x0F6, 0x0F6, 0x0F6, 0x0F6, 0x0F6, 0x0F6, 0x0F6,
923        0x0F7, 0x0F7, 0x0F7, 0x0F7, 0x0F7, 0x0F7, 0x0F7, 0x0F7, 0x0F7, 0x0F7, 0x0F8, 0x0F8, 0x0F8,
924        0x0F8, 0x0F8, 0x0F8, 0x0F8, 0x0F8, 0x0F8, 0x0F8, 0x0F9, 0x0F9, 0x0F9, 0x0F9, 0x0F9, 0x0F9,
925        0x0F9, 0x0F9, 0x0F9, 0x0F9, 0x0FA, 0x0FA, 0x0FA, 0x0FA, 0x0FA, 0x0FA, 0x0FA, 0x0FA, 0x0FA,
926        0x0FA, 0x0FB, 0x0FB, 0x0FB, 0x0FB, 0x0FB, 0x0FB, 0x0FB, 0x0FB, 0x0FB, 0x0FB, 0x0FC, 0x0FC,
927        0x0FC, 0x0FC, 0x0FC, 0x0FC, 0x0FC, 0x0FC, 0x0FC, 0x0FC, 0x0FD, 0x0FD, 0x0FD, 0x0FD, 0x0FD,
928        0x0FD, 0x0FD, 0x0FD, 0x0FD, 0x0FD, 0x0FE, 0x0FE, 0x0FE, 0x0FE, 0x0FE, 0x0FE, 0x0FE, 0x0FE,
929        0x0FE, 0x0FE, 0x0FF, 0x0FF, 0x0FF, 0x0FF, 0x0FF, 0x0FF, 0x0FF, 0x0FF, 0x0FF, 0x0FF, 0x100,
930        0x100, 0x100, 0x100, 0x100, 0x100, 0x100, 0x100, 0x100, 0x100, 0x101, 0x101, 0x101, 0x101,
931        0x101, 0x101, 0x101, 0x101, 0x101, 0x101, 0x102, 0x102, 0x102, 0x102, 0x102, 0x102, 0x102,
932        0x102, 0x102, 0x102, 0x103, 0x103, 0x103, 0x103, 0x103, 0x103, 0x103, 0x103, 0x103, 0x103,
933        0x104, 0x104, 0x104, 0x104, 0x104, 0x104, 0x104, 0x104, 0x104, 0x104, 0x105, 0x105, 0x105,
934        0x105, 0x105, 0x105, 0x105, 0x105, 0x105, 0x105, 0x106, 0x106, 0x106, 0x106, 0x106, 0x106,
935        0x106, 0x106, 0x106, 0x106, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x107,
936        0x107, 0x108, 0x108, 0x108, 0x108, 0x108, 0x108, 0x108, 0x108, 0x108, 0x108, 0x109, 0x109,
937        0x109, 0x109, 0x109, 0x109, 0x109, 0x109, 0x109, 0x109, 0x10A, 0x10A, 0x10A, 0x10A, 0x10A,
938        0x10A, 0x10A, 0x10A, 0x10A, 0x10A, 0x10B, 0x10B, 0x10B, 0x10B, 0x10B, 0x10B, 0x10B, 0x10B,
939        0x10B, 0x10B, 0x10C, 0x10C, 0x10C, 0x10C, 0x10C, 0x10C, 0x10C, 0x10C, 0x10C, 0x10C, 0x10D,
940        0x10D, 0x10D, 0x10D, 0x10D, 0x10D, 0x10D, 0x10D, 0x10D, 0x10D, 0x10E, 0x10E, 0x10E, 0x10E,
941        0x10E, 0x10E, 0x10E, 0x10E, 0x10E, 0x10E, 0x10F, 0x10F, 0x10F, 0x10F, 0x10F, 0x10F, 0x10F,
942        0x10F, 0x10F, 0x10F, 0x110, 0x110, 0x110, 0x110, 0x110, 0x110, 0x110, 0x110, 0x110, 0x110,
943        0x111, 0x111, 0x111, 0x111, 0x111, 0x111, 0x111, 0x111, 0x111, 0x111, 0x112, 0x112, 0x112,
944        0x112, 0x112, 0x112, 0x112, 0x112, 0x112, 0x112, 0x113, 0x113, 0x113, 0x113, 0x113, 0x113,
945        0x113, 0x113, 0x113, 0x113, 0x114, 0x114, 0x114, 0x114, 0x114, 0x114, 0x114, 0x114, 0x114,
946        0x114, 0x115, 0x115, 0x115, 0x115, 0x115, 0x115, 0x115, 0x115, 0x115, 0x115, 0x116, 0x116,
947        0x116, 0x116, 0x116, 0x116, 0x116, 0x116, 0x116, 0x116, 0x117, 0x117, 0x117, 0x117, 0x117,
948        0x117, 0x117, 0x117, 0x117, 0x117, 0x118, 0x118, 0x118, 0x118, 0x118, 0x118, 0x118, 0x118,
949        0x118, 0x118, 0x119, 0x119, 0x119, 0x119, 0x119, 0x119, 0x119, 0x119, 0x119, 0x119, 0x11A,
950        0x11A, 0x11A, 0x11A, 0x11A, 0x11A, 0x11A, 0x11A, 0x11A, 0x11A, 0x11B, 0x11B, 0x11B, 0x11B,
951        0x11B, 0x11B, 0x11B, 0x11B, 0x11B, 0x11B, 0x11C, 0x11C, 0x11C, 0x11C, 0x11C, 0x11C, 0x11C,
952        0x11C, 0x11C, 0x11C, 0x11D, 0x11D, 0x11D, 0x11D, 0x11D, 0x11D, 0x11D, 0x11D, 0x11D, 0x11D,
953        0x11E, 0x11E, 0x11E, 0x11E, 0x11E, 0x11E, 0x11E, 0x11E, 0x11E, 0x11E, 0x11F, 0x11F, 0x11F,
954        0x11F, 0x11F, 0x11F, 0x11F, 0x11F, 0x11F, 0x11F, 0x120, 0x120, 0x120, 0x120, 0x120, 0x120,
955        0x120, 0x120, 0x120, 0x120, 0x121, 0x121, 0x121, 0x121, 0x121, 0x121, 0x121, 0x121, 0x121,
956        0x121, 0x122, 0x122, 0x122, 0x122, 0x122, 0x122, 0x122, 0x122, 0x122, 0x122, 0x123, 0x123,
957        0x123, 0x123, 0x123, 0x123, 0x123, 0x123, 0x123, 0x123, 0x124, 0x124, 0x124, 0x124, 0x124,
958        0x124, 0x124, 0x124, 0x124, 0x124, 0x125, 0x125, 0x125, 0x125, 0x125, 0x125, 0x125, 0x125,
959        0x125, 0x125, 0x126, 0x126, 0x126, 0x126, 0x126, 0x126, 0x126, 0x126, 0x126, 0x126, 0x127,
960        0x127, 0x127, 0x127, 0x127, 0x127, 0x127, 0x127, 0x127, 0x127, 0x1D2, 0x1D2, 0x1D2, 0x1D2,
961        0x1D2, 0x1D2, 0x1D2, 0x1D2, 0x1D2, 0x1D2, 0x1D3, 0x1D3, 0x1D3, 0x1D3, 0x1D3, 0x1D3, 0x1D3,
962        0x1D3, 0x1D3, 0x1D3, 0x1D4, 0x1D4, 0x1D4, 0x1D4, 0x1D4, 0x1D4, 0x1D4, 0x1D4, 0x1D4, 0x1D4,
963        0x1D5, 0x1D5, 0x1D5, 0x1D5, 0x1D5, 0x1D5, 0x1D5, 0x1D5, 0x1D5, 0x1D5, 0x1D6, 0x1D6, 0x1D6,
964        0x1D6, 0x1D6, 0x1D6, 0x1D6, 0x1D6, 0x1D6, 0x1D6, 0x1D7, 0x1D7, 0x1D7, 0x1D7, 0x1D7, 0x1D7,
965        0x1D7, 0x1D7, 0x1D7, 0x1D7, 0x1D8, 0x1D8, 0x1D8, 0x1D8, 0x1D8, 0x1D8, 0x1D8, 0x1D8, 0x1D8,
966        0x1D8, 0x1D9, 0x1D9, 0x1D9, 0x1D9, 0x1D9, 0x1D9, 0x1D9, 0x1D9, 0x1D9, 0x1D9, 0x1DA, 0x1DA,
967        0x1DA, 0x1DA, 0x1DA, 0x1DA, 0x1DA, 0x1DA, 0x1DA, 0x1DA, 0x1DB, 0x1DB, 0x1DB, 0x1DB, 0x1DB,
968        0x1DB, 0x1DB, 0x1DB, 0x1DB, 0x1DB, 0x1DC, 0x1DC, 0x1DC, 0x1DC, 0x1DC, 0x1DC, 0x1DC, 0x1DC,
969        0x1DC, 0x1DC, 0x1DD, 0x1DD, 0x1DD, 0x1DD, 0x1DD, 0x1DD, 0x1DD, 0x1DD, 0x1DD, 0x1DD, 0x1DE,
970        0x1DE, 0x1DE, 0x1DE, 0x1DE, 0x1DE, 0x1DE, 0x1DE, 0x1DE, 0x1DE, 0x1DF, 0x1DF, 0x1DF, 0x1DF,
971        0x1DF, 0x1DF, 0x1DF, 0x1DF, 0x1DF, 0x1DF, 0x1E0, 0x1E0, 0x1E0, 0x1E0, 0x1E0, 0x1E0, 0x1E0,
972        0x1E0, 0x1E0, 0x1E0, 0x1E1, 0x1E1, 0x1E1, 0x1E1, 0x1E1, 0x1E1, 0x1E1, 0x1E1, 0x1E1, 0x1E1,
973        0x1E2, 0x1E2, 0x1E2, 0x1E2, 0x1E2, 0x1E2, 0x1E2, 0x1E2, 0x1E2, 0x1E2, 0x1E3, 0x1E3, 0x1E3,
974        0x1E3, 0x1E3, 0x1E3, 0x1E3, 0x1E3, 0x1E3, 0x1E3, 0x1E4, 0x1E4, 0x1E4, 0x1E4, 0x1E4, 0x1E4,
975        0x1E4, 0x1E4, 0x1E4, 0x1E4, 0x1E5, 0x1E5, 0x1E5, 0x1E5, 0x1E5, 0x1E5, 0x1E5, 0x1E5, 0x1E5,
976        0x1E5, 0x1E6, 0x1E6, 0x1E6, 0x1E6, 0x1E6, 0x1E6, 0x1E6, 0x1E6, 0x1E6, 0x1E6, 0x1E7, 0x1E7,
977        0x1E7, 0x1E7, 0x1E7, 0x1E7, 0x1E7, 0x1E7, 0x1E7, 0x1E7, 0x1E8, 0x1E8, 0x1E8, 0x1E8, 0x1E8,
978        0x1E8, 0x1E8, 0x1E8, 0x1E8, 0x1E8, 0x1E9, 0x1E9, 0x1E9, 0x1E9, 0x1E9, 0x1E9, 0x1E9, 0x1E9,
979        0x1E9, 0x1E9, 0x1EA, 0x1EA, 0x1EA, 0x1EA, 0x1EA, 0x1EA, 0x1EA, 0x1EA, 0x1EA, 0x1EA, 0x1EB,
980        0x1EB, 0x1EB, 0x1EB, 0x1EB, 0x1EB, 0x1EB, 0x1EB, 0x1EB, 0x1EB, 0x1EC, 0x1EC, 0x1EC, 0x1EC,
981        0x1EC, 0x1EC, 0x1EC, 0x1EC, 0x1EC, 0x1EC, 0x1ED, 0x1ED, 0x1ED, 0x1ED, 0x1ED, 0x1ED, 0x1ED,
982        0x1ED, 0x1ED, 0x1ED, 0x1EE, 0x1EE, 0x1EE, 0x1EE, 0x1EE, 0x1EE, 0x1EE, 0x1EE, 0x1EE, 0x1EE,
983        0x1EF, 0x1EF, 0x1EF, 0x1EF, 0x1EF, 0x1EF, 0x1EF, 0x1EF, 0x1EF, 0x1EF, 0x1F0, 0x1F0, 0x1F0,
984        0x1F0, 0x1F0, 0x1F0, 0x1F0, 0x1F0, 0x1F0, 0x1F0, 0x1F1, 0x1F1, 0x1F1, 0x1F1, 0x1F1, 0x1F1,
985        0x1F1, 0x1F1, 0x1F1, 0x1F1, 0x1F2, 0x1F2, 0x1F2, 0x1F2, 0x1F2, 0x1F2, 0x1F2, 0x1F2, 0x1F2,
986        0x1F2, 0x1F3, 0x1F3, 0x1F3, 0x1F3, 0x1F3, 0x1F3, 0x1F3, 0x1F3, 0x1F3, 0x1F3, 0x1F4, 0x1F4,
987        0x1F4, 0x1F4, 0x1F4, 0x1F4, 0x1F4, 0x1F4, 0x1F4, 0x1F4, 0x1F5, 0x1F5, 0x1F5, 0x1F5, 0x1F5,
988        0x1F5, 0x1F5, 0x1F5, 0x1F5, 0x1F5, 0x1F6, 0x1F6, 0x1F6, 0x1F6, 0x1F6, 0x1F6, 0x1F6, 0x1F6,
989        0x1F6, 0x1F6, 0x1F7, 0x1F7, 0x1F7, 0x1F7, 0x1F7, 0x1F7, 0x1F7, 0x1F7, 0x1F7, 0x1F7, 0x1F8,
990        0x1F8, 0x1F8, 0x1F8, 0x1F8, 0x1F8, 0x1F8, 0x1F8, 0x1F8, 0x1F8, 0x1F9, 0x1F9, 0x1F9, 0x1F9,
991        0x1F9, 0x1F9, 0x1F9, 0x1F9, 0x1F9, 0x1F9, 0x1FA, 0x1FA, 0x1FA, 0x1FA, 0x1FA, 0x1FA, 0x1FA,
992        0x1FA, 0x1FA, 0x1FA, 0x1FB, 0x1FB, 0x1FB, 0x1FB, 0x1FB, 0x1FB, 0x1FB, 0x1FB, 0x1FB, 0x1FB,
993        0x1FC, 0x1FC, 0x1FC, 0x1FC, 0x1FC, 0x1FC, 0x1FC, 0x1FC, 0x1FC, 0x1FC, 0x1FD, 0x1FD, 0x1FD,
994        0x1FD, 0x1FD, 0x1FD, 0x1FD, 0x1FD, 0x1FD, 0x1FD, 0x1FE, 0x1FE, 0x1FE, 0x1FE, 0x1FE, 0x1FE,
995        0x1FE, 0x1FE, 0x1FE, 0x1FE, 0x1FF, 0x1FF, 0x1FF, 0x1FF, 0x1FF, 0x1FF, 0x1FF, 0x1FF, 0x1FF,
996        0x1FF,
997    ];
998
999    h_counter_test(
1000        EXPECTED_PIXELS,
1001        EXPECTED_H,
1002        scanline_mclk_to_pixel_h32,
1003        pixel_to_internal_h_h32,
1004    );
1005}
1006
1007#[test]
1008fn h_counter_h40() {
1009    const EXPECTED_PIXELS: &[u16; 3420] = &[
1010        0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3,
1011        3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7,
1012        7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10,
1013        11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13,
1014        13, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16,
1015        16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19,
1016        19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22,
1017        22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25,
1018        25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28,
1019        28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 30, 30, 30, 30, 30, 30, 30, 30, 31,
1020        31, 31, 31, 31, 31, 31, 31, 32, 32, 32, 32, 32, 32, 32, 32, 33, 33, 33, 33, 33, 33, 33, 33,
1021        34, 34, 34, 34, 34, 34, 34, 34, 35, 35, 35, 35, 35, 35, 35, 35, 36, 36, 36, 36, 36, 36, 36,
1022        36, 37, 37, 37, 37, 37, 37, 37, 37, 38, 38, 38, 38, 38, 38, 38, 38, 39, 39, 39, 39, 39, 39,
1023        39, 39, 40, 40, 40, 40, 40, 40, 40, 40, 41, 41, 41, 41, 41, 41, 41, 41, 42, 42, 42, 42, 42,
1024        42, 42, 42, 43, 43, 43, 43, 43, 43, 43, 43, 44, 44, 44, 44, 44, 44, 44, 44, 45, 45, 45, 45,
1025        45, 45, 45, 45, 46, 46, 46, 46, 46, 46, 46, 46, 47, 47, 47, 47, 47, 47, 47, 47, 48, 48, 48,
1026        48, 48, 48, 48, 48, 49, 49, 49, 49, 49, 49, 49, 49, 50, 50, 50, 50, 50, 50, 50, 50, 51, 51,
1027        51, 51, 51, 51, 51, 51, 52, 52, 52, 52, 52, 52, 52, 52, 53, 53, 53, 53, 53, 53, 53, 53, 54,
1028        54, 54, 54, 54, 54, 54, 54, 55, 55, 55, 55, 55, 55, 55, 55, 56, 56, 56, 56, 56, 56, 56, 56,
1029        57, 57, 57, 57, 57, 57, 57, 57, 58, 58, 58, 58, 58, 58, 58, 58, 59, 59, 59, 59, 59, 59, 59,
1030        59, 60, 60, 60, 60, 60, 60, 60, 60, 61, 61, 61, 61, 61, 61, 61, 61, 62, 62, 62, 62, 62, 62,
1031        62, 62, 63, 63, 63, 63, 63, 63, 63, 63, 64, 64, 64, 64, 64, 64, 64, 64, 65, 65, 65, 65, 65,
1032        65, 65, 65, 66, 66, 66, 66, 66, 66, 66, 66, 67, 67, 67, 67, 67, 67, 67, 67, 68, 68, 68, 68,
1033        68, 68, 68, 68, 69, 69, 69, 69, 69, 69, 69, 69, 70, 70, 70, 70, 70, 70, 70, 70, 71, 71, 71,
1034        71, 71, 71, 71, 71, 72, 72, 72, 72, 72, 72, 72, 72, 73, 73, 73, 73, 73, 73, 73, 73, 74, 74,
1035        74, 74, 74, 74, 74, 74, 75, 75, 75, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 76, 76, 76, 77,
1036        77, 77, 77, 77, 77, 77, 77, 78, 78, 78, 78, 78, 78, 78, 78, 79, 79, 79, 79, 79, 79, 79, 79,
1037        80, 80, 80, 80, 80, 80, 80, 80, 81, 81, 81, 81, 81, 81, 81, 81, 82, 82, 82, 82, 82, 82, 82,
1038        82, 83, 83, 83, 83, 83, 83, 83, 83, 84, 84, 84, 84, 84, 84, 84, 84, 85, 85, 85, 85, 85, 85,
1039        85, 85, 86, 86, 86, 86, 86, 86, 86, 86, 87, 87, 87, 87, 87, 87, 87, 87, 88, 88, 88, 88, 88,
1040        88, 88, 88, 89, 89, 89, 89, 89, 89, 89, 89, 90, 90, 90, 90, 90, 90, 90, 90, 91, 91, 91, 91,
1041        91, 91, 91, 91, 92, 92, 92, 92, 92, 92, 92, 92, 93, 93, 93, 93, 93, 93, 93, 93, 94, 94, 94,
1042        94, 94, 94, 94, 94, 95, 95, 95, 95, 95, 95, 95, 95, 96, 96, 96, 96, 96, 96, 96, 96, 97, 97,
1043        97, 97, 97, 97, 97, 97, 98, 98, 98, 98, 98, 98, 98, 98, 99, 99, 99, 99, 99, 99, 99, 99,
1044        100, 100, 100, 100, 100, 100, 100, 100, 101, 101, 101, 101, 101, 101, 101, 101, 102, 102,
1045        102, 102, 102, 102, 102, 102, 103, 103, 103, 103, 103, 103, 103, 103, 104, 104, 104, 104,
1046        104, 104, 104, 104, 105, 105, 105, 105, 105, 105, 105, 105, 106, 106, 106, 106, 106, 106,
1047        106, 106, 107, 107, 107, 107, 107, 107, 107, 107, 108, 108, 108, 108, 108, 108, 108, 108,
1048        109, 109, 109, 109, 109, 109, 109, 109, 110, 110, 110, 110, 110, 110, 110, 110, 111, 111,
1049        111, 111, 111, 111, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 113, 113, 113, 113,
1050        113, 113, 113, 113, 114, 114, 114, 114, 114, 114, 114, 114, 115, 115, 115, 115, 115, 115,
1051        115, 115, 116, 116, 116, 116, 116, 116, 116, 116, 117, 117, 117, 117, 117, 117, 117, 117,
1052        118, 118, 118, 118, 118, 118, 118, 118, 119, 119, 119, 119, 119, 119, 119, 119, 120, 120,
1053        120, 120, 120, 120, 120, 120, 121, 121, 121, 121, 121, 121, 121, 121, 122, 122, 122, 122,
1054        122, 122, 122, 122, 123, 123, 123, 123, 123, 123, 123, 123, 124, 124, 124, 124, 124, 124,
1055        124, 124, 125, 125, 125, 125, 125, 125, 125, 125, 126, 126, 126, 126, 126, 126, 126, 126,
1056        127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 128, 128, 128, 128, 128, 128, 129, 129,
1057        129, 129, 129, 129, 129, 129, 130, 130, 130, 130, 130, 130, 130, 130, 131, 131, 131, 131,
1058        131, 131, 131, 131, 132, 132, 132, 132, 132, 132, 132, 132, 133, 133, 133, 133, 133, 133,
1059        133, 133, 134, 134, 134, 134, 134, 134, 134, 134, 135, 135, 135, 135, 135, 135, 135, 135,
1060        136, 136, 136, 136, 136, 136, 136, 136, 137, 137, 137, 137, 137, 137, 137, 137, 138, 138,
1061        138, 138, 138, 138, 138, 138, 139, 139, 139, 139, 139, 139, 139, 139, 140, 140, 140, 140,
1062        140, 140, 140, 140, 141, 141, 141, 141, 141, 141, 141, 141, 142, 142, 142, 142, 142, 142,
1063        142, 142, 143, 143, 143, 143, 143, 143, 143, 143, 144, 144, 144, 144, 144, 144, 144, 144,
1064        145, 145, 145, 145, 145, 145, 145, 145, 146, 146, 146, 146, 146, 146, 146, 146, 147, 147,
1065        147, 147, 147, 147, 147, 147, 148, 148, 148, 148, 148, 148, 148, 148, 149, 149, 149, 149,
1066        149, 149, 149, 149, 150, 150, 150, 150, 150, 150, 150, 150, 151, 151, 151, 151, 151, 151,
1067        151, 151, 152, 152, 152, 152, 152, 152, 152, 152, 153, 153, 153, 153, 153, 153, 153, 153,
1068        154, 154, 154, 154, 154, 154, 154, 154, 155, 155, 155, 155, 155, 155, 155, 155, 156, 156,
1069        156, 156, 156, 156, 156, 156, 157, 157, 157, 157, 157, 157, 157, 157, 158, 158, 158, 158,
1070        158, 158, 158, 158, 159, 159, 159, 159, 159, 159, 159, 159, 160, 160, 160, 160, 160, 160,
1071        160, 160, 161, 161, 161, 161, 161, 161, 161, 161, 162, 162, 162, 162, 162, 162, 162, 162,
1072        163, 163, 163, 163, 163, 163, 163, 163, 164, 164, 164, 164, 164, 164, 164, 164, 165, 165,
1073        165, 165, 165, 165, 165, 165, 166, 166, 166, 166, 166, 166, 166, 166, 167, 167, 167, 167,
1074        167, 167, 167, 167, 168, 168, 168, 168, 168, 168, 168, 168, 169, 169, 169, 169, 169, 169,
1075        169, 169, 170, 170, 170, 170, 170, 170, 170, 170, 171, 171, 171, 171, 171, 171, 171, 171,
1076        172, 172, 172, 172, 172, 172, 172, 172, 173, 173, 173, 173, 173, 173, 173, 173, 174, 174,
1077        174, 174, 174, 174, 174, 174, 175, 175, 175, 175, 175, 175, 175, 175, 176, 176, 176, 176,
1078        176, 176, 176, 176, 177, 177, 177, 177, 177, 177, 177, 177, 178, 178, 178, 178, 178, 178,
1079        178, 178, 179, 179, 179, 179, 179, 179, 179, 179, 180, 180, 180, 180, 180, 180, 180, 180,
1080        181, 181, 181, 181, 181, 181, 181, 181, 182, 182, 182, 182, 182, 182, 182, 182, 183, 183,
1081        183, 183, 183, 183, 183, 183, 184, 184, 184, 184, 184, 184, 184, 184, 185, 185, 185, 185,
1082        185, 185, 185, 185, 186, 186, 186, 186, 186, 186, 186, 186, 187, 187, 187, 187, 187, 187,
1083        187, 187, 188, 188, 188, 188, 188, 188, 188, 188, 189, 189, 189, 189, 189, 189, 189, 189,
1084        190, 190, 190, 190, 190, 190, 190, 190, 191, 191, 191, 191, 191, 191, 191, 191, 192, 192,
1085        192, 192, 192, 192, 192, 192, 193, 193, 193, 193, 193, 193, 193, 193, 194, 194, 194, 194,
1086        194, 194, 194, 194, 195, 195, 195, 195, 195, 195, 195, 195, 196, 196, 196, 196, 196, 196,
1087        196, 196, 197, 197, 197, 197, 197, 197, 197, 197, 198, 198, 198, 198, 198, 198, 198, 198,
1088        199, 199, 199, 199, 199, 199, 199, 199, 200, 200, 200, 200, 200, 200, 200, 200, 201, 201,
1089        201, 201, 201, 201, 201, 201, 202, 202, 202, 202, 202, 202, 202, 202, 203, 203, 203, 203,
1090        203, 203, 203, 203, 204, 204, 204, 204, 204, 204, 204, 204, 205, 205, 205, 205, 205, 205,
1091        205, 205, 206, 206, 206, 206, 206, 206, 206, 206, 207, 207, 207, 207, 207, 207, 207, 207,
1092        208, 208, 208, 208, 208, 208, 208, 208, 209, 209, 209, 209, 209, 209, 209, 209, 210, 210,
1093        210, 210, 210, 210, 210, 210, 211, 211, 211, 211, 211, 211, 211, 211, 212, 212, 212, 212,
1094        212, 212, 212, 212, 213, 213, 213, 213, 213, 213, 213, 213, 214, 214, 214, 214, 214, 214,
1095        214, 214, 215, 215, 215, 215, 215, 215, 215, 215, 216, 216, 216, 216, 216, 216, 216, 216,
1096        217, 217, 217, 217, 217, 217, 217, 217, 218, 218, 218, 218, 218, 218, 218, 218, 219, 219,
1097        219, 219, 219, 219, 219, 219, 220, 220, 220, 220, 220, 220, 220, 220, 221, 221, 221, 221,
1098        221, 221, 221, 221, 222, 222, 222, 222, 222, 222, 222, 222, 223, 223, 223, 223, 223, 223,
1099        223, 223, 224, 224, 224, 224, 224, 224, 224, 224, 225, 225, 225, 225, 225, 225, 225, 225,
1100        226, 226, 226, 226, 226, 226, 226, 226, 227, 227, 227, 227, 227, 227, 227, 227, 228, 228,
1101        228, 228, 228, 228, 228, 228, 229, 229, 229, 229, 229, 229, 229, 229, 230, 230, 230, 230,
1102        230, 230, 230, 230, 231, 231, 231, 231, 231, 231, 231, 231, 232, 232, 232, 232, 232, 232,
1103        232, 232, 233, 233, 233, 233, 233, 233, 233, 233, 234, 234, 234, 234, 234, 234, 234, 234,
1104        235, 235, 235, 235, 235, 235, 235, 235, 236, 236, 236, 236, 236, 236, 236, 236, 237, 237,
1105        237, 237, 237, 237, 237, 237, 238, 238, 238, 238, 238, 238, 238, 238, 239, 239, 239, 239,
1106        239, 239, 239, 239, 240, 240, 240, 240, 240, 240, 240, 240, 241, 241, 241, 241, 241, 241,
1107        241, 241, 242, 242, 242, 242, 242, 242, 242, 242, 243, 243, 243, 243, 243, 243, 243, 243,
1108        244, 244, 244, 244, 244, 244, 244, 244, 245, 245, 245, 245, 245, 245, 245, 245, 246, 246,
1109        246, 246, 246, 246, 246, 246, 247, 247, 247, 247, 247, 247, 247, 247, 248, 248, 248, 248,
1110        248, 248, 248, 248, 249, 249, 249, 249, 249, 249, 249, 249, 250, 250, 250, 250, 250, 250,
1111        250, 250, 251, 251, 251, 251, 251, 251, 251, 251, 252, 252, 252, 252, 252, 252, 252, 252,
1112        253, 253, 253, 253, 253, 253, 253, 253, 254, 254, 254, 254, 254, 254, 254, 254, 255, 255,
1113        255, 255, 255, 255, 255, 255, 256, 256, 256, 256, 256, 256, 256, 256, 257, 257, 257, 257,
1114        257, 257, 257, 257, 258, 258, 258, 258, 258, 258, 258, 258, 259, 259, 259, 259, 259, 259,
1115        259, 259, 260, 260, 260, 260, 260, 260, 260, 260, 261, 261, 261, 261, 261, 261, 261, 261,
1116        262, 262, 262, 262, 262, 262, 262, 262, 263, 263, 263, 263, 263, 263, 263, 263, 264, 264,
1117        264, 264, 264, 264, 264, 264, 265, 265, 265, 265, 265, 265, 265, 265, 266, 266, 266, 266,
1118        266, 266, 266, 266, 267, 267, 267, 267, 267, 267, 267, 267, 268, 268, 268, 268, 268, 268,
1119        268, 268, 269, 269, 269, 269, 269, 269, 269, 269, 270, 270, 270, 270, 270, 270, 270, 270,
1120        271, 271, 271, 271, 271, 271, 271, 271, 272, 272, 272, 272, 272, 272, 272, 272, 273, 273,
1121        273, 273, 273, 273, 273, 273, 274, 274, 274, 274, 274, 274, 274, 274, 275, 275, 275, 275,
1122        275, 275, 275, 275, 276, 276, 276, 276, 276, 276, 276, 276, 277, 277, 277, 277, 277, 277,
1123        277, 277, 278, 278, 278, 278, 278, 278, 278, 278, 279, 279, 279, 279, 279, 279, 279, 279,
1124        280, 280, 280, 280, 280, 280, 280, 280, 281, 281, 281, 281, 281, 281, 281, 281, 282, 282,
1125        282, 282, 282, 282, 282, 282, 283, 283, 283, 283, 283, 283, 283, 283, 284, 284, 284, 284,
1126        284, 284, 284, 284, 285, 285, 285, 285, 285, 285, 285, 285, 286, 286, 286, 286, 286, 286,
1127        286, 286, 287, 287, 287, 287, 287, 287, 287, 287, 288, 288, 288, 288, 288, 288, 288, 288,
1128        289, 289, 289, 289, 289, 289, 289, 289, 290, 290, 290, 290, 290, 290, 290, 290, 291, 291,
1129        291, 291, 291, 291, 291, 291, 292, 292, 292, 292, 292, 292, 292, 292, 293, 293, 293, 293,
1130        293, 293, 293, 293, 294, 294, 294, 294, 294, 294, 294, 294, 295, 295, 295, 295, 295, 295,
1131        295, 295, 296, 296, 296, 296, 296, 296, 296, 296, 297, 297, 297, 297, 297, 297, 297, 297,
1132        298, 298, 298, 298, 298, 298, 298, 298, 299, 299, 299, 299, 299, 299, 299, 299, 300, 300,
1133        300, 300, 300, 300, 300, 300, 301, 301, 301, 301, 301, 301, 301, 301, 302, 302, 302, 302,
1134        302, 302, 302, 302, 303, 303, 303, 303, 303, 303, 303, 303, 304, 304, 304, 304, 304, 304,
1135        304, 304, 305, 305, 305, 305, 305, 305, 305, 305, 306, 306, 306, 306, 306, 306, 306, 306,
1136        307, 307, 307, 307, 307, 307, 307, 307, 308, 308, 308, 308, 308, 308, 308, 308, 309, 309,
1137        309, 309, 309, 309, 309, 309, 310, 310, 310, 310, 310, 310, 310, 310, 311, 311, 311, 311,
1138        311, 311, 311, 311, 312, 312, 312, 312, 312, 312, 312, 312, 313, 313, 313, 313, 313, 313,
1139        313, 313, 314, 314, 314, 314, 314, 314, 314, 314, 315, 315, 315, 315, 315, 315, 315, 315,
1140        316, 316, 316, 316, 316, 316, 316, 316, 317, 317, 317, 317, 317, 317, 317, 317, 318, 318,
1141        318, 318, 318, 318, 318, 318, 319, 319, 319, 319, 319, 319, 319, 319, 320, 320, 320, 320,
1142        320, 320, 320, 320, 321, 321, 321, 321, 321, 321, 321, 321, 322, 322, 322, 322, 322, 322,
1143        322, 322, 323, 323, 323, 323, 323, 323, 323, 323, 324, 324, 324, 324, 324, 324, 324, 324,
1144        325, 325, 325, 325, 325, 325, 325, 325, 326, 326, 326, 326, 326, 326, 326, 326, 327, 327,
1145        327, 327, 327, 327, 327, 327, 328, 328, 328, 328, 328, 328, 328, 328, 329, 329, 329, 329,
1146        329, 329, 329, 329, 330, 330, 330, 330, 330, 330, 330, 330, 331, 331, 331, 331, 331, 331,
1147        331, 331, 332, 332, 332, 332, 332, 332, 332, 332, 333, 333, 333, 333, 333, 333, 333, 333,
1148        334, 334, 334, 334, 334, 334, 334, 334, 335, 335, 335, 335, 335, 335, 335, 335, 336, 336,
1149        336, 336, 336, 336, 336, 336, 337, 337, 337, 337, 337, 337, 337, 337, 338, 338, 338, 338,
1150        338, 338, 338, 338, 339, 339, 339, 339, 339, 339, 339, 339, 340, 340, 340, 340, 340, 340,
1151        340, 340, 341, 341, 341, 341, 341, 341, 341, 341, 342, 342, 342, 342, 342, 342, 342, 342,
1152        343, 343, 343, 343, 343, 343, 343, 343, 344, 344, 344, 344, 344, 344, 344, 344, 345, 345,
1153        345, 345, 345, 345, 345, 345, 346, 346, 346, 346, 346, 346, 346, 346, 347, 347, 347, 347,
1154        347, 347, 347, 347, 348, 348, 348, 348, 348, 348, 348, 348, 349, 349, 349, 349, 349, 349,
1155        349, 349, 350, 350, 350, 350, 350, 350, 350, 350, 351, 351, 351, 351, 351, 351, 351, 351,
1156        352, 352, 352, 352, 352, 352, 352, 352, 353, 353, 353, 353, 353, 353, 353, 353, 354, 354,
1157        354, 354, 354, 354, 354, 354, 355, 355, 355, 355, 355, 355, 355, 355, 356, 356, 356, 356,
1158        356, 356, 356, 356, 357, 357, 357, 357, 357, 357, 357, 357, 358, 358, 358, 358, 358, 358,
1159        358, 358, 359, 359, 359, 359, 359, 359, 359, 359, 360, 360, 360, 360, 360, 360, 360, 360,
1160        361, 361, 361, 361, 361, 361, 361, 361, 362, 362, 362, 362, 362, 362, 362, 362, 363, 363,
1161        363, 363, 363, 363, 363, 363, 364, 364, 364, 364, 364, 364, 364, 364, 365, 365, 365, 365,
1162        365, 365, 365, 365, 366, 366, 366, 366, 366, 366, 366, 366, 367, 367, 367, 367, 367, 367,
1163        367, 367, 368, 368, 368, 368, 368, 368, 368, 368, 369, 369, 369, 369, 369, 369, 369, 369,
1164        369, 369, 370, 370, 370, 370, 370, 370, 370, 370, 370, 370, 371, 371, 371, 371, 371, 371,
1165        371, 371, 371, 371, 372, 372, 372, 372, 372, 372, 372, 372, 372, 372, 373, 373, 373, 373,
1166        373, 373, 373, 373, 373, 373, 374, 374, 374, 374, 374, 374, 374, 374, 374, 374, 375, 375,
1167        375, 375, 375, 375, 375, 375, 375, 375, 376, 376, 376, 376, 376, 376, 376, 376, 376, 377,
1168        377, 377, 377, 377, 377, 377, 377, 377, 378, 378, 378, 378, 378, 378, 378, 378, 378, 378,
1169        379, 379, 379, 379, 379, 379, 379, 379, 379, 379, 380, 380, 380, 380, 380, 380, 380, 380,
1170        380, 380, 381, 381, 381, 381, 381, 381, 381, 381, 381, 381, 382, 382, 382, 382, 382, 382,
1171        382, 382, 382, 382, 383, 383, 383, 383, 383, 383, 383, 383, 383, 383, 384, 384, 384, 384,
1172        384, 384, 384, 384, 384, 384, 385, 385, 385, 385, 385, 385, 385, 385, 386, 386, 386, 386,
1173        386, 386, 386, 386, 386, 386, 387, 387, 387, 387, 387, 387, 387, 387, 387, 387, 388, 388,
1174        388, 388, 388, 388, 388, 388, 388, 388, 389, 389, 389, 389, 389, 389, 389, 389, 389, 389,
1175        390, 390, 390, 390, 390, 390, 390, 390, 390, 390, 391, 391, 391, 391, 391, 391, 391, 391,
1176        391, 391, 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, 393, 393, 393, 393, 393, 393,
1177        393, 393, 393, 394, 394, 394, 394, 394, 394, 394, 394, 394, 395, 395, 395, 395, 395, 395,
1178        395, 395, 395, 395, 396, 396, 396, 396, 396, 396, 396, 396, 396, 396, 397, 397, 397, 397,
1179        397, 397, 397, 397, 397, 397, 398, 398, 398, 398, 398, 398, 398, 398, 398, 398, 399, 399,
1180        399, 399, 399, 399, 399, 399, 399, 399, 400, 400, 400, 400, 400, 400, 400, 400, 400, 400,
1181        401, 401, 401, 401, 401, 401, 401, 401, 401, 401, 402, 402, 402, 402, 402, 402, 402, 402,
1182        403, 403, 403, 403, 403, 403, 403, 403, 404, 404, 404, 404, 404, 404, 404, 404, 405, 405,
1183        405, 405, 405, 405, 405, 405, 406, 406, 406, 406, 406, 406, 406, 406, 407, 407, 407, 407,
1184        407, 407, 407, 407, 408, 408, 408, 408, 408, 408, 408, 408, 409, 409, 409, 409, 409, 409,
1185        409, 409, 410, 410, 410, 410, 410, 410, 410, 410, 411, 411, 411, 411, 411, 411, 411, 411,
1186        412, 412, 412, 412, 412, 412, 412, 412, 413, 413, 413, 413, 413, 413, 413, 413, 414, 414,
1187        414, 414, 414, 414, 414, 414, 415, 415, 415, 415, 415, 415, 415, 415, 416, 416, 416, 416,
1188        416, 416, 416, 416, 417, 417, 417, 417, 417, 417, 417, 417, 418, 418, 418, 418, 418, 418,
1189        418, 418, 419, 419, 419, 419, 419, 419, 419, 419,
1190    ];
1191    const EXPECTED_H: &[u16; 3420] = &[
1192        0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x000, 0x001, 0x001, 0x001, 0x001, 0x001,
1193        0x001, 0x001, 0x001, 0x002, 0x002, 0x002, 0x002, 0x002, 0x002, 0x002, 0x002, 0x003, 0x003,
1194        0x003, 0x003, 0x003, 0x003, 0x003, 0x003, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004,
1195        0x004, 0x005, 0x005, 0x005, 0x005, 0x005, 0x005, 0x005, 0x005, 0x006, 0x006, 0x006, 0x006,
1196        0x006, 0x006, 0x006, 0x006, 0x007, 0x007, 0x007, 0x007, 0x007, 0x007, 0x007, 0x007, 0x008,
1197        0x008, 0x008, 0x008, 0x008, 0x008, 0x008, 0x008, 0x009, 0x009, 0x009, 0x009, 0x009, 0x009,
1198        0x009, 0x009, 0x00A, 0x00A, 0x00A, 0x00A, 0x00A, 0x00A, 0x00A, 0x00A, 0x00B, 0x00B, 0x00B,
1199        0x00B, 0x00B, 0x00B, 0x00B, 0x00B, 0x00C, 0x00C, 0x00C, 0x00C, 0x00C, 0x00C, 0x00C, 0x00C,
1200        0x00D, 0x00D, 0x00D, 0x00D, 0x00D, 0x00D, 0x00D, 0x00D, 0x00E, 0x00E, 0x00E, 0x00E, 0x00E,
1201        0x00E, 0x00E, 0x00E, 0x00F, 0x00F, 0x00F, 0x00F, 0x00F, 0x00F, 0x00F, 0x00F, 0x010, 0x010,
1202        0x010, 0x010, 0x010, 0x010, 0x010, 0x010, 0x011, 0x011, 0x011, 0x011, 0x011, 0x011, 0x011,
1203        0x011, 0x012, 0x012, 0x012, 0x012, 0x012, 0x012, 0x012, 0x012, 0x013, 0x013, 0x013, 0x013,
1204        0x013, 0x013, 0x013, 0x013, 0x014, 0x014, 0x014, 0x014, 0x014, 0x014, 0x014, 0x014, 0x015,
1205        0x015, 0x015, 0x015, 0x015, 0x015, 0x015, 0x015, 0x016, 0x016, 0x016, 0x016, 0x016, 0x016,
1206        0x016, 0x016, 0x017, 0x017, 0x017, 0x017, 0x017, 0x017, 0x017, 0x017, 0x018, 0x018, 0x018,
1207        0x018, 0x018, 0x018, 0x018, 0x018, 0x019, 0x019, 0x019, 0x019, 0x019, 0x019, 0x019, 0x019,
1208        0x01A, 0x01A, 0x01A, 0x01A, 0x01A, 0x01A, 0x01A, 0x01A, 0x01B, 0x01B, 0x01B, 0x01B, 0x01B,
1209        0x01B, 0x01B, 0x01B, 0x01C, 0x01C, 0x01C, 0x01C, 0x01C, 0x01C, 0x01C, 0x01C, 0x01D, 0x01D,
1210        0x01D, 0x01D, 0x01D, 0x01D, 0x01D, 0x01D, 0x01E, 0x01E, 0x01E, 0x01E, 0x01E, 0x01E, 0x01E,
1211        0x01E, 0x01F, 0x01F, 0x01F, 0x01F, 0x01F, 0x01F, 0x01F, 0x01F, 0x020, 0x020, 0x020, 0x020,
1212        0x020, 0x020, 0x020, 0x020, 0x021, 0x021, 0x021, 0x021, 0x021, 0x021, 0x021, 0x021, 0x022,
1213        0x022, 0x022, 0x022, 0x022, 0x022, 0x022, 0x022, 0x023, 0x023, 0x023, 0x023, 0x023, 0x023,
1214        0x023, 0x023, 0x024, 0x024, 0x024, 0x024, 0x024, 0x024, 0x024, 0x024, 0x025, 0x025, 0x025,
1215        0x025, 0x025, 0x025, 0x025, 0x025, 0x026, 0x026, 0x026, 0x026, 0x026, 0x026, 0x026, 0x026,
1216        0x027, 0x027, 0x027, 0x027, 0x027, 0x027, 0x027, 0x027, 0x028, 0x028, 0x028, 0x028, 0x028,
1217        0x028, 0x028, 0x028, 0x029, 0x029, 0x029, 0x029, 0x029, 0x029, 0x029, 0x029, 0x02A, 0x02A,
1218        0x02A, 0x02A, 0x02A, 0x02A, 0x02A, 0x02A, 0x02B, 0x02B, 0x02B, 0x02B, 0x02B, 0x02B, 0x02B,
1219        0x02B, 0x02C, 0x02C, 0x02C, 0x02C, 0x02C, 0x02C, 0x02C, 0x02C, 0x02D, 0x02D, 0x02D, 0x02D,
1220        0x02D, 0x02D, 0x02D, 0x02D, 0x02E, 0x02E, 0x02E, 0x02E, 0x02E, 0x02E, 0x02E, 0x02E, 0x02F,
1221        0x02F, 0x02F, 0x02F, 0x02F, 0x02F, 0x02F, 0x02F, 0x030, 0x030, 0x030, 0x030, 0x030, 0x030,
1222        0x030, 0x030, 0x031, 0x031, 0x031, 0x031, 0x031, 0x031, 0x031, 0x031, 0x032, 0x032, 0x032,
1223        0x032, 0x032, 0x032, 0x032, 0x032, 0x033, 0x033, 0x033, 0x033, 0x033, 0x033, 0x033, 0x033,
1224        0x034, 0x034, 0x034, 0x034, 0x034, 0x034, 0x034, 0x034, 0x035, 0x035, 0x035, 0x035, 0x035,
1225        0x035, 0x035, 0x035, 0x036, 0x036, 0x036, 0x036, 0x036, 0x036, 0x036, 0x036, 0x037, 0x037,
1226        0x037, 0x037, 0x037, 0x037, 0x037, 0x037, 0x038, 0x038, 0x038, 0x038, 0x038, 0x038, 0x038,
1227        0x038, 0x039, 0x039, 0x039, 0x039, 0x039, 0x039, 0x039, 0x039, 0x03A, 0x03A, 0x03A, 0x03A,
1228        0x03A, 0x03A, 0x03A, 0x03A, 0x03B, 0x03B, 0x03B, 0x03B, 0x03B, 0x03B, 0x03B, 0x03B, 0x03C,
1229        0x03C, 0x03C, 0x03C, 0x03C, 0x03C, 0x03C, 0x03C, 0x03D, 0x03D, 0x03D, 0x03D, 0x03D, 0x03D,
1230        0x03D, 0x03D, 0x03E, 0x03E, 0x03E, 0x03E, 0x03E, 0x03E, 0x03E, 0x03E, 0x03F, 0x03F, 0x03F,
1231        0x03F, 0x03F, 0x03F, 0x03F, 0x03F, 0x040, 0x040, 0x040, 0x040, 0x040, 0x040, 0x040, 0x040,
1232        0x041, 0x041, 0x041, 0x041, 0x041, 0x041, 0x041, 0x041, 0x042, 0x042, 0x042, 0x042, 0x042,
1233        0x042, 0x042, 0x042, 0x043, 0x043, 0x043, 0x043, 0x043, 0x043, 0x043, 0x043, 0x044, 0x044,
1234        0x044, 0x044, 0x044, 0x044, 0x044, 0x044, 0x045, 0x045, 0x045, 0x045, 0x045, 0x045, 0x045,
1235        0x045, 0x046, 0x046, 0x046, 0x046, 0x046, 0x046, 0x046, 0x046, 0x047, 0x047, 0x047, 0x047,
1236        0x047, 0x047, 0x047, 0x047, 0x048, 0x048, 0x048, 0x048, 0x048, 0x048, 0x048, 0x048, 0x049,
1237        0x049, 0x049, 0x049, 0x049, 0x049, 0x049, 0x049, 0x04A, 0x04A, 0x04A, 0x04A, 0x04A, 0x04A,
1238        0x04A, 0x04A, 0x04B, 0x04B, 0x04B, 0x04B, 0x04B, 0x04B, 0x04B, 0x04B, 0x04C, 0x04C, 0x04C,
1239        0x04C, 0x04C, 0x04C, 0x04C, 0x04C, 0x04D, 0x04D, 0x04D, 0x04D, 0x04D, 0x04D, 0x04D, 0x04D,
1240        0x04E, 0x04E, 0x04E, 0x04E, 0x04E, 0x04E, 0x04E, 0x04E, 0x04F, 0x04F, 0x04F, 0x04F, 0x04F,
1241        0x04F, 0x04F, 0x04F, 0x050, 0x050, 0x050, 0x050, 0x050, 0x050, 0x050, 0x050, 0x051, 0x051,
1242        0x051, 0x051, 0x051, 0x051, 0x051, 0x051, 0x052, 0x052, 0x052, 0x052, 0x052, 0x052, 0x052,
1243        0x052, 0x053, 0x053, 0x053, 0x053, 0x053, 0x053, 0x053, 0x053, 0x054, 0x054, 0x054, 0x054,
1244        0x054, 0x054, 0x054, 0x054, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x055, 0x056,
1245        0x056, 0x056, 0x056, 0x056, 0x056, 0x056, 0x056, 0x057, 0x057, 0x057, 0x057, 0x057, 0x057,
1246        0x057, 0x057, 0x058, 0x058, 0x058, 0x058, 0x058, 0x058, 0x058, 0x058, 0x059, 0x059, 0x059,
1247        0x059, 0x059, 0x059, 0x059, 0x059, 0x05A, 0x05A, 0x05A, 0x05A, 0x05A, 0x05A, 0x05A, 0x05A,
1248        0x05B, 0x05B, 0x05B, 0x05B, 0x05B, 0x05B, 0x05B, 0x05B, 0x05C, 0x05C, 0x05C, 0x05C, 0x05C,
1249        0x05C, 0x05C, 0x05C, 0x05D, 0x05D, 0x05D, 0x05D, 0x05D, 0x05D, 0x05D, 0x05D, 0x05E, 0x05E,
1250        0x05E, 0x05E, 0x05E, 0x05E, 0x05E, 0x05E, 0x05F, 0x05F, 0x05F, 0x05F, 0x05F, 0x05F, 0x05F,
1251        0x05F, 0x060, 0x060, 0x060, 0x060, 0x060, 0x060, 0x060, 0x060, 0x061, 0x061, 0x061, 0x061,
1252        0x061, 0x061, 0x061, 0x061, 0x062, 0x062, 0x062, 0x062, 0x062, 0x062, 0x062, 0x062, 0x063,
1253        0x063, 0x063, 0x063, 0x063, 0x063, 0x063, 0x063, 0x064, 0x064, 0x064, 0x064, 0x064, 0x064,
1254        0x064, 0x064, 0x065, 0x065, 0x065, 0x065, 0x065, 0x065, 0x065, 0x065, 0x066, 0x066, 0x066,
1255        0x066, 0x066, 0x066, 0x066, 0x066, 0x067, 0x067, 0x067, 0x067, 0x067, 0x067, 0x067, 0x067,
1256        0x068, 0x068, 0x068, 0x068, 0x068, 0x068, 0x068, 0x068, 0x069, 0x069, 0x069, 0x069, 0x069,
1257        0x069, 0x069, 0x069, 0x06A, 0x06A, 0x06A, 0x06A, 0x06A, 0x06A, 0x06A, 0x06A, 0x06B, 0x06B,
1258        0x06B, 0x06B, 0x06B, 0x06B, 0x06B, 0x06B, 0x06C, 0x06C, 0x06C, 0x06C, 0x06C, 0x06C, 0x06C,
1259        0x06C, 0x06D, 0x06D, 0x06D, 0x06D, 0x06D, 0x06D, 0x06D, 0x06D, 0x06E, 0x06E, 0x06E, 0x06E,
1260        0x06E, 0x06E, 0x06E, 0x06E, 0x06F, 0x06F, 0x06F, 0x06F, 0x06F, 0x06F, 0x06F, 0x06F, 0x070,
1261        0x070, 0x070, 0x070, 0x070, 0x070, 0x070, 0x070, 0x071, 0x071, 0x071, 0x071, 0x071, 0x071,
1262        0x071, 0x071, 0x072, 0x072, 0x072, 0x072, 0x072, 0x072, 0x072, 0x072, 0x073, 0x073, 0x073,
1263        0x073, 0x073, 0x073, 0x073, 0x073, 0x074, 0x074, 0x074, 0x074, 0x074, 0x074, 0x074, 0x074,
1264        0x075, 0x075, 0x075, 0x075, 0x075, 0x075, 0x075, 0x075, 0x076, 0x076, 0x076, 0x076, 0x076,
1265        0x076, 0x076, 0x076, 0x077, 0x077, 0x077, 0x077, 0x077, 0x077, 0x077, 0x077, 0x078, 0x078,
1266        0x078, 0x078, 0x078, 0x078, 0x078, 0x078, 0x079, 0x079, 0x079, 0x079, 0x079, 0x079, 0x079,
1267        0x079, 0x07A, 0x07A, 0x07A, 0x07A, 0x07A, 0x07A, 0x07A, 0x07A, 0x07B, 0x07B, 0x07B, 0x07B,
1268        0x07B, 0x07B, 0x07B, 0x07B, 0x07C, 0x07C, 0x07C, 0x07C, 0x07C, 0x07C, 0x07C, 0x07C, 0x07D,
1269        0x07D, 0x07D, 0x07D, 0x07D, 0x07D, 0x07D, 0x07D, 0x07E, 0x07E, 0x07E, 0x07E, 0x07E, 0x07E,
1270        0x07E, 0x07E, 0x07F, 0x07F, 0x07F, 0x07F, 0x07F, 0x07F, 0x07F, 0x07F, 0x080, 0x080, 0x080,
1271        0x080, 0x080, 0x080, 0x080, 0x080, 0x081, 0x081, 0x081, 0x081, 0x081, 0x081, 0x081, 0x081,
1272        0x082, 0x082, 0x082, 0x082, 0x082, 0x082, 0x082, 0x082, 0x083, 0x083, 0x083, 0x083, 0x083,
1273        0x083, 0x083, 0x083, 0x084, 0x084, 0x084, 0x084, 0x084, 0x084, 0x084, 0x084, 0x085, 0x085,
1274        0x085, 0x085, 0x085, 0x085, 0x085, 0x085, 0x086, 0x086, 0x086, 0x086, 0x086, 0x086, 0x086,
1275        0x086, 0x087, 0x087, 0x087, 0x087, 0x087, 0x087, 0x087, 0x087, 0x088, 0x088, 0x088, 0x088,
1276        0x088, 0x088, 0x088, 0x088, 0x089, 0x089, 0x089, 0x089, 0x089, 0x089, 0x089, 0x089, 0x08A,
1277        0x08A, 0x08A, 0x08A, 0x08A, 0x08A, 0x08A, 0x08A, 0x08B, 0x08B, 0x08B, 0x08B, 0x08B, 0x08B,
1278        0x08B, 0x08B, 0x08C, 0x08C, 0x08C, 0x08C, 0x08C, 0x08C, 0x08C, 0x08C, 0x08D, 0x08D, 0x08D,
1279        0x08D, 0x08D, 0x08D, 0x08D, 0x08D, 0x08E, 0x08E, 0x08E, 0x08E, 0x08E, 0x08E, 0x08E, 0x08E,
1280        0x08F, 0x08F, 0x08F, 0x08F, 0x08F, 0x08F, 0x08F, 0x08F, 0x090, 0x090, 0x090, 0x090, 0x090,
1281        0x090, 0x090, 0x090, 0x091, 0x091, 0x091, 0x091, 0x091, 0x091, 0x091, 0x091, 0x092, 0x092,
1282        0x092, 0x092, 0x092, 0x092, 0x092, 0x092, 0x093, 0x093, 0x093, 0x093, 0x093, 0x093, 0x093,
1283        0x093, 0x094, 0x094, 0x094, 0x094, 0x094, 0x094, 0x094, 0x094, 0x095, 0x095, 0x095, 0x095,
1284        0x095, 0x095, 0x095, 0x095, 0x096, 0x096, 0x096, 0x096, 0x096, 0x096, 0x096, 0x096, 0x097,
1285        0x097, 0x097, 0x097, 0x097, 0x097, 0x097, 0x097, 0x098, 0x098, 0x098, 0x098, 0x098, 0x098,
1286        0x098, 0x098, 0x099, 0x099, 0x099, 0x099, 0x099, 0x099, 0x099, 0x099, 0x09A, 0x09A, 0x09A,
1287        0x09A, 0x09A, 0x09A, 0x09A, 0x09A, 0x09B, 0x09B, 0x09B, 0x09B, 0x09B, 0x09B, 0x09B, 0x09B,
1288        0x09C, 0x09C, 0x09C, 0x09C, 0x09C, 0x09C, 0x09C, 0x09C, 0x09D, 0x09D, 0x09D, 0x09D, 0x09D,
1289        0x09D, 0x09D, 0x09D, 0x09E, 0x09E, 0x09E, 0x09E, 0x09E, 0x09E, 0x09E, 0x09E, 0x09F, 0x09F,
1290        0x09F, 0x09F, 0x09F, 0x09F, 0x09F, 0x09F, 0x0A0, 0x0A0, 0x0A0, 0x0A0, 0x0A0, 0x0A0, 0x0A0,
1291        0x0A0, 0x0A1, 0x0A1, 0x0A1, 0x0A1, 0x0A1, 0x0A1, 0x0A1, 0x0A1, 0x0A2, 0x0A2, 0x0A2, 0x0A2,
1292        0x0A2, 0x0A2, 0x0A2, 0x0A2, 0x0A3, 0x0A3, 0x0A3, 0x0A3, 0x0A3, 0x0A3, 0x0A3, 0x0A3, 0x0A4,
1293        0x0A4, 0x0A4, 0x0A4, 0x0A4, 0x0A4, 0x0A4, 0x0A4, 0x0A5, 0x0A5, 0x0A5, 0x0A5, 0x0A5, 0x0A5,
1294        0x0A5, 0x0A5, 0x0A6, 0x0A6, 0x0A6, 0x0A6, 0x0A6, 0x0A6, 0x0A6, 0x0A6, 0x0A7, 0x0A7, 0x0A7,
1295        0x0A7, 0x0A7, 0x0A7, 0x0A7, 0x0A7, 0x0A8, 0x0A8, 0x0A8, 0x0A8, 0x0A8, 0x0A8, 0x0A8, 0x0A8,
1296        0x0A9, 0x0A9, 0x0A9, 0x0A9, 0x0A9, 0x0A9, 0x0A9, 0x0A9, 0x0AA, 0x0AA, 0x0AA, 0x0AA, 0x0AA,
1297        0x0AA, 0x0AA, 0x0AA, 0x0AB, 0x0AB, 0x0AB, 0x0AB, 0x0AB, 0x0AB, 0x0AB, 0x0AB, 0x0AC, 0x0AC,
1298        0x0AC, 0x0AC, 0x0AC, 0x0AC, 0x0AC, 0x0AC, 0x0AD, 0x0AD, 0x0AD, 0x0AD, 0x0AD, 0x0AD, 0x0AD,
1299        0x0AD, 0x0AE, 0x0AE, 0x0AE, 0x0AE, 0x0AE, 0x0AE, 0x0AE, 0x0AE, 0x0AF, 0x0AF, 0x0AF, 0x0AF,
1300        0x0AF, 0x0AF, 0x0AF, 0x0AF, 0x0B0, 0x0B0, 0x0B0, 0x0B0, 0x0B0, 0x0B0, 0x0B0, 0x0B0, 0x0B1,
1301        0x0B1, 0x0B1, 0x0B1, 0x0B1, 0x0B1, 0x0B1, 0x0B1, 0x0B2, 0x0B2, 0x0B2, 0x0B2, 0x0B2, 0x0B2,
1302        0x0B2, 0x0B2, 0x0B3, 0x0B3, 0x0B3, 0x0B3, 0x0B3, 0x0B3, 0x0B3, 0x0B3, 0x0B4, 0x0B4, 0x0B4,
1303        0x0B4, 0x0B4, 0x0B4, 0x0B4, 0x0B4, 0x0B5, 0x0B5, 0x0B5, 0x0B5, 0x0B5, 0x0B5, 0x0B5, 0x0B5,
1304        0x0B6, 0x0B6, 0x0B6, 0x0B6, 0x0B6, 0x0B6, 0x0B6, 0x0B6, 0x0B7, 0x0B7, 0x0B7, 0x0B7, 0x0B7,
1305        0x0B7, 0x0B7, 0x0B7, 0x0B8, 0x0B8, 0x0B8, 0x0B8, 0x0B8, 0x0B8, 0x0B8, 0x0B8, 0x0B9, 0x0B9,
1306        0x0B9, 0x0B9, 0x0B9, 0x0B9, 0x0B9, 0x0B9, 0x0BA, 0x0BA, 0x0BA, 0x0BA, 0x0BA, 0x0BA, 0x0BA,
1307        0x0BA, 0x0BB, 0x0BB, 0x0BB, 0x0BB, 0x0BB, 0x0BB, 0x0BB, 0x0BB, 0x0BC, 0x0BC, 0x0BC, 0x0BC,
1308        0x0BC, 0x0BC, 0x0BC, 0x0BC, 0x0BD, 0x0BD, 0x0BD, 0x0BD, 0x0BD, 0x0BD, 0x0BD, 0x0BD, 0x0BE,
1309        0x0BE, 0x0BE, 0x0BE, 0x0BE, 0x0BE, 0x0BE, 0x0BE, 0x0BF, 0x0BF, 0x0BF, 0x0BF, 0x0BF, 0x0BF,
1310        0x0BF, 0x0BF, 0x0C0, 0x0C0, 0x0C0, 0x0C0, 0x0C0, 0x0C0, 0x0C0, 0x0C0, 0x0C1, 0x0C1, 0x0C1,
1311        0x0C1, 0x0C1, 0x0C1, 0x0C1, 0x0C1, 0x0C2, 0x0C2, 0x0C2, 0x0C2, 0x0C2, 0x0C2, 0x0C2, 0x0C2,
1312        0x0C3, 0x0C3, 0x0C3, 0x0C3, 0x0C3, 0x0C3, 0x0C3, 0x0C3, 0x0C4, 0x0C4, 0x0C4, 0x0C4, 0x0C4,
1313        0x0C4, 0x0C4, 0x0C4, 0x0C5, 0x0C5, 0x0C5, 0x0C5, 0x0C5, 0x0C5, 0x0C5, 0x0C5, 0x0C6, 0x0C6,
1314        0x0C6, 0x0C6, 0x0C6, 0x0C6, 0x0C6, 0x0C6, 0x0C7, 0x0C7, 0x0C7, 0x0C7, 0x0C7, 0x0C7, 0x0C7,
1315        0x0C7, 0x0C8, 0x0C8, 0x0C8, 0x0C8, 0x0C8, 0x0C8, 0x0C8, 0x0C8, 0x0C9, 0x0C9, 0x0C9, 0x0C9,
1316        0x0C9, 0x0C9, 0x0C9, 0x0C9, 0x0CA, 0x0CA, 0x0CA, 0x0CA, 0x0CA, 0x0CA, 0x0CA, 0x0CA, 0x0CB,
1317        0x0CB, 0x0CB, 0x0CB, 0x0CB, 0x0CB, 0x0CB, 0x0CB, 0x0CC, 0x0CC, 0x0CC, 0x0CC, 0x0CC, 0x0CC,
1318        0x0CC, 0x0CC, 0x0CD, 0x0CD, 0x0CD, 0x0CD, 0x0CD, 0x0CD, 0x0CD, 0x0CD, 0x0CE, 0x0CE, 0x0CE,
1319        0x0CE, 0x0CE, 0x0CE, 0x0CE, 0x0CE, 0x0CF, 0x0CF, 0x0CF, 0x0CF, 0x0CF, 0x0CF, 0x0CF, 0x0CF,
1320        0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D0, 0x0D1, 0x0D1, 0x0D1, 0x0D1, 0x0D1,
1321        0x0D1, 0x0D1, 0x0D1, 0x0D2, 0x0D2, 0x0D2, 0x0D2, 0x0D2, 0x0D2, 0x0D2, 0x0D2, 0x0D3, 0x0D3,
1322        0x0D3, 0x0D3, 0x0D3, 0x0D3, 0x0D3, 0x0D3, 0x0D4, 0x0D4, 0x0D4, 0x0D4, 0x0D4, 0x0D4, 0x0D4,
1323        0x0D4, 0x0D5, 0x0D5, 0x0D5, 0x0D5, 0x0D5, 0x0D5, 0x0D5, 0x0D5, 0x0D6, 0x0D6, 0x0D6, 0x0D6,
1324        0x0D6, 0x0D6, 0x0D6, 0x0D6, 0x0D7, 0x0D7, 0x0D7, 0x0D7, 0x0D7, 0x0D7, 0x0D7, 0x0D7, 0x0D8,
1325        0x0D8, 0x0D8, 0x0D8, 0x0D8, 0x0D8, 0x0D8, 0x0D8, 0x0D9, 0x0D9, 0x0D9, 0x0D9, 0x0D9, 0x0D9,
1326        0x0D9, 0x0D9, 0x0DA, 0x0DA, 0x0DA, 0x0DA, 0x0DA, 0x0DA, 0x0DA, 0x0DA, 0x0DB, 0x0DB, 0x0DB,
1327        0x0DB, 0x0DB, 0x0DB, 0x0DB, 0x0DB, 0x0DC, 0x0DC, 0x0DC, 0x0DC, 0x0DC, 0x0DC, 0x0DC, 0x0DC,
1328        0x0DD, 0x0DD, 0x0DD, 0x0DD, 0x0DD, 0x0DD, 0x0DD, 0x0DD, 0x0DE, 0x0DE, 0x0DE, 0x0DE, 0x0DE,
1329        0x0DE, 0x0DE, 0x0DE, 0x0DF, 0x0DF, 0x0DF, 0x0DF, 0x0DF, 0x0DF, 0x0DF, 0x0DF, 0x0E0, 0x0E0,
1330        0x0E0, 0x0E0, 0x0E0, 0x0E0, 0x0E0, 0x0E0, 0x0E1, 0x0E1, 0x0E1, 0x0E1, 0x0E1, 0x0E1, 0x0E1,
1331        0x0E1, 0x0E2, 0x0E2, 0x0E2, 0x0E2, 0x0E2, 0x0E2, 0x0E2, 0x0E2, 0x0E3, 0x0E3, 0x0E3, 0x0E3,
1332        0x0E3, 0x0E3, 0x0E3, 0x0E3, 0x0E4, 0x0E4, 0x0E4, 0x0E4, 0x0E4, 0x0E4, 0x0E4, 0x0E4, 0x0E5,
1333        0x0E5, 0x0E5, 0x0E5, 0x0E5, 0x0E5, 0x0E5, 0x0E5, 0x0E6, 0x0E6, 0x0E6, 0x0E6, 0x0E6, 0x0E6,
1334        0x0E6, 0x0E6, 0x0E7, 0x0E7, 0x0E7, 0x0E7, 0x0E7, 0x0E7, 0x0E7, 0x0E7, 0x0E8, 0x0E8, 0x0E8,
1335        0x0E8, 0x0E8, 0x0E8, 0x0E8, 0x0E8, 0x0E9, 0x0E9, 0x0E9, 0x0E9, 0x0E9, 0x0E9, 0x0E9, 0x0E9,
1336        0x0EA, 0x0EA, 0x0EA, 0x0EA, 0x0EA, 0x0EA, 0x0EA, 0x0EA, 0x0EB, 0x0EB, 0x0EB, 0x0EB, 0x0EB,
1337        0x0EB, 0x0EB, 0x0EB, 0x0EC, 0x0EC, 0x0EC, 0x0EC, 0x0EC, 0x0EC, 0x0EC, 0x0EC, 0x0ED, 0x0ED,
1338        0x0ED, 0x0ED, 0x0ED, 0x0ED, 0x0ED, 0x0ED, 0x0EE, 0x0EE, 0x0EE, 0x0EE, 0x0EE, 0x0EE, 0x0EE,
1339        0x0EE, 0x0EF, 0x0EF, 0x0EF, 0x0EF, 0x0EF, 0x0EF, 0x0EF, 0x0EF, 0x0F0, 0x0F0, 0x0F0, 0x0F0,
1340        0x0F0, 0x0F0, 0x0F0, 0x0F0, 0x0F1, 0x0F1, 0x0F1, 0x0F1, 0x0F1, 0x0F1, 0x0F1, 0x0F1, 0x0F2,
1341        0x0F2, 0x0F2, 0x0F2, 0x0F2, 0x0F2, 0x0F2, 0x0F2, 0x0F3, 0x0F3, 0x0F3, 0x0F3, 0x0F3, 0x0F3,
1342        0x0F3, 0x0F3, 0x0F4, 0x0F4, 0x0F4, 0x0F4, 0x0F4, 0x0F4, 0x0F4, 0x0F4, 0x0F5, 0x0F5, 0x0F5,
1343        0x0F5, 0x0F5, 0x0F5, 0x0F5, 0x0F5, 0x0F6, 0x0F6, 0x0F6, 0x0F6, 0x0F6, 0x0F6, 0x0F6, 0x0F6,
1344        0x0F7, 0x0F7, 0x0F7, 0x0F7, 0x0F7, 0x0F7, 0x0F7, 0x0F7, 0x0F8, 0x0F8, 0x0F8, 0x0F8, 0x0F8,
1345        0x0F8, 0x0F8, 0x0F8, 0x0F9, 0x0F9, 0x0F9, 0x0F9, 0x0F9, 0x0F9, 0x0F9, 0x0F9, 0x0FA, 0x0FA,
1346        0x0FA, 0x0FA, 0x0FA, 0x0FA, 0x0FA, 0x0FA, 0x0FB, 0x0FB, 0x0FB, 0x0FB, 0x0FB, 0x0FB, 0x0FB,
1347        0x0FB, 0x0FC, 0x0FC, 0x0FC, 0x0FC, 0x0FC, 0x0FC, 0x0FC, 0x0FC, 0x0FD, 0x0FD, 0x0FD, 0x0FD,
1348        0x0FD, 0x0FD, 0x0FD, 0x0FD, 0x0FE, 0x0FE, 0x0FE, 0x0FE, 0x0FE, 0x0FE, 0x0FE, 0x0FE, 0x0FF,
1349        0x0FF, 0x0FF, 0x0FF, 0x0FF, 0x0FF, 0x0FF, 0x0FF, 0x100, 0x100, 0x100, 0x100, 0x100, 0x100,
1350        0x100, 0x100, 0x101, 0x101, 0x101, 0x101, 0x101, 0x101, 0x101, 0x101, 0x102, 0x102, 0x102,
1351        0x102, 0x102, 0x102, 0x102, 0x102, 0x103, 0x103, 0x103, 0x103, 0x103, 0x103, 0x103, 0x103,
1352        0x104, 0x104, 0x104, 0x104, 0x104, 0x104, 0x104, 0x104, 0x105, 0x105, 0x105, 0x105, 0x105,
1353        0x105, 0x105, 0x105, 0x106, 0x106, 0x106, 0x106, 0x106, 0x106, 0x106, 0x106, 0x107, 0x107,
1354        0x107, 0x107, 0x107, 0x107, 0x107, 0x107, 0x108, 0x108, 0x108, 0x108, 0x108, 0x108, 0x108,
1355        0x108, 0x109, 0x109, 0x109, 0x109, 0x109, 0x109, 0x109, 0x109, 0x10A, 0x10A, 0x10A, 0x10A,
1356        0x10A, 0x10A, 0x10A, 0x10A, 0x10B, 0x10B, 0x10B, 0x10B, 0x10B, 0x10B, 0x10B, 0x10B, 0x10C,
1357        0x10C, 0x10C, 0x10C, 0x10C, 0x10C, 0x10C, 0x10C, 0x10D, 0x10D, 0x10D, 0x10D, 0x10D, 0x10D,
1358        0x10D, 0x10D, 0x10E, 0x10E, 0x10E, 0x10E, 0x10E, 0x10E, 0x10E, 0x10E, 0x10F, 0x10F, 0x10F,
1359        0x10F, 0x10F, 0x10F, 0x10F, 0x10F, 0x110, 0x110, 0x110, 0x110, 0x110, 0x110, 0x110, 0x110,
1360        0x111, 0x111, 0x111, 0x111, 0x111, 0x111, 0x111, 0x111, 0x112, 0x112, 0x112, 0x112, 0x112,
1361        0x112, 0x112, 0x112, 0x113, 0x113, 0x113, 0x113, 0x113, 0x113, 0x113, 0x113, 0x114, 0x114,
1362        0x114, 0x114, 0x114, 0x114, 0x114, 0x114, 0x115, 0x115, 0x115, 0x115, 0x115, 0x115, 0x115,
1363        0x115, 0x116, 0x116, 0x116, 0x116, 0x116, 0x116, 0x116, 0x116, 0x117, 0x117, 0x117, 0x117,
1364        0x117, 0x117, 0x117, 0x117, 0x118, 0x118, 0x118, 0x118, 0x118, 0x118, 0x118, 0x118, 0x119,
1365        0x119, 0x119, 0x119, 0x119, 0x119, 0x119, 0x119, 0x11A, 0x11A, 0x11A, 0x11A, 0x11A, 0x11A,
1366        0x11A, 0x11A, 0x11B, 0x11B, 0x11B, 0x11B, 0x11B, 0x11B, 0x11B, 0x11B, 0x11C, 0x11C, 0x11C,
1367        0x11C, 0x11C, 0x11C, 0x11C, 0x11C, 0x11D, 0x11D, 0x11D, 0x11D, 0x11D, 0x11D, 0x11D, 0x11D,
1368        0x11E, 0x11E, 0x11E, 0x11E, 0x11E, 0x11E, 0x11E, 0x11E, 0x11F, 0x11F, 0x11F, 0x11F, 0x11F,
1369        0x11F, 0x11F, 0x11F, 0x120, 0x120, 0x120, 0x120, 0x120, 0x120, 0x120, 0x120, 0x121, 0x121,
1370        0x121, 0x121, 0x121, 0x121, 0x121, 0x121, 0x122, 0x122, 0x122, 0x122, 0x122, 0x122, 0x122,
1371        0x122, 0x123, 0x123, 0x123, 0x123, 0x123, 0x123, 0x123, 0x123, 0x124, 0x124, 0x124, 0x124,
1372        0x124, 0x124, 0x124, 0x124, 0x125, 0x125, 0x125, 0x125, 0x125, 0x125, 0x125, 0x125, 0x126,
1373        0x126, 0x126, 0x126, 0x126, 0x126, 0x126, 0x126, 0x127, 0x127, 0x127, 0x127, 0x127, 0x127,
1374        0x127, 0x127, 0x128, 0x128, 0x128, 0x128, 0x128, 0x128, 0x128, 0x128, 0x129, 0x129, 0x129,
1375        0x129, 0x129, 0x129, 0x129, 0x129, 0x12A, 0x12A, 0x12A, 0x12A, 0x12A, 0x12A, 0x12A, 0x12A,
1376        0x12B, 0x12B, 0x12B, 0x12B, 0x12B, 0x12B, 0x12B, 0x12B, 0x12C, 0x12C, 0x12C, 0x12C, 0x12C,
1377        0x12C, 0x12C, 0x12C, 0x12D, 0x12D, 0x12D, 0x12D, 0x12D, 0x12D, 0x12D, 0x12D, 0x12E, 0x12E,
1378        0x12E, 0x12E, 0x12E, 0x12E, 0x12E, 0x12E, 0x12F, 0x12F, 0x12F, 0x12F, 0x12F, 0x12F, 0x12F,
1379        0x12F, 0x130, 0x130, 0x130, 0x130, 0x130, 0x130, 0x130, 0x130, 0x131, 0x131, 0x131, 0x131,
1380        0x131, 0x131, 0x131, 0x131, 0x132, 0x132, 0x132, 0x132, 0x132, 0x132, 0x132, 0x132, 0x133,
1381        0x133, 0x133, 0x133, 0x133, 0x133, 0x133, 0x133, 0x134, 0x134, 0x134, 0x134, 0x134, 0x134,
1382        0x134, 0x134, 0x135, 0x135, 0x135, 0x135, 0x135, 0x135, 0x135, 0x135, 0x136, 0x136, 0x136,
1383        0x136, 0x136, 0x136, 0x136, 0x136, 0x137, 0x137, 0x137, 0x137, 0x137, 0x137, 0x137, 0x137,
1384        0x138, 0x138, 0x138, 0x138, 0x138, 0x138, 0x138, 0x138, 0x139, 0x139, 0x139, 0x139, 0x139,
1385        0x139, 0x139, 0x139, 0x13A, 0x13A, 0x13A, 0x13A, 0x13A, 0x13A, 0x13A, 0x13A, 0x13B, 0x13B,
1386        0x13B, 0x13B, 0x13B, 0x13B, 0x13B, 0x13B, 0x13C, 0x13C, 0x13C, 0x13C, 0x13C, 0x13C, 0x13C,
1387        0x13C, 0x13D, 0x13D, 0x13D, 0x13D, 0x13D, 0x13D, 0x13D, 0x13D, 0x13E, 0x13E, 0x13E, 0x13E,
1388        0x13E, 0x13E, 0x13E, 0x13E, 0x13F, 0x13F, 0x13F, 0x13F, 0x13F, 0x13F, 0x13F, 0x13F, 0x140,
1389        0x140, 0x140, 0x140, 0x140, 0x140, 0x140, 0x140, 0x141, 0x141, 0x141, 0x141, 0x141, 0x141,
1390        0x141, 0x141, 0x142, 0x142, 0x142, 0x142, 0x142, 0x142, 0x142, 0x142, 0x143, 0x143, 0x143,
1391        0x143, 0x143, 0x143, 0x143, 0x143, 0x144, 0x144, 0x144, 0x144, 0x144, 0x144, 0x144, 0x144,
1392        0x145, 0x145, 0x145, 0x145, 0x145, 0x145, 0x145, 0x145, 0x146, 0x146, 0x146, 0x146, 0x146,
1393        0x146, 0x146, 0x146, 0x147, 0x147, 0x147, 0x147, 0x147, 0x147, 0x147, 0x147, 0x148, 0x148,
1394        0x148, 0x148, 0x148, 0x148, 0x148, 0x148, 0x149, 0x149, 0x149, 0x149, 0x149, 0x149, 0x149,
1395        0x149, 0x14A, 0x14A, 0x14A, 0x14A, 0x14A, 0x14A, 0x14A, 0x14A, 0x14B, 0x14B, 0x14B, 0x14B,
1396        0x14B, 0x14B, 0x14B, 0x14B, 0x14C, 0x14C, 0x14C, 0x14C, 0x14C, 0x14C, 0x14C, 0x14C, 0x14D,
1397        0x14D, 0x14D, 0x14D, 0x14D, 0x14D, 0x14D, 0x14D, 0x14E, 0x14E, 0x14E, 0x14E, 0x14E, 0x14E,
1398        0x14E, 0x14E, 0x14F, 0x14F, 0x14F, 0x14F, 0x14F, 0x14F, 0x14F, 0x14F, 0x150, 0x150, 0x150,
1399        0x150, 0x150, 0x150, 0x150, 0x150, 0x151, 0x151, 0x151, 0x151, 0x151, 0x151, 0x151, 0x151,
1400        0x152, 0x152, 0x152, 0x152, 0x152, 0x152, 0x152, 0x152, 0x153, 0x153, 0x153, 0x153, 0x153,
1401        0x153, 0x153, 0x153, 0x154, 0x154, 0x154, 0x154, 0x154, 0x154, 0x154, 0x154, 0x155, 0x155,
1402        0x155, 0x155, 0x155, 0x155, 0x155, 0x155, 0x156, 0x156, 0x156, 0x156, 0x156, 0x156, 0x156,
1403        0x156, 0x157, 0x157, 0x157, 0x157, 0x157, 0x157, 0x157, 0x157, 0x158, 0x158, 0x158, 0x158,
1404        0x158, 0x158, 0x158, 0x158, 0x159, 0x159, 0x159, 0x159, 0x159, 0x159, 0x159, 0x159, 0x15A,
1405        0x15A, 0x15A, 0x15A, 0x15A, 0x15A, 0x15A, 0x15A, 0x15B, 0x15B, 0x15B, 0x15B, 0x15B, 0x15B,
1406        0x15B, 0x15B, 0x15C, 0x15C, 0x15C, 0x15C, 0x15C, 0x15C, 0x15C, 0x15C, 0x15D, 0x15D, 0x15D,
1407        0x15D, 0x15D, 0x15D, 0x15D, 0x15D, 0x15E, 0x15E, 0x15E, 0x15E, 0x15E, 0x15E, 0x15E, 0x15E,
1408        0x15F, 0x15F, 0x15F, 0x15F, 0x15F, 0x15F, 0x15F, 0x15F, 0x160, 0x160, 0x160, 0x160, 0x160,
1409        0x160, 0x160, 0x160, 0x161, 0x161, 0x161, 0x161, 0x161, 0x161, 0x161, 0x161, 0x162, 0x162,
1410        0x162, 0x162, 0x162, 0x162, 0x162, 0x162, 0x163, 0x163, 0x163, 0x163, 0x163, 0x163, 0x163,
1411        0x163, 0x164, 0x164, 0x164, 0x164, 0x164, 0x164, 0x164, 0x164, 0x165, 0x165, 0x165, 0x165,
1412        0x165, 0x165, 0x165, 0x165, 0x166, 0x166, 0x166, 0x166, 0x166, 0x166, 0x166, 0x166, 0x167,
1413        0x167, 0x167, 0x167, 0x167, 0x167, 0x167, 0x167, 0x168, 0x168, 0x168, 0x168, 0x168, 0x168,
1414        0x168, 0x168, 0x169, 0x169, 0x169, 0x169, 0x169, 0x169, 0x169, 0x169, 0x16A, 0x16A, 0x16A,
1415        0x16A, 0x16A, 0x16A, 0x16A, 0x16A, 0x16B, 0x16B, 0x16B, 0x16B, 0x16B, 0x16B, 0x16B, 0x16B,
1416        0x16C, 0x16C, 0x16C, 0x16C, 0x16C, 0x16C, 0x16C, 0x16C, 0x1C9, 0x1C9, 0x1C9, 0x1C9, 0x1C9,
1417        0x1C9, 0x1C9, 0x1C9, 0x1CA, 0x1CA, 0x1CA, 0x1CA, 0x1CA, 0x1CA, 0x1CA, 0x1CA, 0x1CB, 0x1CB,
1418        0x1CB, 0x1CB, 0x1CB, 0x1CB, 0x1CB, 0x1CB, 0x1CC, 0x1CC, 0x1CC, 0x1CC, 0x1CC, 0x1CC, 0x1CC,
1419        0x1CC, 0x1CD, 0x1CD, 0x1CD, 0x1CD, 0x1CD, 0x1CD, 0x1CD, 0x1CD, 0x1CD, 0x1CD, 0x1CE, 0x1CE,
1420        0x1CE, 0x1CE, 0x1CE, 0x1CE, 0x1CE, 0x1CE, 0x1CE, 0x1CE, 0x1CF, 0x1CF, 0x1CF, 0x1CF, 0x1CF,
1421        0x1CF, 0x1CF, 0x1CF, 0x1CF, 0x1CF, 0x1D0, 0x1D0, 0x1D0, 0x1D0, 0x1D0, 0x1D0, 0x1D0, 0x1D0,
1422        0x1D0, 0x1D0, 0x1D1, 0x1D1, 0x1D1, 0x1D1, 0x1D1, 0x1D1, 0x1D1, 0x1D1, 0x1D1, 0x1D1, 0x1D2,
1423        0x1D2, 0x1D2, 0x1D2, 0x1D2, 0x1D2, 0x1D2, 0x1D2, 0x1D2, 0x1D2, 0x1D3, 0x1D3, 0x1D3, 0x1D3,
1424        0x1D3, 0x1D3, 0x1D3, 0x1D3, 0x1D3, 0x1D3, 0x1D4, 0x1D4, 0x1D4, 0x1D4, 0x1D4, 0x1D4, 0x1D4,
1425        0x1D4, 0x1D4, 0x1D5, 0x1D5, 0x1D5, 0x1D5, 0x1D5, 0x1D5, 0x1D5, 0x1D5, 0x1D5, 0x1D6, 0x1D6,
1426        0x1D6, 0x1D6, 0x1D6, 0x1D6, 0x1D6, 0x1D6, 0x1D6, 0x1D6, 0x1D7, 0x1D7, 0x1D7, 0x1D7, 0x1D7,
1427        0x1D7, 0x1D7, 0x1D7, 0x1D7, 0x1D7, 0x1D8, 0x1D8, 0x1D8, 0x1D8, 0x1D8, 0x1D8, 0x1D8, 0x1D8,
1428        0x1D8, 0x1D8, 0x1D9, 0x1D9, 0x1D9, 0x1D9, 0x1D9, 0x1D9, 0x1D9, 0x1D9, 0x1D9, 0x1D9, 0x1DA,
1429        0x1DA, 0x1DA, 0x1DA, 0x1DA, 0x1DA, 0x1DA, 0x1DA, 0x1DA, 0x1DA, 0x1DB, 0x1DB, 0x1DB, 0x1DB,
1430        0x1DB, 0x1DB, 0x1DB, 0x1DB, 0x1DB, 0x1DB, 0x1DC, 0x1DC, 0x1DC, 0x1DC, 0x1DC, 0x1DC, 0x1DC,
1431        0x1DC, 0x1DC, 0x1DC, 0x1DD, 0x1DD, 0x1DD, 0x1DD, 0x1DD, 0x1DD, 0x1DD, 0x1DD, 0x1DE, 0x1DE,
1432        0x1DE, 0x1DE, 0x1DE, 0x1DE, 0x1DE, 0x1DE, 0x1DE, 0x1DE, 0x1DF, 0x1DF, 0x1DF, 0x1DF, 0x1DF,
1433        0x1DF, 0x1DF, 0x1DF, 0x1DF, 0x1DF, 0x1E0, 0x1E0, 0x1E0, 0x1E0, 0x1E0, 0x1E0, 0x1E0, 0x1E0,
1434        0x1E0, 0x1E0, 0x1E1, 0x1E1, 0x1E1, 0x1E1, 0x1E1, 0x1E1, 0x1E1, 0x1E1, 0x1E1, 0x1E1, 0x1E2,
1435        0x1E2, 0x1E2, 0x1E2, 0x1E2, 0x1E2, 0x1E2, 0x1E2, 0x1E2, 0x1E2, 0x1E3, 0x1E3, 0x1E3, 0x1E3,
1436        0x1E3, 0x1E3, 0x1E3, 0x1E3, 0x1E3, 0x1E3, 0x1E4, 0x1E4, 0x1E4, 0x1E4, 0x1E4, 0x1E4, 0x1E4,
1437        0x1E4, 0x1E4, 0x1E4, 0x1E5, 0x1E5, 0x1E5, 0x1E5, 0x1E5, 0x1E5, 0x1E5, 0x1E5, 0x1E5, 0x1E6,
1438        0x1E6, 0x1E6, 0x1E6, 0x1E6, 0x1E6, 0x1E6, 0x1E6, 0x1E6, 0x1E7, 0x1E7, 0x1E7, 0x1E7, 0x1E7,
1439        0x1E7, 0x1E7, 0x1E7, 0x1E7, 0x1E7, 0x1E8, 0x1E8, 0x1E8, 0x1E8, 0x1E8, 0x1E8, 0x1E8, 0x1E8,
1440        0x1E8, 0x1E8, 0x1E9, 0x1E9, 0x1E9, 0x1E9, 0x1E9, 0x1E9, 0x1E9, 0x1E9, 0x1E9, 0x1E9, 0x1EA,
1441        0x1EA, 0x1EA, 0x1EA, 0x1EA, 0x1EA, 0x1EA, 0x1EA, 0x1EA, 0x1EA, 0x1EB, 0x1EB, 0x1EB, 0x1EB,
1442        0x1EB, 0x1EB, 0x1EB, 0x1EB, 0x1EB, 0x1EB, 0x1EC, 0x1EC, 0x1EC, 0x1EC, 0x1EC, 0x1EC, 0x1EC,
1443        0x1EC, 0x1EC, 0x1EC, 0x1ED, 0x1ED, 0x1ED, 0x1ED, 0x1ED, 0x1ED, 0x1ED, 0x1ED, 0x1ED, 0x1ED,
1444        0x1EE, 0x1EE, 0x1EE, 0x1EE, 0x1EE, 0x1EE, 0x1EE, 0x1EE, 0x1EF, 0x1EF, 0x1EF, 0x1EF, 0x1EF,
1445        0x1EF, 0x1EF, 0x1EF, 0x1F0, 0x1F0, 0x1F0, 0x1F0, 0x1F0, 0x1F0, 0x1F0, 0x1F0, 0x1F1, 0x1F1,
1446        0x1F1, 0x1F1, 0x1F1, 0x1F1, 0x1F1, 0x1F1, 0x1F2, 0x1F2, 0x1F2, 0x1F2, 0x1F2, 0x1F2, 0x1F2,
1447        0x1F2, 0x1F3, 0x1F3, 0x1F3, 0x1F3, 0x1F3, 0x1F3, 0x1F3, 0x1F3, 0x1F4, 0x1F4, 0x1F4, 0x1F4,
1448        0x1F4, 0x1F4, 0x1F4, 0x1F4, 0x1F5, 0x1F5, 0x1F5, 0x1F5, 0x1F5, 0x1F5, 0x1F5, 0x1F5, 0x1F6,
1449        0x1F6, 0x1F6, 0x1F6, 0x1F6, 0x1F6, 0x1F6, 0x1F6, 0x1F7, 0x1F7, 0x1F7, 0x1F7, 0x1F7, 0x1F7,
1450        0x1F7, 0x1F7, 0x1F8, 0x1F8, 0x1F8, 0x1F8, 0x1F8, 0x1F8, 0x1F8, 0x1F8, 0x1F9, 0x1F9, 0x1F9,
1451        0x1F9, 0x1F9, 0x1F9, 0x1F9, 0x1F9, 0x1FA, 0x1FA, 0x1FA, 0x1FA, 0x1FA, 0x1FA, 0x1FA, 0x1FA,
1452        0x1FB, 0x1FB, 0x1FB, 0x1FB, 0x1FB, 0x1FB, 0x1FB, 0x1FB, 0x1FC, 0x1FC, 0x1FC, 0x1FC, 0x1FC,
1453        0x1FC, 0x1FC, 0x1FC, 0x1FD, 0x1FD, 0x1FD, 0x1FD, 0x1FD, 0x1FD, 0x1FD, 0x1FD, 0x1FE, 0x1FE,
1454        0x1FE, 0x1FE, 0x1FE, 0x1FE, 0x1FE, 0x1FE, 0x1FF, 0x1FF, 0x1FF, 0x1FF, 0x1FF, 0x1FF, 0x1FF,
1455        0x1FF,
1456    ];
1457
1458    h_counter_test(
1459        EXPECTED_PIXELS,
1460        EXPECTED_H,
1461        scanline_mclk_to_pixel_h40,
1462        pixel_to_internal_h_h40,
1463    );
1464}