aboutsummaryrefslogtreecommitdiffstats
path: root/sysconfig/network-scripts/network-functions-ipv6
Commit message (Expand)AuthorAgeFilesLines
* ipv6_add_addr_on_device: replace the existing address on NICDavid Kaspar [Dee'Kej]2017-02-271-1/+1
* ipv6_wait_tentative(): exit immediately when dadfailed occursDavid Kaspar [Dee'Kej]2016-11-011-3/+22
* Fix typo'd variable in 6to4 cleanupPhil Dibowitz2016-10-121-2/+2
* [1/3] Remove tabs and fix spacing: ipv6 scriptsPhil Dibowitz2016-10-121-781/+781
* ipv6: wait for all global IPv6 addresses to leave the "tentative" stateLukas Nykryn2016-06-131-0/+21
* Convert ipv6_log users to net_log.Bill Nottingham2011-03-251-204/+51
* Drop some unnecessary command invocations.Ville Skyttä2011-02-281-6/+6
* Frob device when calling sysctl, in case of vlans. (#665601, #667211, <ossman...Bill Nottingham2011-01-041-3/+3
* Remove ipv6_del_addr_on_device; adjust callers.Bill Nottingham2009-08-211-49/+1
* Remove ipv6_del_route; adjust callers.Bill Nottingham2009-08-211-53/+1
* Delete functions that are not used.Victor Lowther2009-07-311-114/+0
* Remove useless /sbin/ip wrapper function.Bill Nottingham2009-07-311-49/+38
* Remove another unused wrapper.Bill Nottingham2009-07-311-12/+0
* Remove unused ipv6_exec_ifconfig function.Bill Nottingham2009-07-311-15/+0
* Remove useless sysctl wrapper function.Bill Nottingham2009-07-311-24/+11
* Don't bother checking for /sbin/ip or /sbin/sysctl.Bill Nottingham2009-07-311-10/+0
* Get rid of unused function. <victor.lowther@gmail.com>Bill Nottingham2009-07-311-10/+0
* Use $(( )) for arithmetic statements instead of let or $[ ].Victor Lowther2009-07-301-3/+3
* Use $() instead of `` for process expansion.Bill Nottingham2009-07-301-28/+28
* ipcalc can handle all our IP checking needs now.Victor Lowther2009-07-281-91/+5
* Set MTU correctly for 6to4. (#477976, <ackistler@yahoo.com>)Bill Nottingham2009-01-051-7/+1
* Remove shell header (#225900).Bill Nottingham2008-09-301-2/+0
* https://bugzilla.redhat.com/show_bug.cgi?id=447928Harald Hoyer2008-09-161-3/+3
* as we don't use NETWORKING_IPV6, silence errors (#195845)Bill Nottingham2007-04-171-1/+1
* more fixes for network module unload (#211474)Bill Nottingham2006-11-221-1/+1
* sed gone wrongBill Nottingham2006-09-191-1/+1
* pass path to '.' always (#206035)Bill Nottingham2006-09-111-1/+1
* whitespace cleanupsBill Nottingham2006-08-071-33/+33
* Reapply fix from rev 1.34:Miloslav Trmac2006-08-031-1/+1
* IPv6 updates (<pb@bieringer.de>, #143452)Bill Nottingham2006-08-021-2/+20
* Fix IPv6 address validity check not to consider every non-empty string valid.Miloslav Trmac2006-05-161-1/+1
* Modify IPV6TO4_ROUTING to also add addresses on the interfacesMiloslav Trmac2006-05-141-3/+32
* get rid of excess messagesBill Nottingham2005-04-151-15/+0
* ipv6 cleanups (<pb@bieringer.de>)Bill Nottingham2005-03-031-17/+13
* clean up whitespace <pb@bieringer.de>Bill Nottingham2005-01-121-15/+15
* replace the use of route/ifconfig with ip, remove support for ipv6calcBill Nottingham2005-01-111-137/+31
* change setting of IPv6 default route (#142308, <pb@bieringer.de>Bill Nottingham2004-12-081-7/+4
* some cleanupsBill Nottingham2004-10-171-2/+2
* fix IPv6 6to4 & NAT (#118928, <pb@bieringer.de>, <pekkas@netcore.fi>)Bill Nottingham2004-09-101-11/+21
* IPv6 updates (Pekka Savola, <pekkas@netcore.fi>)Bill Nottingham2003-09-031-49/+25
* more IPv6 tweaks (<pekkas@netcore.fi>)Bill Nottingham2003-08-181-9/+9
* IPv6 updates & tweaks <pekkas@netcore.fi>Bill Nottingham2003-08-151-30/+30
* IPv6 update (<pekkas@netcore.fi>, <pb@bieringer.de>)Bill Nottingham2002-12-021-1/+8
* IPv6 update <pekkas@netcore.fi>, <pb@bieringer.de>Bill Nottingham2002-11-121-31/+34
* mtu tweak (<pekkas@netcor.fi>)Bill Nottingham2002-09-021-1/+1
* - change some negation usageFlorian La Roche2002-06-261-23/+23
* use -e argument to sysctlBill Nottingham2002-04-121-11/+11
* IPv6 updates. <pekkas@netcore.fi>Bill Nottingham2002-03-211-19/+24
* *BIG* IPv6 syncup. <pekkas@netcore.fi>Bill Nottingham2002-03-111-457/+1086
* fix message string (#52581)Bill Nottingham2001-08-281-1/+1
>652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845
<?php
/**
*
* @package VC
* @version $Id$
* @copyright (c) 2006 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

/**
* Wave3D CAPTCHA
*
* @author Robert Hetzler
* @package VC
*/
class captcha
{
	var $width		= 360;
	var $height		= 96;

	function execute($code, $seed)
	{
		global $starttime;

		// seed the random generator
		mt_srand($seed);

		// set height and width
		$img_x = $this->width;
		$img_y = $this->height;

		// Generate image
		$img	= imagecreatetruecolor($img_x, $img_y);
		$x_grid = mt_rand(6, 10);
		$y_grid = mt_rand(6, 10);

		// Ok, so lets cut to the chase. We could accurately represent this in 3d and
		// do all the appropriate linear transforms. my questions is... why bother?
		// The computational overhead is unnecessary when you consider the simple fact:
		// we're not here to accurately represent a model, but to just show off some random-ish
		// polygons

		// Conceive of 3 spaces.
		// 1) planar-space (discrete "pixel" grid)
		// 2) 3-space. (planar-space with z/height aspect)
		// 3) image space (pixels on the screen)
		// resolution of the planar-space we're embedding the text code in
		$plane_x	= 100;
		$plane_y	= 30;

		$subdivision_factor = 3;

		// $box is the 4 points in img_space that correspond to the corners of the plane in 3-space
		$box = array(
			'upper_left'	=> array(
				'x' => mt_rand(5, 15),
				'y' => mt_rand(10, 15)
			),
			'upper_right'	=> array(
				'x' => mt_rand($img_x - 35, $img_x - 19),
				'y' => mt_rand(10, 17)
			),
			'lower_left'	=> array(
				'x' => mt_rand($img_x - 45, $img_x - 5),
				'y' => mt_rand($img_y - 15, $img_y - 0),
			),
		);

		$box['lower_right'] = array(
			'x' => $box['lower_left']['x'] + $box['upper_left']['x'] - $box['upper_right']['x'],
			'y' => $box['lower_left']['y'] + $box['upper_left']['y'] - $box['upper_right']['y'],
		);

		// TODO
		$background = imagecolorallocate($img, mt_rand(155, 255), mt_rand(155, 255), mt_rand(155, 255));
		imagefill($img, 0, 0, $background);
		$black = imagecolorallocate($img, 0, 0, 0);

		$random = array();
		$fontcolors = array();

		for ($i = 0; $i < 15; ++$i)
		{
			$random[$i] = imagecolorallocate($img, mt_rand(120, 255), mt_rand(120, 255), mt_rand(120, 255));
		}

		$fontcolors[0] = imagecolorallocate($img, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120));

 		$colors = array();

		$minr = mt_rand(20, 30);
		$ming = mt_rand(20, 30);
		$minb = mt_rand(20, 30);

		$maxr = mt_rand(150, 230);
		$maxg = mt_rand(150, 230);
		$maxb = mt_rand(150, 230);

		for ($i = -30; $i <= 30; ++$i)
		{
			$coeff1 = ($i + 12) / 45;
			$coeff2 = 1 - $coeff1;
			$colors[$i] = imagecolorallocate($img, ($coeff2 * $maxr) + ($coeff1 * $minr), ($coeff2 * $maxg) + ($coeff1 * $ming), ($coeff2 * $maxb) + ($coeff1 * $minb));
		}

		// $img_buffer is the last row of 3-space positions (converted to img-space), cached
		// (using this means we don't need to recalculate all 4 positions for each new polygon,
		// merely the newest point that we're adding, which is then cached.
		$img_buffer = array(array(), array());

		// In image-space, the x- and y-offset necessary to move one unit in the x-direction in planar-space
		$dxx = ($box['upper_right']['x'] - $box['upper_left']['x']) / ($subdivision_factor * $plane_x);
		$dxy = ($box['upper_right']['y'] - $box['upper_left']['y']) / ($subdivision_factor * $plane_x);

		// In image-space, the x- and y-offset necessary to move one unit in the y-direction in planar-space
		$dyx = ($box['lower_right']['x'] - $box['upper_left']['x']) / ($subdivision_factor * $plane_y);
		$dyy = ($box['lower_right']['y'] - $box['upper_left']['y']) / ($subdivision_factor * $plane_y);

		// Initial captcha-letter offset in planar-space
		$plane_offset_x = mt_rand(3, 8);
		$plane_offset_y = mt_rand( 12, 15);

		// character map
		$map = $this->captcha_bitmaps();

		// matrix
		$plane = array();

		// for each character, we'll silkscreen it into our boolean pixel plane
		for ($c = 0, $code_num = strlen($code); $c < $code_num; ++$c)
		{
			$letter = $code[$c];

			for ($x = $map['width'] - 1; $x >= 0; --$x)
			{
				for ($y = $map['height'] - 1; $y >= 0; --$y)
				{
					if ($map['data'][$letter][$y][$x])
					{
						$plane[$y + $plane_offset_y + (($c & 1) ? 1 : -1)][$x + $plane_offset_x] = true;
					}
				}
			}
			$plane_offset_x += 11;
		}

		// calculate our first buffer, we can't actually draw polys with these yet
		// img_pos_prev == screen x,y location to our immediate left.
		// img_pos_cur == current screen x,y location
		// we calculate screen position of our
		// current cell based on the difference from the previous cell
		// rather than recalculating from absolute coordinates
		// What we cache into the $img_buffer contains the raised text coordinates.
		$img_pos_prev	= $img_buffer[0][0] = array($box['upper_left']['x'], $box['upper_left']['y']);
		$cur_height		= $prev_height = $this->wave_height(0, 0, $subdivision_factor);
		$full_x			= $plane_x * $subdivision_factor;
		$full_y			= $plane_y * $subdivision_factor;

		for ($x = 1; $x <= $full_x; ++$x)
		{
			$cur_height		= $this->wave_height($x, 0, $subdivision_factor);
			$offset			= $cur_height - $prev_height;
			$img_pos_cur	= array($img_pos_prev[0] + $dxx, $img_pos_prev[1] + $dxy + $offset);

			$img_buffer[0][$x]	= $img_pos_cur;
			$img_pos_prev		= $img_pos_cur;
			$prev_height		= $cur_height;
		}

		for ($y = 1; $y <= $full_y; ++$y)
		{
			// swap buffers
			$buffer_cur		= $y & 1;
			$buffer_prev	= 1 - $buffer_cur;

			$prev_height	= $this->wave_height(0, $y, $subdivision_factor);
			$offset			= $prev_height - $this->wave_height(0, $y - 1, $subdivision_factor);
			$img_pos_cur	= array($img_buffer[$buffer_prev][0][0] + $dyx, min($img_buffer[$buffer_prev][0][1] + $dyy + $offset, $img_y - 1));

			// make sure we don't try to write off the page
			$img_pos_prev	= $img_pos_cur;

			$img_buffer[$buffer_cur][0]	= $img_pos_cur;

			for ($x = 1; $x <= $full_x; ++$x)
			{
				$cur_height		= $this->wave_height($x, $y, $subdivision_factor) + $this->grid_height($x, $y, 1, $x_grid, $y_grid);

				// height is a z-factor, not a y-factor
				$offset			= $cur_height - $prev_height;
				$img_pos_cur	= array($img_pos_prev[0] + $dxx, $img_pos_prev[1] + $dxy + $offset);

				// height is float, index it to an int, get closest color
				$color			= $colors[intval($cur_height)];
				$img_pos_prev	= $img_pos_cur;
				$prev_height	= $cur_height;

				$y_index_old = intval(($y - 1) / $subdivision_factor);
				$y_index_new = intval($y / $subdivision_factor);
				$x_index_old = intval(($x - 1) / $subdivision_factor);
				$x_index_new = intval($x / $subdivision_factor);

				if (!empty($plane[$y_index_new][$x_index_new]))
				{
					$img_pos_cur[1]	+= $this->wave_height($x, $y, $subdivision_factor, 1) - 30 - $cur_height;
					$color			= $colors[20];
				}
				$img_pos_cur[1] = min($img_pos_cur[1], $img_y - 1);
				$img_buffer[$buffer_cur][$x] = $img_pos_cur;

				// Smooth the edges as much as possible by having not more than one low<->high traingle per square
				// Otherwise, just
				$diag_down	= (empty($plane[$y_index_old][$x_index_old]) == empty($plane[$y_index_new][$x_index_new]));
				$diag_up	= (empty($plane[$y_index_old][$x_index_new]) == empty($plane[$y_index_new][$x_index_old]));

				// natural switching
				$mode = ($x + $y) & 1;

				// override if it requires it
				if ($diag_down != $diag_up)
				{
					$mode = $diag_up;
				}

				if ($mode)
				{
					//		+-/			  /
					// 1	|/		2	 /|
					//		/			/-+
					$poly1 = array_merge($img_buffer[$buffer_cur][$x - 1], $img_buffer[$buffer_prev][$x - 1], $img_buffer[$buffer_prev][$x]);
					$poly2 = array_merge($img_buffer[$buffer_cur][$x - 1], $img_buffer[$buffer_cur][$x], $img_buffer[$buffer_prev][$x]);
				}
				else
				{
					//		\			\-+
					// 1	|\		2	 \|
					//		+-\			  \
					$poly1 = array_merge($img_buffer[$buffer_cur][$x - 1], $img_buffer[$buffer_prev][$x - 1], $img_buffer[$buffer_cur][$x]);
					$poly2 = array_merge($img_buffer[$buffer_prev][$x - 1], $img_buffer[$buffer_prev][$x], $img_buffer[$buffer_cur][$x]);
				}

				imagefilledpolygon($img, $poly1, 3, $color);
				imagefilledpolygon($img, $poly2, 3, $color);
			}
		}

		// Output image
		header('Content-Type: image/png');
		header('Cache-control: no-cache, no-store');
		//$mtime = explode(' ', microtime());
		//$totaltime = $mtime[0] + $mtime[1] - $starttime;

		//echo $totaltime . "<br />\n";
		//echo memory_get_usage() - $tmp;
		imagepng($img);
		imagedestroy($img);
	}

	function wave_height($x, $y, $factor = 1, $tweak = 0.7)
	{
		// stretch the wave. TODO: pretty it up
		$x = $x/5 + 180;
		$y = $y/4;
		return ((sin($x / (3 * $factor)) + sin($y / (3 * $factor))) * 10 * $tweak);
	}

	function grid_height($x, $y, $factor = 1, $x_grid, $y_grid)
	{
		return ((!($x % ($x_grid * $factor)) || !($y % ($y_grid * $factor))) ? 3 : 0);
	}

	function captcha_bitmaps()
	{
		return array(
			'width'		=> 9,
			'height'	=> 13,
			'data'		=> array(
				'A' => array(
					array(0,0,1,1,1,1,0,0,0),
					array(0,1,0,0,0,0,1,0,0),
					array(1,0,0,0,0,0,0,1,0),
					array(1,0,0,0,0,0,0,1,0),
					array(1,0,0,0,0,0,0,1,0),
					array(1,0,0,0,0,0,0,1,0),
					array(1,0,0,0,0,0,0,1,0),
					array(1,1,1,1,1,1,1,1,0),
					array(1,0,0,0,0,0,0,1,0),
					array(1,0,0,0,0,0,0,1,0),
					array(1,0,0,0,0,0,0,1,0),
					array(1,0,0,0,0,0,0,1,0),
					array(1,0,0,0,0,0,0,1,0),
					array(0,0,0,0,0,0,0,0,0),
				),
				'B' => array(
					array(1,1,1,1,1,1,0,0,0),
					array(1,0,0,0,0,0,1,0,0),
					array(1,0,0,0,0,0,0,1,0),
					array(1,0,0,0,0,0,0,1,0),
					array(1,0,0,0,0,0,0,1,0),
					array(1,0,0,0,0,0,1,0,0),
					array(1,1,1,1,1,1,0,0,0),
					array(1,0,0,0,0,0,1,0,0),
					array(1,0,0,0,0,0,0,1,0),
					array(1,0,0,0,0,0,0,1,0),
					array(1,0,0,0,0,0,0,1,0),
					array(1,0,0,0,0,0,1,0,0),
					array(1,1,1,1,1,1,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
				),
				'C' => array(
					array(0,0,1,1,1,1,1,0,0),
					array(0,1,0,0,0,0,0,1,0),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,1),
					array(0,1,0,0,0,0,0,1,0),
					array(0,0,1,1,1,1,1,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
				),
				'D' => array(
					array(1,1,1,1,1,1,1,0,0),
					array(1,0,0,0,0,0,0,1,0),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,1,0),
					array(1,1,1,1,1,1,1,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
				),
				'E' => array(
					array(0,0,1,1,1,1,1,1,1),
					array(0,1,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(1,1,1,1,1,1,1,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(0,1,0,0,0,0,0,0,0),
					array(0,0,1,1,1,1,1,1,1),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
				),
				'F' => array(
					array(0,0,1,1,1,1,1,1,0),
					array(0,1,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(1,1,1,1,1,1,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
				),
				'G' => array(
					array(0,0,1,1,1,1,1,0,0),
					array(0,1,0,0,0,0,0,1,0),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,1,1),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(0,1,0,0,0,0,0,1,0),
					array(0,0,1,1,1,1,1,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
				),
				'H' => array(
					array(1,0,0,0,0,0,1,0,0),
					array(1,0,0,0,0,0,1,0,0),
					array(1,0,0,0,0,0,1,0,0),
					array(1,0,0,0,0,0,1,0,0),
					array(1,0,0,0,0,0,1,0,0),
					array(1,1,1,1,1,1,1,0,0),
					array(1,0,0,0,0,0,1,0,0),
					array(1,0,0,0,0,0,1,0,0),
					array(1,0,0,0,0,0,1,0,0),
					array(1,0,0,0,0,0,1,0,0),
					array(1,0,0,0,0,0,1,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
				),
				'I' => array(
					array(0,1,1,1,1,1,1,1,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,1,1,1,1,1,1,1,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
				),
				'J' => array(
					array(0,0,0,0,0,0,1,1,1),
					array(0,0,0,0,0,0,0,0,1),
					array(0,0,0,0,0,0,0,0,1),
					array(0,0,0,0,0,0,0,0,1),
					array(0,0,0,0,0,0,0,0,1),
					array(0,0,0,0,0,0,0,0,1),
					array(0,0,0,0,0,0,0,0,1),
					array(0,1,0,0,0,0,0,0,1),
					array(0,1,0,0,0,0,0,0,1),
					array(0,0,1,0,0,0,0,1,0),
					array(0,0,0,1,1,1,1,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
				),
				'K' => array(
					array(1,0,0,0,0,0,1,0,0),
					array(1,0,0,0,0,1,0,0,0),
					array(1,0,0,0,1,0,0,0,0),
					array(1,0,0,1,0,0,0,0,0),
					array(1,0,1,0,0,0,0,0,0),
					array(1,1,0,0,0,0,0,0,0),
					array(1,0,1,0,0,0,0,0,0),
					array(1,0,0,1,0,0,0,0,0),
					array(1,0,0,0,1,0,0,0,0),
					array(1,0,0,0,0,1,0,0,0),
					array(1,0,0,0,0,0,1,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
				),
				'L' => array(
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(0,1,0,0,0,0,0,0,0),
					array(0,0,1,1,1,1,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
				),
				'M' => array(
					array(0,1,0,0,0,0,0,1,0),
					array(0,1,1,0,0,0,1,1,0),
					array(0,1,0,1,0,1,0,1,0),
					array(0,1,0,0,1,0,0,1,0),
					array(0,1,0,0,0,0,0,1,0),
					array(0,1,0,0,0,0,0,1,0),
					array(0,1,0,0,0,0,0,1,0),
					array(0,1,0,0,0,0,0,1,0),
					array(0,1,0,0,0,0,0,1,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
				),
				'N' => array(
					array(1,0,0,0,0,0,0,0,1),
					array(1,1,0,0,0,0,0,0,1),
					array(1,0,1,0,0,0,0,0,1),
					array(1,0,0,1,0,0,0,0,1),
					array(1,0,0,0,1,0,0,0,1),
					array(1,0,0,0,0,1,0,0,1),
					array(1,0,0,0,0,0,1,0,1),
					array(1,0,0,0,0,0,0,1,1),
					array(1,0,0,0,0,0,0,0,1),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
				),
				'O' => array(
					array(0,0,0,1,1,1,0,0,0),
					array(0,0,1,0,0,0,1,0,0),
					array(0,1,0,0,0,0,0,1,0),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(0,1,0,0,0,0,0,1,0),
					array(0,0,1,0,0,0,1,0,0),
					array(0,0,0,1,1,1,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
				),
				'P' => array(
					array(1,1,1,1,1,1,0,0,0),
					array(1,0,0,0,0,0,1,0,0),
					array(1,0,0,0,0,0,0,1,0),
					array(1,0,0,0,0,0,0,1,0),
					array(1,0,0,0,0,0,0,1,0),
					array(1,0,0,0,0,0,0,1,0),
					array(1,0,0,0,0,0,1,0,0),
					array(1,1,1,1,1,1,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
				),
				'Q' => array(
					array(0,0,1,1,1,1,0,0,0),
					array(0,1,0,0,0,0,1,0,0),
					array(1,0,0,0,0,0,0,1,0),
					array(1,0,0,0,0,0,0,1,0),
					array(1,0,0,0,0,0,0,1,0),
					array(1,0,0,0,0,0,0,1,0),
					array(1,0,0,0,1,0,0,1,0),
					array(1,0,0,0,0,1,0,1,0),
					array(0,1,0,0,0,0,1,0,0),
					array(0,0,1,1,1,1,0,1,0),
					array(0,0,0,0,0,0,0,0,1),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
				),
				'R' => array(
					array(1,1,1,1,1,1,0,0,0),
					array(1,0,0,0,0,0,1,0,0),
					array(1,0,0,0,0,0,0,1,0),
					array(1,0,0,0,0,0,0,1,0),
					array(1,0,0,0,0,0,0,1,0),
					array(1,0,0,0,0,0,1,0,0),
					array(1,1,1,1,1,1,0,0,0),
					array(1,0,1,0,0,0,0,0,0),
					array(1,0,0,1,0,0,0,0,0),
					array(1,0,0,0,1,0,0,0,0),
					array(1,0,0,0,0,1,0,0,0),
					array(1,0,0,0,0,0,1,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
				),
				'S' => array(
					array(0,0,1,1,1,1,1,1,1),
					array(0,1,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(0,1,0,0,0,0,0,0,0),
					array(0,0,1,1,1,1,1,0,0),
					array(0,0,0,0,0,0,0,1,0),
					array(0,0,0,0,0,0,0,0,1),
					array(0,0,0,0,0,0,0,0,1),
					array(0,0,0,0,0,0,0,1,0),
					array(1,1,1,1,1,1,1,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
				),
				'T' => array(
					array(1,1,1,1,1,1,1,1,1),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
				),
				'U' => array(
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(0,1,0,0,0,0,0,1,0),
					array(0,0,1,1,1,1,1,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
				),
				'V' => array(
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(0,1,0,0,0,0,0,1,0),
					array(0,0,1,0,0,0,1,0,0),
					array(0,0,0,1,0,1,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
				),
				'W' => array(
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,1,0,0,0,1),
					array(1,0,0,1,0,1,0,0,1),
					array(1,0,1,0,0,0,1,0,1),
					array(1,1,0,0,0,0,0,1,1),
					array(1,0,0,0,0,0,0,0,1),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
				),
				'X' => array(
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(0,1,0,0,0,0,0,1,0),
					array(0,0,1,0,0,0,1,0,0),
					array(0,0,0,1,0,1,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,1,0,1,0,0,0),
					array(0,0,1,0,0,0,1,0,0),
					array(0,1,0,0,0,0,0,1,0),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
				),
				'Y' => array(
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(0,1,0,0,0,0,0,1,0),
					array(0,0,1,0,0,0,1,0,0),
					array(0,0,0,1,0,1,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
				),
				'Z' => array(
					array(1,1,1,1,1,1,1,1,1),
					array(1,0,0,0,0,0,0,0,1),
					array(0,0,0,0,0,0,0,1,0),
					array(0,0,0,0,0,0,1,0,0),
					array(0,0,0,0,0,1,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,1,0,0,0,0,0),
					array(0,0,1,0,0,0,0,0,0),
					array(0,1,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,1),
					array(1,1,1,1,1,1,1,1,1),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
				),
				'1' => array(
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,1,1,0,0,0,0),
					array(0,0,1,0,1,0,0,0,0),
					array(0,1,0,0,1,0,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,1,1,1,1,1,1,1,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
				),
				'2' => array(
					array(0,0,0,1,1,1,0,0,0),
					array(0,0,1,0,0,0,1,0,0),
					array(0,1,0,0,0,0,0,1,0),
					array(0,0,0,0,0,0,0,0,1),
					array(0,0,0,0,0,0,0,0,1),
					array(0,0,0,0,0,0,0,0,1),
					array(0,0,0,0,0,0,0,1,0),
					array(0,0,0,0,0,0,1,0,0),
					array(0,0,0,0,0,1,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,1,0,0,0,0,0),
					array(0,0,1,0,0,0,0,0,0),
					array(0,1,1,1,1,1,1,1,1),
					array(0,0,0,0,0,0,0,0,0),
				),
				'3' => array(
					array(0,0,0,1,1,1,1,0,0),
					array(0,0,1,0,0,0,0,1,0),
					array(0,1,0,0,0,0,0,0,1),
					array(0,0,0,0,0,0,0,0,1),
					array(0,0,0,0,0,0,0,0,1),
					array(0,0,0,0,0,0,0,1,0),
					array(0,0,0,0,0,1,1,0,0),
					array(0,0,0,0,0,0,0,1,0),
					array(0,0,0,0,0,0,0,0,1),
					array(0,0,0,0,0,0,0,0,1),
					array(0,1,0,0,0,0,0,0,1),
					array(0,0,1,0,0,0,0,1,0),
					array(0,0,0,1,1,1,1,0,0),
					array(0,0,0,0,0,0,0,0,0),
				),
				'4' => array(
					array(0,0,0,0,0,0,0,1,0),
					array(0,0,0,0,0,0,1,1,0),
					array(0,0,0,0,0,1,0,1,0),
					array(0,0,0,0,1,0,0,1,0),
					array(0,0,0,1,0,0,0,1,0),
					array(0,0,1,0,0,0,0,1,0),
					array(0,1,1,1,1,1,1,1,1),
					array(0,0,0,0,0,0,0,1,0),
					array(0,0,0,0,0,0,0,1,0),
					array(0,0,0,0,0,0,0,1,0),
					array(0,0,0,0,0,0,0,1,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
				),
				'5' => array(
					array(1,1,1,1,1,1,1,1,1),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(0,1,0,0,0,0,0,0,0),
					array(0,0,1,1,1,1,1,0,0),
					array(0,0,0,0,0,0,0,1,0),
					array(0,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(0,1,0,0,0,0,0,1,0),
					array(0,0,1,1,1,1,1,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
				),
				'6' => array(
					array(0,0,1,1,1,1,1,0,0),
					array(0,1,0,0,0,0,0,1,0),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,0,0,0,0,0,0),
					array(1,0,0,1,1,1,1,0,0),
					array(1,0,1,0,0,0,0,1,0),
					array(1,1,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(0,1,0,0,0,0,0,1,0),
					array(0,0,1,1,1,1,1,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
				),
				'7' => array(
					array(1,1,1,1,1,1,1,1,1),
					array(1,0,0,0,0,0,0,0,1),
					array(0,0,0,0,0,0,0,1,0),
					array(0,0,0,0,0,0,1,0,0),
					array(0,0,0,0,0,1,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,0,1,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
				),
				'8' => array(
					array(0,0,1,1,1,1,1,0,0),
					array(0,1,0,0,0,0,0,1,0),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(0,1,0,0,0,0,0,1,0),
					array(0,0,1,1,1,1,1,0,0),
					array(0,1,0,0,0,0,0,1,0),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(1,0,0,0,0,0,0,0,1),
					array(0,1,0,0,0,0,0,1,0),
					array(0,0,1,1,1,1,1,0,0),
					array(0,0,0,0,0,0,0,0,0),
				),
				'9' => array(
					array(0,0,0,1,1,1,1,0,0),
					array(0,0,1,0,0,0,0,1,0),
					array(0,1,0,0,0,0,0,0,1),
					array(0,1,0,0,0,0,0,0,1),
					array(0,1,0,0,0,0,0,0,1),
					array(0,1,0,0,0,0,0,1,1),
					array(0,0,1,1,1,1,1,0,1),
					array(0,0,0,0,0,0,0,0,1),
					array(0,0,0,0,0,0,0,0,1),
					array(0,1,0,0,0,0,0,0,1),
					array(0,0,1,0,0,0,0,1,0),
					array(0,0,0,1,1,1,1,0,0),
					array(0,0,0,0,0,0,0,0,0),
					array(0,0,0,0,0,0,0,0,0),
				),
			)
		);
	}
}

?>