home *** CD-ROM | disk | FTP | other *** search
/ PC Professionell 2004 December / PCpro_2004_12.ISO / files / webserver / xampp / xampp-perl-addon-1.4.9-installer.exe / QRcode.pm < prev    next >
Encoding:
Text File  |  2004-04-24  |  107.2 KB  |  2,226 lines

  1. # GD::Barcode::QRcode 1.20 Edited (^^;;; by Hippo2000
  2. #    based on QRcode image CGI    version 0.50   (C)2000-2002,Y.Swetake
  3. use strict;
  4. package GD::Barcode::QRcode;
  5.  
  6. BEGIN{eval {require 'GD.pm';};};
  7. require Exporter;
  8. use vars qw($VERSION @ISA $errStr);
  9. @ISA = qw(GD::Barcode Exporter);
  10. $VERSION=0.01;
  11. #Prototype
  12. sub _calcVersion($$$);
  13. sub _calcMask($$$);
  14. sub _cnv8bit($$$$);
  15. sub _cnvAlphaNumeric($$$$);
  16. sub _cnvNumeric($$$$);
  17. sub _calcFrm($$$);
  18.  
  19. #------------------------------------------------------------------------------
  20. # new (for GD::Barcode::QR)
  21. #------------------------------------------------------------------------------
  22. sub new($$;$) {
  23.   my($sClass, $sTxt, $rhPrm) = @_;
  24.   $errStr ='';
  25.   my $oSelf = {};
  26.   bless $oSelf;
  27.   return undef if($errStr = $oSelf->init($sTxt, $rhPrm));
  28.   return $oSelf;
  29. }
  30. #------------------------------------------------------------------------------
  31. # init (for GD::Barcode::QR)
  32. #------------------------------------------------------------------------------
  33. sub init($$$){
  34.     my($oSelf, $sTxt, $rhPrm) =@_;
  35.  
  36. #CalcCd
  37.     $oSelf->{text} = $sTxt;
  38.     $oSelf->{Ecc} = $rhPrm->{Ecc} || ' ';
  39.     $oSelf->{Ecc} =~ tr/LMHQ/M/c;    #Not /LMQH/ => M
  40.     $oSelf->{Version} = $rhPrm->{Version} || 1;
  41.     $oSelf->{ModuleSize} = $rhPrm->{ModuleSize} || 1;
  42.     $oSelf->{ModuleSize} = int($oSelf->{ModuleSize});
  43.  
  44.     my $iDatCnt = 0;
  45.     my @aDatVal;
  46.     my @aDatBit;
  47.     my $raPlusWords;
  48.     my $iWordsPos;
  49.     $aDatBit[$iDatCnt]=4;
  50.     # Determin Data Type(8Bit, AlphaNumeric, Numeric .. not supported Kanji-Mode)
  51.     if ($oSelf->{text} =~ /\D/) {
  52.         if ($oSelf->{text} =~ /[^0-9A-Z \$\*\%\+\-\.\/\:]/) {
  53.          # --- 8bit byte mode
  54.             ($iDatCnt, $raPlusWords) =
  55.                 $oSelf->_cnv8bit($iDatCnt, \@aDatVal, \@aDatBit,);
  56.         }
  57.         else {
  58.          # ---- alphanumeric mode
  59.             ($iDatCnt, $raPlusWords) =
  60.                 $oSelf->_cnvAlphaNumeric($iDatCnt, \@aDatVal, \@aDatBit);
  61.         }
  62.     }
  63.     else {
  64.      # ---- numeric mode
  65.         ($iDatCnt, $raPlusWords) =
  66.             $oSelf->_cnvNumeric($iDatCnt, \@aDatVal, \@aDatBit);
  67.     }
  68.     my $iTotalBits = 0;
  69.     for(my $i=0;$i<$iDatCnt;++$i){
  70.         $iTotalBits += $aDatBit[$i];
  71.     }
  72.  
  73.     # Calc version(=Size)
  74.     my ($iMaxDatBits, $iCdNumPlus, $iMaxCodeWords, $iRemainBits);
  75.     ($iMaxDatBits, $iCdNumPlus, $iMaxCodeWords, $iRemainBits) = 
  76.         $oSelf->_calcVersion($iTotalBits, $raPlusWords);
  77.     $iTotalBits += $iCdNumPlus;
  78.  
  79.     $aDatBit[$oSelf->{WordsPos}] += $iCdNumPlus;
  80.     $oSelf->{MaxModules}  = 17 + ($oSelf->{Version} * 4);
  81.     my $iBitCnt = ($iMaxCodeWords * 8) + $iRemainBits;
  82.     my $iMaxDatWords=($iMaxDatBits / 8);
  83.  
  84.     # ---- read version ECC data file.
  85.     my ($sMatX, $sMatY, $sMasks, $sFmtInfX2, $sFmtInfY2, $sRsEccCodeWord, $sRso);
  86.     my $sRec = do ('GD/Barcode/QRcode/qrv' . 
  87.                     sprintf('%02d', $oSelf->{Version}) . $oSelf->{Ecc} . '.dat');
  88.  
  89.     ($sMatX, $sMatY, $sMasks, $sFmtInfX2, $sFmtInfY2, $sRsEccCodeWord, $sRso) = 
  90.         unpack(("a$iBitCnt" x 3) . ('a15' x 2) . 'a1a128', pack('H*', $sRec));
  91.  
  92.     my $iRsEccWords = ord($sRsEccCodeWord);
  93.     my @aMatrixX    = unpack("C*", $sMatX);
  94.     my @aMatrixY    = unpack("C*", $sMatY);
  95.     my @aMask       = unpack("C*", $sMasks);
  96.     my @aRsBlockOrder  = unpack("C*", $sRso);
  97.     my @aFmtInfX2      = unpack("C*", $sFmtInfX2);
  98.     my @aFmtInfY2      = unpack("C*", $sFmtInfY2);
  99.  
  100.     $sRec = do ('GD/Barcode/QRcode/rsc' . sprintf('%02d', $iRsEccWords) . '.dat');
  101.     my @aRsCalTbl = unpack("a$iRsEccWords" x 256, pack('H*', $sRec));
  102.  
  103.     # ----  set teminator 
  104.     if ($iTotalBits <= ($iMaxDatBits-4)){
  105.         $aDatVal[$iDatCnt] = 0;
  106.         $aDatBit[$iDatCnt] = 4;
  107.     } 
  108.     elsif ($iTotalBits < $iMaxDatBits){
  109.         $aDatVal[$iDatCnt] = 0;
  110.         $aDatBit[$iDatCnt] = $iMaxDatBits-$iTotalBits;
  111.     }
  112.     elsif ($iTotalBits > $iMaxDatBits){
  113.         die "Overflow error. version $oSelf->{Version}\n" . 
  114.             "total bits: $iTotalBits  max bits: $iMaxDatBits\n";
  115.     }
  116.     # 8ârâbâgÆPê╩é╔ò¬èä
  117.     my $iCodeWords=0;
  118.     my @aCodeWords;
  119.     $aCodeWords[0]=0;
  120.     my $iRestBits = 8;
  121.     for(my $i=0;$i <= $iDatCnt; ++$i) {
  122.         my $sBuff    = $aDatVal[$i];
  123.         my $iBuffBit = $aDatBit[$i];
  124.  
  125.         my $iFlg=1;
  126.         while ($iFlg) {
  127.             if ($iRestBits > $iBuffBit) {
  128.                 $aCodeWords[$iCodeWords]=(($aCodeWords[$iCodeWords] << $iBuffBit) | $sBuff);
  129.                 $iRestBits -= $iBuffBit;
  130.                 $iFlg=0;
  131.             }
  132.             else {
  133.                 $iBuffBit -= $iRestBits;
  134.                 $aCodeWords[$iCodeWords]=(($aCodeWords[$iCodeWords] << $iRestBits) | ($sBuff >> $iBuffBit));
  135.                 if ($iBuffBit==0) {
  136.                     $iFlg=0;
  137.                 }
  138.                 else {
  139.                     $sBuff= ($sBuff & ((1 << $iBuffBit) -1 ));
  140.                     $iFlg=1;   
  141.                 } 
  142.                 $iCodeWords++;
  143.                 if ($iCodeWords<$iMaxDatWords-1){
  144.                     $aCodeWords[$iCodeWords]=0;
  145.                 }
  146.                 $iRestBits = 8;
  147.             }
  148.         }
  149.     }
  150.     if ($iRestBits != 8) {
  151.         $aCodeWords[$iCodeWords] <<= $iRestBits;
  152.     }
  153.     else {
  154.         --$iCodeWords;
  155.     }
  156.     # Padding data
  157.     if ($iCodeWords < $iMaxDatWords - 1 ){
  158.         my $iFlg=1;
  159.         while ($iCodeWords < ($iMaxDatWords-1)){
  160.             $aCodeWords[++$iCodeWords] = ($iFlg==1)? 0xEC : 0x11;
  161.             $iFlg *= -1;
  162.         }
  163.     }
  164.  
  165.     # ----  RS-ECC prepare
  166.     my $iRsBlock=0;
  167.     my @aRsTmp=();
  168.     my $j=0;
  169.     # Divide RS-Blocks
  170.     for(my $i = 0; $i < $iMaxDatWords; ++$i) {
  171.         $aRsTmp[$iRsBlock] .= chr($aCodeWords[$i]);
  172.         if (++$j >= $aRsBlockOrder[$iRsBlock]-$iRsEccWords){
  173.             $j=0;
  174.             ++$iRsBlock;
  175.         }
  176.     }
  177.     # RS-ECC main
  178.     for($iRsBlock=0; $iRsBlock <= scalar(@aRsBlockOrder); $iRsBlock++) {
  179.         my $sRsCodeWords = $aRsBlockOrder[$iRsBlock];
  180.         $sRsCodeWords ||= 0;
  181.         $sRsCodeWords =~ s/\n//g;
  182.         my $sRsTmp = ($aRsTmp[$iRsBlock] || ''). (chr(0) x $iRsEccWords);
  183.  
  184.         for($j = ($sRsCodeWords - $iRsEccWords); $j>0; $j--) {
  185.             my $iFirst = ord(substr($sRsTmp, 0, 1));
  186.             if ($iFirst != 0){
  187.                 $sRsTmp = substr($sRsTmp, 1) ^ $aRsCalTbl[$iFirst];
  188.             }
  189.             else {
  190.                 $sRsTmp = substr($sRsTmp, 1);
  191.             }
  192.         }
  193.         push(@aCodeWords, unpack("C*", $sRsTmp));
  194.     }
  195.     # ---- put data
  196.     # ---- flash matrix
  197.     my @aCont;
  198.     $oSelf->{Cont} = \@aCont;
  199.     for(my $i=0;$i<$oSelf->{MaxModules};$i++) {
  200.         $aCont[$i] = [ (0) x $oSelf->{MaxModules}];
  201.     }
  202.     for(my $i=0; $i<$iMaxCodeWords; $i++) {
  203.         my $iCodeWord = $aCodeWords[$i];
  204.         for(my $j = 7; $j >= 0; $j--) {
  205.             my $iCodeWordBitNum = ($i * 8)+$j;
  206.             $aCont[$aMatrixX[$iCodeWordBitNum] ][ $aMatrixY[$iCodeWordBitNum]]
  207.                 = ((255*($iCodeWord & 1)) ^ $aMask[$iCodeWordBitNum]); 
  208.             $iCodeWord >>= 1;
  209.         }
  210.     }
  211.     for(my $iMatrixRemain = $iRemainBits; $iMatrixRemain; $iMatrixRemain--) {
  212.         my $iRemainBitTmp = $iMatrixRemain + ($iMaxCodeWords * 8);
  213.         $aCont[$aMatrixX[$iRemainBitTmp]][$aMatrixY[$iRemainBitTmp]]  
  214.             = (255 ^ $aMask[$iRemainBitTmp] );
  215.     }
  216.  
  217.     # ---- mask select
  218.     my $sHorMst='';
  219.     my $sVerMst='';
  220.     for(my $i=0; $i < $oSelf->{MaxModules}; ++$i) {
  221.         for($j=0 ; $j < $oSelf->{MaxModules}; ++$j){
  222.             $sHorMst .= chr($aCont[$j][$i]);
  223.             $sVerMst .= chr($aCont[$i][$j]);
  224.        }
  225.     }
  226.     my $iMask = $oSelf->_calcMask($sHorMst, $sVerMst);
  227.     $oSelf->{MaskCont} = (1 << $iMask);
  228.  
  229.     # ---- format information
  230.     my %hFmtInf =(
  231.         'M' => [
  232.           '101010000010010', '101000100100101', '101111001111100', '101101101001011',
  233.           '100010111111001', '100000011001110', '100111110010111', '100101010100000',],
  234.         'L' => [
  235.           '111011111000100', '111001011110011', '111110110101010', '111100010011101',
  236.           '110011000101111', '110001100011000', '110110001000001', '110100101110110',],
  237.         'H' =>[
  238.           '001011010001001', '001001110111110', '001110011100111', '001100111010000',
  239.           '000011101100010', '000001001010101', '000110100001100', '000100000111011',],
  240.         'Q' => [
  241.           '011010101011111', '011000001101000', '011111100110001', '011101000000110',
  242.           '010010010110100', '010000110000011', '010111011011010', '010101111101101',],
  243.     );
  244.     my @aFmtInfX1=( 0, 1, 2, 3, 4, 5, 7, 8, 8, 8, 8, 8, 8, 8, 8);
  245.     my @aFmtInfY1=( 8, 8, 8, 8, 8, 8, 8, 8, 7, 5, 4, 3, 2, 1, 0);
  246.     my @aContWk = split //, $hFmtInf{$oSelf->{Ecc}}->[$iMask];
  247.     for(my $i = 0; $i < 15; ++$i) {
  248.         $aCont[$aFmtInfX1[$i]][$aFmtInfY1[$i]] = $aContWk[$i] * 255;
  249.         $aCont[$aFmtInfX2[$i]][$aFmtInfY2[$i]] = $aContWk[$i] * 255;
  250.     }
  251.     return '';
  252. }
  253. #------------------------------------------------------------------------------
  254. # barcode (for GD::Barcode::QR)
  255. #------------------------------------------------------------------------------
  256. sub barcode($) {
  257.     my ($oSelf) = @_;
  258.     my $sBarL;
  259.     my $iModSize = $oSelf->{ModuleSize};
  260.     my $sBlack = '1' x $iModSize;
  261.     my $sWhite = '0' x $iModSize;
  262.  
  263.     my $sPtn = '';
  264.     $sPtn = (($sWhite x ($oSelf->{MaxModules} + 8)) . "\n") x (4 * $iModSize);
  265.     my @aCont = @{$oSelf->{Cont}};
  266.  
  267.     for(my $iY=0; $iY < $oSelf->{MaxModules}; ++$iY) {
  268.         $sBarL = $sWhite x 4;
  269.         for(my $iX=0; $iX < $oSelf->{MaxModules}; ++$iX) {
  270.             $sBarL .= ((_calcFrm($oSelf->{Version}, $iY, $iX)) || 
  271.                      (($aCont[$iX][$iY] & $oSelf->{MaskCont})))? $sBlack : $sWhite;
  272.         }
  273.         $sBarL .= ($sWhite x 4) . "\n";
  274.         $sPtn  .= $sBarL x $iModSize;
  275.     }
  276.     $sPtn .= ($sWhite x ($oSelf->{MaxModules}+8) . "\n") x (4 * $iModSize);
  277.     return $sPtn;
  278. }
  279. #------------------------------------------------------------------------------
  280. # plot (for GD::Barcode::QRcode)
  281. #------------------------------------------------------------------------------
  282. sub plot($;%) {
  283.     my($oSelf, %hParam) =@_;
  284.     my $iUnitSize = $oSelf->{ModuleSize};
  285.     my $oOutImg = GD::Image->new(
  286.             ($oSelf->{MaxModules} + 8) * $iUnitSize, 
  287.             ($oSelf->{MaxModules} + 8) * $iUnitSize);
  288.     my $cWhite = $oOutImg->colorAllocate(255, 255,255); #For BackColor
  289.     my $cBlack = $oOutImg->colorAllocate(  0,   0,  0);
  290.     my @aCont = @{$oSelf->{Cont}};
  291.     for(my $iY=0; $iY < $oSelf->{MaxModules}; ++$iY){
  292.         for(my $iX=0; $iX < $oSelf->{MaxModules}; ++$iX){
  293.             if((_calcFrm($oSelf->{Version}, $iY, $iX)) || (($aCont[$iX][$iY] & $oSelf->{MaskCont}))) {
  294.                 if($oSelf->{ModuleSize} <= 1) {
  295.                     $oOutImg->setPixel($iX+4, $iY+4, $cBlack)
  296.                 }
  297.                 else {
  298.                     $oOutImg->filledRectangle(
  299.                             ($iX+4)*$iUnitSize, ($iY+4)*$iUnitSize,
  300.                             ($iX+4+1)*$oSelf->{ModuleSize} - 1,
  301.                             ($iY+4+1)*$oSelf->{ModuleSize} - 1,
  302.                             $cBlack);
  303.                 }
  304.             }
  305.         }
  306.     }
  307.     return $oOutImg;
  308. }
  309.  
  310. sub _calcVersion($$$) {
  311.     my ($oSelf, $iTtlBits, $raPlusWords) = @_;
  312.  
  313.     my %hMaxDatBits= (
  314.         'M' =>[ 0,
  315.           128,   224,   352,   512,   688,   864,   992,  1232,  1456,  1728,
  316.          2032,  2320,  2672,  2920,  3320,  3624,  4056,  4504,  5016,  5352,
  317.          5712,  6256,  6880,  7312,  8000,  8496,  9024,  9544, 10136, 10984,
  318.         11640, 12328, 13048, 13800, 14496, 15312, 15936, 16816, 17728, 18672, ],
  319.         'L' =>[ 0,
  320.           152,   272,   440,   640,   864,  1088,  1248,  1552,  1856,  2192,
  321.          2592,  2960,  3424,  3688,  4184,  4712,  5176,  5768,  6360,  6888,
  322.          7456,  8048,  8752,  9392, 10208, 10960, 11744, 12248, 13048, 13880,
  323.         14744, 15640, 16568, 17528, 18448, 19472, 20528, 21616, 22496, 23648, ],
  324.         'H' => [ 0,
  325.            72,   128,   208,   288,   368,   480,   528,   688,   800,   976,
  326.          1120,  1264,  1440,  1576,  1784,  2024,  2264,  2504,  2728,  3080,
  327.          3248,  3536,  3712,  4112,  4304,  4768,  5024,  5288,  5608,  5960,
  328.          6344,  6760,  7208,  7688,  7888,  8432,  8768,  9136,  9776, 10208, ],
  329.         'Q' =>[ 0,
  330.           104,   176,   272,   384,   496,   608,   704,   880,  1056,  1232,
  331.          1440,  1648,  1952,  2088,  2360,  2600,  2936,  3176,  3560,  3880,
  332.          4096,  4544,  4912,  5312,  5744,  6032,  6464,  6968,  7288,  7880,
  333.          8264,  8920,  9368,  9848, 10288, 10832, 11408, 12016, 12656, 13328,],
  334.     );
  335.     my @aMaxCodeWords=(
  336.        0,
  337.       26,   44,   70,  100,  134,  172,  196,  242,  292,  346,
  338.      404,  466,  532,  581,  655,  733,  815,  901,  991, 1085,
  339.     1156, 1258, 1364, 1474, 1588, 1706, 1828, 1921, 2051, 2185,
  340.     2323, 2465, 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706 );
  341.  
  342.     my @aRemainBits=(
  343.         0,
  344.         0, 7, 7, 7, 7, 7, 0, 0, 0, 0,
  345.         0, 0, 0, 3, 3, 3, 3, 3, 3, 3,
  346.         4, 4, 4, 4, 4, 4, 4, 3, 3, 3,
  347.         3, 3, 3, 3, 0, 0, 0, 0, 0, 0);
  348.  
  349.     if (!$oSelf->{Version}){        #--- auto version select
  350.         for($oSelf->{Version}=1; $oSelf->{Version} <= 40; ++$oSelf->{Version}) {
  351.             last if ($hMaxDatBits{$oSelf->{Ecc}}->[$oSelf->{Version}] 
  352.                         >= $iTtlBits + $raPlusWords->[$oSelf->{Version}]);
  353.         }
  354.     }
  355.     return( $hMaxDatBits{$oSelf->{Ecc}}->[$oSelf->{Version}], 
  356.             $raPlusWords->[$oSelf->{Version}], 
  357.             $aMaxCodeWords[$oSelf->{Version}], 
  358.             $aRemainBits[$oSelf->{Version}],
  359.         );
  360. }
  361. sub _calcMask($$$) {
  362.     my($oSelf, $sHorMst, $sVerMst) = @_;
  363. use constant SPCHAR => "\xAA";
  364.  
  365.     my $iMinDtmScore = 0;
  366.     my $iAllMatrix   = $oSelf->{MaxModules} * $oSelf->{MaxModules};
  367.     my $iMask = 0;
  368.     for(my $i=0; $i < 8; ++$i){
  369.         my $iBit  = 1 << $i;
  370.         my $iBitR = (~$iBit) & 0xFF;
  371.  
  372.         my $iBitMask = chr($iBit) x $iAllMatrix;
  373.         my $iHor = $sHorMst & $iBitMask;
  374.         my $iVer = $sVerMst & $iBitMask;
  375.  
  376.         my $iVerAnd = ((SPCHAR x $oSelf->{MaxModules}) . $iVer) & ($iVer . (SPCHAR x $oSelf->{MaxModules}));
  377.         my $iVerOr  = ((SPCHAR x $oSelf->{MaxModules}) . $iVer) | ($iVer . (SPCHAR x $oSelf->{MaxModules}));
  378.  
  379.         $iHor = ~$iHor;
  380.         $iVer = ~$iVer;
  381.         $iVerAnd = ~$iVerAnd;
  382.         $iVerOr  = ~$iVerOr;
  383.  
  384.         substr($iVerAnd, $iAllMatrix, 0)  = SPCHAR;
  385.         substr($iVerOr,  $iAllMatrix, 0)  = SPCHAR;
  386.         for(my $k = ($oSelf->{MaxModules} - 1); $k > 0 ; $k--) {
  387.             substr($iHor,    $k * $oSelf->{MaxModules}, 0) = SPCHAR;
  388.             substr($iVer,    $k * $oSelf->{MaxModules}, 0) = SPCHAR;
  389.             substr($iVerAnd, $k * $oSelf->{MaxModules}, 0) = SPCHAR;
  390.             substr($iVerOr,  $k * $oSelf->{MaxModules}, 0) = SPCHAR;
  391.         }
  392.  
  393.         $iHor .= (SPCHAR . $iVer);
  394.         my $iN1Srch  = (chr(255) x 5) . "+|" . (chr($iBitR) x 5) . "+";
  395.         my $iN2Srch1 = chr($iBitR).chr($iBitR)."+";
  396.         my $iN2Srch2 = chr(255).chr(255)."+";
  397.         my $iN3Srch  = chr($iBitR) . chr(255) . 
  398.                       chr($iBitR) . chr($iBitR) . chr($iBitR) . chr(255) . chr($iBitR);
  399.         my $iN4Srch  = chr($iBitR);
  400.  
  401.         my $iHorTmp = $iHor;
  402.         my $iDemeritN3 = ( $iHorTmp =~ s/$iN3Srch//g ) * 40;
  403.         my $iDemeritN4 = int(abs(((100* ( ($iVer=~s/$iN4Srch//g)/($iAllMatrix)))-50)/5))*10;
  404.  
  405.         my $iMatchBeforeNum = length($iVerAnd) + length($iVerOr);
  406.         my $iMatchNum    = ($iVerAnd =~ s/$iN2Srch1//g ) + ($iVerOr =~ s/$iN2Srch2//g );
  407.         my $iMatchAftNum =length($iVerAnd)+length($iVerOr);
  408.         my $iDemeritN2=($iMatchBeforeNum-$iMatchAftNum-$iMatchNum)*3;
  409.  
  410.         my $iMatchBfrNum = length($iHor);
  411.         $iMatchNum    = ( $iHor =~ s/$iN1Srch//g );
  412.         $iMatchAftNum = length($iHor);
  413.         my $iDemeritN1   = $iMatchBfrNum - $iMatchAftNum - ($iMatchNum * 2);
  414.  
  415.         my $iDemeritScore = $iDemeritN1 + $iDemeritN2 + $iDemeritN3 + $iDemeritN4;
  416.  
  417.         if ($iDemeritScore <= $iMinDtmScore || $i==0){
  418.             $iMask  = $i;
  419.             $iMinDtmScore = $iDemeritScore;
  420.         }
  421.     }
  422.     return $iMask;
  423. }
  424. sub _cnv8bit($$$$) {
  425.     my($oSelf, $iDatCnt, $raDatVal, $raDatBit) = @_;
  426.  
  427.     my $iDatLen = length($oSelf->{text});
  428.     $raDatVal->[$iDatCnt]=4;   # 8bit byte mode
  429.     ++$iDatCnt;
  430.     $raDatBit->[$iDatCnt]=8;   # version 1-9
  431.     $raDatVal->[$iDatCnt] =$iDatLen;
  432.     $oSelf->{WordsPos}   =$iDatCnt;
  433.  
  434.     $iDatCnt++;
  435.     for(my $i=0; $i < $iDatLen; ++$i) {
  436.         $raDatVal->[$iDatCnt] = ord(substr($oSelf->{text},$i,1));
  437.         $raDatBit->[$iDatCnt] = 8;
  438.         $iDatCnt++;
  439.     }
  440.     return (
  441.         $iDatCnt,
  442.         [
  443.             0,
  444.             0, 0, 0, 0, 0, 0, 0, 0, 0, 8,
  445.             8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
  446.             8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
  447.             8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
  448.         ]);
  449. }
  450. sub _cnvAlphaNumeric($$$$) {
  451.     my($oSelf, $iDatCnt, $raDatVal, $raDatBit) = @_;
  452.  
  453.     my $iDatLen = length($oSelf->{text});
  454.     $raDatVal->[$iDatCnt]=2;            # alpha numeric mode
  455.     $iDatCnt++;
  456.     $raDatVal->[$iDatCnt] = $iDatLen;
  457.     $raDatBit->[$iDatCnt] = 9;            #version 1-9
  458.     $oSelf->{WordsPos}   = $iDatCnt;
  459.     my %hAlphanumeric=(
  460.             '0'=> 0, '1'=> 1, '2'=> 2, '3'=> 3, '4'=> 4,
  461.             '5'=> 5, '6'=> 6, '7'=> 7, '8'=> 8, '9'=> 9,
  462.             'A'=>10, 'B'=>11, 'C'=>12, 'D'=>13, 'E'=>14,
  463.             'F'=>15, 'G'=>16, 'H'=>17, 'I'=>18, 'J'=>19,
  464.             'K'=>20, 'L'=>21, 'M'=>22, 'N'=>23, 'O'=>24,
  465.             'P'=>25, 'Q'=>26, 'R'=>27, 'S'=>28, 'T'=>29,
  466.             'U'=>30, 'V'=>31, 'W'=>32, 'X'=>33, 'Y'=>34,
  467.             'Z'=>35, ' '=>36, '$'=>37, '%'=>38, '*'=>39,
  468.             '+'=>40, '-'=>41, '.'=>42, '/'=>43, ':'=>44);
  469.     $iDatCnt++;
  470.     for(my $i=0 ; $i < $iDatLen; ++$i){
  471.         if (($i % 2)==0){
  472.             $raDatVal->[$iDatCnt] = $hAlphanumeric{substr($oSelf->{text},$i,1)};
  473.             $raDatBit->[$iDatCnt] = 6;
  474.         }
  475.         else {
  476.             $raDatVal->[$iDatCnt] = $raDatVal->[$iDatCnt] * 45 +
  477.                                      $hAlphanumeric{substr($oSelf->{text}, $i, 1)};
  478.             $raDatBit->[$iDatCnt] = 11;
  479.             $iDatCnt++;
  480.         }
  481.     }
  482.     ++$iDatCnt if(($raDatBit->[$iDatCnt] || 0) > 0);
  483.     return (
  484.         $iDatCnt, 
  485.         [   0,
  486.             0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
  487.             2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  488.             2, 2, 2, 2, 2, 2, 4, 4, 4, 4,
  489.             4, 4, 4, 4, 4, 4, 4, 4, 4, 4, ]
  490.     );
  491. }
  492. sub _cnvNumeric($$$$) {
  493.     my($oSelf, $iDatCnt, $raDatVal, $raDatBit) = @_;
  494.  
  495.     my $iDatLen = length($oSelf->{text});
  496.     $raDatVal->[$iDatCnt] = 1;              # numeric mode
  497.     $iDatCnt++;
  498.     $raDatVal->[$iDatCnt] = $iDatLen;   # length
  499.     $raDatBit->[$iDatCnt] = 10;             # version 1-9
  500.     $oSelf->{WordsPos} = $iDatCnt;
  501.  
  502.     $iDatCnt++;
  503.     for(my $i=0;$i < $iDatLen; ++$i){
  504.         if (($i % 3)==0){
  505.             $raDatVal->[$iDatCnt] = substr($oSelf->{text},$i,1);
  506.             $raDatBit->[$iDatCnt] = 4;
  507.         }
  508.         else {
  509.             $raDatVal->[$iDatCnt] = $raDatVal->[$iDatCnt] * 10 + 
  510.                                     substr($oSelf->{text},$i,1);
  511.             if (($i % 3)==1){
  512.                 $raDatBit->[$iDatCnt] = 7;
  513.             }
  514.             else {
  515.                 $raDatBit->[$iDatCnt] =10;
  516.                 $iDatCnt++;
  517.             }
  518.         }
  519.     }
  520.     ++$iDatCnt if(defined($raDatBit->[$iDatCnt]) && ($raDatBit->[$iDatCnt] > 0));
  521.     return (
  522.         $iDatCnt,
  523.         [ 0,
  524.           0, 0, 0, 0, 0, 0, 0, 0, 0, 2,
  525.           2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  526.           2, 2, 2, 2, 2, 2, 4, 4, 4, 4,
  527.           4, 4, 4, 4, 4, 4, 4, 4, 4, 4]);
  528. }
  529. sub _calcFrm($$$) {
  530.     my($iV, $iR, $iC) = @_;
  531.     my $iPosR = $iV*4+10;
  532.     if($iR==0) {
  533.         return 1 if(
  534.             (($iC >= 0)      and ($iC <= 6)) or 
  535.             (($iC >= $iPosR) and ($iC <= ($iPosR + 6))));
  536.     }
  537.     elsif($iR==6) {
  538.         return 1 if(
  539.             (($iC % 2)==0) or
  540.             (($iC >= 0)      and ($iC <= 6)) or 
  541.             (($iC >= $iPosR) and ($iC <= ($iPosR + 6))));
  542.     }
  543.     elsif(($iR == 1) or ($iR == 5)) {
  544.         return 1 
  545.             if (($iC == 0) or ($iC == 6) or
  546.                 ($iC == $iPosR) or ($iC == $iPosR+6));
  547.     }
  548.     elsif(($iR >= 2) and ($iR <= 4)) {
  549.         return 1 
  550.              if(($iC == 0) or 
  551.                 (($iC >= 2) and ($iC <= 4))or
  552.                 ($iC == 6) or
  553.                 ($iC == $iPosR) or 
  554.                 (($iC >= ($iPosR+2)) and ($iC <= ($iPosR+4))) or
  555.                 ($iC == $iPosR+6));
  556.     }
  557.     elsif(($iR == ($iPosR-2))) {
  558.         return 1 if($iC == 6);
  559.         if($iV > 1) {
  560.             return 1 if(($iC>=($iPosR-2)) and 
  561.                         ($iC<=($iPosR+2)));
  562.         }
  563.     }
  564.     elsif(($iR == ($iPosR-1))) {
  565.         return 1 if($iC == 8);
  566.         if($iV > 1) {
  567.             return 1 if(($iC==($iPosR-2)) or 
  568.                         ($iC==($iPosR+2)));
  569.         }
  570.     }
  571.     elsif ($iR == $iPosR) {
  572.         return 1 if((($iC >= 0) and ($iC <= 6)));
  573.         if($iV > 1) {
  574.             return 1 if(($iC==($iPosR-2)) or 
  575.                         ($iC== $iPosR )   or
  576.                         ($iC==($iPosR+2)));
  577.         }
  578.     }
  579.     elsif ($iR == ($iPosR+1)) {
  580.         return 1 if(($iC == 0) or ($iC == 6));
  581.         if($iV > 1) {
  582.             return 1 if(($iC==($iPosR-2)) or 
  583.                         ($iC==($iPosR+2)));
  584.         }
  585.     }
  586.     elsif ($iR == ($iPosR+2)) {
  587.         return 1 if(($iC == 0) or 
  588.                   (($iC >= 2) and ($iC <= 4))or
  589.                   ($iC == 6));
  590.         if($iV > 1) {
  591.             return 1 if(($iC>=($iPosR-2)) and 
  592.                         ($iC<=($iPosR+2)));
  593.         }
  594.     }
  595.     elsif(($iR > ($iPosR+2)) and ($iR <= ($iPosR+4))) {
  596.         return 1 
  597.             if (($iC == 0) or 
  598.                 (($iC >= 2) and ($iC <= 4))or
  599.                 ($iC == 6));
  600.     }
  601.     elsif($iR == ($iPosR+5)) {
  602.         return 1 
  603.             if(($iC == 0) or ($iC == 6));
  604.     }
  605.     elsif($iR == ($iPosR+6)) {
  606.         return 1 if(($iC >= 0) and ($iC <= 6));
  607.     }
  608.     else {
  609.         return 1 if((($iR % 2)==0) and ($iC ==6));
  610.     }
  611.   #2. Depend on Version
  612.     return 0 if(($iV >= 1) and ($iV <= 6));
  613.     if($iV == 7) {
  614.         if($iR==35){
  615.             return ((($iC >= 1) and ($iC <= 4)))? 1 : 0;
  616.         }
  617.         elsif($iR==3){
  618.             return ((($iC >= 35) and ($iC <= 36)))? 1 : 0;
  619.         }
  620.         elsif($iR==36){
  621.             return (($iC == 0) or (($iC >= 3) and ($iC <= 4)) or (($iC >= 20) and ($iC <= 24)))? 1 : 0;
  622.         }
  623.         elsif($iR==4){
  624.             return ((($iC >= 20) and ($iC <= 24)) or (($iC >= 34) and ($iC <= 36)))? 1 : 0;
  625.         }
  626.         elsif($iR==38){
  627.             return (($iC == 20) or ($iC == 22) or ($iC == 24))? 1 : 0;
  628.         }
  629.         elsif($iR==22){
  630.             return (($iC == 4) or ($iC == 8) or ($iC == 20) or ($iC == 22) or ($iC == 24) or ($iC == 36) or ($iC == 38) or ($iC == 40))? 1 : 0;
  631.         }
  632.         elsif($iR==34){
  633.             return (($iC == 4))? 1 : 0;
  634.         }
  635.         elsif($iR==0){
  636.             return (($iC == 36))? 1 : 0;
  637.         }
  638.         elsif(($iR==8) or ($iR==40)){
  639.             return ((($iC >= 20) and ($iC <= 24)))? 1 : 0;
  640.         }
  641.         elsif(($iR==21) or ($iR==23)){
  642.             return (($iC == 4) or ($iC == 8) or ($iC == 20) or ($iC == 24) or ($iC == 36) or ($iC == 40))? 1 : 0;
  643.         }
  644.         elsif(($iR==1) or ($iR==2)){
  645.             return (($iC == 35))? 1 : 0;
  646.         }
  647.         elsif(($iR==20) or ($iR==24)){
  648.             return ((($iC >= 4) and ($iC <= 5)) or (($iC >= 7) and ($iC <= 8)) or (($iC >= 20) and ($iC <= 24)) or (($iC >= 36) and ($iC <= 40)))? 1 : 0;
  649.         }
  650.         elsif(($iR==5) or ($iR==7) or ($iR==37) or ($iR==39)){
  651.             return (($iC == 20) or ($iC == 24))? 1 : 0;
  652.         }
  653.         return 0;
  654.     }
  655.     elsif($iV == 8) {
  656.         if($iR==40){
  657.             return ((($iC >= 0) and ($iC <= 2)) or (($iC >= 22) and ($iC <= 26)))? 1 : 0;
  658.         }
  659.         elsif($iR==0){
  660.             return (($iC == 40))? 1 : 0;
  661.         }
  662.         elsif($iR==38){
  663.             return (($iC == 1) or ($iC == 5))? 1 : 0;
  664.         }
  665.         elsif($iR==5){
  666.             return (($iC == 22) or ($iC == 26) or ($iC == 38))? 1 : 0;
  667.         }
  668.         elsif($iR==24){
  669.             return (($iC == 4) or ($iC == 8) or ($iC == 22) or ($iC == 24) or ($iC == 26) or ($iC == 40) or ($iC == 42) or ($iC == 44))? 1 : 0;
  670.         }
  671.         elsif($iR==39){
  672.             return ((($iC >= 1) and ($iC <= 3)))? 1 : 0;
  673.         }
  674.         elsif($iR==1){
  675.             return ((($iC >= 38) and ($iC <= 40)))? 1 : 0;
  676.         }
  677.         elsif($iR==2){
  678.             return ((($iC >= 39) and ($iC <= 40)))? 1 : 0;
  679.         }
  680.         elsif($iR==42){
  681.             return (($iC == 22) or ($iC == 24) or ($iC == 26))? 1 : 0;
  682.         }
  683.         elsif($iR==3){
  684.             return (($iC == 39))? 1 : 0;
  685.         }
  686.         elsif(($iR==23) or ($iR==25)){
  687.             return (($iC == 4) or ($iC == 8) or ($iC == 22) or ($iC == 26) or ($iC == 40) or ($iC == 44))? 1 : 0;
  688.         }
  689.         elsif(($iR==22) or ($iR==26)){
  690.             return ((($iC >= 4) and ($iC <= 5)) or (($iC >= 7) and ($iC <= 8)) or (($iC >= 22) and ($iC <= 26)) or (($iC >= 40) and ($iC <= 44)))? 1 : 0;
  691.         }
  692.         elsif(($iR==7) or ($iR==41) or ($iR==43)){
  693.             return (($iC == 22) or ($iC == 26))? 1 : 0;
  694.         }
  695.         elsif(($iR==4) or ($iR==8) or ($iR==44)){
  696.             return ((($iC >= 22) and ($iC <= 26)))? 1 : 0;
  697.         }
  698.         return 0;
  699.     }
  700.     elsif($iV == 9) {
  701.         if($iR==26){
  702.             return (($iC == 4) or ($iC == 8) or ($iC == 24) or ($iC == 26) or ($iC == 28) or ($iC == 44) or ($iC == 46) or ($iC == 48))? 1 : 0;
  703.         }
  704.         elsif($iR==46){
  705.             return (($iC == 24) or ($iC == 26) or ($iC == 28))? 1 : 0;
  706.         }
  707.         elsif($iR==44){
  708.             return (($iC == 3) or (($iC >= 24) and ($iC <= 28)))? 1 : 0;
  709.         }
  710.         elsif($iR==5){
  711.             return (($iC == 24) or ($iC == 28) or ($iC == 42))? 1 : 0;
  712.         }
  713.         elsif($iR==0){
  714.             return (($iC == 42))? 1 : 0;
  715.         }
  716.         elsif($iR==1){
  717.             return ((($iC >= 42) and ($iC <= 43)))? 1 : 0;
  718.         }
  719.         elsif($iR==2){
  720.             return (($iC == 43))? 1 : 0;
  721.         }
  722.         elsif($iR==43){
  723.             return ((($iC >= 1) and ($iC <= 2)))? 1 : 0;
  724.         }
  725.         elsif($iR==4){
  726.             return ((($iC >= 24) and ($iC <= 28)) or ($iC == 42))? 1 : 0;
  727.         }
  728.         elsif($iR==3){
  729.             return (($iC == 42) or ($iC == 44))? 1 : 0;
  730.         }
  731.         elsif($iR==42){
  732.             return ((($iC >= 0) and ($iC <= 1)) or (($iC >= 3) and ($iC <= 5)))? 1 : 0;
  733.         }
  734.         elsif(($iR==24) or ($iR==28)){
  735.             return ((($iC >= 4) and ($iC <= 5)) or (($iC >= 7) and ($iC <= 8)) or (($iC >= 24) and ($iC <= 28)) or (($iC >= 44) and ($iC <= 48)))? 1 : 0;
  736.         }
  737.         elsif(($iR==25) or ($iR==27)){
  738.             return (($iC == 4) or ($iC == 8) or ($iC == 24) or ($iC == 28) or ($iC == 44) or ($iC == 48))? 1 : 0;
  739.         }
  740.         elsif(($iR==8) or ($iR==48)){
  741.             return ((($iC >= 24) and ($iC <= 28)))? 1 : 0;
  742.         }
  743.         elsif(($iR==7) or ($iR==45) or ($iR==47)){
  744.             return (($iC == 24) or ($iC == 28))? 1 : 0;
  745.         }
  746.         return 0;
  747.     }
  748.     elsif($iV == 10) {
  749.         if($iR==28){
  750.             return (($iC == 4) or ($iC == 8) or ($iC == 26) or ($iC == 28) or ($iC == 30) or ($iC == 48) or ($iC == 50) or ($iC == 52))? 1 : 0;
  751.         }
  752.         elsif($iR==5){
  753.             return (($iC == 26) or ($iC == 30) or ($iC == 46))? 1 : 0;
  754.         }
  755.         elsif($iR==46){
  756.             return (($iC == 0) or ($iC == 2) or ($iC == 5))? 1 : 0;
  757.         }
  758.         elsif($iR==50){
  759.             return (($iC == 26) or ($iC == 28) or ($iC == 30))? 1 : 0;
  760.         }
  761.         elsif($iR==4){
  762.             return ((($iC >= 26) and ($iC <= 30)) or ($iC == 47))? 1 : 0;
  763.         }
  764.         elsif($iR==47){
  765.             return ((($iC >= 0) and ($iC <= 4)))? 1 : 0;
  766.         }
  767.         elsif(($iR==27) or ($iR==29)){
  768.             return (($iC == 4) or ($iC == 8) or ($iC == 26) or ($iC == 30) or ($iC == 48) or ($iC == 52))? 1 : 0;
  769.         }
  770.         elsif(($iR==0) or ($iR==2)){
  771.             return ((($iC >= 46) and ($iC <= 47)))? 1 : 0;
  772.         }
  773.         elsif(($iR==1) or ($iR==3)){
  774.             return (($iC == 47))? 1 : 0;
  775.         }
  776.         elsif(($iR==26) or ($iR==30)){
  777.             return ((($iC >= 4) and ($iC <= 5)) or (($iC >= 7) and ($iC <= 8)) or (($iC >= 26) and ($iC <= 30)) or (($iC >= 48) and ($iC <= 52)))? 1 : 0;
  778.         }
  779.         elsif(($iR==7) or ($iR==49) or ($iR==51)){
  780.             return (($iC == 26) or ($iC == 30))? 1 : 0;
  781.         }
  782.         elsif(($iR==8) or ($iR==48) or ($iR==52)){
  783.             return ((($iC >= 26) and ($iC <= 30)))? 1 : 0;
  784.         }
  785.         return 0;
  786.     }
  787.     elsif($iV == 11) {
  788.         if($iR==50){
  789.             return ((($iC >= 2) and ($iC <= 5)))? 1 : 0;
  790.         }
  791.         elsif($iR==52){
  792.             return ((($iC >= 0) and ($iC <= 3)) or (($iC >= 28) and ($iC <= 32)))? 1 : 0;
  793.         }
  794.         elsif($iR==2){
  795.             return ((($iC >= 50) and ($iC <= 52)))? 1 : 0;
  796.         }
  797.         elsif($iR==30){
  798.             return (($iC == 4) or ($iC == 8) or ($iC == 28) or ($iC == 30) or ($iC == 32) or ($iC == 52) or ($iC == 54) or ($iC == 56))? 1 : 0;
  799.         }
  800.         elsif($iR==54){
  801.             return (($iC == 28) or ($iC == 30) or ($iC == 32))? 1 : 0;
  802.         }
  803.         elsif($iR==4){
  804.             return ((($iC >= 28) and ($iC <= 32)) or (($iC >= 50) and ($iC <= 51)))? 1 : 0;
  805.         }
  806.         elsif($iR==51){
  807.             return ((($iC >= 0) and ($iC <= 2)) or ($iC == 4))? 1 : 0;
  808.         }
  809.         elsif($iR==5){
  810.             return (($iC == 28) or ($iC == 32) or ($iC == 50))? 1 : 0;
  811.         }
  812.         elsif($iR==3){
  813.             return (($iC == 50) or ($iC == 52))? 1 : 0;
  814.         }
  815.         elsif(($iR==0) or ($iR==1)){
  816.             return ((($iC >= 51) and ($iC <= 52)))? 1 : 0;
  817.         }
  818.         elsif(($iR==29) or ($iR==31)){
  819.             return (($iC == 4) or ($iC == 8) or ($iC == 28) or ($iC == 32) or ($iC == 52) or ($iC == 56))? 1 : 0;
  820.         }
  821.         elsif(($iR==28) or ($iR==32)){
  822.             return ((($iC >= 4) and ($iC <= 5)) or (($iC >= 7) and ($iC <= 8)) or (($iC >= 28) and ($iC <= 32)) or (($iC >= 52) and ($iC <= 56)))? 1 : 0;
  823.         }
  824.         elsif(($iR==8) or ($iR==56)){
  825.             return ((($iC >= 28) and ($iC <= 32)))? 1 : 0;
  826.         }
  827.         elsif(($iR==7) or ($iR==53) or ($iR==55)){
  828.             return (($iC == 28) or ($iC == 32))? 1 : 0;
  829.         }
  830.         return 0;
  831.     }
  832.     elsif($iV == 12) {
  833.         if($iR==55){
  834.             return (($iC == 0) or ($iC == 3))? 1 : 0;
  835.         }
  836.         elsif($iR==56){
  837.             return ((($iC >= 1) and ($iC <= 2)) or ($iC == 4) or (($iC >= 30) and ($iC <= 34)))? 1 : 0;
  838.         }
  839.         elsif($iR==5){
  840.             return (($iC == 30) or ($iC == 34) or ($iC == 54))? 1 : 0;
  841.         }
  842.         elsif($iR==1){
  843.             return (($iC == 56))? 1 : 0;
  844.         }
  845.         elsif($iR==32){
  846.             return (($iC == 4) or ($iC == 8) or ($iC == 30) or ($iC == 32) or ($iC == 34) or ($iC == 56) or ($iC == 58) or ($iC == 60))? 1 : 0;
  847.         }
  848.         elsif($iR==4){
  849.             return ((($iC >= 30) and ($iC <= 34)) or ($iC == 56))? 1 : 0;
  850.         }
  851.         elsif($iR==3){
  852.             return ((($iC >= 54) and ($iC <= 55)))? 1 : 0;
  853.         }
  854.         elsif($iR==2){
  855.             return (($iC == 54) or ($iC == 56))? 1 : 0;
  856.         }
  857.         elsif($iR==54){
  858.             return ((($iC >= 2) and ($iC <= 3)) or ($iC == 5))? 1 : 0;
  859.         }
  860.         elsif($iR==0){
  861.             return (($iC == 55))? 1 : 0;
  862.         }
  863.         elsif($iR==58){
  864.             return (($iC == 30) or ($iC == 32) or ($iC == 34))? 1 : 0;
  865.         }
  866.         elsif(($iR==30) or ($iR==34)){
  867.             return ((($iC >= 4) and ($iC <= 5)) or (($iC >= 7) and ($iC <= 8)) or (($iC >= 30) and ($iC <= 34)) or (($iC >= 56) and ($iC <= 60)))? 1 : 0;
  868.         }
  869.         elsif(($iR==8) or ($iR==60)){
  870.             return ((($iC >= 30) and ($iC <= 34)))? 1 : 0;
  871.         }
  872.         elsif(($iR==31) or ($iR==33)){
  873.             return (($iC == 4) or ($iC == 8) or ($iC == 30) or ($iC == 34) or ($iC == 56) or ($iC == 60))? 1 : 0;
  874.         }
  875.         elsif(($iR==7) or ($iR==57) or ($iR==59)){
  876.             return (($iC == 30) or ($iC == 34))? 1 : 0;
  877.         }
  878.         return 0;
  879.     }
  880.     elsif($iV == 13) {
  881.         if($iR==3){
  882.             return (($iC == 60))? 1 : 0;
  883.         }
  884.         elsif($iR==58){
  885.             return (($iC == 0) or ($iC == 2) or (($iC >= 4) and ($iC <= 5)))? 1 : 0;
  886.         }
  887.         elsif($iR==2){
  888.             return (($iC == 58))? 1 : 0;
  889.         }
  890.         elsif($iR==62){
  891.             return (($iC == 32) or ($iC == 34) or ($iC == 36))? 1 : 0;
  892.         }
  893.         elsif($iR==60){
  894.             return (($iC == 0) or (($iC >= 3) and ($iC <= 4)) or (($iC >= 32) and ($iC <= 36)))? 1 : 0;
  895.         }
  896.         elsif($iR==34){
  897.             return (($iC == 4) or ($iC == 8) or ($iC == 32) or ($iC == 34) or ($iC == 36) or ($iC == 60) or ($iC == 62) or ($iC == 64))? 1 : 0;
  898.         }
  899.         elsif($iR==0){
  900.             return ((($iC >= 58) and ($iC <= 60)))? 1 : 0;
  901.         }
  902.         elsif($iR==4){
  903.             return ((($iC >= 32) and ($iC <= 36)) or ($iC == 58) or ($iC == 60))? 1 : 0;
  904.         }
  905.         elsif($iR==59){
  906.             return (($iC == 0))? 1 : 0;
  907.         }
  908.         elsif($iR==5){
  909.             return (($iC == 32) or ($iC == 36) or ($iC == 58))? 1 : 0;
  910.         }
  911.         elsif(($iR==32) or ($iR==36)){
  912.             return ((($iC >= 4) and ($iC <= 5)) or (($iC >= 7) and ($iC <= 8)) or (($iC >= 32) and ($iC <= 36)) or (($iC >= 60) and ($iC <= 64)))? 1 : 0;
  913.         }
  914.         elsif(($iR==33) or ($iR==35)){
  915.             return (($iC == 4) or ($iC == 8) or ($iC == 32) or ($iC == 36) or ($iC == 60) or ($iC == 64))? 1 : 0;
  916.         }
  917.         elsif(($iR==8) or ($iR==64)){
  918.             return ((($iC >= 32) and ($iC <= 36)))? 1 : 0;
  919.         }
  920.         elsif(($iR==7) or ($iR==61) or ($iR==63)){
  921.             return (($iC == 32) or ($iC == 36))? 1 : 0;
  922.         }
  923.         return 0;
  924.     }
  925.     elsif($iV == 14) {
  926.         if($iR==63){
  927.             return ((($iC >= 3) and ($iC <= 4)))? 1 : 0;
  928.         }
  929.         elsif($iR==4){
  930.             return ((($iC >= 24) and ($iC <= 28)) or (($iC >= 44) and ($iC <= 48)) or (($iC >= 63) and ($iC <= 64)))? 1 : 0;
  931.         }
  932.         elsif($iR==66){
  933.             return (($iC == 24) or ($iC == 26) or ($iC == 28) or ($iC == 44) or ($iC == 46) or ($iC == 48))? 1 : 0;
  934.         }
  935.         elsif($iR==3){
  936.             return ((($iC >= 62) and ($iC <= 63)))? 1 : 0;
  937.         }
  938.         elsif($iR==64){
  939.             return (($iC == 0) or ($iC == 4) or (($iC >= 24) and ($iC <= 28)) or (($iC >= 44) and ($iC <= 48)))? 1 : 0;
  940.         }
  941.         elsif($iR==5){
  942.             return (($iC == 24) or ($iC == 28) or ($iC == 44) or ($iC == 48) or ($iC == 62))? 1 : 0;
  943.         }
  944.         elsif($iR==0){
  945.             return (($iC == 62) or ($iC == 64))? 1 : 0;
  946.         }
  947.         elsif($iR==1){
  948.             return (($iC == 62))? 1 : 0;
  949.         }
  950.         elsif($iR==62){
  951.             return ((($iC >= 0) and ($iC <= 1)) or ($iC == 3) or ($iC == 5))? 1 : 0;
  952.         }
  953.         elsif(($iR==8) or ($iR==68)){
  954.             return ((($iC >= 24) and ($iC <= 28)) or (($iC >= 44) and ($iC <= 48)))? 1 : 0;
  955.         }
  956.         elsif(($iR==26) or ($iR==46)){
  957.             return (($iC == 4) or ($iC == 8) or ($iC == 24) or ($iC == 26) or ($iC == 28) or ($iC == 44) or ($iC == 46) or ($iC == 48) or ($iC == 64) or ($iC == 66) or ($iC == 68))? 1 : 0;
  958.         }
  959.         elsif(($iR==7) or ($iR==65) or ($iR==67)){
  960.             return (($iC == 24) or ($iC == 28) or ($iC == 44) or ($iC == 48))? 1 : 0;
  961.         }
  962.         elsif(($iR==25) or ($iR==27) or ($iR==45) or ($iR==47)){
  963.             return (($iC == 4) or ($iC == 8) or ($iC == 24) or ($iC == 28) or ($iC == 44) or ($iC == 48) or ($iC == 64) or ($iC == 68))? 1 : 0;
  964.         }
  965.         elsif(($iR==24) or ($iR==28) or ($iR==44) or ($iR==48)){
  966.             return ((($iC >= 4) and ($iC <= 5)) or (($iC >= 7) and ($iC <= 8)) or (($iC >= 24) and ($iC <= 28)) or (($iC >= 44) and ($iC <= 48)) or (($iC >= 64) and ($iC <= 68)))? 1 : 0;
  967.         }
  968.         return 0;
  969.     }
  970.     elsif($iV == 15) {
  971.         if($iR==66){
  972.             return (($iC == 1) or (($iC >= 4) and ($iC <= 5)))? 1 : 0;
  973.         }
  974.         elsif($iR==4){
  975.             return ((($iC >= 24) and ($iC <= 28)) or (($iC >= 46) and ($iC <= 50)) or (($iC >= 66) and ($iC <= 68)))? 1 : 0;
  976.         }
  977.         elsif($iR==68){
  978.             return ((($iC >= 1) and ($iC <= 4)) or (($iC >= 24) and ($iC <= 28)) or (($iC >= 46) and ($iC <= 50)))? 1 : 0;
  979.         }
  980.         elsif($iR==67){
  981.             return (($iC == 4))? 1 : 0;
  982.         }
  983.         elsif($iR==1){
  984.             return (($iC == 66) or ($iC == 68))? 1 : 0;
  985.         }
  986.         elsif($iR==70){
  987.             return (($iC == 24) or ($iC == 26) or ($iC == 28) or ($iC == 46) or ($iC == 48) or ($iC == 50))? 1 : 0;
  988.         }
  989.         elsif($iR==5){
  990.             return (($iC == 24) or ($iC == 28) or ($iC == 46) or ($iC == 50) or ($iC == 66))? 1 : 0;
  991.         }
  992.         elsif(($iR==2) or ($iR==3)){
  993.             return (($iC == 68))? 1 : 0;
  994.         }
  995.         elsif(($iR==8) or ($iR==72)){
  996.             return ((($iC >= 24) and ($iC <= 28)) or (($iC >= 46) and ($iC <= 50)))? 1 : 0;
  997.         }
  998.         elsif(($iR==26) or ($iR==48)){
  999.             return (($iC == 4) or ($iC == 8) or ($iC == 24) or ($iC == 26) or ($iC == 28) or ($iC == 46) or ($iC == 48) or ($iC == 50) or ($iC == 68) or ($iC == 70) or ($iC == 72))? 1 : 0;
  1000.         }
  1001.         elsif(($iR==7) or ($iR==69) or ($iR==71)){
  1002.             return (($iC == 24) or ($iC == 28) or ($iC == 46) or ($iC == 50))? 1 : 0;
  1003.         }
  1004.         elsif(($iR==24) or ($iR==28) or ($iR==46) or ($iR==50)){
  1005.             return ((($iC >= 4) and ($iC <= 5)) or (($iC >= 7) and ($iC <= 8)) or (($iC >= 24) and ($iC <= 28)) or (($iC >= 46) and ($iC <= 50)) or (($iC >= 68) and ($iC <= 72)))? 1 : 0;
  1006.         }
  1007.         elsif(($iR==25) or ($iR==27) or ($iR==47) or ($iR==49)){
  1008.             return (($iC == 4) or ($iC == 8) or ($iC == 24) or ($iC == 28) or ($iC == 46) or ($iC == 50) or ($iC == 68) or ($iC == 72))? 1 : 0;
  1009.         }
  1010.         return 0;
  1011.     }
  1012.     elsif($iV == 16) {
  1013.         if($iR==74){
  1014.             return (($iC == 24) or ($iC == 26) or ($iC == 28) or ($iC == 48) or ($iC == 50) or ($iC == 52))? 1 : 0;
  1015.         }
  1016.         elsif($iR==70){
  1017.             return ((($iC >= 1) and ($iC <= 3)))? 1 : 0;
  1018.         }
  1019.         elsif($iR==72){
  1020.             return ((($iC >= 1) and ($iC <= 3)) or (($iC >= 24) and ($iC <= 28)) or (($iC >= 48) and ($iC <= 52)))? 1 : 0;
  1021.         }
  1022.         elsif($iR==1){
  1023.             return ((($iC >= 70) and ($iC <= 72)))? 1 : 0;
  1024.         }
  1025.         elsif($iR==71){
  1026.             return (($iC == 1) or ($iC == 5))? 1 : 0;
  1027.         }
  1028.         elsif($iR==5){
  1029.             return (($iC == 24) or ($iC == 28) or ($iC == 48) or ($iC == 52) or ($iC == 71))? 1 : 0;
  1030.         }
  1031.         elsif(($iR==26) or ($iR==50)){
  1032.             return (($iC == 4) or ($iC == 8) or ($iC == 24) or ($iC == 26) or ($iC == 28) or ($iC == 48) or ($iC == 50) or ($iC == 52) or ($iC == 72) or ($iC == 74) or ($iC == 76))? 1 : 0;
  1033.         }
  1034.         elsif(($iR==2) or ($iR==3)){
  1035.             return (($iC == 70) or ($iC == 72))? 1 : 0;
  1036.         }
  1037.         elsif(($iR==4) or ($iR==8) or ($iR==76)){
  1038.             return ((($iC >= 24) and ($iC <= 28)) or (($iC >= 48) and ($iC <= 52)))? 1 : 0;
  1039.         }
  1040.         elsif(($iR==7) or ($iR==73) or ($iR==75)){
  1041.             return (($iC == 24) or ($iC == 28) or ($iC == 48) or ($iC == 52))? 1 : 0;
  1042.         }
  1043.         elsif(($iR==24) or ($iR==28) or ($iR==48) or ($iR==52)){
  1044.             return ((($iC >= 4) and ($iC <= 5)) or (($iC >= 7) and ($iC <= 8)) or (($iC >= 24) and ($iC <= 28)) or (($iC >= 48) and ($iC <= 52)) or (($iC >= 72) and ($iC <= 76)))? 1 : 0;
  1045.         }
  1046.         elsif(($iR==25) or ($iR==27) or ($iR==49) or ($iR==51)){
  1047.             return (($iC == 4) or ($iC == 8) or ($iC == 24) or ($iC == 28) or ($iC == 48) or ($iC == 52) or ($iC == 72) or ($iC == 76))? 1 : 0;
  1048.         }
  1049.         return 0;
  1050.     }
  1051.     elsif($iV == 17) {
  1052.         if($iR==2){
  1053.             return (($iC == 74))? 1 : 0;
  1054.         }
  1055.         elsif($iR==3){
  1056.             return (($iC == 75))? 1 : 0;
  1057.         }
  1058.         elsif($iR==0){
  1059.             return (($iC == 74) or ($iC == 76))? 1 : 0;
  1060.         }
  1061.         elsif($iR==4){
  1062.             return ((($iC >= 28) and ($iC <= 32)) or (($iC >= 52) and ($iC <= 56)) or ($iC == 74))? 1 : 0;
  1063.         }
  1064.         elsif($iR==5){
  1065.             return (($iC == 28) or ($iC == 32) or ($iC == 52) or ($iC == 56) or ($iC == 75))? 1 : 0;
  1066.         }
  1067.         elsif($iR==74){
  1068.             return ((($iC >= 0) and ($iC <= 2)) or ($iC == 4))? 1 : 0;
  1069.         }
  1070.         elsif($iR==78){
  1071.             return (($iC == 28) or ($iC == 30) or ($iC == 32) or ($iC == 52) or ($iC == 54) or ($iC == 56))? 1 : 0;
  1072.         }
  1073.         elsif($iR==1){
  1074.             return ((($iC >= 74) and ($iC <= 75)))? 1 : 0;
  1075.         }
  1076.         elsif($iR==76){
  1077.             return (($iC == 0) or (($iC >= 28) and ($iC <= 32)) or (($iC >= 52) and ($iC <= 56)))? 1 : 0;
  1078.         }
  1079.         elsif($iR==75){
  1080.             return (($iC == 1) or ($iC == 3) or ($iC == 5))? 1 : 0;
  1081.         }
  1082.         elsif(($iR==30) or ($iR==54)){
  1083.             return (($iC == 4) or ($iC == 8) or ($iC == 28) or ($iC == 30) or ($iC == 32) or ($iC == 52) or ($iC == 54) or ($iC == 56) or ($iC == 76) or ($iC == 78) or ($iC == 80))? 1 : 0;
  1084.         }
  1085.         elsif(($iR==8) or ($iR==80)){
  1086.             return ((($iC >= 28) and ($iC <= 32)) or (($iC >= 52) and ($iC <= 56)))? 1 : 0;
  1087.         }
  1088.         elsif(($iR==7) or ($iR==77) or ($iR==79)){
  1089.             return (($iC == 28) or ($iC == 32) or ($iC == 52) or ($iC == 56))? 1 : 0;
  1090.         }
  1091.         elsif(($iR==29) or ($iR==31) or ($iR==53) or ($iR==55)){
  1092.             return (($iC == 4) or ($iC == 8) or ($iC == 28) or ($iC == 32) or ($iC == 52) or ($iC == 56) or ($iC == 76) or ($iC == 80))? 1 : 0;
  1093.         }
  1094.         elsif(($iR==28) or ($iR==32) or ($iR==52) or ($iR==56)){
  1095.             return ((($iC >= 4) and ($iC <= 5)) or (($iC >= 7) and ($iC <= 8)) or (($iC >= 28) and ($iC <= 32)) or (($iC >= 52) and ($iC <= 56)) or (($iC >= 76) and ($iC <= 80)))? 1 : 0;
  1096.         }
  1097.         return 0;
  1098.     }
  1099.     elsif($iV == 18) {
  1100.         if($iR==79){
  1101.             return ((($iC >= 0) and ($iC <= 1)) or (($iC >= 4) and ($iC <= 5)))? 1 : 0;
  1102.         }
  1103.         elsif($iR==78){
  1104.             return (($iC == 0) or ($iC == 3))? 1 : 0;
  1105.         }
  1106.         elsif($iR==3){
  1107.             return (($iC == 78) or ($iC == 80))? 1 : 0;
  1108.         }
  1109.         elsif($iR==80){
  1110.             return (($iC == 0) or ($iC == 3) or (($iC >= 28) and ($iC <= 32)) or (($iC >= 54) and ($iC <= 58)))? 1 : 0;
  1111.         }
  1112.         elsif($iR==82){
  1113.             return (($iC == 28) or ($iC == 30) or ($iC == 32) or ($iC == 54) or ($iC == 56) or ($iC == 58))? 1 : 0;
  1114.         }
  1115.         elsif($iR==5){
  1116.             return (($iC == 28) or ($iC == 32) or ($iC == 54) or ($iC == 58) or ($iC == 79))? 1 : 0;
  1117.         }
  1118.         elsif($iR==0){
  1119.             return ((($iC >= 78) and ($iC <= 80)))? 1 : 0;
  1120.         }
  1121.         elsif($iR==1){
  1122.             return (($iC == 79))? 1 : 0;
  1123.         }
  1124.         elsif($iR==4){
  1125.             return ((($iC >= 28) and ($iC <= 32)) or (($iC >= 54) and ($iC <= 58)) or ($iC == 79))? 1 : 0;
  1126.         }
  1127.         elsif(($iR==8) or ($iR==84)){
  1128.             return ((($iC >= 28) and ($iC <= 32)) or (($iC >= 54) and ($iC <= 58)))? 1 : 0;
  1129.         }
  1130.         elsif(($iR==30) or ($iR==56)){
  1131.             return (($iC == 4) or ($iC == 8) or ($iC == 28) or ($iC == 30) or ($iC == 32) or ($iC == 54) or ($iC == 56) or ($iC == 58) or ($iC == 80) or ($iC == 82) or ($iC == 84))? 1 : 0;
  1132.         }
  1133.         elsif(($iR==7) or ($iR==81) or ($iR==83)){
  1134.             return (($iC == 28) or ($iC == 32) or ($iC == 54) or ($iC == 58))? 1 : 0;
  1135.         }
  1136.         elsif(($iR==29) or ($iR==31) or ($iR==55) or ($iR==57)){
  1137.             return (($iC == 4) or ($iC == 8) or ($iC == 28) or ($iC == 32) or ($iC == 54) or ($iC == 58) or ($iC == 80) or ($iC == 84))? 1 : 0;
  1138.         }
  1139.         elsif(($iR==28) or ($iR==32) or ($iR==54) or ($iR==58)){
  1140.             return ((($iC >= 4) and ($iC <= 5)) or (($iC >= 7) and ($iC <= 8)) or (($iC >= 28) and ($iC <= 32)) or (($iC >= 54) and ($iC <= 58)) or (($iC >= 80) and ($iC <= 84)))? 1 : 0;
  1141.         }
  1142.         return 0;
  1143.     }
  1144.     elsif($iV == 19) {
  1145.         if($iR==1){
  1146.             return ((($iC >= 83) and ($iC <= 84)))? 1 : 0;
  1147.         }
  1148.         elsif($iR==4){
  1149.             return ((($iC >= 28) and ($iC <= 32)) or (($iC >= 56) and ($iC <= 60)) or (($iC >= 82) and ($iC <= 83)))? 1 : 0;
  1150.         }
  1151.         elsif($iR==84){
  1152.             return ((($iC >= 1) and ($iC <= 2)) or (($iC >= 28) and ($iC <= 32)) or (($iC >= 56) and ($iC <= 60)))? 1 : 0;
  1153.         }
  1154.         elsif($iR==83){
  1155.             return ((($iC >= 0) and ($iC <= 1)) or (($iC >= 3) and ($iC <= 5)))? 1 : 0;
  1156.         }
  1157.         elsif($iR==2){
  1158.             return (($iC == 84))? 1 : 0;
  1159.         }
  1160.         elsif($iR==86){
  1161.             return (($iC == 28) or ($iC == 30) or ($iC == 32) or ($iC == 56) or ($iC == 58) or ($iC == 60))? 1 : 0;
  1162.         }
  1163.         elsif($iR==82){
  1164.             return (($iC == 4))? 1 : 0;
  1165.         }
  1166.         elsif($iR==5){
  1167.             return (($iC == 28) or ($iC == 32) or ($iC == 56) or ($iC == 60) or ($iC == 83))? 1 : 0;
  1168.         }
  1169.         elsif(($iR==0) or ($iR==3)){
  1170.             return (($iC == 83))? 1 : 0;
  1171.         }
  1172.         elsif(($iR==30) or ($iR==58)){
  1173.             return (($iC == 4) or ($iC == 8) or ($iC == 28) or ($iC == 30) or ($iC == 32) or ($iC == 56) or ($iC == 58) or ($iC == 60) or ($iC == 84) or ($iC == 86) or ($iC == 88))? 1 : 0;
  1174.         }
  1175.         elsif(($iR==8) or ($iR==88)){
  1176.             return ((($iC >= 28) and ($iC <= 32)) or (($iC >= 56) and ($iC <= 60)))? 1 : 0;
  1177.         }
  1178.         elsif(($iR==7) or ($iR==85) or ($iR==87)){
  1179.             return (($iC == 28) or ($iC == 32) or ($iC == 56) or ($iC == 60))? 1 : 0;
  1180.         }
  1181.         elsif(($iR==29) or ($iR==31) or ($iR==57) or ($iR==59)){
  1182.             return (($iC == 4) or ($iC == 8) or ($iC == 28) or ($iC == 32) or ($iC == 56) or ($iC == 60) or ($iC == 84) or ($iC == 88))? 1 : 0;
  1183.         }
  1184.         elsif(($iR==28) or ($iR==32) or ($iR==56) or ($iR==60)){
  1185.             return ((($iC >= 4) and ($iC <= 5)) or (($iC >= 7) and ($iC <= 8)) or (($iC >= 28) and ($iC <= 32)) or (($iC >= 56) and ($iC <= 60)) or (($iC >= 84) and ($iC <= 88)))? 1 : 0;
  1186.         }
  1187.         return 0;
  1188.     }
  1189.     elsif($iV == 20) {
  1190.         if($iR==4){
  1191.             return ((($iC >= 32) and ($iC <= 36)) or (($iC >= 60) and ($iC <= 64)) or ($iC == 88))? 1 : 0;
  1192.         }
  1193.         elsif($iR==87){
  1194.             return (($iC == 0) or ($iC == 2) or ($iC == 5))? 1 : 0;
  1195.         }
  1196.         elsif($iR==88){
  1197.             return ((($iC >= 0) and ($iC <= 4)) or (($iC >= 32) and ($iC <= 36)) or (($iC >= 60) and ($iC <= 64)))? 1 : 0;
  1198.         }
  1199.         elsif($iR==90){
  1200.             return (($iC == 32) or ($iC == 34) or ($iC == 36) or ($iC == 60) or ($iC == 62) or ($iC == 64))? 1 : 0;
  1201.         }
  1202.         elsif($iR==5){
  1203.             return (($iC == 32) or ($iC == 36) or ($iC == 60) or ($iC == 64) or ($iC == 87))? 1 : 0;
  1204.         }
  1205.         elsif(($iR==1) or ($iR==3)){
  1206.             return (($iC == 88))? 1 : 0;
  1207.         }
  1208.         elsif(($iR==0) or ($iR==2)){
  1209.             return ((($iC >= 87) and ($iC <= 88)))? 1 : 0;
  1210.         }
  1211.         elsif(($iR==34) or ($iR==62)){
  1212.             return (($iC == 4) or ($iC == 8) or ($iC == 32) or ($iC == 34) or ($iC == 36) or ($iC == 60) or ($iC == 62) or ($iC == 64) or ($iC == 88) or ($iC == 90) or ($iC == 92))? 1 : 0;
  1213.         }
  1214.         elsif(($iR==8) or ($iR==92)){
  1215.             return ((($iC >= 32) and ($iC <= 36)) or (($iC >= 60) and ($iC <= 64)))? 1 : 0;
  1216.         }
  1217.         elsif(($iR==7) or ($iR==89) or ($iR==91)){
  1218.             return (($iC == 32) or ($iC == 36) or ($iC == 60) or ($iC == 64))? 1 : 0;
  1219.         }
  1220.         elsif(($iR==32) or ($iR==36) or ($iR==60) or ($iR==64)){
  1221.             return ((($iC >= 4) and ($iC <= 5)) or (($iC >= 7) and ($iC <= 8)) or (($iC >= 32) and ($iC <= 36)) or (($iC >= 60) and ($iC <= 64)) or (($iC >= 88) and ($iC <= 92)))? 1 : 0;
  1222.         }
  1223.         elsif(($iR==33) or ($iR==35) or ($iR==61) or ($iR==63)){
  1224.             return (($iC == 4) or ($iC == 8) or ($iC == 32) or ($iC == 36) or ($iC == 60) or ($iC == 64) or ($iC == 88) or ($iC == 92))? 1 : 0;
  1225.         }
  1226.         return 0;
  1227.     }
  1228.     elsif($iV == 21) {
  1229.         if($iR==90){
  1230.             return (($iC == 0) or (($iC >= 3) and ($iC <= 4)))? 1 : 0;
  1231.         }
  1232.         elsif($iR==2){
  1233.             return (($iC == 91))? 1 : 0;
  1234.         }
  1235.         elsif($iR==91){
  1236.             return (($iC == 0) or (($iC >= 2) and ($iC <= 3)) or ($iC == 5))? 1 : 0;
  1237.         }
  1238.         elsif($iR==94){
  1239.             return (($iC == 26) or ($iC == 28) or ($iC == 30) or ($iC == 48) or ($iC == 50) or ($iC == 52) or ($iC == 70) or ($iC == 72) or ($iC == 74))? 1 : 0;
  1240.         }
  1241.         elsif($iR==92){
  1242.             return (($iC == 4) or (($iC >= 26) and ($iC <= 30)) or (($iC >= 48) and ($iC <= 52)) or (($iC >= 70) and ($iC <= 74)))? 1 : 0;
  1243.         }
  1244.         elsif($iR==5){
  1245.             return (($iC == 26) or ($iC == 30) or ($iC == 48) or ($iC == 52) or ($iC == 70) or ($iC == 74) or ($iC == 91))? 1 : 0;
  1246.         }
  1247.         elsif($iR==4){
  1248.             return ((($iC >= 26) and ($iC <= 30)) or (($iC >= 48) and ($iC <= 52)) or (($iC >= 70) and ($iC <= 74)) or ($iC == 90) or ($iC == 92))? 1 : 0;
  1249.         }
  1250.         elsif(($iR==0) or ($iR==3)){
  1251.             return ((($iC >= 90) and ($iC <= 91)))? 1 : 0;
  1252.         }
  1253.         elsif(($iR==8) or ($iR==96)){
  1254.             return ((($iC >= 26) and ($iC <= 30)) or (($iC >= 48) and ($iC <= 52)) or (($iC >= 70) and ($iC <= 74)))? 1 : 0;
  1255.         }
  1256.         elsif(($iR==7) or ($iR==93) or ($iR==95)){
  1257.             return (($iC == 26) or ($iC == 30) or ($iC == 48) or ($iC == 52) or ($iC == 70) or ($iC == 74))? 1 : 0;
  1258.         }
  1259.         elsif(($iR==28) or ($iR==50) or ($iR==72)){
  1260.             return (($iC == 4) or ($iC == 8) or ($iC == 26) or ($iC == 28) or ($iC == 30) or ($iC == 48) or ($iC == 50) or ($iC == 52) or ($iC == 70) or ($iC == 72) or ($iC == 74) or ($iC == 92) or ($iC == 94) or ($iC == 96))? 1 : 0;
  1261.         }
  1262.         elsif(($iR==27) or ($iR==29) or ($iR==49) or ($iR==51) or ($iR==71) or ($iR==73)){
  1263.             return (($iC == 4) or ($iC == 8) or ($iC == 26) or ($iC == 30) or ($iC == 48) or ($iC == 52) or ($iC == 70) or ($iC == 74) or ($iC == 92) or ($iC == 96))? 1 : 0;
  1264.         }
  1265.         elsif(($iR==26) or ($iR==30) or ($iR==48) or ($iR==52) or ($iR==70) or ($iR==74)){
  1266.             return ((($iC >= 4) and ($iC <= 5)) or (($iC >= 7) and ($iC <= 8)) or (($iC >= 26) and ($iC <= 30)) or (($iC >= 48) and ($iC <= 52)) or (($iC >= 70) and ($iC <= 74)) or (($iC >= 92) and ($iC <= 96)))? 1 : 0;
  1267.         }
  1268.         return 0;
  1269.     }
  1270.     elsif($iV == 22) {
  1271.         if($iR==98){
  1272.             return (($iC == 24) or ($iC == 26) or ($iC == 28) or ($iC == 48) or ($iC == 50) or ($iC == 52) or ($iC == 72) or ($iC == 74) or ($iC == 76))? 1 : 0;
  1273.         }
  1274.         elsif($iR==95){
  1275.             return (($iC == 2) or (($iC >= 4) and ($iC <= 5)))? 1 : 0;
  1276.         }
  1277.         elsif($iR==3){
  1278.             return (($iC == 96))? 1 : 0;
  1279.         }
  1280.         elsif($iR==96){
  1281.             return ((($iC >= 3) and ($iC <= 4)) or (($iC >= 24) and ($iC <= 28)) or (($iC >= 48) and ($iC <= 52)) or (($iC >= 72) and ($iC <= 76)))? 1 : 0;
  1282.         }
  1283.         elsif($iR==94){
  1284.             return ((($iC >= 0) and ($iC <= 2)))? 1 : 0;
  1285.         }
  1286.         elsif($iR==4){
  1287.             return ((($iC >= 24) and ($iC <= 28)) or (($iC >= 48) and ($iC <= 52)) or (($iC >= 72) and ($iC <= 76)) or (($iC >= 95) and ($iC <= 96)))? 1 : 0;
  1288.         }
  1289.         elsif($iR==5){
  1290.             return (($iC == 24) or ($iC == 28) or ($iC == 48) or ($iC == 52) or ($iC == 72) or ($iC == 76) or ($iC == 95))? 1 : 0;
  1291.         }
  1292.         elsif($iR==2){
  1293.             return ((($iC >= 94) and ($iC <= 95)))? 1 : 0;
  1294.         }
  1295.         elsif(($iR==8) or ($iR==100)){
  1296.             return ((($iC >= 24) and ($iC <= 28)) or (($iC >= 48) and ($iC <= 52)) or (($iC >= 72) and ($iC <= 76)))? 1 : 0;
  1297.         }
  1298.         elsif(($iR==0) or ($iR==1)){
  1299.             return (($iC == 94))? 1 : 0;
  1300.         }
  1301.         elsif(($iR==26) or ($iR==50) or ($iR==74)){
  1302.             return (($iC == 4) or ($iC == 8) or ($iC == 24) or ($iC == 26) or ($iC == 28) or ($iC == 48) or ($iC == 50) or ($iC == 52) or ($iC == 72) or ($iC == 74) or ($iC == 76) or ($iC == 96) or ($iC == 98) or ($iC == 100))? 1 : 0;
  1303.         }
  1304.         elsif(($iR==7) or ($iR==97) or ($iR==99)){
  1305.             return (($iC == 24) or ($iC == 28) or ($iC == 48) or ($iC == 52) or ($iC == 72) or ($iC == 76))? 1 : 0;
  1306.         }
  1307.         elsif(($iR==24) or ($iR==28) or ($iR==48) or ($iR==52) or ($iR==72) or ($iR==76)){
  1308.             return ((($iC >= 4) and ($iC <= 5)) or (($iC >= 7) and ($iC <= 8)) or (($iC >= 24) and ($iC <= 28)) or (($iC >= 48) and ($iC <= 52)) or (($iC >= 72) and ($iC <= 76)) or (($iC >= 96) and ($iC <= 100)))? 1 : 0;
  1309.         }
  1310.         elsif(($iR==25) or ($iR==27) or ($iR==49) or ($iR==51) or ($iR==73) or ($iR==75)){
  1311.             return (($iC == 4) or ($iC == 8) or ($iC == 24) or ($iC == 28) or ($iC == 48) or ($iC == 52) or ($iC == 72) or ($iC == 76) or ($iC == 96) or ($iC == 100))? 1 : 0;
  1312.         }
  1313.         return 0;
  1314.     }
  1315.     elsif($iV == 23) {
  1316.         if($iR==3){
  1317.             return ((($iC >= 98) and ($iC <= 99)))? 1 : 0;
  1318.         }
  1319.         elsif($iR==2){
  1320.             return ((($iC >= 98) and ($iC <= 100)))? 1 : 0;
  1321.         }
  1322.         elsif($iR==1){
  1323.             return (($iC == 98) or ($iC == 100))? 1 : 0;
  1324.         }
  1325.         elsif($iR==5){
  1326.             return (($iC == 28) or ($iC == 32) or ($iC == 52) or ($iC == 56) or ($iC == 76) or ($iC == 80) or ($iC == 99))? 1 : 0;
  1327.         }
  1328.         elsif($iR==100){
  1329.             return ((($iC >= 0) and ($iC <= 2)) or ($iC == 4) or (($iC >= 28) and ($iC <= 32)) or (($iC >= 52) and ($iC <= 56)) or (($iC >= 76) and ($iC <= 80)))? 1 : 0;
  1330.         }
  1331.         elsif($iR==99){
  1332.             return ((($iC >= 2) and ($iC <= 5)))? 1 : 0;
  1333.         }
  1334.         elsif($iR==4){
  1335.             return ((($iC >= 28) and ($iC <= 32)) or (($iC >= 52) and ($iC <= 56)) or (($iC >= 76) and ($iC <= 80)) or (($iC >= 98) and ($iC <= 100)))? 1 : 0;
  1336.         }
  1337.         elsif($iR==102){
  1338.             return (($iC == 28) or ($iC == 30) or ($iC == 32) or ($iC == 52) or ($iC == 54) or ($iC == 56) or ($iC == 76) or ($iC == 78) or ($iC == 80))? 1 : 0;
  1339.         }
  1340.         elsif($iR==0){
  1341.             return (($iC == 100))? 1 : 0;
  1342.         }
  1343.         elsif($iR==98){
  1344.             return ((($iC >= 1) and ($iC <= 4)))? 1 : 0;
  1345.         }
  1346.         elsif(($iR==8) or ($iR==104)){
  1347.             return ((($iC >= 28) and ($iC <= 32)) or (($iC >= 52) and ($iC <= 56)) or (($iC >= 76) and ($iC <= 80)))? 1 : 0;
  1348.         }
  1349.         elsif(($iR==7) or ($iR==101) or ($iR==103)){
  1350.             return (($iC == 28) or ($iC == 32) or ($iC == 52) or ($iC == 56) or ($iC == 76) or ($iC == 80))? 1 : 0;
  1351.         }
  1352.         elsif(($iR==30) or ($iR==54) or ($iR==78)){
  1353.             return (($iC == 4) or ($iC == 8) or ($iC == 28) or ($iC == 30) or ($iC == 32) or ($iC == 52) or ($iC == 54) or ($iC == 56) or ($iC == 76) or ($iC == 78) or ($iC == 80) or ($iC == 100) or ($iC == 102) or ($iC == 104))? 1 : 0;
  1354.         }
  1355.         elsif(($iR==28) or ($iR==32) or ($iR==52) or ($iR==56) or ($iR==76) or ($iR==80)){
  1356.             return ((($iC >= 4) and ($iC <= 5)) or (($iC >= 7) and ($iC <= 8)) or (($iC >= 28) and ($iC <= 32)) or (($iC >= 52) and ($iC <= 56)) or (($iC >= 76) and ($iC <= 80)) or (($iC >= 100) and ($iC <= 104)))? 1 : 0;
  1357.         }
  1358.         elsif(($iR==29) or ($iR==31) or ($iR==53) or ($iR==55) or ($iR==77) or ($iR==79)){
  1359.             return (($iC == 4) or ($iC == 8) or ($iC == 28) or ($iC == 32) or ($iC == 52) or ($iC == 56) or ($iC == 76) or ($iC == 80) or ($iC == 100) or ($iC == 104))? 1 : 0;
  1360.         }
  1361.         return 0;
  1362.     }
  1363.     elsif($iV == 24) {
  1364.         if($iR==0){
  1365.             return (($iC == 104))? 1 : 0;
  1366.         }
  1367.         elsif($iR==106){
  1368.             return (($iC == 26) or ($iC == 28) or ($iC == 30) or ($iC == 52) or ($iC == 54) or ($iC == 56) or ($iC == 78) or ($iC == 80) or ($iC == 82))? 1 : 0;
  1369.         }
  1370.         elsif($iR==3){
  1371.             return ((($iC >= 102) and ($iC <= 104)))? 1 : 0;
  1372.         }
  1373.         elsif($iR==2){
  1374.             return ((($iC >= 102) and ($iC <= 103)))? 1 : 0;
  1375.         }
  1376.         elsif($iR==104){
  1377.             return (($iC == 0) or ($iC == 3) or (($iC >= 26) and ($iC <= 30)) or (($iC >= 52) and ($iC <= 56)) or (($iC >= 78) and ($iC <= 82)))? 1 : 0;
  1378.         }
  1379.         elsif($iR==5){
  1380.             return (($iC == 26) or ($iC == 30) or ($iC == 52) or ($iC == 56) or ($iC == 78) or ($iC == 82) or (($iC >= 102) and ($iC <= 103)))? 1 : 0;
  1381.         }
  1382.         elsif(($iR==102) or ($iR==103)){
  1383.             return ((($iC >= 2) and ($iC <= 3)) or ($iC == 5))? 1 : 0;
  1384.         }
  1385.         elsif(($iR==4) or ($iR==8) or ($iR==108)){
  1386.             return ((($iC >= 26) and ($iC <= 30)) or (($iC >= 52) and ($iC <= 56)) or (($iC >= 78) and ($iC <= 82)))? 1 : 0;
  1387.         }
  1388.         elsif(($iR==7) or ($iR==105) or ($iR==107)){
  1389.             return (($iC == 26) or ($iC == 30) or ($iC == 52) or ($iC == 56) or ($iC == 78) or ($iC == 82))? 1 : 0;
  1390.         }
  1391.         elsif(($iR==28) or ($iR==54) or ($iR==80)){
  1392.             return (($iC == 4) or ($iC == 8) or ($iC == 26) or ($iC == 28) or ($iC == 30) or ($iC == 52) or ($iC == 54) or ($iC == 56) or ($iC == 78) or ($iC == 80) or ($iC == 82) or ($iC == 104) or ($iC == 106) or ($iC == 108))? 1 : 0;
  1393.         }
  1394.         elsif(($iR==26) or ($iR==30) or ($iR==52) or ($iR==56) or ($iR==78) or ($iR==82)){
  1395.             return ((($iC >= 4) and ($iC <= 5)) or (($iC >= 7) and ($iC <= 8)) or (($iC >= 26) and ($iC <= 30)) or (($iC >= 52) and ($iC <= 56)) or (($iC >= 78) and ($iC <= 82)) or (($iC >= 104) and ($iC <= 108)))? 1 : 0;
  1396.         }
  1397.         elsif(($iR==27) or ($iR==29) or ($iR==53) or ($iR==55) or ($iR==79) or ($iR==81)){
  1398.             return (($iC == 4) or ($iC == 8) or ($iC == 26) or ($iC == 30) or ($iC == 52) or ($iC == 56) or ($iC == 78) or ($iC == 82) or ($iC == 104) or ($iC == 108))? 1 : 0;
  1399.         }
  1400.         return 0;
  1401.     }
  1402.     elsif($iV == 25) {
  1403.         if($iR==1){
  1404.             return (($iC == 108))? 1 : 0;
  1405.         }
  1406.         elsif($iR==106){
  1407.             return (($iC == 0) or ($iC == 2) or (($iC >= 4) and ($iC <= 5)))? 1 : 0;
  1408.         }
  1409.         elsif($iR==108){
  1410.             return ((($iC >= 1) and ($iC <= 2)) or (($iC >= 30) and ($iC <= 34)) or (($iC >= 56) and ($iC <= 60)) or (($iC >= 82) and ($iC <= 86)))? 1 : 0;
  1411.         }
  1412.         elsif($iR==5){
  1413.             return (($iC == 30) or ($iC == 34) or ($iC == 56) or ($iC == 60) or ($iC == 82) or ($iC == 86) or (($iC >= 106) and ($iC <= 107)))? 1 : 0;
  1414.         }
  1415.         elsif($iR==110){
  1416.             return (($iC == 30) or ($iC == 32) or ($iC == 34) or ($iC == 56) or ($iC == 58) or ($iC == 60) or ($iC == 82) or ($iC == 84) or ($iC == 86))? 1 : 0;
  1417.         }
  1418.         elsif($iR==107){
  1419.             return (($iC == 2) or ($iC == 5))? 1 : 0;
  1420.         }
  1421.         elsif($iR==2){
  1422.             return ((($iC >= 106) and ($iC <= 108)))? 1 : 0;
  1423.         }
  1424.         elsif($iR==0){
  1425.             return (($iC == 106))? 1 : 0;
  1426.         }
  1427.         elsif($iR==4){
  1428.             return ((($iC >= 30) and ($iC <= 34)) or (($iC >= 56) and ($iC <= 60)) or (($iC >= 82) and ($iC <= 86)) or ($iC == 106))? 1 : 0;
  1429.         }
  1430.         elsif(($iR==8) or ($iR==112)){
  1431.             return ((($iC >= 30) and ($iC <= 34)) or (($iC >= 56) and ($iC <= 60)) or (($iC >= 82) and ($iC <= 86)))? 1 : 0;
  1432.         }
  1433.         elsif(($iR==7) or ($iR==109) or ($iR==111)){
  1434.             return (($iC == 30) or ($iC == 34) or ($iC == 56) or ($iC == 60) or ($iC == 82) or ($iC == 86))? 1 : 0;
  1435.         }
  1436.         elsif(($iR==32) or ($iR==58) or ($iR==84)){
  1437.             return (($iC == 4) or ($iC == 8) or ($iC == 30) or ($iC == 32) or ($iC == 34) or ($iC == 56) or ($iC == 58) or ($iC == 60) or ($iC == 82) or ($iC == 84) or ($iC == 86) or ($iC == 108) or ($iC == 110) or ($iC == 112))? 1 : 0;
  1438.         }
  1439.         elsif(($iR==31) or ($iR==33) or ($iR==57) or ($iR==59) or ($iR==83) or ($iR==85)){
  1440.             return (($iC == 4) or ($iC == 8) or ($iC == 30) or ($iC == 34) or ($iC == 56) or ($iC == 60) or ($iC == 82) or ($iC == 86) or ($iC == 108) or ($iC == 112))? 1 : 0;
  1441.         }
  1442.         elsif(($iR==30) or ($iR==34) or ($iR==56) or ($iR==60) or ($iR==82) or ($iR==86)){
  1443.             return ((($iC >= 4) and ($iC <= 5)) or (($iC >= 7) and ($iC <= 8)) or (($iC >= 30) and ($iC <= 34)) or (($iC >= 56) and ($iC <= 60)) or (($iC >= 82) and ($iC <= 86)) or (($iC >= 108) and ($iC <= 112)))? 1 : 0;
  1444.         }
  1445.         return 0;
  1446.     }
  1447.     elsif($iV == 26) {
  1448.         if($iR==112){
  1449.             return ((($iC >= 1) and ($iC <= 3)) or (($iC >= 28) and ($iC <= 32)) or (($iC >= 56) and ($iC <= 60)) or (($iC >= 84) and ($iC <= 88)))? 1 : 0;
  1450.         }
  1451.         elsif($iR==0){
  1452.             return ((($iC >= 110) and ($iC <= 111)))? 1 : 0;
  1453.         }
  1454.         elsif($iR==1){
  1455.             return (($iC == 110) or ($iC == 112))? 1 : 0;
  1456.         }
  1457.         elsif($iR==4){
  1458.             return ((($iC >= 28) and ($iC <= 32)) or (($iC >= 56) and ($iC <= 60)) or (($iC >= 84) and ($iC <= 88)) or ($iC == 111))? 1 : 0;
  1459.         }
  1460.         elsif($iR==3){
  1461.             return ((($iC >= 110) and ($iC <= 112)))? 1 : 0;
  1462.         }
  1463.         elsif($iR==110){
  1464.             return ((($iC >= 0) and ($iC <= 1)) or ($iC == 3) or ($iC == 5))? 1 : 0;
  1465.         }
  1466.         elsif($iR==114){
  1467.             return (($iC == 28) or ($iC == 30) or ($iC == 32) or ($iC == 56) or ($iC == 58) or ($iC == 60) or ($iC == 84) or ($iC == 86) or ($iC == 88))? 1 : 0;
  1468.         }
  1469.         elsif($iR==2){
  1470.             return ((($iC >= 111) and ($iC <= 112)))? 1 : 0;
  1471.         }
  1472.         elsif($iR==5){
  1473.             return (($iC == 28) or ($iC == 32) or ($iC == 56) or ($iC == 60) or ($iC == 84) or ($iC == 88) or (($iC >= 110) and ($iC <= 111)))? 1 : 0;
  1474.         }
  1475.         elsif($iR==111){
  1476.             return (($iC == 0) or (($iC >= 2) and ($iC <= 5)))? 1 : 0;
  1477.         }
  1478.         elsif(($iR==8) or ($iR==116)){
  1479.             return ((($iC >= 28) and ($iC <= 32)) or (($iC >= 56) and ($iC <= 60)) or (($iC >= 84) and ($iC <= 88)))? 1 : 0;
  1480.         }
  1481.         elsif(($iR==7) or ($iR==113) or ($iR==115)){
  1482.             return (($iC == 28) or ($iC == 32) or ($iC == 56) or ($iC == 60) or ($iC == 84) or ($iC == 88))? 1 : 0;
  1483.         }
  1484.         elsif(($iR==30) or ($iR==58) or ($iR==86)){
  1485.             return (($iC == 4) or ($iC == 8) or ($iC == 28) or ($iC == 30) or ($iC == 32) or ($iC == 56) or ($iC == 58) or ($iC == 60) or ($iC == 84) or ($iC == 86) or ($iC == 88) or ($iC == 112) or ($iC == 114) or ($iC == 116))? 1 : 0;
  1486.         }
  1487.         elsif(($iR==29) or ($iR==31) or ($iR==57) or ($iR==59) or ($iR==85) or ($iR==87)){
  1488.             return (($iC == 4) or ($iC == 8) or ($iC == 28) or ($iC == 32) or ($iC == 56) or ($iC == 60) or ($iC == 84) or ($iC == 88) or ($iC == 112) or ($iC == 116))? 1 : 0;
  1489.         }
  1490.         elsif(($iR==28) or ($iR==32) or ($iR==56) or ($iR==60) or ($iR==84) or ($iR==88)){
  1491.             return ((($iC >= 4) and ($iC <= 5)) or (($iC >= 7) and ($iC <= 8)) or (($iC >= 28) and ($iC <= 32)) or (($iC >= 56) and ($iC <= 60)) or (($iC >= 84) and ($iC <= 88)) or (($iC >= 112) and ($iC <= 116)))? 1 : 0;
  1492.         }
  1493.         return 0;
  1494.     }
  1495.     elsif($iV == 27) {
  1496.         if($iR==116){
  1497.             return (($iC == 0) or (($iC >= 32) and ($iC <= 36)) or (($iC >= 60) and ($iC <= 64)) or (($iC >= 88) and ($iC <= 92)))? 1 : 0;
  1498.         }
  1499.         elsif($iR==114){
  1500.             return (($iC == 1) or (($iC >= 4) and ($iC <= 5)))? 1 : 0;
  1501.         }
  1502.         elsif($iR==118){
  1503.             return (($iC == 32) or ($iC == 34) or ($iC == 36) or ($iC == 60) or ($iC == 62) or ($iC == 64) or ($iC == 88) or ($iC == 90) or ($iC == 92))? 1 : 0;
  1504.         }
  1505.         elsif($iR==115){
  1506.             return (($iC == 0) or ($iC == 2) or (($iC >= 4) and ($iC <= 5)))? 1 : 0;
  1507.         }
  1508.         elsif($iR==1){
  1509.             return (($iC == 114))? 1 : 0;
  1510.         }
  1511.         elsif($iR==0){
  1512.             return ((($iC >= 115) and ($iC <= 116)))? 1 : 0;
  1513.         }
  1514.         elsif($iR==5){
  1515.             return (($iC == 32) or ($iC == 36) or ($iC == 60) or ($iC == 64) or ($iC == 88) or ($iC == 92) or (($iC >= 114) and ($iC <= 115)))? 1 : 0;
  1516.         }
  1517.         elsif($iR==2){
  1518.             return (($iC == 115))? 1 : 0;
  1519.         }
  1520.         elsif($iR==4){
  1521.             return ((($iC >= 32) and ($iC <= 36)) or (($iC >= 60) and ($iC <= 64)) or (($iC >= 88) and ($iC <= 92)) or (($iC >= 114) and ($iC <= 115)))? 1 : 0;
  1522.         }
  1523.         elsif(($iR==8) or ($iR==120)){
  1524.             return ((($iC >= 32) and ($iC <= 36)) or (($iC >= 60) and ($iC <= 64)) or (($iC >= 88) and ($iC <= 92)))? 1 : 0;
  1525.         }
  1526.         elsif(($iR==34) or ($iR==62) or ($iR==90)){
  1527.             return (($iC == 4) or ($iC == 8) or ($iC == 32) or ($iC == 34) or ($iC == 36) or ($iC == 60) or ($iC == 62) or ($iC == 64) or ($iC == 88) or ($iC == 90) or ($iC == 92) or ($iC == 116) or ($iC == 118) or ($iC == 120))? 1 : 0;
  1528.         }
  1529.         elsif(($iR==7) or ($iR==117) or ($iR==119)){
  1530.             return (($iC == 32) or ($iC == 36) or ($iC == 60) or ($iC == 64) or ($iC == 88) or ($iC == 92))? 1 : 0;
  1531.         }
  1532.         elsif(($iR==33) or ($iR==35) or ($iR==61) or ($iR==63) or ($iR==89) or ($iR==91)){
  1533.             return (($iC == 4) or ($iC == 8) or ($iC == 32) or ($iC == 36) or ($iC == 60) or ($iC == 64) or ($iC == 88) or ($iC == 92) or ($iC == 116) or ($iC == 120))? 1 : 0;
  1534.         }
  1535.         elsif(($iR==32) or ($iR==36) or ($iR==60) or ($iR==64) or ($iR==88) or ($iR==92)){
  1536.             return ((($iC >= 4) and ($iC <= 5)) or (($iC >= 7) and ($iC <= 8)) or (($iC >= 32) and ($iC <= 36)) or (($iC >= 60) and ($iC <= 64)) or (($iC >= 88) and ($iC <= 92)) or (($iC >= 116) and ($iC <= 120)))? 1 : 0;
  1537.         }
  1538.         return 0;
  1539.     }
  1540.     elsif($iV == 28) {
  1541.         if($iR==122){
  1542.             return (($iC == 24) or ($iC == 26) or ($iC == 28) or ($iC == 48) or ($iC == 50) or ($iC == 52) or ($iC == 72) or ($iC == 74) or ($iC == 76) or ($iC == 96) or ($iC == 98) or ($iC == 100))? 1 : 0;
  1543.         }
  1544.         elsif($iR==120){
  1545.             return ((($iC >= 3) and ($iC <= 4)) or (($iC >= 24) and ($iC <= 28)) or (($iC >= 48) and ($iC <= 52)) or (($iC >= 72) and ($iC <= 76)) or (($iC >= 96) and ($iC <= 100)))? 1 : 0;
  1546.         }
  1547.         elsif($iR==5){
  1548.             return (($iC == 24) or ($iC == 28) or ($iC == 48) or ($iC == 52) or ($iC == 72) or ($iC == 76) or ($iC == 96) or ($iC == 100) or (($iC >= 118) and ($iC <= 119)))? 1 : 0;
  1549.         }
  1550.         elsif($iR==3){
  1551.             return ((($iC >= 119) and ($iC <= 120)))? 1 : 0;
  1552.         }
  1553.         elsif($iR==118){
  1554.             return (($iC == 1) or ($iC == 5))? 1 : 0;
  1555.         }
  1556.         elsif($iR==1){
  1557.             return ((($iC >= 118) and ($iC <= 119)))? 1 : 0;
  1558.         }
  1559.         elsif($iR==119){
  1560.             return ((($iC >= 0) and ($iC <= 1)) or ($iC == 3) or ($iC == 5))? 1 : 0;
  1561.         }
  1562.         elsif($iR==4){
  1563.             return ((($iC >= 24) and ($iC <= 28)) or (($iC >= 48) and ($iC <= 52)) or (($iC >= 72) and ($iC <= 76)) or (($iC >= 96) and ($iC <= 100)) or ($iC == 120))? 1 : 0;
  1564.         }
  1565.         elsif($iR==0){
  1566.             return (($iC == 119))? 1 : 0;
  1567.         }
  1568.         elsif(($iR==8) or ($iR==124)){
  1569.             return ((($iC >= 24) and ($iC <= 28)) or (($iC >= 48) and ($iC <= 52)) or (($iC >= 72) and ($iC <= 76)) or (($iC >= 96) and ($iC <= 100)))? 1 : 0;
  1570.         }
  1571.         elsif(($iR==7) or ($iR==121) or ($iR==123)){
  1572.             return (($iC == 24) or ($iC == 28) or ($iC == 48) or ($iC == 52) or ($iC == 72) or ($iC == 76) or ($iC == 96) or ($iC == 100))? 1 : 0;
  1573.         }
  1574.         elsif(($iR==26) or ($iR==50) or ($iR==74) or ($iR==98)){
  1575.             return (($iC == 4) or ($iC == 8) or ($iC == 24) or ($iC == 26) or ($iC == 28) or ($iC == 48) or ($iC == 50) or ($iC == 52) or ($iC == 72) or ($iC == 74) or ($iC == 76) or ($iC == 96) or ($iC == 98) or ($iC == 100) or ($iC == 120) or ($iC == 122) or ($iC == 124))? 1 : 0;
  1576.         }
  1577.         elsif(($iR==24) or ($iR==28) or ($iR==48) or ($iR==52) or ($iR==72) or ($iR==76) or ($iR==96) or ($iR==100)){
  1578.             return ((($iC >= 4) and ($iC <= 5)) or (($iC >= 7) and ($iC <= 8)) or (($iC >= 24) and ($iC <= 28)) or (($iC >= 48) and ($iC <= 52)) or (($iC >= 72) and ($iC <= 76)) or (($iC >= 96) and ($iC <= 100)) or (($iC >= 120) and ($iC <= 124)))? 1 : 0;
  1579.         }
  1580.         elsif(($iR==25) or ($iR==27) or ($iR==49) or ($iR==51) or ($iR==73) or ($iR==75) or ($iR==97) or ($iR==99)){
  1581.             return (($iC == 4) or ($iC == 8) or ($iC == 24) or ($iC == 28) or ($iC == 48) or ($iC == 52) or ($iC == 72) or ($iC == 76) or ($iC == 96) or ($iC == 100) or ($iC == 120) or ($iC == 124))? 1 : 0;
  1582.         }
  1583.         return 0;
  1584.     }
  1585.     elsif($iV == 29) {
  1586.         if($iR==123){
  1587.             return ((($iC >= 0) and ($iC <= 1)) or ($iC == 5))? 1 : 0;
  1588.         }
  1589.         elsif($iR==122){
  1590.             return ((($iC >= 0) and ($iC <= 1)) or (($iC >= 3) and ($iC <= 5)))? 1 : 0;
  1591.         }
  1592.         elsif($iR==4){
  1593.             return ((($iC >= 28) and ($iC <= 32)) or (($iC >= 52) and ($iC <= 56)) or (($iC >= 76) and ($iC <= 80)) or (($iC >= 100) and ($iC <= 104)) or ($iC == 122) or ($iC == 124))? 1 : 0;
  1594.         }
  1595.         elsif($iR==126){
  1596.             return (($iC == 28) or ($iC == 30) or ($iC == 32) or ($iC == 52) or ($iC == 54) or ($iC == 56) or ($iC == 76) or ($iC == 78) or ($iC == 80) or ($iC == 100) or ($iC == 102) or ($iC == 104))? 1 : 0;
  1597.         }
  1598.         elsif($iR==3){
  1599.             return (($iC == 122))? 1 : 0;
  1600.         }
  1601.         elsif($iR==5){
  1602.             return (($iC == 28) or ($iC == 32) or ($iC == 52) or ($iC == 56) or ($iC == 76) or ($iC == 80) or ($iC == 100) or ($iC == 104) or (($iC >= 122) and ($iC <= 123)))? 1 : 0;
  1603.         }
  1604.         elsif($iR==124){
  1605.             return ((($iC >= 0) and ($iC <= 2)) or ($iC == 4) or (($iC >= 28) and ($iC <= 32)) or (($iC >= 52) and ($iC <= 56)) or (($iC >= 76) and ($iC <= 80)) or (($iC >= 100) and ($iC <= 104)))? 1 : 0;
  1606.         }
  1607.         elsif($iR==2){
  1608.             return (($iC == 124))? 1 : 0;
  1609.         }
  1610.         elsif(($iR==8) or ($iR==128)){
  1611.             return ((($iC >= 28) and ($iC <= 32)) or (($iC >= 52) and ($iC <= 56)) or (($iC >= 76) and ($iC <= 80)) or (($iC >= 100) and ($iC <= 104)))? 1 : 0;
  1612.         }
  1613.         elsif(($iR==0) or ($iR==1)){
  1614.             return ((($iC >= 122) and ($iC <= 124)))? 1 : 0;
  1615.         }
  1616.         elsif(($iR==7) or ($iR==125) or ($iR==127)){
  1617.             return (($iC == 28) or ($iC == 32) or ($iC == 52) or ($iC == 56) or ($iC == 76) or ($iC == 80) or ($iC == 100) or ($iC == 104))? 1 : 0;
  1618.         }
  1619.         elsif(($iR==30) or ($iR==54) or ($iR==78) or ($iR==102)){
  1620.             return (($iC == 4) or ($iC == 8) or ($iC == 28) or ($iC == 30) or ($iC == 32) or ($iC == 52) or ($iC == 54) or ($iC == 56) or ($iC == 76) or ($iC == 78) or ($iC == 80) or ($iC == 100) or ($iC == 102) or ($iC == 104) or ($iC == 124) or ($iC == 126) or ($iC == 128))? 1 : 0;
  1621.         }
  1622.         elsif(($iR==29) or ($iR==31) or ($iR==53) or ($iR==55) or ($iR==77) or ($iR==79) or ($iR==101) or ($iR==103)){
  1623.             return (($iC == 4) or ($iC == 8) or ($iC == 28) or ($iC == 32) or ($iC == 52) or ($iC == 56) or ($iC == 76) or ($iC == 80) or ($iC == 100) or ($iC == 104) or ($iC == 124) or ($iC == 128))? 1 : 0;
  1624.         }
  1625.         elsif(($iR==28) or ($iR==32) or ($iR==52) or ($iR==56) or ($iR==76) or ($iR==80) or ($iR==100) or ($iR==104)){
  1626.             return ((($iC >= 4) and ($iC <= 5)) or (($iC >= 7) and ($iC <= 8)) or (($iC >= 28) and ($iC <= 32)) or (($iC >= 52) and ($iC <= 56)) or (($iC >= 76) and ($iC <= 80)) or (($iC >= 100) and ($iC <= 104)) or (($iC >= 124) and ($iC <= 128)))? 1 : 0;
  1627.         }
  1628.         return 0;
  1629.     }
  1630.     elsif($iV == 30) {
  1631.         if($iR==4){
  1632.             return ((($iC >= 24) and ($iC <= 28)) or (($iC >= 50) and ($iC <= 54)) or (($iC >= 76) and ($iC <= 80)) or (($iC >= 102) and ($iC <= 106)) or (($iC >= 127) and ($iC <= 128)))? 1 : 0;
  1633.         }
  1634.         elsif($iR==128){
  1635.             return ((($iC >= 0) and ($iC <= 4)) or (($iC >= 24) and ($iC <= 28)) or (($iC >= 50) and ($iC <= 54)) or (($iC >= 76) and ($iC <= 80)) or (($iC >= 102) and ($iC <= 106)))? 1 : 0;
  1636.         }
  1637.         elsif($iR==127){
  1638.             return (($iC == 1) or (($iC >= 3) and ($iC <= 5)))? 1 : 0;
  1639.         }
  1640.         elsif($iR==5){
  1641.             return (($iC == 24) or ($iC == 28) or ($iC == 50) or ($iC == 54) or ($iC == 76) or ($iC == 80) or ($iC == 102) or ($iC == 106) or (($iC >= 126) and ($iC <= 127)))? 1 : 0;
  1642.         }
  1643.         elsif($iR==130){
  1644.             return (($iC == 24) or ($iC == 26) or ($iC == 28) or ($iC == 50) or ($iC == 52) or ($iC == 54) or ($iC == 76) or ($iC == 78) or ($iC == 80) or ($iC == 102) or ($iC == 104) or ($iC == 106))? 1 : 0;
  1645.         }
  1646.         elsif($iR==126){
  1647.             return (($iC == 0) or ($iC == 2) or ($iC == 5))? 1 : 0;
  1648.         }
  1649.         elsif(($iR==8) or ($iR==132)){
  1650.             return ((($iC >= 24) and ($iC <= 28)) or (($iC >= 50) and ($iC <= 54)) or (($iC >= 76) and ($iC <= 80)) or (($iC >= 102) and ($iC <= 106)))? 1 : 0;
  1651.         }
  1652.         elsif(($iR==0) or ($iR==2)){
  1653.             return (($iC == 126) or ($iC == 128))? 1 : 0;
  1654.         }
  1655.         elsif(($iR==1) or ($iR==3)){
  1656.             return ((($iC >= 127) and ($iC <= 128)))? 1 : 0;
  1657.         }
  1658.         elsif(($iR==7) or ($iR==129) or ($iR==131)){
  1659.             return (($iC == 24) or ($iC == 28) or ($iC == 50) or ($iC == 54) or ($iC == 76) or ($iC == 80) or ($iC == 102) or ($iC == 106))? 1 : 0;
  1660.         }
  1661.         elsif(($iR==26) or ($iR==52) or ($iR==78) or ($iR==104)){
  1662.             return (($iC == 4) or ($iC == 8) or ($iC == 24) or ($iC == 26) or ($iC == 28) or ($iC == 50) or ($iC == 52) or ($iC == 54) or ($iC == 76) or ($iC == 78) or ($iC == 80) or ($iC == 102) or ($iC == 104) or ($iC == 106) or ($iC == 128) or ($iC == 130) or ($iC == 132))? 1 : 0;
  1663.         }
  1664.         elsif(($iR==25) or ($iR==27) or ($iR==51) or ($iR==53) or ($iR==77) or ($iR==79) or ($iR==103) or ($iR==105)){
  1665.             return (($iC == 4) or ($iC == 8) or ($iC == 24) or ($iC == 28) or ($iC == 50) or ($iC == 54) or ($iC == 76) or ($iC == 80) or ($iC == 102) or ($iC == 106) or ($iC == 128) or ($iC == 132))? 1 : 0;
  1666.         }
  1667.         elsif(($iR==24) or ($iR==28) or ($iR==50) or ($iR==54) or ($iR==76) or ($iR==80) or ($iR==102) or ($iR==106)){
  1668.             return ((($iC >= 4) and ($iC <= 5)) or (($iC >= 7) and ($iC <= 8)) or (($iC >= 24) and ($iC <= 28)) or (($iC >= 50) and ($iC <= 54)) or (($iC >= 76) and ($iC <= 80)) or (($iC >= 102) and ($iC <= 106)) or (($iC >= 128) and ($iC <= 132)))? 1 : 0;
  1669.         }
  1670.         return 0;
  1671.     }
  1672.     elsif($iV == 31) {
  1673.         if($iR==131){
  1674.             return (($iC == 1) or (($iC >= 4) and ($iC <= 5)))? 1 : 0;
  1675.         }
  1676.         elsif($iR==134){
  1677.             return (($iC == 28) or ($iC == 30) or ($iC == 32) or ($iC == 54) or ($iC == 56) or ($iC == 58) or ($iC == 80) or ($iC == 82) or ($iC == 84) or ($iC == 106) or ($iC == 108) or ($iC == 110))? 1 : 0;
  1678.         }
  1679.         elsif($iR==5){
  1680.             return (($iC == 28) or ($iC == 32) or ($iC == 54) or ($iC == 58) or ($iC == 80) or ($iC == 84) or ($iC == 106) or ($iC == 110) or (($iC >= 130) and ($iC <= 131)))? 1 : 0;
  1681.         }
  1682.         elsif($iR==130){
  1683.             return ((($iC >= 2) and ($iC <= 5)))? 1 : 0;
  1684.         }
  1685.         elsif($iR==132){
  1686.             return (($iC == 4) or (($iC >= 28) and ($iC <= 32)) or (($iC >= 54) and ($iC <= 58)) or (($iC >= 80) and ($iC <= 84)) or (($iC >= 106) and ($iC <= 110)))? 1 : 0;
  1687.         }
  1688.         elsif($iR==4){
  1689.             return ((($iC >= 28) and ($iC <= 32)) or (($iC >= 54) and ($iC <= 58)) or (($iC >= 80) and ($iC <= 84)) or (($iC >= 106) and ($iC <= 110)) or (($iC >= 130) and ($iC <= 132)))? 1 : 0;
  1690.         }
  1691.         elsif($iR==1){
  1692.             return (($iC == 131))? 1 : 0;
  1693.         }
  1694.         elsif(($iR==8) or ($iR==136)){
  1695.             return ((($iC >= 28) and ($iC <= 32)) or (($iC >= 54) and ($iC <= 58)) or (($iC >= 80) and ($iC <= 84)) or (($iC >= 106) and ($iC <= 110)))? 1 : 0;
  1696.         }
  1697.         elsif(($iR==2) or ($iR==3)){
  1698.             return (($iC == 130))? 1 : 0;
  1699.         }
  1700.         elsif(($iR==7) or ($iR==133) or ($iR==135)){
  1701.             return (($iC == 28) or ($iC == 32) or ($iC == 54) or ($iC == 58) or ($iC == 80) or ($iC == 84) or ($iC == 106) or ($iC == 110))? 1 : 0;
  1702.         }
  1703.         elsif(($iR==30) or ($iR==56) or ($iR==82) or ($iR==108)){
  1704.             return (($iC == 4) or ($iC == 8) or ($iC == 28) or ($iC == 30) or ($iC == 32) or ($iC == 54) or ($iC == 56) or ($iC == 58) or ($iC == 80) or ($iC == 82) or ($iC == 84) or ($iC == 106) or ($iC == 108) or ($iC == 110) or ($iC == 132) or ($iC == 134) or ($iC == 136))? 1 : 0;
  1705.         }
  1706.         elsif(($iR==29) or ($iR==31) or ($iR==55) or ($iR==57) or ($iR==81) or ($iR==83) or ($iR==107) or ($iR==109)){
  1707.             return (($iC == 4) or ($iC == 8) or ($iC == 28) or ($iC == 32) or ($iC == 54) or ($iC == 58) or ($iC == 80) or ($iC == 84) or ($iC == 106) or ($iC == 110) or ($iC == 132) or ($iC == 136))? 1 : 0;
  1708.         }
  1709.         elsif(($iR==28) or ($iR==32) or ($iR==54) or ($iR==58) or ($iR==80) or ($iR==84) or ($iR==106) or ($iR==110)){
  1710.             return ((($iC >= 4) and ($iC <= 5)) or (($iC >= 7) and ($iC <= 8)) or (($iC >= 28) and ($iC <= 32)) or (($iC >= 54) and ($iC <= 58)) or (($iC >= 80) and ($iC <= 84)) or (($iC >= 106) and ($iC <= 110)) or (($iC >= 132) and ($iC <= 136)))? 1 : 0;
  1711.         }
  1712.         return 0;
  1713.     }
  1714.     elsif($iV == 32) {
  1715.         if($iR==134){
  1716.             return (($iC == 0) or ($iC == 2))? 1 : 0;
  1717.         }
  1718.         elsif($iR==5){
  1719.             return (($iC == 32) or ($iC == 36) or ($iC == 58) or ($iC == 62) or ($iC == 84) or ($iC == 88) or ($iC == 110) or ($iC == 114) or ($iC == 136))? 1 : 0;
  1720.         }
  1721.         elsif($iR==0){
  1722.             return (($iC == 134) or ($iC == 136))? 1 : 0;
  1723.         }
  1724.         elsif($iR==138){
  1725.             return (($iC == 32) or ($iC == 34) or ($iC == 36) or ($iC == 58) or ($iC == 60) or ($iC == 62) or ($iC == 84) or ($iC == 86) or ($iC == 88) or ($iC == 110) or ($iC == 112) or ($iC == 114))? 1 : 0;
  1726.         }
  1727.         elsif($iR==2){
  1728.             return ((($iC >= 134) and ($iC <= 136)))? 1 : 0;
  1729.         }
  1730.         elsif($iR==135){
  1731.             return ((($iC >= 1) and ($iC <= 2)))? 1 : 0;
  1732.         }
  1733.         elsif($iR==1){
  1734.             return (($iC == 135))? 1 : 0;
  1735.         }
  1736.         elsif($iR==136){
  1737.             return (($iC == 0) or (($iC >= 2) and ($iC <= 3)) or ($iC == 5) or (($iC >= 32) and ($iC <= 36)) or (($iC >= 58) and ($iC <= 62)) or (($iC >= 84) and ($iC <= 88)) or (($iC >= 110) and ($iC <= 114)))? 1 : 0;
  1738.         }
  1739.         elsif($iR==3){
  1740.             return (($iC == 136))? 1 : 0;
  1741.         }
  1742.         elsif(($iR==4) or ($iR==8) or ($iR==140)){
  1743.             return ((($iC >= 32) and ($iC <= 36)) or (($iC >= 58) and ($iC <= 62)) or (($iC >= 84) and ($iC <= 88)) or (($iC >= 110) and ($iC <= 114)))? 1 : 0;
  1744.         }
  1745.         elsif(($iR==7) or ($iR==137) or ($iR==139)){
  1746.             return (($iC == 32) or ($iC == 36) or ($iC == 58) or ($iC == 62) or ($iC == 84) or ($iC == 88) or ($iC == 110) or ($iC == 114))? 1 : 0;
  1747.         }
  1748.         elsif(($iR==34) or ($iR==60) or ($iR==86) or ($iR==112)){
  1749.             return (($iC == 4) or ($iC == 8) or ($iC == 32) or ($iC == 34) or ($iC == 36) or ($iC == 58) or ($iC == 60) or ($iC == 62) or ($iC == 84) or ($iC == 86) or ($iC == 88) or ($iC == 110) or ($iC == 112) or ($iC == 114) or ($iC == 136) or ($iC == 138) or ($iC == 140))? 1 : 0;
  1750.         }
  1751.         elsif(($iR==33) or ($iR==35) or ($iR==59) or ($iR==61) or ($iR==85) or ($iR==87) or ($iR==111) or ($iR==113)){
  1752.             return (($iC == 4) or ($iC == 8) or ($iC == 32) or ($iC == 36) or ($iC == 58) or ($iC == 62) or ($iC == 84) or ($iC == 88) or ($iC == 110) or ($iC == 114) or ($iC == 136) or ($iC == 140))? 1 : 0;
  1753.         }
  1754.         elsif(($iR==32) or ($iR==36) or ($iR==58) or ($iR==62) or ($iR==84) or ($iR==88) or ($iR==110) or ($iR==114)){
  1755.             return ((($iC >= 4) and ($iC <= 5)) or (($iC >= 7) and ($iC <= 8)) or (($iC >= 32) and ($iC <= 36)) or (($iC >= 58) and ($iC <= 62)) or (($iC >= 84) and ($iC <= 88)) or (($iC >= 110) and ($iC <= 114)) or (($iC >= 136) and ($iC <= 140)))? 1 : 0;
  1756.         }
  1757.         return 0;
  1758.     }
  1759.     elsif($iV == 33) {
  1760.         if($iR==142){
  1761.             return (($iC == 28) or ($iC == 30) or ($iC == 32) or ($iC == 56) or ($iC == 58) or ($iC == 60) or ($iC == 84) or ($iC == 86) or ($iC == 88) or ($iC == 112) or ($iC == 114) or ($iC == 116))? 1 : 0;
  1762.         }
  1763.         elsif($iR==4){
  1764.             return ((($iC >= 28) and ($iC <= 32)) or (($iC >= 56) and ($iC <= 60)) or (($iC >= 84) and ($iC <= 88)) or (($iC >= 112) and ($iC <= 116)) or ($iC == 138))? 1 : 0;
  1765.         }
  1766.         elsif($iR==138){
  1767.             return ((($iC >= 2) and ($iC <= 4)))? 1 : 0;
  1768.         }
  1769.         elsif($iR==140){
  1770.             return (($iC == 1) or ($iC == 5) or (($iC >= 28) and ($iC <= 32)) or (($iC >= 56) and ($iC <= 60)) or (($iC >= 84) and ($iC <= 88)) or (($iC >= 112) and ($iC <= 116)))? 1 : 0;
  1771.         }
  1772.         elsif($iR==139){
  1773.             return ((($iC >= 1) and ($iC <= 3)))? 1 : 0;
  1774.         }
  1775.         elsif($iR==1){
  1776.             return ((($iC >= 139) and ($iC <= 140)))? 1 : 0;
  1777.         }
  1778.         elsif($iR==5){
  1779.             return (($iC == 28) or ($iC == 32) or ($iC == 56) or ($iC == 60) or ($iC == 84) or ($iC == 88) or ($iC == 112) or ($iC == 116) or ($iC == 140))? 1 : 0;
  1780.         }
  1781.         elsif(($iR==8) or ($iR==144)){
  1782.             return ((($iC >= 28) and ($iC <= 32)) or (($iC >= 56) and ($iC <= 60)) or (($iC >= 84) and ($iC <= 88)) or (($iC >= 112) and ($iC <= 116)))? 1 : 0;
  1783.         }
  1784.         elsif(($iR==2) or ($iR==3)){
  1785.             return ((($iC >= 138) and ($iC <= 139)))? 1 : 0;
  1786.         }
  1787.         elsif(($iR==7) or ($iR==141) or ($iR==143)){
  1788.             return (($iC == 28) or ($iC == 32) or ($iC == 56) or ($iC == 60) or ($iC == 84) or ($iC == 88) or ($iC == 112) or ($iC == 116))? 1 : 0;
  1789.         }
  1790.         elsif(($iR==30) or ($iR==58) or ($iR==86) or ($iR==114)){
  1791.             return (($iC == 4) or ($iC == 8) or ($iC == 28) or ($iC == 30) or ($iC == 32) or ($iC == 56) or ($iC == 58) or ($iC == 60) or ($iC == 84) or ($iC == 86) or ($iC == 88) or ($iC == 112) or ($iC == 114) or ($iC == 116) or ($iC == 140) or ($iC == 142) or ($iC == 144))? 1 : 0;
  1792.         }
  1793.         elsif(($iR==28) or ($iR==32) or ($iR==56) or ($iR==60) or ($iR==84) or ($iR==88) or ($iR==112) or ($iR==116)){
  1794.             return ((($iC >= 4) and ($iC <= 5)) or (($iC >= 7) and ($iC <= 8)) or (($iC >= 28) and ($iC <= 32)) or (($iC >= 56) and ($iC <= 60)) or (($iC >= 84) and ($iC <= 88)) or (($iC >= 112) and ($iC <= 116)) or (($iC >= 140) and ($iC <= 144)))? 1 : 0;
  1795.         }
  1796.         elsif(($iR==29) or ($iR==31) or ($iR==57) or ($iR==59) or ($iR==85) or ($iR==87) or ($iR==113) or ($iR==115)){
  1797.             return (($iC == 4) or ($iC == 8) or ($iC == 28) or ($iC == 32) or ($iC == 56) or ($iC == 60) or ($iC == 84) or ($iC == 88) or ($iC == 112) or ($iC == 116) or ($iC == 140) or ($iC == 144))? 1 : 0;
  1798.         }
  1799.         return 0;
  1800.     }
  1801.     elsif($iV == 34) {
  1802.         if($iR==4){
  1803.             return ((($iC >= 32) and ($iC <= 36)) or (($iC >= 60) and ($iC <= 64)) or (($iC >= 88) and ($iC <= 92)) or (($iC >= 116) and ($iC <= 120)) or ($iC == 143))? 1 : 0;
  1804.         }
  1805.         elsif($iR==142){
  1806.             return (($iC == 1))? 1 : 0;
  1807.         }
  1808.         elsif($iR==5){
  1809.             return (($iC == 32) or ($iC == 36) or ($iC == 60) or ($iC == 64) or ($iC == 88) or ($iC == 92) or ($iC == 116) or ($iC == 120) or ($iC == 144))? 1 : 0;
  1810.         }
  1811.         elsif($iR==146){
  1812.             return (($iC == 32) or ($iC == 34) or ($iC == 36) or ($iC == 60) or ($iC == 62) or ($iC == 64) or ($iC == 88) or ($iC == 90) or ($iC == 92) or ($iC == 116) or ($iC == 118) or ($iC == 120))? 1 : 0;
  1813.         }
  1814.         elsif($iR==144){
  1815.             return (($iC == 1) or ($iC == 3) or ($iC == 5) or (($iC >= 32) and ($iC <= 36)) or (($iC >= 60) and ($iC <= 64)) or (($iC >= 88) and ($iC <= 92)) or (($iC >= 116) and ($iC <= 120)))? 1 : 0;
  1816.         }
  1817.         elsif($iR==143){
  1818.             return ((($iC >= 0) and ($iC <= 2)) or ($iC == 4))? 1 : 0;
  1819.         }
  1820.         elsif($iR==3){
  1821.             return (($iC == 144))? 1 : 0;
  1822.         }
  1823.         elsif($iR==1){
  1824.             return ((($iC >= 142) and ($iC <= 144)))? 1 : 0;
  1825.         }
  1826.         elsif(($iR==8) or ($iR==148)){
  1827.             return ((($iC >= 32) and ($iC <= 36)) or (($iC >= 60) and ($iC <= 64)) or (($iC >= 88) and ($iC <= 92)) or (($iC >= 116) and ($iC <= 120)))? 1 : 0;
  1828.         }
  1829.         elsif(($iR==0) or ($iR==2)){
  1830.             return (($iC == 143))? 1 : 0;
  1831.         }
  1832.         elsif(($iR==7) or ($iR==145) or ($iR==147)){
  1833.             return (($iC == 32) or ($iC == 36) or ($iC == 60) or ($iC == 64) or ($iC == 88) or ($iC == 92) or ($iC == 116) or ($iC == 120))? 1 : 0;
  1834.         }
  1835.         elsif(($iR==34) or ($iR==62) or ($iR==90) or ($iR==118)){
  1836.             return (($iC == 4) or ($iC == 8) or ($iC == 32) or ($iC == 34) or ($iC == 36) or ($iC == 60) or ($iC == 62) or ($iC == 64) or ($iC == 88) or ($iC == 90) or ($iC == 92) or ($iC == 116) or ($iC == 118) or ($iC == 120) or ($iC == 144) or ($iC == 146) or ($iC == 148))? 1 : 0;
  1837.         }
  1838.         elsif(($iR==32) or ($iR==36) or ($iR==60) or ($iR==64) or ($iR==88) or ($iR==92) or ($iR==116) or ($iR==120)){
  1839.             return ((($iC >= 4) and ($iC <= 5)) or (($iC >= 7) and ($iC <= 8)) or (($iC >= 32) and ($iC <= 36)) or (($iC >= 60) and ($iC <= 64)) or (($iC >= 88) and ($iC <= 92)) or (($iC >= 116) and ($iC <= 120)) or (($iC >= 144) and ($iC <= 148)))? 1 : 0;
  1840.         }
  1841.         elsif(($iR==33) or ($iR==35) or ($iR==61) or ($iR==63) or ($iR==89) or ($iR==91) or ($iR==117) or ($iR==119)){
  1842.             return (($iC == 4) or ($iC == 8) or ($iC == 32) or ($iC == 36) or ($iC == 60) or ($iC == 64) or ($iC == 88) or ($iC == 92) or ($iC == 116) or ($iC == 120) or ($iC == 144) or ($iC == 148))? 1 : 0;
  1843.         }
  1844.         return 0;
  1845.     }
  1846.     elsif($iV == 35) {
  1847.         if($iR==146){
  1848.             return ((($iC >= 0) and ($iC <= 1)) or (($iC >= 3) and ($iC <= 4)))? 1 : 0;
  1849.         }
  1850.         elsif($iR==5){
  1851.             return (($iC == 28) or ($iC == 32) or ($iC == 52) or ($iC == 56) or ($iC == 76) or ($iC == 80) or ($iC == 100) or ($iC == 104) or ($iC == 124) or ($iC == 128) or ($iC == 148))? 1 : 0;
  1852.         }
  1853.         elsif($iR==4){
  1854.             return ((($iC >= 28) and ($iC <= 32)) or (($iC >= 52) and ($iC <= 56)) or (($iC >= 76) and ($iC <= 80)) or (($iC >= 100) and ($iC <= 104)) or (($iC >= 124) and ($iC <= 128)) or (($iC >= 146) and ($iC <= 147)))? 1 : 0;
  1855.         }
  1856.         elsif($iR==148){
  1857.             return (($iC == 0) or ($iC == 2) or ($iC == 5) or (($iC >= 28) and ($iC <= 32)) or (($iC >= 52) and ($iC <= 56)) or (($iC >= 76) and ($iC <= 80)) or (($iC >= 100) and ($iC <= 104)) or (($iC >= 124) and ($iC <= 128)))? 1 : 0;
  1858.         }
  1859.         elsif($iR==2){
  1860.             return ((($iC >= 147) and ($iC <= 148)))? 1 : 0;
  1861.         }
  1862.         elsif($iR==0){
  1863.             return ((($iC >= 146) and ($iC <= 148)))? 1 : 0;
  1864.         }
  1865.         elsif($iR==147){
  1866.             return ((($iC >= 0) and ($iC <= 4)))? 1 : 0;
  1867.         }
  1868.         elsif($iR==150){
  1869.             return (($iC == 28) or ($iC == 30) or ($iC == 32) or ($iC == 52) or ($iC == 54) or ($iC == 56) or ($iC == 76) or ($iC == 78) or ($iC == 80) or ($iC == 100) or ($iC == 102) or ($iC == 104) or ($iC == 124) or ($iC == 126) or ($iC == 128))? 1 : 0;
  1870.         }
  1871.         elsif(($iR==1) or ($iR==3)){
  1872.             return ((($iC >= 146) and ($iC <= 147)))? 1 : 0;
  1873.         }
  1874.         elsif(($iR==8) or ($iR==152)){
  1875.             return ((($iC >= 28) and ($iC <= 32)) or (($iC >= 52) and ($iC <= 56)) or (($iC >= 76) and ($iC <= 80)) or (($iC >= 100) and ($iC <= 104)) or (($iC >= 124) and ($iC <= 128)))? 1 : 0;
  1876.         }
  1877.         elsif(($iR==7) or ($iR==149) or ($iR==151)){
  1878.             return (($iC == 28) or ($iC == 32) or ($iC == 52) or ($iC == 56) or ($iC == 76) or ($iC == 80) or ($iC == 100) or ($iC == 104) or ($iC == 124) or ($iC == 128))? 1 : 0;
  1879.         }
  1880.         elsif(($iR==30) or ($iR==54) or ($iR==78) or ($iR==102) or ($iR==126)){
  1881.             return (($iC == 4) or ($iC == 8) or ($iC == 28) or ($iC == 30) or ($iC == 32) or ($iC == 52) or ($iC == 54) or ($iC == 56) or ($iC == 76) or ($iC == 78) or ($iC == 80) or ($iC == 100) or ($iC == 102) or ($iC == 104) or ($iC == 124) or ($iC == 126) or ($iC == 128) or ($iC == 148) or ($iC == 150) or ($iC == 152))? 1 : 0;
  1882.         }
  1883.         elsif(($iR==29) or ($iR==31) or ($iR==53) or ($iR==55) or ($iR==77) or ($iR==79) or ($iR==101) or ($iR==103) or ($iR==125) or ($iR==127)){
  1884.             return (($iC == 4) or ($iC == 8) or ($iC == 28) or ($iC == 32) or ($iC == 52) or ($iC == 56) or ($iC == 76) or ($iC == 80) or ($iC == 100) or ($iC == 104) or ($iC == 124) or ($iC == 128) or ($iC == 148) or ($iC == 152))? 1 : 0;
  1885.         }
  1886.         elsif(($iR==28) or ($iR==32) or ($iR==52) or ($iR==56) or ($iR==76) or ($iR==80) or ($iR==100) or ($iR==104) or ($iR==124) or ($iR==128)){
  1887.             return ((($iC >= 4) and ($iC <= 5)) or (($iC >= 7) and ($iC <= 8)) or (($iC >= 28) and ($iC <= 32)) or (($iC >= 52) and ($iC <= 56)) or (($iC >= 76) and ($iC <= 80)) or (($iC >= 100) and ($iC <= 104)) or (($iC >= 124) and ($iC <= 128)) or (($iC >= 148) and ($iC <= 152)))? 1 : 0;
  1888.         }
  1889.         return 0;
  1890.     }
  1891.     elsif($iV == 36) {
  1892.         if($iR==5){
  1893.             return (($iC == 22) or ($iC == 26) or ($iC == 48) or ($iC == 52) or ($iC == 74) or ($iC == 78) or ($iC == 100) or ($iC == 104) or ($iC == 126) or ($iC == 130) or ($iC == 152))? 1 : 0;
  1894.         }
  1895.         elsif($iR==4){
  1896.             return ((($iC >= 22) and ($iC <= 26)) or (($iC >= 48) and ($iC <= 52)) or (($iC >= 74) and ($iC <= 78)) or (($iC >= 100) and ($iC <= 104)) or (($iC >= 126) and ($iC <= 130)) or ($iC == 152))? 1 : 0;
  1897.         }
  1898.         elsif($iR==154){
  1899.             return (($iC == 22) or ($iC == 24) or ($iC == 26) or ($iC == 48) or ($iC == 50) or ($iC == 52) or ($iC == 74) or ($iC == 76) or ($iC == 78) or ($iC == 100) or ($iC == 102) or ($iC == 104) or ($iC == 126) or ($iC == 128) or ($iC == 130))? 1 : 0;
  1900.         }
  1901.         elsif($iR==150){
  1902.             return ((($iC >= 0) and ($iC <= 1)) or ($iC == 3))? 1 : 0;
  1903.         }
  1904.         elsif($iR==0){
  1905.             return ((($iC >= 150) and ($iC <= 151)))? 1 : 0;
  1906.         }
  1907.         elsif($iR==151){
  1908.             return (($iC == 0))? 1 : 0;
  1909.         }
  1910.         elsif($iR==1){
  1911.             return (($iC == 150))? 1 : 0;
  1912.         }
  1913.         elsif($iR==152){
  1914.             return ((($iC >= 2) and ($iC <= 5)) or (($iC >= 22) and ($iC <= 26)) or (($iC >= 48) and ($iC <= 52)) or (($iC >= 74) and ($iC <= 78)) or (($iC >= 100) and ($iC <= 104)) or (($iC >= 126) and ($iC <= 130)))? 1 : 0;
  1915.         }
  1916.         elsif($iR==3){
  1917.             return (($iC == 150) or ($iC == 152))? 1 : 0;
  1918.         }
  1919.         elsif($iR==2){
  1920.             return (($iC == 152))? 1 : 0;
  1921.         }
  1922.         elsif(($iR==8) or ($iR==156)){
  1923.             return ((($iC >= 22) and ($iC <= 26)) or (($iC >= 48) and ($iC <= 52)) or (($iC >= 74) and ($iC <= 78)) or (($iC >= 100) and ($iC <= 104)) or (($iC >= 126) and ($iC <= 130)))? 1 : 0;
  1924.         }
  1925.         elsif(($iR==7) or ($iR==153) or ($iR==155)){
  1926.             return (($iC == 22) or ($iC == 26) or ($iC == 48) or ($iC == 52) or ($iC == 74) or ($iC == 78) or ($iC == 100) or ($iC == 104) or ($iC == 126) or ($iC == 130))? 1 : 0;
  1927.         }
  1928.         elsif(($iR==24) or ($iR==50) or ($iR==76) or ($iR==102) or ($iR==128)){
  1929.             return (($iC == 4) or ($iC == 8) or ($iC == 22) or ($iC == 24) or ($iC == 26) or ($iC == 48) or ($iC == 50) or ($iC == 52) or ($iC == 74) or ($iC == 76) or ($iC == 78) or ($iC == 100) or ($iC == 102) or ($iC == 104) or ($iC == 126) or ($iC == 128) or ($iC == 130) or ($iC == 152) or ($iC == 154) or ($iC == 156))? 1 : 0;
  1930.         }
  1931.         elsif(($iR==22) or ($iR==26) or ($iR==48) or ($iR==52) or ($iR==74) or ($iR==78) or ($iR==100) or ($iR==104) or ($iR==126) or ($iR==130)){
  1932.             return ((($iC >= 4) and ($iC <= 5)) or (($iC >= 7) and ($iC <= 8)) or (($iC >= 22) and ($iC <= 26)) or (($iC >= 48) and ($iC <= 52)) or (($iC >= 74) and ($iC <= 78)) or (($iC >= 100) and ($iC <= 104)) or (($iC >= 126) and ($iC <= 130)) or (($iC >= 152) and ($iC <= 156)))? 1 : 0;
  1933.         }
  1934.         elsif(($iR==23) or ($iR==25) or ($iR==49) or ($iR==51) or ($iR==75) or ($iR==77) or ($iR==101) or ($iR==103) or ($iR==127) or ($iR==129)){
  1935.             return (($iC == 4) or ($iC == 8) or ($iC == 22) or ($iC == 26) or ($iC == 48) or ($iC == 52) or ($iC == 74) or ($iC == 78) or ($iC == 100) or ($iC == 104) or ($iC == 126) or ($iC == 130) or ($iC == 152) or ($iC == 156))? 1 : 0;
  1936.         }
  1937.         return 0;
  1938.     }
  1939.     elsif($iV == 37) {
  1940.         if($iR==0){
  1941.             return ((($iC >= 155) and ($iC <= 156)))? 1 : 0;
  1942.         }
  1943.         elsif($iR==1){
  1944.             return (($iC == 154) or ($iC == 156))? 1 : 0;
  1945.         }
  1946.         elsif($iR==155){
  1947.             return (($iC == 0) or ($iC == 3))? 1 : 0;
  1948.         }
  1949.         elsif($iR==158){
  1950.             return (($iC == 26) or ($iC == 28) or ($iC == 30) or ($iC == 52) or ($iC == 54) or ($iC == 56) or ($iC == 78) or ($iC == 80) or ($iC == 82) or ($iC == 104) or ($iC == 106) or ($iC == 108) or ($iC == 130) or ($iC == 132) or ($iC == 134))? 1 : 0;
  1951.         }
  1952.         elsif($iR==3){
  1953.             return (($iC == 155))? 1 : 0;
  1954.         }
  1955.         elsif($iR==154){
  1956.             return (($iC == 1) or ($iC == 4))? 1 : 0;
  1957.         }
  1958.         elsif($iR==4){
  1959.             return ((($iC >= 26) and ($iC <= 30)) or (($iC >= 52) and ($iC <= 56)) or (($iC >= 78) and ($iC <= 82)) or (($iC >= 104) and ($iC <= 108)) or (($iC >= 130) and ($iC <= 134)) or ($iC == 154) or ($iC == 156))? 1 : 0;
  1960.         }
  1961.         elsif($iR==5){
  1962.             return (($iC == 26) or ($iC == 30) or ($iC == 52) or ($iC == 56) or ($iC == 78) or ($iC == 82) or ($iC == 104) or ($iC == 108) or ($iC == 130) or ($iC == 134) or ($iC == 156))? 1 : 0;
  1963.         }
  1964.         elsif($iR==156){
  1965.             return ((($iC >= 0) and ($iC <= 1)) or (($iC >= 4) and ($iC <= 5)) or (($iC >= 26) and ($iC <= 30)) or (($iC >= 52) and ($iC <= 56)) or (($iC >= 78) and ($iC <= 82)) or (($iC >= 104) and ($iC <= 108)) or (($iC >= 130) and ($iC <= 134)))? 1 : 0;
  1966.         }
  1967.         elsif(($iR==8) or ($iR==160)){
  1968.             return ((($iC >= 26) and ($iC <= 30)) or (($iC >= 52) and ($iC <= 56)) or (($iC >= 78) and ($iC <= 82)) or (($iC >= 104) and ($iC <= 108)) or (($iC >= 130) and ($iC <= 134)))? 1 : 0;
  1969.         }
  1970.         elsif(($iR==7) or ($iR==157) or ($iR==159)){
  1971.             return (($iC == 26) or ($iC == 30) or ($iC == 52) or ($iC == 56) or ($iC == 78) or ($iC == 82) or ($iC == 104) or ($iC == 108) or ($iC == 130) or ($iC == 134))? 1 : 0;
  1972.         }
  1973.         elsif(($iR==28) or ($iR==54) or ($iR==80) or ($iR==106) or ($iR==132)){
  1974.             return (($iC == 4) or ($iC == 8) or ($iC == 26) or ($iC == 28) or ($iC == 30) or ($iC == 52) or ($iC == 54) or ($iC == 56) or ($iC == 78) or ($iC == 80) or ($iC == 82) or ($iC == 104) or ($iC == 106) or ($iC == 108) or ($iC == 130) or ($iC == 132) or ($iC == 134) or ($iC == 156) or ($iC == 158) or ($iC == 160))? 1 : 0;
  1975.         }
  1976.         elsif(($iR==27) or ($iR==29) or ($iR==53) or ($iR==55) or ($iR==79) or ($iR==81) or ($iR==105) or ($iR==107) or ($iR==131) or ($iR==133)){
  1977.             return (($iC == 4) or ($iC == 8) or ($iC == 26) or ($iC == 30) or ($iC == 52) or ($iC == 56) or ($iC == 78) or ($iC == 82) or ($iC == 104) or ($iC == 108) or ($iC == 130) or ($iC == 134) or ($iC == 156) or ($iC == 160))? 1 : 0;
  1978.         }
  1979.         elsif(($iR==26) or ($iR==30) or ($iR==52) or ($iR==56) or ($iR==78) or ($iR==82) or ($iR==104) or ($iR==108) or ($iR==130) or ($iR==134)){
  1980.             return ((($iC >= 4) and ($iC <= 5)) or (($iC >= 7) and ($iC <= 8)) or (($iC >= 26) and ($iC <= 30)) or (($iC >= 52) and ($iC <= 56)) or (($iC >= 78) and ($iC <= 82)) or (($iC >= 104) and ($iC <= 108)) or (($iC >= 130) and ($iC <= 134)) or (($iC >= 156) and ($iC <= 160)))? 1 : 0;
  1981.         }
  1982.         return 0;
  1983.     }
  1984.     elsif($iV == 38) {
  1985.         if($iR==3){
  1986.             return (($iC == 158) or ($iC == 160))? 1 : 0;
  1987.         }
  1988.         elsif($iR==4){
  1989.             return ((($iC >= 30) and ($iC <= 34)) or (($iC >= 56) and ($iC <= 60)) or (($iC >= 82) and ($iC <= 86)) or (($iC >= 108) and ($iC <= 112)) or (($iC >= 134) and ($iC <= 138)) or (($iC >= 159) and ($iC <= 160)))? 1 : 0;
  1990.         }
  1991.         elsif($iR==160){
  1992.             return ((($iC >= 0) and ($iC <= 1)) or (($iC >= 3) and ($iC <= 5)) or (($iC >= 30) and ($iC <= 34)) or (($iC >= 56) and ($iC <= 60)) or (($iC >= 82) and ($iC <= 86)) or (($iC >= 108) and ($iC <= 112)) or (($iC >= 134) and ($iC <= 138)))? 1 : 0;
  1993.         }
  1994.         elsif($iR==159){
  1995.             return (($iC == 4))? 1 : 0;
  1996.         }
  1997.         elsif($iR==5){
  1998.             return (($iC == 30) or ($iC == 34) or ($iC == 56) or ($iC == 60) or ($iC == 82) or ($iC == 86) or ($iC == 108) or ($iC == 112) or ($iC == 134) or ($iC == 138) or ($iC == 160))? 1 : 0;
  1999.         }
  2000.         elsif($iR==2){
  2001.             return (($iC == 158))? 1 : 0;
  2002.         }
  2003.         elsif($iR==162){
  2004.             return (($iC == 30) or ($iC == 32) or ($iC == 34) or ($iC == 56) or ($iC == 58) or ($iC == 60) or ($iC == 82) or ($iC == 84) or ($iC == 86) or ($iC == 108) or ($iC == 110) or ($iC == 112) or ($iC == 134) or ($iC == 136) or ($iC == 138))? 1 : 0;
  2005.         }
  2006.         elsif($iR==158){
  2007.             return ((($iC >= 2) and ($iC <= 3)))? 1 : 0;
  2008.         }
  2009.         elsif(($iR==8) or ($iR==164)){
  2010.             return ((($iC >= 30) and ($iC <= 34)) or (($iC >= 56) and ($iC <= 60)) or (($iC >= 82) and ($iC <= 86)) or (($iC >= 108) and ($iC <= 112)) or (($iC >= 134) and ($iC <= 138)))? 1 : 0;
  2011.         }
  2012.         elsif(($iR==0) or ($iR==1)){
  2013.             return (($iC == 160))? 1 : 0;
  2014.         }
  2015.         elsif(($iR==7) or ($iR==161) or ($iR==163)){
  2016.             return (($iC == 30) or ($iC == 34) or ($iC == 56) or ($iC == 60) or ($iC == 82) or ($iC == 86) or ($iC == 108) or ($iC == 112) or ($iC == 134) or ($iC == 138))? 1 : 0;
  2017.         }
  2018.         elsif(($iR==32) or ($iR==58) or ($iR==84) or ($iR==110) or ($iR==136)){
  2019.             return (($iC == 4) or ($iC == 8) or ($iC == 30) or ($iC == 32) or ($iC == 34) or ($iC == 56) or ($iC == 58) or ($iC == 60) or ($iC == 82) or ($iC == 84) or ($iC == 86) or ($iC == 108) or ($iC == 110) or ($iC == 112) or ($iC == 134) or ($iC == 136) or ($iC == 138) or ($iC == 160) or ($iC == 162) or ($iC == 164))? 1 : 0;
  2020.         }
  2021.         elsif(($iR==31) or ($iR==33) or ($iR==57) or ($iR==59) or ($iR==83) or ($iR==85) or ($iR==109) or ($iR==111) or ($iR==135) or ($iR==137)){
  2022.             return (($iC == 4) or ($iC == 8) or ($iC == 30) or ($iC == 34) or ($iC == 56) or ($iC == 60) or ($iC == 82) or ($iC == 86) or ($iC == 108) or ($iC == 112) or ($iC == 134) or ($iC == 138) or ($iC == 160) or ($iC == 164))? 1 : 0;
  2023.         }
  2024.         elsif(($iR==30) or ($iR==34) or ($iR==56) or ($iR==60) or ($iR==82) or ($iR==86) or ($iR==108) or ($iR==112) or ($iR==134) or ($iR==138)){
  2025.             return ((($iC >= 4) and ($iC <= 5)) or (($iC >= 7) and ($iC <= 8)) or (($iC >= 30) and ($iC <= 34)) or (($iC >= 56) and ($iC <= 60)) or (($iC >= 82) and ($iC <= 86)) or (($iC >= 108) and ($iC <= 112)) or (($iC >= 134) and ($iC <= 138)) or (($iC >= 160) and ($iC <= 164)))? 1 : 0;
  2026.         }
  2027.         return 0;
  2028.     }
  2029.     elsif($iV == 39) {
  2030.         if($iR==162){
  2031.             return (($iC == 0) or ($iC == 2) or ($iC == 4))? 1 : 0;
  2032.         }
  2033.         elsif($iR==0){
  2034.             return (($iC == 162))? 1 : 0;
  2035.         }
  2036.         elsif($iR==163){
  2037.             return ((($iC >= 3) and ($iC <= 4)))? 1 : 0;
  2038.         }
  2039.         elsif($iR==3){
  2040.             return (($iC == 163))? 1 : 0;
  2041.         }
  2042.         elsif($iR==5){
  2043.             return (($iC == 24) or ($iC == 28) or ($iC == 52) or ($iC == 56) or ($iC == 80) or ($iC == 84) or ($iC == 108) or ($iC == 112) or ($iC == 136) or ($iC == 140) or ($iC == 164))? 1 : 0;
  2044.         }
  2045.         elsif($iR==164){
  2046.             return (($iC == 2) or (($iC >= 4) and ($iC <= 5)) or (($iC >= 24) and ($iC <= 28)) or (($iC >= 52) and ($iC <= 56)) or (($iC >= 80) and ($iC <= 84)) or (($iC >= 108) and ($iC <= 112)) or (($iC >= 136) and ($iC <= 140)))? 1 : 0;
  2047.         }
  2048.         elsif($iR==2){
  2049.             return (($iC == 162) or ($iC == 164))? 1 : 0;
  2050.         }
  2051.         elsif($iR==166){
  2052.             return (($iC == 24) or ($iC == 26) or ($iC == 28) or ($iC == 52) or ($iC == 54) or ($iC == 56) or ($iC == 80) or ($iC == 82) or ($iC == 84) or ($iC == 108) or ($iC == 110) or ($iC == 112) or ($iC == 136) or ($iC == 138) or ($iC == 140))? 1 : 0;
  2053.         }
  2054.         elsif($iR==4){
  2055.             return ((($iC >= 24) and ($iC <= 28)) or (($iC >= 52) and ($iC <= 56)) or (($iC >= 80) and ($iC <= 84)) or (($iC >= 108) and ($iC <= 112)) or (($iC >= 136) and ($iC <= 140)) or (($iC >= 162) and ($iC <= 164)))? 1 : 0;
  2056.         }
  2057.         elsif(($iR==8) or ($iR==168)){
  2058.             return ((($iC >= 24) and ($iC <= 28)) or (($iC >= 52) and ($iC <= 56)) or (($iC >= 80) and ($iC <= 84)) or (($iC >= 108) and ($iC <= 112)) or (($iC >= 136) and ($iC <= 140)))? 1 : 0;
  2059.         }
  2060.         elsif(($iR==7) or ($iR==165) or ($iR==167)){
  2061.             return (($iC == 24) or ($iC == 28) or ($iC == 52) or ($iC == 56) or ($iC == 80) or ($iC == 84) or ($iC == 108) or ($iC == 112) or ($iC == 136) or ($iC == 140))? 1 : 0;
  2062.         }
  2063.         elsif(($iR==26) or ($iR==54) or ($iR==82) or ($iR==110) or ($iR==138)){
  2064.             return (($iC == 4) or ($iC == 8) or ($iC == 24) or ($iC == 26) or ($iC == 28) or ($iC == 52) or ($iC == 54) or ($iC == 56) or ($iC == 80) or ($iC == 82) or ($iC == 84) or ($iC == 108) or ($iC == 110) or ($iC == 112) or ($iC == 136) or ($iC == 138) or ($iC == 140) or ($iC == 164) or ($iC == 166) or ($iC == 168))? 1 : 0;
  2065.         }
  2066.         elsif(($iR==25) or ($iR==27) or ($iR==53) or ($iR==55) or ($iR==81) or ($iR==83) or ($iR==109) or ($iR==111) or ($iR==137) or ($iR==139)){
  2067.             return (($iC == 4) or ($iC == 8) or ($iC == 24) or ($iC == 28) or ($iC == 52) or ($iC == 56) or ($iC == 80) or ($iC == 84) or ($iC == 108) or ($iC == 112) or ($iC == 136) or ($iC == 140) or ($iC == 164) or ($iC == 168))? 1 : 0;
  2068.         }
  2069.         elsif(($iR==24) or ($iR==28) or ($iR==52) or ($iR==56) or ($iR==80) or ($iR==84) or ($iR==108) or ($iR==112) or ($iR==136) or ($iR==140)){
  2070.             return ((($iC >= 4) and ($iC <= 5)) or (($iC >= 7) and ($iC <= 8)) or (($iC >= 24) and ($iC <= 28)) or (($iC >= 52) and ($iC <= 56)) or (($iC >= 80) and ($iC <= 84)) or (($iC >= 108) and ($iC <= 112)) or (($iC >= 136) and ($iC <= 140)) or (($iC >= 164) and ($iC <= 168)))? 1 : 0;
  2071.         }
  2072.         return 0;
  2073.     }
  2074.     elsif($iV == 40) {
  2075.         if($iR==1){
  2076.             return (($iC == 166) or ($iC == 168))? 1 : 0;
  2077.         }
  2078.         elsif($iR==5){
  2079.             return (($iC == 28) or ($iC == 32) or ($iC == 56) or ($iC == 60) or ($iC == 84) or ($iC == 88) or ($iC == 112) or ($iC == 116) or ($iC == 140) or ($iC == 144) or ($iC == 166) or ($iC == 168))? 1 : 0;
  2080.         }
  2081.         elsif($iR==3){
  2082.             return ((($iC >= 167) and ($iC <= 168)))? 1 : 0;
  2083.         }
  2084.         elsif($iR==168){
  2085.             return (($iC == 1) or ($iC == 3) or ($iC == 5) or (($iC >= 28) and ($iC <= 32)) or (($iC >= 56) and ($iC <= 60)) or (($iC >= 84) and ($iC <= 88)) or (($iC >= 112) and ($iC <= 116)) or (($iC >= 140) and ($iC <= 144)))? 1 : 0;
  2086.         }
  2087.         elsif($iR==167){
  2088.             return (($iC == 3))? 1 : 0;
  2089.         }
  2090.         elsif($iR==166){
  2091.             return ((($iC >= 0) and ($iC <= 2)) or ($iC == 5))? 1 : 0;
  2092.         }
  2093.         elsif($iR==170){
  2094.             return (($iC == 28) or ($iC == 30) or ($iC == 32) or ($iC == 56) or ($iC == 58) or ($iC == 60) or ($iC == 84) or ($iC == 86) or ($iC == 88) or ($iC == 112) or ($iC == 114) or ($iC == 116) or ($iC == 140) or ($iC == 142) or ($iC == 144))? 1 : 0;
  2095.         }
  2096.         elsif(($iR==0) or ($iR==2)){
  2097.             return (($iC == 166))? 1 : 0;
  2098.         }
  2099.         elsif(($iR==7) or ($iR==169) or ($iR==171)){
  2100.             return (($iC == 28) or ($iC == 32) or ($iC == 56) or ($iC == 60) or ($iC == 84) or ($iC == 88) or ($iC == 112) or ($iC == 116) or ($iC == 140) or ($iC == 144))? 1 : 0;
  2101.         }
  2102.         elsif(($iR==4) or ($iR==8) or ($iR==172)){
  2103.             return ((($iC >= 28) and ($iC <= 32)) or (($iC >= 56) and ($iC <= 60)) or (($iC >= 84) and ($iC <= 88)) or (($iC >= 112) and ($iC <= 116)) or (($iC >= 140) and ($iC <= 144)))? 1 : 0;
  2104.         }
  2105.         elsif(($iR==30) or ($iR==58) or ($iR==86) or ($iR==114) or ($iR==142)){
  2106.             return (($iC == 4) or ($iC == 8) or ($iC == 28) or ($iC == 30) or ($iC == 32) or ($iC == 56) or ($iC == 58) or ($iC == 60) or ($iC == 84) or ($iC == 86) or ($iC == 88) or ($iC == 112) or ($iC == 114) or ($iC == 116) or ($iC == 140) or ($iC == 142) or ($iC == 144) or ($iC == 168) or ($iC == 170) or ($iC == 172))? 1 : 0;
  2107.         }
  2108.         elsif(($iR==28) or ($iR==32) or ($iR==56) or ($iR==60) or ($iR==84) or ($iR==88) or ($iR==112) or ($iR==116) or ($iR==140) or ($iR==144)){
  2109.             return ((($iC >= 4) and ($iC <= 5)) or (($iC >= 7) and ($iC <= 8)) or (($iC >= 28) and ($iC <= 32)) or (($iC >= 56) and ($iC <= 60)) or (($iC >= 84) and ($iC <= 88)) or (($iC >= 112) and ($iC <= 116)) or (($iC >= 140) and ($iC <= 144)) or (($iC >= 168) and ($iC <= 172)))? 1 : 0;
  2110.         }
  2111.         elsif(($iR==29) or ($iR==31) or ($iR==57) or ($iR==59) or ($iR==85) or ($iR==87) or ($iR==113) or ($iR==115) or ($iR==141) or ($iR==143)){
  2112.             return (($iC == 4) or ($iC == 8) or ($iC == 28) or ($iC == 32) or ($iC == 56) or ($iC == 60) or ($iC == 84) or ($iC == 88) or ($iC == 112) or ($iC == 116) or ($iC == 140) or ($iC == 144) or ($iC == 168) or ($iC == 172))? 1 : 0;
  2113.         }
  2114.         return 0;
  2115.     }
  2116. }
  2117. 1;
  2118. __END__
  2119.  
  2120. =head1 NAME
  2121.  
  2122. GD::Barcode::QRcode - Create QRcode barcode image with GD
  2123.  
  2124. =head1 SYNOPSIS
  2125.  
  2126. I<ex. CGI>
  2127.  
  2128.   use GD::Barcode::QRcode;
  2129.   binmode(STDOUT);
  2130.   print "Content-Type: image/png\n\n";
  2131.   print GD::Barcode::QRcode->new('1234567')->plot->png;
  2132.  
  2133. I<with UnitSize, ECC settings>
  2134.  
  2135.   my $oGdBar = GD::Barcode::QRcode->new('123456789', 
  2136.                             { Ecc => 'L', Version=>2, ModuleSize => 2}
  2137.                         );
  2138.  
  2139.  
  2140. =head1 DESCRIPTION
  2141.  
  2142. GD::Barcode::QRcode is a subclass of GD::Barcode and allows you to
  2143. create QRcode barcode image with GD.
  2144. This module based on "QRcode image CGI version 0.50 (C)2000-2002,Y.Swetake".
  2145.  
  2146. =head2 new
  2147.  
  2148. I<$oGdBar> = GD::Barcode::QRcode->new(I<$sTxt>, 
  2149.                     { Ecc => I<Ecc Mode>,
  2150.                       Version => I<Version>,
  2151.                       ModuleSize => I<Size of 1 modlue>,
  2152.                     });
  2153.  
  2154. Constructor. Creates a GD::Barcode::QRcode object for I<$sTxt>.
  2155.  
  2156. Parameters:
  2157.  
  2158. =over 4
  2159.  
  2160. =item Ecc
  2161.  
  2162. Ecc mode. Select 'M', 'L', 'H' or 'Q' (Default = 'M').
  2163.  
  2164. =item Version
  2165.  
  2166. Version ie. size of barcode image (Default = auto select).
  2167.  
  2168. =item ModuleSize
  2169.  
  2170. Size of modules(barcode unit)  (Default = 1).
  2171.  
  2172. =back
  2173.  
  2174. =head2 plot()
  2175.  
  2176. I<$oGd> = $oGdBar->plot([Height => I<$iHeight>, NoText => I<0 | 1>]);
  2177.  
  2178. creates GD object with barcode image for the I<$sTxt> specified at L<new> method.
  2179. I<$iHeight> is height of the image. If I<NoText> is 1, the image has no text image of I<$sTxt>.
  2180.  
  2181.  ex.
  2182.   my $oGdB = GD::Barcode::QRcode->new('1234567');
  2183.   my $oGD = $oGdB->plot();
  2184.   # $sGD is a GD image with Height=>20 pixels, with no text.
  2185.  
  2186. =head2 barcode()
  2187.  
  2188. I<$sPtn> = $oGdBar->barcode();
  2189.  
  2190. returns a barcode pattern in string with '1' and '0'. 
  2191. '1' means black, '0' means white.
  2192.  
  2193.  ex.
  2194.   my $oGdB = GD::Barcode::QRcode->new('1234567');
  2195.   my $sPtn = $oGdB->barcode();
  2196.  
  2197. =head2 $errStr
  2198.  
  2199. $GD::Barcode::QRcode::errStr
  2200.  
  2201. has error message.
  2202.  
  2203. =head2 $text
  2204.  
  2205. $oGdBar->{$text}
  2206.  
  2207. has barcode text based on I<$sTxt> specified in L<new> method.
  2208.  
  2209. =head1 AUTHOR
  2210.  
  2211. Kawai Takanori GCD00051@nifty.ne.jp
  2212.  
  2213. =head1 COPYRIGHT
  2214.  
  2215. The GD::Barocde::QRcode module is Copyright (c) 2003 Kawai Takanori. Japan.
  2216. All rights reserved.
  2217.  
  2218. You may distribute under the terms of either the GNU General Public
  2219. License or the Artistic License, as specified in the Perl README file.
  2220.  
  2221. =head1 SEE ALSO
  2222.  
  2223. GD::Barcode
  2224.  
  2225. =cut
  2226.