Verzeichnisstruktur phpBB-3.1.0
- Veröffentlicht
- 27.10.2014
So funktioniert es
|
Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück |
Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis. |
|
(Beispiel Datei-Icons)
|
Auf das Icon klicken um den Quellcode anzuzeigen |
gd_wave.php
001 <?php
002 /**
003 *
004 * This file is part of the phpBB Forum Software package.
005 *
006 * @copyright (c) phpBB Limited <https://www.phpbb.com>
007 * @license GNU General Public License, version 2 (GPL-2.0)
008 *
009 * For full copyright and license information, please see
010 * the docs/CREDITS.txt file.
011 *
012 */
013
014 namespace phpbb\captcha;
015
016 /**
017 * Wave3D CAPTCHA
018 */
019 class gd_wave
020 {
021 var $width = 360;
022 var $height = 96;
023
024 function execute($code, $seed)
025 {
026 global $starttime;
027
028 // seed the random generator
029 mt_srand($seed);
030
031 // set height and width
032 $img_x = $this->width;
033 $img_y = $this->height;
034
035 // Generate image
036 $img = imagecreatetruecolor($img_x, $img_y);
037 $x_grid = mt_rand(6, 10);
038 $y_grid = mt_rand(6, 10);
039
040 // Ok, so lets cut to the chase. We could accurately represent this in 3d and
041 // do all the appropriate linear transforms. my questions is... why bother?
042 // The computational overhead is unnecessary when you consider the simple fact:
043 // we're not here to accurately represent a model, but to just show off some random-ish
044 // polygons
045
046 // Conceive of 3 spaces.
047 // 1) planar-space (discrete "pixel" grid)
048 // 2) 3-space. (planar-space with z/height aspect)
049 // 3) image space (pixels on the screen)
050 // resolution of the planar-space we're embedding the text code in
051 $plane_x = 100;
052 $plane_y = 30;
053
054 $subdivision_factor = 3;
055
056 // $box is the 4 points in img_space that correspond to the corners of the plane in 3-space
057 $box = array(
058 'upper_left' => array(
059 'x' => mt_rand(5, 15),
060 'y' => mt_rand(10, 15)
061 ),
062 'upper_right' => array(
063 'x' => mt_rand($img_x - 35, $img_x - 19),
064 'y' => mt_rand(10, 17)
065 ),
066 'lower_left' => array(
067 'x' => mt_rand($img_x - 45, $img_x - 5),
068 'y' => mt_rand($img_y - 15, $img_y - 0),
069 ),
070 );
071
072 $box['lower_right'] = array(
073 'x' => $box['lower_left']['x'] + $box['upper_left']['x'] - $box['upper_right']['x'],
074 'y' => $box['lower_left']['y'] + $box['upper_left']['y'] - $box['upper_right']['y'],
075 );
076
077 // TODO
078 $background = imagecolorallocate($img, mt_rand(155, 255), mt_rand(155, 255), mt_rand(155, 255));
079 imagefill($img, 0, 0, $background);
080 $black = imagecolorallocate($img, 0, 0, 0);
081
082 $random = array();
083 $fontcolors = array();
084
085 for ($i = 0; $i < 15; ++$i)
086 {
087 $random[$i] = imagecolorallocate($img, mt_rand(120, 255), mt_rand(120, 255), mt_rand(120, 255));
088 }
089
090 $fontcolors[0] = imagecolorallocate($img, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120));
091
092 $colors = array();
093
094 $minr = mt_rand(20, 30);
095 $ming = mt_rand(20, 30);
096 $minb = mt_rand(20, 30);
097
098 $maxr = mt_rand(150, 230);
099 $maxg = mt_rand(150, 230);
100 $maxb = mt_rand(150, 230);
101
102 for ($i = -30; $i <= 30; ++$i)
103 {
104 $coeff1 = ($i + 12) / 45;
105 $coeff2 = 1 - $coeff1;
106 $colors[$i] = imagecolorallocate($img, ($coeff2 * $maxr) + ($coeff1 * $minr), ($coeff2 * $maxg) + ($coeff1 * $ming), ($coeff2 * $maxb) + ($coeff1 * $minb));
107 }
108
109 // $img_buffer is the last row of 3-space positions (converted to img-space), cached
110 // (using this means we don't need to recalculate all 4 positions for each new polygon,
111 // merely the newest point that we're adding, which is then cached.
112 $img_buffer = array(array(), array());
113
114 // In image-space, the x- and y-offset necessary to move one unit in the x-direction in planar-space
115 $dxx = ($box['upper_right']['x'] - $box['upper_left']['x']) / ($subdivision_factor * $plane_x);
116 $dxy = ($box['upper_right']['y'] - $box['upper_left']['y']) / ($subdivision_factor * $plane_x);
117
118 // In image-space, the x- and y-offset necessary to move one unit in the y-direction in planar-space
119 $dyx = ($box['lower_right']['x'] - $box['upper_left']['x']) / ($subdivision_factor * $plane_y);
120 $dyy = ($box['lower_right']['y'] - $box['upper_left']['y']) / ($subdivision_factor * $plane_y);
121
122 // Initial captcha-letter offset in planar-space
123 $plane_offset_x = mt_rand(3, 8);
124 $plane_offset_y = mt_rand( 12, 15);
125
126 // character map
127 $map = $this->captcha_bitmaps();
128
129 // matrix
130 $plane = array();
131
132 // for each character, we'll silkscreen it into our boolean pixel plane
133 for ($c = 0, $code_num = strlen($code); $c < $code_num; ++$c)
134 {
135 $letter = $code[$c];
136
137 for ($x = $map['width'] - 1; $x >= 0; --$x)
138 {
139 for ($y = $map['height'] - 1; $y >= 0; --$y)
140 {
141 if ($map['data'][$letter][$y][$x])
142 {
143 $plane[$y + $plane_offset_y + (($c & 1) ? 1 : -1)][$x + $plane_offset_x] = true;
144 }
145 }
146 }
147 $plane_offset_x += 11;
148 }
149
150 // calculate our first buffer, we can't actually draw polys with these yet
151 // img_pos_prev == screen x,y location to our immediate left.
152 // img_pos_cur == current screen x,y location
153 // we calculate screen position of our
154 // current cell based on the difference from the previous cell
155 // rather than recalculating from absolute coordinates
156 // What we cache into the $img_buffer contains the raised text coordinates.
157 $img_pos_prev = $img_buffer[0][0] = array($box['upper_left']['x'], $box['upper_left']['y']);
158 $cur_height = $prev_height = $this->wave_height(0, 0, $subdivision_factor);
159 $full_x = $plane_x * $subdivision_factor;
160 $full_y = $plane_y * $subdivision_factor;
161
162 for ($x = 1; $x <= $full_x; ++$x)
163 {
164 $cur_height = $this->wave_height($x, 0, $subdivision_factor);
165 $offset = $cur_height - $prev_height;
166 $img_pos_cur = array($img_pos_prev[0] + $dxx, $img_pos_prev[1] + $dxy + $offset);
167
168 $img_buffer[0][$x] = $img_pos_cur;
169 $img_pos_prev = $img_pos_cur;
170 $prev_height = $cur_height;
171 }
172
173 for ($y = 1; $y <= $full_y; ++$y)
174 {
175 // swap buffers
176 $buffer_cur = $y & 1;
177 $buffer_prev = 1 - $buffer_cur;
178
179 $prev_height = $this->wave_height(0, $y, $subdivision_factor);
180 $offset = $prev_height - $this->wave_height(0, $y - 1, $subdivision_factor);
181 $img_pos_cur = array($img_buffer[$buffer_prev][0][0] + $dyx, min($img_buffer[$buffer_prev][0][1] + $dyy + $offset, $img_y - 1));
182
183 // make sure we don't try to write off the page
184 $img_pos_prev = $img_pos_cur;
185
186 $img_buffer[$buffer_cur][0] = $img_pos_cur;
187
188 for ($x = 1; $x <= $full_x; ++$x)
189 {
190 $cur_height = $this->wave_height($x, $y, $subdivision_factor) + $this->grid_height($x, $y, $x_grid, $y_grid, 1);
191
192 // height is a z-factor, not a y-factor
193 $offset = $cur_height - $prev_height;
194 $img_pos_cur = array($img_pos_prev[0] + $dxx, $img_pos_prev[1] + $dxy + $offset);
195
196 // height is float, index it to an int, get closest color
197 $color = $colors[intval($cur_height)];
198 $img_pos_prev = $img_pos_cur;
199 $prev_height = $cur_height;
200
201 $y_index_old = intval(($y - 1) / $subdivision_factor);
202 $y_index_new = intval($y / $subdivision_factor);
203 $x_index_old = intval(($x - 1) / $subdivision_factor);
204 $x_index_new = intval($x / $subdivision_factor);
205
206 if (!empty($plane[$y_index_new][$x_index_new]))
207 {
208 $img_pos_cur[1] += $this->wave_height($x, $y, $subdivision_factor, 1) - 30 - $cur_height;
209 $color = $colors[20];
210 }
211 $img_pos_cur[1] = min($img_pos_cur[1], $img_y - 1);
212 $img_buffer[$buffer_cur][$x] = $img_pos_cur;
213
214 // Smooth the edges as much as possible by having not more than one low<->high traingle per square
215 // Otherwise, just
216 $diag_down = (empty($plane[$y_index_old][$x_index_old]) == empty($plane[$y_index_new][$x_index_new]));
217 $diag_up = (empty($plane[$y_index_old][$x_index_new]) == empty($plane[$y_index_new][$x_index_old]));
218
219 // natural switching
220 $mode = ($x + $y) & 1;
221
222 // override if it requires it
223 if ($diag_down != $diag_up)
224 {
225 $mode = $diag_up;
226 }
227
228 if ($mode)
229 {
230 // +-/ /
231 // 1 |/ 2 /|
232 // / /-+
233 $poly1 = array_merge($img_buffer[$buffer_cur][$x - 1], $img_buffer[$buffer_prev][$x - 1], $img_buffer[$buffer_prev][$x]);
234 $poly2 = array_merge($img_buffer[$buffer_cur][$x - 1], $img_buffer[$buffer_cur][$x], $img_buffer[$buffer_prev][$x]);
235 }
236 else
237 {
238 // \ \-+
239 // 1 |\ 2 \|
240 // +-\ \
241 $poly1 = array_merge($img_buffer[$buffer_cur][$x - 1], $img_buffer[$buffer_prev][$x - 1], $img_buffer[$buffer_cur][$x]);
242 $poly2 = array_merge($img_buffer[$buffer_prev][$x - 1], $img_buffer[$buffer_prev][$x], $img_buffer[$buffer_cur][$x]);
243 }
244
245 imagefilledpolygon($img, $poly1, 3, $color);
246 imagefilledpolygon($img, $poly2, 3, $color);
247 }
248 }
249
250 // Output image
251 header('Content-Type: image/png');
252 header('Cache-control: no-cache, no-store');
253 //$mtime = explode(' ', microtime());
254 //$totaltime = $mtime[0] + $mtime[1] - $starttime;
255
256 //echo $totaltime . "<br />\n";
257 //echo memory_get_usage() - $tmp;
258 imagepng($img);
259 imagedestroy($img);
260 }
261
262 function wave_height($x, $y, $factor = 1, $tweak = 0.7)
263 {
264 // stretch the wave. TODO: pretty it up
265 $x = $x/5 + 180;
266 $y = $y/4;
267 return ((sin($x / (3 * $factor)) + sin($y / (3 * $factor))) * 10 * $tweak);
268 }
269
270 function grid_height($x, $y, $x_grid, $y_grid, $factor = 1)
271 {
272 return ((!($x % ($x_grid * $factor)) || !($y % ($y_grid * $factor))) ? 3 : 0);
273 }
274
275 function captcha_bitmaps()
276 {
277 return array(
278 'width' => 9,
279 'height' => 13,
280 'data' => array(
281 'A' => array(
282 array(0,0,1,1,1,1,0,0,0),
283 array(0,1,0,0,0,0,1,0,0),
284 array(1,0,0,0,0,0,0,1,0),
285 array(1,0,0,0,0,0,0,1,0),
286 array(1,0,0,0,0,0,0,1,0),
287 array(1,0,0,0,0,0,0,1,0),
288 array(1,0,0,0,0,0,0,1,0),
289 array(1,1,1,1,1,1,1,1,0),
290 array(1,0,0,0,0,0,0,1,0),
291 array(1,0,0,0,0,0,0,1,0),
292 array(1,0,0,0,0,0,0,1,0),
293 array(1,0,0,0,0,0,0,1,0),
294 array(1,0,0,0,0,0,0,1,0),
295 array(0,0,0,0,0,0,0,0,0),
296 ),
297 'B' => array(
298 array(1,1,1,1,1,1,0,0,0),
299 array(1,0,0,0,0,0,1,0,0),
300 array(1,0,0,0,0,0,0,1,0),
301 array(1,0,0,0,0,0,0,1,0),
302 array(1,0,0,0,0,0,0,1,0),
303 array(1,0,0,0,0,0,1,0,0),
304 array(1,1,1,1,1,1,0,0,0),
305 array(1,0,0,0,0,0,1,0,0),
306 array(1,0,0,0,0,0,0,1,0),
307 array(1,0,0,0,0,0,0,1,0),
308 array(1,0,0,0,0,0,0,1,0),
309 array(1,0,0,0,0,0,1,0,0),
310 array(1,1,1,1,1,1,0,0,0),
311 array(0,0,0,0,0,0,0,0,0),
312 ),
313 'C' => array(
314 array(0,0,1,1,1,1,1,0,0),
315 array(0,1,0,0,0,0,0,1,0),
316 array(1,0,0,0,0,0,0,0,1),
317 array(1,0,0,0,0,0,0,0,0),
318 array(1,0,0,0,0,0,0,0,0),
319 array(1,0,0,0,0,0,0,0,0),
320 array(1,0,0,0,0,0,0,0,0),
321 array(1,0,0,0,0,0,0,0,0),
322 array(1,0,0,0,0,0,0,0,0),
323 array(1,0,0,0,0,0,0,0,1),
324 array(0,1,0,0,0,0,0,1,0),
325 array(0,0,1,1,1,1,1,0,0),
326 array(0,0,0,0,0,0,0,0,0),
327 array(0,0,0,0,0,0,0,0,0),
328 ),
329 'D' => array(
330 array(1,1,1,1,1,1,1,0,0),
331 array(1,0,0,0,0,0,0,1,0),
332 array(1,0,0,0,0,0,0,0,1),
333 array(1,0,0,0,0,0,0,0,1),
334 array(1,0,0,0,0,0,0,0,1),
335 array(1,0,0,0,0,0,0,0,1),
336 array(1,0,0,0,0,0,0,0,1),
337 array(1,0,0,0,0,0,0,0,1),
338 array(1,0,0,0,0,0,0,0,1),
339 array(1,0,0,0,0,0,0,1,0),
340 array(1,1,1,1,1,1,1,0,0),
341 array(0,0,0,0,0,0,0,0,0),
342 array(0,0,0,0,0,0,0,0,0),
343 array(0,0,0,0,0,0,0,0,0),
344 ),
345 'E' => array(
346 array(0,0,1,1,1,1,1,1,1),
347 array(0,1,0,0,0,0,0,0,0),
348 array(1,0,0,0,0,0,0,0,0),
349 array(1,0,0,0,0,0,0,0,0),
350 array(1,0,0,0,0,0,0,0,0),
351 array(1,1,1,1,1,1,1,0,0),
352 array(1,0,0,0,0,0,0,0,0),
353 array(1,0,0,0,0,0,0,0,0),
354 array(1,0,0,0,0,0,0,0,0),
355 array(0,1,0,0,0,0,0,0,0),
356 array(0,0,1,1,1,1,1,1,1),
357 array(0,0,0,0,0,0,0,0,0),
358 array(0,0,0,0,0,0,0,0,0),
359 array(0,0,0,0,0,0,0,0,0),
360 ),
361 'F' => array(
362 array(0,0,1,1,1,1,1,1,0),
363 array(0,1,0,0,0,0,0,0,0),
364 array(1,0,0,0,0,0,0,0,0),
365 array(1,0,0,0,0,0,0,0,0),
366 array(1,0,0,0,0,0,0,0,0),
367 array(1,1,1,1,1,1,0,0,0),
368 array(1,0,0,0,0,0,0,0,0),
369 array(1,0,0,0,0,0,0,0,0),
370 array(1,0,0,0,0,0,0,0,0),
371 array(1,0,0,0,0,0,0,0,0),
372 array(1,0,0,0,0,0,0,0,0),
373 array(1,0,0,0,0,0,0,0,0),
374 array(0,0,0,0,0,0,0,0,0),
375 array(0,0,0,0,0,0,0,0,0),
376 ),
377 'G' => array(
378 array(0,0,1,1,1,1,1,0,0),
379 array(0,1,0,0,0,0,0,1,0),
380 array(1,0,0,0,0,0,0,0,1),
381 array(1,0,0,0,0,0,0,0,1),
382 array(1,0,0,0,0,0,0,0,0),
383 array(1,0,0,0,0,0,0,0,0),
384 array(1,0,0,0,0,0,0,0,0),
385 array(1,0,0,0,0,0,0,1,1),
386 array(1,0,0,0,0,0,0,0,1),
387 array(1,0,0,0,0,0,0,0,1),
388 array(0,1,0,0,0,0,0,1,0),
389 array(0,0,1,1,1,1,1,0,0),
390 array(0,0,0,0,0,0,0,0,0),
391 array(0,0,0,0,0,0,0,0,0),
392 ),
393 'H' => array(
394 array(1,0,0,0,0,0,1,0,0),
395 array(1,0,0,0,0,0,1,0,0),
396 array(1,0,0,0,0,0,1,0,0),
397 array(1,0,0,0,0,0,1,0,0),
398 array(1,0,0,0,0,0,1,0,0),
399 array(1,1,1,1,1,1,1,0,0),
400 array(1,0,0,0,0,0,1,0,0),
401 array(1,0,0,0,0,0,1,0,0),
402 array(1,0,0,0,0,0,1,0,0),
403 array(1,0,0,0,0,0,1,0,0),
404 array(1,0,0,0,0,0,1,0,0),
405 array(0,0,0,0,0,0,0,0,0),
406 array(0,0,0,0,0,0,0,0,0),
407 array(0,0,0,0,0,0,0,0,0),
408 ),
409 'I' => array(
410 array(0,1,1,1,1,1,1,1,0),
411 array(0,0,0,0,1,0,0,0,0),
412 array(0,0,0,0,1,0,0,0,0),
413 array(0,0,0,0,1,0,0,0,0),
414 array(0,0,0,0,1,0,0,0,0),
415 array(0,0,0,0,1,0,0,0,0),
416 array(0,0,0,0,1,0,0,0,0),
417 array(0,0,0,0,1,0,0,0,0),
418 array(0,0,0,0,1,0,0,0,0),
419 array(0,1,1,1,1,1,1,1,0),
420 array(0,0,0,0,0,0,0,0,0),
421 array(0,0,0,0,0,0,0,0,0),
422 array(0,0,0,0,0,0,0,0,0),
423 array(0,0,0,0,0,0,0,0,0),
424 ),
425 'J' => array(
426 array(0,0,0,0,0,0,1,1,1),
427 array(0,0,0,0,0,0,0,0,1),
428 array(0,0,0,0,0,0,0,0,1),
429 array(0,0,0,0,0,0,0,0,1),
430 array(0,0,0,0,0,0,0,0,1),
431 array(0,0,0,0,0,0,0,0,1),
432 array(0,0,0,0,0,0,0,0,1),
433 array(0,1,0,0,0,0,0,0,1),
434 array(0,1,0,0,0,0,0,0,1),
435 array(0,0,1,0,0,0,0,1,0),
436 array(0,0,0,1,1,1,1,0,0),
437 array(0,0,0,0,0,0,0,0,0),
438 array(0,0,0,0,0,0,0,0,0),
439 array(0,0,0,0,0,0,0,0,0),
440 ),
441 'K' => array(
442 array(1,0,0,0,0,0,1,0,0),
443 array(1,0,0,0,0,1,0,0,0),
444 array(1,0,0,0,1,0,0,0,0),
445 array(1,0,0,1,0,0,0,0,0),
446 array(1,0,1,0,0,0,0,0,0),
447 array(1,1,0,0,0,0,0,0,0),
448 array(1,0,1,0,0,0,0,0,0),
449 array(1,0,0,1,0,0,0,0,0),
450 array(1,0,0,0,1,0,0,0,0),
451 array(1,0,0,0,0,1,0,0,0),
452 array(1,0,0,0,0,0,1,0,0),
453 array(0,0,0,0,0,0,0,0,0),
454 array(0,0,0,0,0,0,0,0,0),
455 array(0,0,0,0,0,0,0,0,0),
456 ),
457 'L' => array(
458 array(1,0,0,0,0,0,0,0,0),
459 array(1,0,0,0,0,0,0,0,0),
460 array(1,0,0,0,0,0,0,0,0),
461 array(1,0,0,0,0,0,0,0,0),
462 array(1,0,0,0,0,0,0,0,0),
463 array(1,0,0,0,0,0,0,0,0),
464 array(1,0,0,0,0,0,0,0,0),
465 array(1,0,0,0,0,0,0,0,0),
466 array(1,0,0,0,0,0,0,0,0),
467 array(0,1,0,0,0,0,0,0,0),
468 array(0,0,1,1,1,1,0,0,0),
469 array(0,0,0,0,0,0,0,0,0),
470 array(0,0,0,0,0,0,0,0,0),
471 array(0,0,0,0,0,0,0,0,0),
472 ),
473 'M' => array(
474 array(0,1,0,0,0,0,0,1,0),
475 array(0,1,1,0,0,0,1,1,0),
476 array(0,1,0,1,0,1,0,1,0),
477 array(0,1,0,0,1,0,0,1,0),
478 array(0,1,0,0,0,0,0,1,0),
479 array(0,1,0,0,0,0,0,1,0),
480 array(0,1,0,0,0,0,0,1,0),
481 array(0,1,0,0,0,0,0,1,0),
482 array(0,1,0,0,0,0,0,1,0),
483 array(0,0,0,0,0,0,0,0,0),
484 array(0,0,0,0,0,0,0,0,0),
485 array(0,0,0,0,0,0,0,0,0),
486 array(0,0,0,0,0,0,0,0,0),
487 array(0,0,0,0,0,0,0,0,0),
488 ),
489 'N' => array(
490 array(1,0,0,0,0,0,0,0,1),
491 array(1,1,0,0,0,0,0,0,1),
492 array(1,0,1,0,0,0,0,0,1),
493 array(1,0,0,1,0,0,0,0,1),
494 array(1,0,0,0,1,0,0,0,1),
495 array(1,0,0,0,0,1,0,0,1),
496 array(1,0,0,0,0,0,1,0,1),
497 array(1,0,0,0,0,0,0,1,1),
498 array(1,0,0,0,0,0,0,0,1),
499 array(0,0,0,0,0,0,0,0,0),
500 array(0,0,0,0,0,0,0,0,0),
501 array(0,0,0,0,0,0,0,0,0),
502 array(0,0,0,0,0,0,0,0,0),
503 array(0,0,0,0,0,0,0,0,0),
504 ),
505 'O' => array(
506 array(0,0,0,1,1,1,0,0,0),
507 array(0,0,1,0,0,0,1,0,0),
508 array(0,1,0,0,0,0,0,1,0),
509 array(1,0,0,0,0,0,0,0,1),
510 array(1,0,0,0,0,0,0,0,1),
511 array(1,0,0,0,0,0,0,0,1),
512 array(1,0,0,0,0,0,0,0,1),
513 array(1,0,0,0,0,0,0,0,1),
514 array(0,1,0,0,0,0,0,1,0),
515 array(0,0,1,0,0,0,1,0,0),
516 array(0,0,0,1,1,1,0,0,0),
517 array(0,0,0,0,0,0,0,0,0),
518 array(0,0,0,0,0,0,0,0,0),
519 array(0,0,0,0,0,0,0,0,0),
520 ),
521 'P' => array(
522 array(1,1,1,1,1,1,0,0,0),
523 array(1,0,0,0,0,0,1,0,0),
524 array(1,0,0,0,0,0,0,1,0),
525 array(1,0,0,0,0,0,0,1,0),
526 array(1,0,0,0,0,0,0,1,0),
527 array(1,0,0,0,0,0,0,1,0),
528 array(1,0,0,0,0,0,1,0,0),
529 array(1,1,1,1,1,1,0,0,0),
530 array(1,0,0,0,0,0,0,0,0),
531 array(1,0,0,0,0,0,0,0,0),
532 array(1,0,0,0,0,0,0,0,0),
533 array(1,0,0,0,0,0,0,0,0),
534 array(1,0,0,0,0,0,0,0,0),
535 array(0,0,0,0,0,0,0,0,0),
536 ),
537 'Q' => array(
538 array(0,0,1,1,1,1,0,0,0),
539 array(0,1,0,0,0,0,1,0,0),
540 array(1,0,0,0,0,0,0,1,0),
541 array(1,0,0,0,0,0,0,1,0),
542 array(1,0,0,0,0,0,0,1,0),
543 array(1,0,0,0,0,0,0,1,0),
544 array(1,0,0,0,1,0,0,1,0),
545 array(1,0,0,0,0,1,0,1,0),
546 array(0,1,0,0,0,0,1,0,0),
547 array(0,0,1,1,1,1,0,1,0),
548 array(0,0,0,0,0,0,0,0,1),
549 array(0,0,0,0,0,0,0,0,0),
550 array(0,0,0,0,0,0,0,0,0),
551 array(0,0,0,0,0,0,0,0,0),
552 ),
553 'R' => array(
554 array(1,1,1,1,1,1,0,0,0),
555 array(1,0,0,0,0,0,1,0,0),
556 array(1,0,0,0,0,0,0,1,0),
557 array(1,0,0,0,0,0,0,1,0),
558 array(1,0,0,0,0,0,0,1,0),
559 array(1,0,0,0,0,0,1,0,0),
560 array(1,1,1,1,1,1,0,0,0),
561 array(1,0,1,0,0,0,0,0,0),
562 array(1,0,0,1,0,0,0,0,0),
563 array(1,0,0,0,1,0,0,0,0),
564 array(1,0,0,0,0,1,0,0,0),
565 array(1,0,0,0,0,0,1,0,0),
566 array(0,0,0,0,0,0,0,0,0),
567 array(0,0,0,0,0,0,0,0,0),
568 ),
569 'S' => array(
570 array(0,0,1,1,1,1,1,1,1),
571 array(0,1,0,0,0,0,0,0,0),
572 array(1,0,0,0,0,0,0,0,0),
573 array(1,0,0,0,0,0,0,0,0),
574 array(1,0,0,0,0,0,0,0,0),
575 array(0,1,0,0,0,0,0,0,0),
576 array(0,0,1,1,1,1,1,0,0),
577 array(0,0,0,0,0,0,0,1,0),
578 array(0,0,0,0,0,0,0,0,1),
579 array(0,0,0,0,0,0,0,0,1),
580 array(0,0,0,0,0,0,0,1,0),
581 array(1,1,1,1,1,1,1,0,0),
582 array(0,0,0,0,0,0,0,0,0),
583 array(0,0,0,0,0,0,0,0,0),
584 ),
585 'T' => array(
586 array(1,1,1,1,1,1,1,1,1),
587 array(0,0,0,0,1,0,0,0,0),
588 array(0,0,0,0,1,0,0,0,0),
589 array(0,0,0,0,1,0,0,0,0),
590 array(0,0,0,0,1,0,0,0,0),
591 array(0,0,0,0,1,0,0,0,0),
592 array(0,0,0,0,1,0,0,0,0),
593 array(0,0,0,0,1,0,0,0,0),
594 array(0,0,0,0,1,0,0,0,0),
595 array(0,0,0,0,1,0,0,0,0),
596 array(0,0,0,0,1,0,0,0,0),
597 array(0,0,0,0,0,0,0,0,0),
598 array(0,0,0,0,0,0,0,0,0),
599 array(0,0,0,0,0,0,0,0,0),
600 ),
601 'U' => array(
602 array(1,0,0,0,0,0,0,0,1),
603 array(1,0,0,0,0,0,0,0,1),
604 array(1,0,0,0,0,0,0,0,1),
605 array(1,0,0,0,0,0,0,0,1),
606 array(1,0,0,0,0,0,0,0,1),
607 array(1,0,0,0,0,0,0,0,1),
608 array(1,0,0,0,0,0,0,0,1),
609 array(1,0,0,0,0,0,0,0,1),
610 array(1,0,0,0,0,0,0,0,1),
611 array(0,1,0,0,0,0,0,1,0),
612 array(0,0,1,1,1,1,1,0,0),
613 array(0,0,0,0,0,0,0,0,0),
614 array(0,0,0,0,0,0,0,0,0),
615 array(0,0,0,0,0,0,0,0,0),
616 ),
617 'V' => array(
618 array(1,0,0,0,0,0,0,0,1),
619 array(1,0,0,0,0,0,0,0,1),
620 array(1,0,0,0,0,0,0,0,1),
621 array(1,0,0,0,0,0,0,0,1),
622 array(1,0,0,0,0,0,0,0,1),
623 array(1,0,0,0,0,0,0,0,1),
624 array(1,0,0,0,0,0,0,0,1),
625 array(0,1,0,0,0,0,0,1,0),
626 array(0,0,1,0,0,0,1,0,0),
627 array(0,0,0,1,0,1,0,0,0),
628 array(0,0,0,0,1,0,0,0,0),
629 array(0,0,0,0,0,0,0,0,0),
630 array(0,0,0,0,0,0,0,0,0),
631 array(0,0,0,0,0,0,0,0,0),
632 ),
633 'W' => array(
634 array(1,0,0,0,0,0,0,0,1),
635 array(1,0,0,0,0,0,0,0,1),
636 array(1,0,0,0,0,0,0,0,1),
637 array(1,0,0,0,0,0,0,0,1),
638 array(1,0,0,0,1,0,0,0,1),
639 array(1,0,0,1,0,1,0,0,1),
640 array(1,0,1,0,0,0,1,0,1),
641 array(1,1,0,0,0,0,0,1,1),
642 array(1,0,0,0,0,0,0,0,1),
643 array(0,0,0,0,0,0,0,0,0),
644 array(0,0,0,0,0,0,0,0,0),
645 array(0,0,0,0,0,0,0,0,0),
646 array(0,0,0,0,0,0,0,0,0),
647 array(0,0,0,0,0,0,0,0,0),
648 ),
649 'X' => array(
650 array(1,0,0,0,0,0,0,0,1),
651 array(1,0,0,0,0,0,0,0,1),
652 array(0,1,0,0,0,0,0,1,0),
653 array(0,0,1,0,0,0,1,0,0),
654 array(0,0,0,1,0,1,0,0,0),
655 array(0,0,0,0,1,0,0,0,0),
656 array(0,0,0,1,0,1,0,0,0),
657 array(0,0,1,0,0,0,1,0,0),
658 array(0,1,0,0,0,0,0,1,0),
659 array(1,0,0,0,0,0,0,0,1),
660 array(1,0,0,0,0,0,0,0,1),
661 array(0,0,0,0,0,0,0,0,0),
662 array(0,0,0,0,0,0,0,0,0),
663 array(0,0,0,0,0,0,0,0,0),
664 ),
665 'Y' => array(
666 array(1,0,0,0,0,0,0,0,1),
667 array(1,0,0,0,0,0,0,0,1),
668 array(1,0,0,0,0,0,0,0,1),
669 array(0,1,0,0,0,0,0,1,0),
670 array(0,0,1,0,0,0,1,0,0),
671 array(0,0,0,1,0,1,0,0,0),
672 array(0,0,0,0,1,0,0,0,0),
673 array(0,0,0,0,1,0,0,0,0),
674 array(0,0,0,0,1,0,0,0,0),
675 array(0,0,0,0,1,0,0,0,0),
676 array(0,0,0,0,1,0,0,0,0),
677 array(0,0,0,0,0,0,0,0,0),
678 array(0,0,0,0,0,0,0,0,0),
679 array(0,0,0,0,0,0,0,0,0),
680 ),
681 'Z' => array(
682 array(1,1,1,1,1,1,1,1,1),
683 array(1,0,0,0,0,0,0,0,1),
684 array(0,0,0,0,0,0,0,1,0),
685 array(0,0,0,0,0,0,1,0,0),
686 array(0,0,0,0,0,1,0,0,0),
687 array(0,0,0,0,1,0,0,0,0),
688 array(0,0,0,1,0,0,0,0,0),
689 array(0,0,1,0,0,0,0,0,0),
690 array(0,1,0,0,0,0,0,0,0),
691 array(1,0,0,0,0,0,0,0,1),
692 array(1,1,1,1,1,1,1,1,1),
693 array(0,0,0,0,0,0,0,0,0),
694 array(0,0,0,0,0,0,0,0,0),
695 array(0,0,0,0,0,0,0,0,0),
696 ),
697 '1' => array(
698 array(0,0,0,0,1,0,0,0,0),
699 array(0,0,0,1,1,0,0,0,0),
700 array(0,0,1,0,1,0,0,0,0),
701 array(0,1,0,0,1,0,0,0,0),
702 array(0,0,0,0,1,0,0,0,0),
703 array(0,0,0,0,1,0,0,0,0),
704 array(0,0,0,0,1,0,0,0,0),
705 array(0,0,0,0,1,0,0,0,0),
706 array(0,0,0,0,1,0,0,0,0),
707 array(0,0,0,0,1,0,0,0,0),
708 array(0,0,0,0,1,0,0,0,0),
709 array(0,1,1,1,1,1,1,1,0),
710 array(0,0,0,0,0,0,0,0,0),
711 array(0,0,0,0,0,0,0,0,0),
712 ),
713 '2' => array(
714 array(0,0,0,1,1,1,0,0,0),
715 array(0,0,1,0,0,0,1,0,0),
716 array(0,1,0,0,0,0,0,1,0),
717 array(0,0,0,0,0,0,0,0,1),
718 array(0,0,0,0,0,0,0,0,1),
719 array(0,0,0,0,0,0,0,0,1),
720 array(0,0,0,0,0,0,0,1,0),
721 array(0,0,0,0,0,0,1,0,0),
722 array(0,0,0,0,0,1,0,0,0),
723 array(0,0,0,0,1,0,0,0,0),
724 array(0,0,0,1,0,0,0,0,0),
725 array(0,0,1,0,0,0,0,0,0),
726 array(0,1,1,1,1,1,1,1,1),
727 array(0,0,0,0,0,0,0,0,0),
728 ),
729 '3' => array(
730 array(0,0,0,1,1,1,1,0,0),
731 array(0,0,1,0,0,0,0,1,0),
732 array(0,1,0,0,0,0,0,0,1),
733 array(0,0,0,0,0,0,0,0,1),
734 array(0,0,0,0,0,0,0,0,1),
735 array(0,0,0,0,0,0,0,1,0),
736 array(0,0,0,0,0,1,1,0,0),
737 array(0,0,0,0,0,0,0,1,0),
738 array(0,0,0,0,0,0,0,0,1),
739 array(0,0,0,0,0,0,0,0,1),
740 array(0,1,0,0,0,0,0,0,1),
741 array(0,0,1,0,0,0,0,1,0),
742 array(0,0,0,1,1,1,1,0,0),
743 array(0,0,0,0,0,0,0,0,0),
744 ),
745 '4' => array(
746 array(0,0,0,0,0,0,0,1,0),
747 array(0,0,0,0,0,0,1,1,0),
748 array(0,0,0,0,0,1,0,1,0),
749 array(0,0,0,0,1,0,0,1,0),
750 array(0,0,0,1,0,0,0,1,0),
751 array(0,0,1,0,0,0,0,1,0),
752 array(0,1,1,1,1,1,1,1,1),
753 array(0,0,0,0,0,0,0,1,0),
754 array(0,0,0,0,0,0,0,1,0),
755 array(0,0,0,0,0,0,0,1,0),
756 array(0,0,0,0,0,0,0,1,0),
757 array(0,0,0,0,0,0,0,0,0),
758 array(0,0,0,0,0,0,0,0,0),
759 array(0,0,0,0,0,0,0,0,0),
760 ),
761 '5' => array(
762 array(1,1,1,1,1,1,1,1,1),
763 array(1,0,0,0,0,0,0,0,0),
764 array(1,0,0,0,0,0,0,0,0),
765 array(1,0,0,0,0,0,0,0,0),
766 array(0,1,0,0,0,0,0,0,0),
767 array(0,0,1,1,1,1,1,0,0),
768 array(0,0,0,0,0,0,0,1,0),
769 array(0,0,0,0,0,0,0,0,1),
770 array(1,0,0,0,0,0,0,0,1),
771 array(0,1,0,0,0,0,0,1,0),
772 array(0,0,1,1,1,1,1,0,0),
773 array(0,0,0,0,0,0,0,0,0),
774 array(0,0,0,0,0,0,0,0,0),
775 array(0,0,0,0,0,0,0,0,0),
776 ),
777 '6' => array(
778 array(0,0,1,1,1,1,1,0,0),
779 array(0,1,0,0,0,0,0,1,0),
780 array(1,0,0,0,0,0,0,0,1),
781 array(1,0,0,0,0,0,0,0,0),
782 array(1,0,0,0,0,0,0,0,0),
783 array(1,0,0,1,1,1,1,0,0),
784 array(1,0,1,0,0,0,0,1,0),
785 array(1,1,0,0,0,0,0,0,1),
786 array(1,0,0,0,0,0,0,0,1),
787 array(1,0,0,0,0,0,0,0,1),
788 array(0,1,0,0,0,0,0,1,0),
789 array(0,0,1,1,1,1,1,0,0),
790 array(0,0,0,0,0,0,0,0,0),
791 array(0,0,0,0,0,0,0,0,0),
792 array(0,0,0,0,0,0,0,0,0),
793 ),
794 '7' => array(
795 array(1,1,1,1,1,1,1,1,1),
796 array(1,0,0,0,0,0,0,0,1),
797 array(0,0,0,0,0,0,0,1,0),
798 array(0,0,0,0,0,0,1,0,0),
799 array(0,0,0,0,0,1,0,0,0),
800 array(0,0,0,0,1,0,0,0,0),
801 array(0,0,0,0,1,0,0,0,0),
802 array(0,0,0,0,1,0,0,0,0),
803 array(0,0,0,0,1,0,0,0,0),
804 array(0,0,0,0,1,0,0,0,0),
805 array(0,0,0,0,1,0,0,0,0),
806 array(0,0,0,0,0,0,0,0,0),
807 array(0,0,0,0,0,0,0,0,0),
808 array(0,0,0,0,0,0,0,0,0),
809 ),
810 '8' => array(
811 array(0,0,1,1,1,1,1,0,0),
812 array(0,1,0,0,0,0,0,1,0),
813 array(1,0,0,0,0,0,0,0,1),
814 array(1,0,0,0,0,0,0,0,1),
815 array(1,0,0,0,0,0,0,0,1),
816 array(0,1,0,0,0,0,0,1,0),
817 array(0,0,1,1,1,1,1,0,0),
818 array(0,1,0,0,0,0,0,1,0),
819 array(1,0,0,0,0,0,0,0,1),
820 array(1,0,0,0,0,0,0,0,1),
821 array(1,0,0,0,0,0,0,0,1),
822 array(0,1,0,0,0,0,0,1,0),
823 array(0,0,1,1,1,1,1,0,0),
824 array(0,0,0,0,0,0,0,0,0),
825 ),
826 '9' => array(
827 array(0,0,0,1,1,1,1,0,0),
828 array(0,0,1,0,0,0,0,1,0),
829 array(0,1,0,0,0,0,0,0,1),
830 array(0,1,0,0,0,0,0,0,1),
831 array(0,1,0,0,0,0,0,0,1),
832 array(0,1,0,0,0,0,0,1,1),
833 array(0,0,1,1,1,1,1,0,1),
834 array(0,0,0,0,0,0,0,0,1),
835 array(0,0,0,0,0,0,0,0,1),
836 array(0,1,0,0,0,0,0,0,1),
837 array(0,0,1,0,0,0,0,1,0),
838 array(0,0,0,1,1,1,1,0,0),
839 array(0,0,0,0,0,0,0,0,0),
840 array(0,0,0,0,0,0,0,0,0),
841 ),
842 )
843 );
844 }
845 }
846