PHP版单文件index.php直接生成QQ微信支付宝三合一收款二维码完整源码

打开EditPlus 5类似的工具新建一个utf-8格式的php页面,将下面的源码复制进去,然后修改前十二行对应的信息即可,下面的两千多行代码为全自动生成内容无需修改,改好后保存名为index.php的文件,上传至网站任意目录,在手机端访问即为如下预览效果:

如何使用呢?如果在微信中打开该链接,则为直接调用微信的付款二维码展示,长按二维码识别即可付款,或者用其他微信扫也可以,如果是QQ打开,则直接调用QQ钱包收款二维码展示,长按即可用QQ钱包支付,如果是支付宝打开,则直接到付款页面,如果是其他浏览器打开,则为一个自动跳转的二维码,用哪个设备扫描,则会直接到哪个支付二维码的界面,这个程序特点就是方便个人转账之用,只需要这一个二维码即可。

<?php
	//下面是收款二维码的网页标题
	$title="轶软工作室 - 收款二维码";
	//下面是收款人名称标题,二维码下面那个
	$name="轶软工作室";
	//下面填你微信收款二维码解析后的链接地址
	$wechaturl="wxp://f2f0yRB……这里省略写你自己的……heXckQ5";
	//下面填你支付宝收款二维码解析后的链接地址
	$aliurl="https://qr.alipa……这里省略写你自己的……lc08f7a";
	//下面填你QQ钱包收款二维码解析后的链接地址
	$qqurl="https://i.qianbao……这里省略写你自己的……=wallet";
	//你只需要修改以上信息就可以了,以下信息为全自动生成的,无需修改
	define('QR_MODE_NUL', -1);
	define('QR_MODE_NUM', 0);
	define('QR_MODE_AN', 1);
	define('QR_MODE_8', 2);
	define('QR_MODE_KANJI', 3);
	define('QR_MODE_STRUCTURE', 4);
	define('QR_ECLEVEL_L', 0);
	define('QR_ECLEVEL_M', 1);
	define('QR_ECLEVEL_Q', 2);
	define('QR_ECLEVEL_H', 3);
	define('QR_FORMAT_TEXT', 0);
	define('QR_FORMAT_PNG',  1);
	class qrstr {
		public static function set(&$srctab, $x, $y, $repl, $replLen = false) {
			$srctab[$y] = substr_replace($srctab[$y], ($replLen !== false)?substr($repl,0,$replLen):$repl, $x, ($replLen !== false)?$replLen:strlen($repl));
		}
	}
    define('QR_CACHEABLE', false);
    define('QR_CACHE_DIR', false);
    define('QR_LOG_DIR', false);
    define('QR_FIND_BEST_MASK', true);
    define('QR_FIND_FROM_RANDOM', 2);
    define('QR_DEFAULT_MASK', 2);
    define('QR_PNG_MAXIMUM_SIZE',  1024);
    class QRtools {
                public static function binarize($frame){
                    $len = count($frame);
                    foreach ($frame as &$frameLine) {
                
                        for($i=0; $i<$len; $i++) {
                            $frameLine[$i] = (ord($frameLine[$i])&1)?'1':'0';
                            }
                    }
                    return $frame;
                    }
                public static function tcpdfBarcodeArray($code, $mode = 'QR,L', $tcPdfVersion = '4.5.037'){
                    $barcode_array = array();
            
                    if (!is_array($mode))
                        $mode = explode(',', $mode);
                
                        $eccLevel = 'L';
                
                    if (count($mode) > 1) {
                        $eccLevel = $mode[1];
                        }
                
                    $qrTab = QRcode::text($code, false, $eccLevel);
                    $size = count($qrTab);
                
                    $barcode_array['num_rows'] = $size;
                    $barcode_array['num_cols'] = $size;
                    $barcode_array['bcode'] = array();
                
                    foreach ($qrTab as $line) {
                        $arrAdd = array();
                        foreach(str_split($line) as $char)
                            $arrAdd[] = ($char=='1')?1:0;
                        $barcode_array['bcode'][] = $arrAdd;
                    }
                    
                    return $barcode_array;
                }
        
                public static function clearCache(){
                    self::$frames = array();
                }
        
                public static function buildCache(){
			        QRtools::markTime('before_build_cache');
			
			        $mask = new QRmask();
                    for ($a=1; $a <= QRSPEC_VERSION_MAX; $a++) {
                        $frame = QRspec::newFrame($a);
                        if (QR_IMAGE) {
                            $fileName = QR_CACHE_DIR.'frame_'.$a.'.png';
                            QRimage::png(self::binarize($frame), $fileName, 1, 0);
                        }
				
				        $width = count($frame);
				        $bitMask = array_fill(0, $width, array_fill(0, $width, 0));
				        for ($maskNo=0; $maskNo<8; $maskNo++)
					       $mask->makeMaskNo($maskNo, $width, $frame, $bitMask, true);
                    }
			
			     QRtools::markTime('after_build_cache');
                }

                public static function log($outfile, $err){
                    if (QR_LOG_DIR !== false) {
                        if ($err != '') {
                            if ($outfile !== false) {
                                file_put_contents(QR_LOG_DIR.basename($outfile).'-errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND);
                            } else {
                                file_put_contents(QR_LOG_DIR.'errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND);
                            }
                        }    
                    }
                }
        
                public static function dumpMask($frame){
                    $width = count($frame);
                    for($y=0;$y<$width;$y++) {
                        for($x=0;$x<$width;$x++) {
                    echo ord($frame[$y][$x]).',';
                        }
                    }
                }
        
                public static function markTime($markerId){
                list($usec, $sec) = explode(" ", microtime());
                    $time = ((float)$usec + (float)$sec);
            
                    if (!isset($GLOBALS['qr_time_bench']))
                        $GLOBALS['qr_time_bench'] = array();
            
                    $GLOBALS['qr_time_bench'][$markerId] = $time;
                }
        
                public static function timeBenchmark(){
                    self::markTime('finish');
        
                    $lastTime = 0;
                    $startTime = 0;
                    $p = 0;

                    echo '<table cellpadding="3" cellspacing="1">
                            <thead><tr style="border-bottom:1px solid silver"><td colspan="2" style="text-align:center">BENCHMARK</td></tr></thead>
                            <tbody>';

                    foreach($GLOBALS['qr_time_bench'] as $markerId=>$thisTime) {
                        if ($p > 0) {
                            echo '<tr><th style="text-align:right">till '.$markerId.': </th><td>'.number_format($thisTime-$lastTime, 6).'s</td></tr>';
                        } else {
                            $startTime = $thisTime;
                        }
                
                        $p++;
                        $lastTime = $thisTime;
                    }
            
                    echo '</tbody><tfoot>
                        <tr style="border-top:2px solid black"><th style="text-align:right">TOTAL: </th><td>'.number_format($lastTime-$startTime, 6).'  s</td></tr>
                        </tfoot>
                        </table>';
                }
        
    }
    
        
    QRtools::markTime('start');
    
    define('QRSPEC_VERSION_MAX', 40);
    define('QRSPEC_WIDTH_MAX',   177);

    define('QRCAP_WIDTH',        0);
    define('QRCAP_WORDS',        1);
    define('QRCAP_REMINDER',     2);
    define('QRCAP_EC',           3);

    class QRspec {
    
        public static $capacity = array(
            array(  0,    0, 0, array(   0,    0,    0,    0)),
            array( 21,   26, 0, array(   7,   10,   13,   17)),             array( 25,   44, 7, array(  10,   16,   22,   28)),
            array( 29,   70, 7, array(  15,   26,   36,   44)),
            array( 33,  100, 7, array(  20,   36,   52,   64)),
            array( 37,  134, 7, array(  26,   48,   72,   88)),             array( 41,  172, 7, array(  36,   64,   96,  112)),
            array( 45,  196, 0, array(  40,   72,  108,  130)),
            array( 49,  242, 0, array(  48,   88,  132,  156)),
            array( 53,  292, 0, array(  60,  110,  160,  192)),
            array( 57,  346, 0, array(  72,  130,  192,  224)),             array( 61,  404, 0, array(  80,  150,  224,  264)),
            array( 65,  466, 0, array(  96,  176,  260,  308)),
            array( 69,  532, 0, array( 104,  198,  288,  352)),
            array( 73,  581, 3, array( 120,  216,  320,  384)),
            array( 77,  655, 3, array( 132,  240,  360,  432)),             array( 81,  733, 3, array( 144,  280,  408,  480)),
            array( 85,  815, 3, array( 168,  308,  448,  532)),
            array( 89,  901, 3, array( 180,  338,  504,  588)),
            array( 93,  991, 3, array( 196,  364,  546,  650)),
            array( 97, 1085, 3, array( 224,  416,  600,  700)),             array(101, 1156, 4, array( 224,  442,  644,  750)),
            array(105, 1258, 4, array( 252,  476,  690,  816)),
            array(109, 1364, 4, array( 270,  504,  750,  900)),
            array(113, 1474, 4, array( 300,  560,  810,  960)),
            array(117, 1588, 4, array( 312,  588,  870, 1050)),             array(121, 1706, 4, array( 336,  644,  952, 1110)),
            array(125, 1828, 4, array( 360,  700, 1020, 1200)),
            array(129, 1921, 3, array( 390,  728, 1050, 1260)),
            array(133, 2051, 3, array( 420,  784, 1140, 1350)),
            array(137, 2185, 3, array( 450,  812, 1200, 1440)),             array(141, 2323, 3, array( 480,  868, 1290, 1530)),
            array(145, 2465, 3, array( 510,  924, 1350, 1620)),
            array(149, 2611, 3, array( 540,  980, 1440, 1710)),
            array(153, 2761, 3, array( 570, 1036, 1530, 1800)),
            array(157, 2876, 0, array( 570, 1064, 1590, 1890)),             array(161, 3034, 0, array( 600, 1120, 1680, 1980)),
            array(165, 3196, 0, array( 630, 1204, 1770, 2100)),
            array(169, 3362, 0, array( 660, 1260, 1860, 2220)),
            array(173, 3532, 0, array( 720, 1316, 1950, 2310)),
            array(177, 3706, 0, array( 750, 1372, 2040, 2430))         );
        
                public static function getDataLength($version, $level)
        {
            return self::$capacity[$version][QRCAP_WORDS] - self::$capacity[$version][QRCAP_EC][$level];
        }
        
                public static function getECCLength($version, $level)
        {
            return self::$capacity[$version][QRCAP_EC][$level];
        }
        
                public static function getWidth($version)
        {
            return self::$capacity[$version][QRCAP_WIDTH];
        }
        
                public static function getRemainder($version)
        {
            return self::$capacity[$version][QRCAP_REMINDER];
        }
        
                public static function getMinimumVersion($size, $level)
        {

            for($i=1; $i<= QRSPEC_VERSION_MAX; $i++) {
                $words  = self::$capacity[$i][QRCAP_WORDS] - self::$capacity[$i][QRCAP_EC][$level];
                if($words >= $size) 
                    return $i;
            }

            return -1;
        }
    
                
        public static $lengthTableBits = array(
            array(10, 12, 14),
            array( 9, 11, 13),
            array( 8, 16, 16),
            array( 8, 10, 12)
        );
        
                public static function lengthIndicator($mode, $version)
        {
            if ($mode == QR_MODE_STRUCTURE)
                return 0;
                
            if ($version <= 9) {
                $l = 0;
            } else if ($version <= 26) {
                $l = 1;
            } else {
                $l = 2;
            }

            return self::$lengthTableBits[$mode][$l];
        }
        
                public static function maximumWords($mode, $version)
        {
            if($mode == QR_MODE_STRUCTURE) 
                return 3;
                
            if($version <= 9) {
                $l = 0;
            } else if($version <= 26) {
                $l = 1;
            } else {
                $l = 2;
            }

            $bits = self::$lengthTableBits[$mode][$l];
            $words = (1 << $bits) - 1;
            
            if($mode == QR_MODE_KANJI) {
                $words *= 2;             }

            return $words;
        }

                        
        public static $eccTable = array(
            array(array( 0,  0), array( 0,  0), array( 0,  0), array( 0,  0)),
            array(array( 1,  0), array( 1,  0), array( 1,  0), array( 1,  0)),             array(array( 1,  0), array( 1,  0), array( 1,  0), array( 1,  0)),
            array(array( 1,  0), array( 1,  0), array( 2,  0), array( 2,  0)),
            array(array( 1,  0), array( 2,  0), array( 2,  0), array( 4,  0)),
            array(array( 1,  0), array( 2,  0), array( 2,  2), array( 2,  2)),             array(array( 2,  0), array( 4,  0), array( 4,  0), array( 4,  0)),
            array(array( 2,  0), array( 4,  0), array( 2,  4), array( 4,  1)),
            array(array( 2,  0), array( 2,  2), array( 4,  2), array( 4,  2)),
            array(array( 2,  0), array( 3,  2), array( 4,  4), array( 4,  4)),
            array(array( 2,  2), array( 4,  1), array( 6,  2), array( 6,  2)),             array(array( 4,  0), array( 1,  4), array( 4,  4), array( 3,  8)),
            array(array( 2,  2), array( 6,  2), array( 4,  6), array( 7,  4)),
            array(array( 4,  0), array( 8,  1), array( 8,  4), array(12,  4)),
            array(array( 3,  1), array( 4,  5), array(11,  5), array(11,  5)),
            array(array( 5,  1), array( 5,  5), array( 5,  7), array(11,  7)),             array(array( 5,  1), array( 7,  3), array(15,  2), array( 3, 13)),
            array(array( 1,  5), array(10,  1), array( 1, 15), array( 2, 17)),
            array(array( 5,  1), array( 9,  4), array(17,  1), array( 2, 19)),
            array(array( 3,  4), array( 3, 11), array(17,  4), array( 9, 16)),
            array(array( 3,  5), array( 3, 13), array(15,  5), array(15, 10)),             array(array( 4,  4), array(17,  0), array(17,  6), array(19,  6)),
            array(array( 2,  7), array(17,  0), array( 7, 16), array(34,  0)),
            array(array( 4,  5), array( 4, 14), array(11, 14), array(16, 14)),
            array(array( 6,  4), array( 6, 14), array(11, 16), array(30,  2)),
            array(array( 8,  4), array( 8, 13), array( 7, 22), array(22, 13)),             array(array(10,  2), array(19,  4), array(28,  6), array(33,  4)),
            array(array( 8,  4), array(22,  3), array( 8, 26), array(12, 28)),
            array(array( 3, 10), array( 3, 23), array( 4, 31), array(11, 31)),
            array(array( 7,  7), array(21,  7), array( 1, 37), array(19, 26)),
            array(array( 5, 10), array(19, 10), array(15, 25), array(23, 25)),             array(array(13,  3), array( 2, 29), array(42,  1), array(23, 28)),
            array(array(17,  0), array(10, 23), array(10, 35), array(19, 35)),
            array(array(17,  1), array(14, 21), array(29, 19), array(11, 46)),
            array(array(13,  6), array(14, 23), array(44,  7), array(59,  1)),
            array(array(12,  7), array(12, 26), array(39, 14), array(22, 41)),             array(array( 6, 14), array( 6, 34), array(46, 10), array( 2, 64)),
            array(array(17,  4), array(29, 14), array(49, 10), array(24, 46)),
            array(array( 4, 18), array(13, 32), array(48, 14), array(42, 32)),
            array(array(20,  4), array(40,  7), array(43, 22), array(10, 67)),
            array(array(19,  6), array(18, 31), array(34, 34), array(20, 61)),        );                                                                       

                        
        public static function getEccSpec($version, $level, array &$spec)
        {
            if (count($spec) < 5) {
                $spec = array(0,0,0,0,0);
            }

            $b1   = self::$eccTable[$version][$level][0];
            $b2   = self::$eccTable[$version][$level][1];
            $data = self::getDataLength($version, $level);
            $ecc  = self::getECCLength($version, $level);

            if($b2 == 0) {
                $spec[0] = $b1;
                $spec[1] = (int)($data / $b1);
                $spec[2] = (int)($ecc / $b1);
                $spec[3] = 0; 
                $spec[4] = 0;
            } else {
                $spec[0] = $b1;
                $spec[1] = (int)($data / ($b1 + $b2));
                $spec[2] = (int)($ecc  / ($b1 + $b2));
                $spec[3] = $b2;
                $spec[4] = $spec[1] + 1;
            }
        }
     
        public static $alignmentPattern = array(      
            array( 0,  0),
            array( 0,  0), array(18,  0), array(22,  0), array(26,  0), array(30,  0),             array(34,  0), array(22, 38), array(24, 42), array(26, 46), array(28, 50),             array(30, 54), array(32, 58), array(34, 62), array(26, 46), array(26, 48),             array(26, 50), array(30, 54), array(30, 56), array(30, 58), array(34, 62),             array(28, 50), array(26, 50), array(30, 54), array(28, 54), array(32, 58),             array(30, 58), array(34, 62), array(26, 50), array(30, 54), array(26, 52),             array(30, 56), array(34, 60), array(30, 58), array(34, 62), array(30, 54),             array(24, 50), array(28, 54), array(32, 58), array(26, 54), array(30, 58),         );                                                                                  
        public static function putAlignmentMarker(array &$frame, $ox, $oy)
        {
            $finder = array(
                "\xa1\xa1\xa1\xa1\xa1",
                "\xa1\xa0\xa0\xa0\xa1",
                "\xa1\xa0\xa1\xa0\xa1",
                "\xa1\xa0\xa0\xa0\xa1",
                "\xa1\xa1\xa1\xa1\xa1"
            );                        
            
            $yStart = $oy-2;         
            $xStart = $ox-2;
            
            for($y=0; $y<5; $y++) {
                QRstr::set($frame, $xStart, $yStart+$y, $finder[$y]);
            }
        }

                public static function putAlignmentPattern($version, &$frame, $width)
        {
            if($version < 2)
                return;

            $d = self::$alignmentPattern[$version][1] - self::$alignmentPattern[$version][0];
            if($d < 0) {
                $w = 2;
            } else {
                $w = (int)(($width - self::$alignmentPattern[$version][0]) / $d + 2);
            }

            if($w * $w - 3 == 1) {
                $x = self::$alignmentPattern[$version][0];
                $y = self::$alignmentPattern[$version][0];
                self::putAlignmentMarker($frame, $x, $y);
                return;
            }

            $cx = self::$alignmentPattern[$version][0];
            for($x=1; $x<$w - 1; $x++) {
                self::putAlignmentMarker($frame, 6, $cx);
                self::putAlignmentMarker($frame, $cx,  6);
                $cx += $d;
            }

            $cy = self::$alignmentPattern[$version][0];
            for($y=0; $y<$w-1; $y++) {
                $cx = self::$alignmentPattern[$version][0];
                for($x=0; $x<$w-1; $x++) {
                    self::putAlignmentMarker($frame, $cx, $cy);
                    $cx += $d;
                }
                $cy += $d;
            }
        }
	
        public static $versionPattern = array(
            0x07c94, 0x085bc, 0x09a99, 0x0a4d3, 0x0bbf6, 0x0c762, 0x0d847, 0x0e60d,
            0x0f928, 0x10b78, 0x1145d, 0x12a17, 0x13532, 0x149a6, 0x15683, 0x168c9,
            0x177ec, 0x18ec4, 0x191e1, 0x1afab, 0x1b08e, 0x1cc1a, 0x1d33f, 0x1ed75,
            0x1f250, 0x209d5, 0x216f0, 0x228ba, 0x2379f, 0x24b0b, 0x2542e, 0x26a64,
            0x27541, 0x28c69
        );

                public static function getVersionPattern($version)
        {
            if($version < 7 || $version > QRSPEC_VERSION_MAX)
                return 0;

            return self::$versionPattern[$version -7];
        }

                        
        public static $formatInfo = array(
            array(0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976),
            array(0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0),
            array(0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed),
            array(0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b)
        );

        public static function getFormatInfo($mask, $level)
        {
            if($mask < 0 || $mask > 7)
                return 0;
                
            if($level < 0 || $level > 3)
                return 0;                

            return self::$formatInfo[$level][$mask];
        }

                         
        public static $frames = array();

        
        public static function putFinderPattern(&$frame, $ox, $oy)
        {
            $finder = array(
                "\xc1\xc1\xc1\xc1\xc1\xc1\xc1",
                "\xc1\xc0\xc0\xc0\xc0\xc0\xc1",
                "\xc1\xc0\xc1\xc1\xc1\xc0\xc1",
                "\xc1\xc0\xc1\xc1\xc1\xc0\xc1",
                "\xc1\xc0\xc1\xc1\xc1\xc0\xc1",
                "\xc1\xc0\xc0\xc0\xc0\xc0\xc1",
                "\xc1\xc1\xc1\xc1\xc1\xc1\xc1"
            );                            
            
            for($y=0; $y<7; $y++) {
                QRstr::set($frame, $ox, $oy+$y, $finder[$y]);
            }
        }

                public static function createFrame($version)
        {
            $width = self::$capacity[$version][QRCAP_WIDTH];
            $frameLine = str_repeat ("\0", $width);
            $frame = array_fill(0, $width, $frameLine);

                        self::putFinderPattern($frame, 0, 0);
            self::putFinderPattern($frame, $width - 7, 0);
            self::putFinderPattern($frame, 0, $width - 7);
            
                        $yOffset = $width - 7;
            
            for($y=0; $y<7; $y++) {
                $frame[$y][7] = "\xc0";
                $frame[$y][$width - 8] = "\xc0";
                $frame[$yOffset][7] = "\xc0";
                $yOffset++;
            }
            
            $setPattern = str_repeat("\xc0", 8);
            
            QRstr::set($frame, 0, 7, $setPattern);
            QRstr::set($frame, $width-8, 7, $setPattern);
            QRstr::set($frame, 0, $width - 8, $setPattern);
        
                        $setPattern = str_repeat("\x84", 9);
            QRstr::set($frame, 0, 8, $setPattern);
            QRstr::set($frame, $width - 8, 8, $setPattern, 8);
            
            $yOffset = $width - 8;

            for($y=0; $y<8; $y++,$yOffset++) {
                $frame[$y][8] = "\x84";
                $frame[$yOffset][8] = "\x84";
            }

                        
            for($i=1; $i<$width-15; $i++) {
                $frame[6][7+$i] = chr(0x90 | ($i & 1));
                $frame[7+$i][6] = chr(0x90 | ($i & 1));
            }
            
                        self::putAlignmentPattern($version, $frame, $width);
            
                        if($version >= 7) {
                $vinf = self::getVersionPattern($version);

                $v = $vinf;
                
                for($x=0; $x<6; $x++) {
                    for($y=0; $y<3; $y++) {
                        $frame[($width - 11)+$y][$x] = chr(0x88 | ($v & 1));
                        $v = $v >> 1;
                    }
                }

                $v = $vinf;
                for($y=0; $y<6; $y++) {
                    for($x=0; $x<3; $x++) {
                        $frame[$y][$x+($width - 11)] = chr(0x88 | ($v & 1));
                        $v = $v >> 1;
                    }
                }
            }
    
                        $frame[$width - 8][8] = "\x81";
            
            return $frame;
        }

                public static function debug($frame, $binary_mode = false)
        {
            if ($binary_mode) {
            
                    foreach ($frame as &$frameLine) {
                        $frameLine = join('<span class="m">&nbsp;&nbsp;</span>', explode('0', $frameLine));
                        $frameLine = join('&#9608;&#9608;', explode('1', $frameLine));
                    }
                    
                    ?>
                <style>
                    .m { background-color: red; }
                </style>
                <?php
                    echo '<pre><tt><br/ ><br/ ><br/ >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
                    echo join("<br/ >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;", $frame);
                    echo '</tt></pre><br/ ><br/ ><br/ ><br/ ><br/ ><br/ >';
            
            } else {
            
                foreach ($frame as &$frameLine) {
                    $frameLine = join('<span class="m">&nbsp;</span>',  explode("\xc0", $frameLine));
                    $frameLine = join('<span class="m">&#9618;</span>', explode("\xc1", $frameLine));
                    $frameLine = join('<span class="p">&nbsp;</span>',  explode("\xa0", $frameLine));
                    $frameLine = join('<span class="p">&#9618;</span>', explode("\xa1", $frameLine));
                    $frameLine = join('<span class="s">&#9671;</span>', explode("\x84", $frameLine));                     $frameLine = join('<span class="s">&#9670;</span>', explode("\x85", $frameLine));                     $frameLine = join('<span class="x">&#9762;</span>', explode("\x81", $frameLine));                     $frameLine = join('<span class="c">&nbsp;</span>',  explode("\x90", $frameLine));                     $frameLine = join('<span class="c">&#9719;</span>', explode("\x91", $frameLine));                     $frameLine = join('<span class="f">&nbsp;</span>',  explode("\x88", $frameLine));                     $frameLine = join('<span class="f">&#9618;</span>', explode("\x89", $frameLine));                     $frameLine = join('&#9830;', explode("\x01", $frameLine));
                    $frameLine = join('&#8901;', explode("\0", $frameLine));
                }
                
                ?>
                <style>
                    .p { background-color: yellow; }
                    .m { background-color: #00FF00; }
                    .s { background-color: #FF0000; }
                    .c { background-color: aqua; }
                    .x { background-color: pink; }
                    .f { background-color: gold; }
                </style>
                <?php
                echo "<pre><tt>";
                echo join("<br/ >", $frame);
                echo "</tt></pre>";
            
            }
        }

                public static function serial($frame)
        {
            return gzcompress(join("\n", $frame), 9);
        }
        
                public static function unserial($code)
        {
            return explode("\n", gzuncompress($code));
        }
        
                public static function newFrame($version)
        {
            if($version < 1 || $version > QRSPEC_VERSION_MAX) 
                return null;

            if(!isset(self::$frames[$version])) {
                
                $fileName = QR_CACHE_DIR.'frame_'.$version.'.dat';
                
                if (QR_CACHEABLE) {
                    if (file_exists($fileName)) {
                        self::$frames[$version] = self::unserial(file_get_contents($fileName));
                    } else {
                        self::$frames[$version] = self::createFrame($version);
                        file_put_contents($fileName, self::serial(self::$frames[$version]));
                    }
                } else {
                    self::$frames[$version] = self::createFrame($version);
                }
            }
            
            if(is_null(self::$frames[$version]))
                return null;

            return self::$frames[$version];
        }

                public static function rsBlockNum($spec)     { return $spec[0] + $spec[3]; }
        public static function rsBlockNum1($spec)    { return $spec[0]; }
        public static function rsDataCodes1($spec)   { return $spec[1]; }
        public static function rsEccCodes1($spec)    { return $spec[2]; }
        public static function rsBlockNum2($spec)    { return $spec[3]; }
        public static function rsDataCodes2($spec)   { return $spec[4]; }
        public static function rsEccCodes2($spec)    { return $spec[2]; }
        public static function rsDataLength($spec)   { return ($spec[0] * $spec[1]) + ($spec[3] * $spec[4]);    }
        public static function rsEccLength($spec)    { return ($spec[0] + $spec[3]) * $spec[2]; }
        
    }

    define('QR_IMAGE', true);

    class QRimage {
    
                public static function png($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE){
                    $image = self::image($frame, $pixelPerPoint, $outerFrame);
            
                    if ($filename === false) {
                        Header("Content-type: image/png");
                        ImagePng($image);
                    } else {
                        if($saveandprint===TRUE){
                            ImagePng($image, $filename);
                            header("Content-type: image/png");
                            ImagePng($image);
                        }else{
                            ImagePng($image, $filename);
                        }
                    }
            
                    ImageDestroy($image);
                }
    
                public static function jpg($frame, $filename = false, $pixelPerPoint = 8, $outerFrame = 4, $q = 85){
                    $image = self::image($frame, $pixelPerPoint, $outerFrame);
            
                    if ($filename === false) {
                        Header("Content-type: image/jpeg");
                        ImageJpeg($image, null, $q);
                    } else {
                        ImageJpeg($image, $filename, $q);            
                    }
            
                    ImageDestroy($image);
                }
    
                private static function image($frame, $pixelPerPoint = 4, $outerFrame = 4){
                    $h = count($frame);
                    $w = strlen($frame[0]);
            
                    $imgW = $w + 2*$outerFrame;
                    $imgH = $h + 2*$outerFrame;
            
                    $base_image =ImageCreate($imgW, $imgH);
            
                    $col[0] = ImageColorAllocate($base_image,255,255,255);
                    $col[1] = ImageColorAllocate($base_image,0,0,0);

                    imagefill($base_image, 0, 0, $col[0]);

                    for($y=0; $y<$h; $y++) {
                        for($x=0; $x<$w; $x++) {
                            if ($frame[$y][$x] == '1') {
                                ImageSetPixel($base_image,$x+$outerFrame,$y+$outerFrame,$col[1]); 
                            }
                        }
                    }
            
                    $target_image =ImageCreate($imgW * $pixelPerPoint, $imgH * $pixelPerPoint);
                    ImageCopyResized($target_image, $base_image, 0, 0, 0, 0, $imgW * $pixelPerPoint, $imgH * $pixelPerPoint, $imgW, $imgH);
                    ImageDestroy($base_image);
            
                    return $target_image;
                    }
                }

    define('STRUCTURE_HEADER_BITS',  20);
    define('MAX_STRUCTURED_SYMBOLS', 16);

    class QRinputItem {
    
        public $mode;
        public $size;
        public $data;
        public $bstream;

        public function __construct($mode, $size, $data, $bstream = null) 
        {
            $setData = array_slice($data, 0, $size);
            
            if (count($setData) < $size) {
                $setData = array_merge($setData, array_fill(0,$size-count($setData),0));
            }
        
            if(!QRinput::check($mode, $size, $setData)) {
                throw new Exception('Error m:'.$mode.',s:'.$size.',d:'.join(',',$setData));
                return null;
            }
            
            $this->mode = $mode;
            $this->size = $size;
            $this->data = $setData;
            $this->bstream = $bstream;
        }
        
                public function encodeModeNum($version)
        {
            try {
            
                $words = (int)($this->size / 3);
                $bs = new QRbitstream();
                
                $val = 0x1;
                $bs->appendNum(4, $val);
                $bs->appendNum(QRspec::lengthIndicator(QR_MODE_NUM, $version), $this->size);

                for($i=0; $i<$words; $i++) {
                    $val  = (ord($this->data[$i*3  ]) - ord('0')) * 100;
                    $val += (ord($this->data[$i*3+1]) - ord('0')) * 10;
                    $val += (ord($this->data[$i*3+2]) - ord('0'));
                    $bs->appendNum(10, $val);
                }

                if($this->size - $words * 3 == 1) {
                    $val = ord($this->data[$words*3]) - ord('0');
                    $bs->appendNum(4, $val);
                } else if($this->size - $words * 3 == 2) {
                    $val  = (ord($this->data[$words*3  ]) - ord('0')) * 10;
                    $val += (ord($this->data[$words*3+1]) - ord('0'));
                    $bs->appendNum(7, $val);
                }

                $this->bstream = $bs;
                return 0;
                
            } catch (Exception $e) {
                return -1;
            }
        }
        
                public function encodeModeAn($version)
        {
            try {
                $words = (int)($this->size / 2);
                $bs = new QRbitstream();
                
                $bs->appendNum(4, 0x02);
                $bs->appendNum(QRspec::lengthIndicator(QR_MODE_AN, $version), $this->size);

                for($i=0; $i<$words; $i++) {
                    $val  = (int)QRinput::lookAnTable(ord($this->data[$i*2  ])) * 45;
                    $val += (int)QRinput::lookAnTable(ord($this->data[$i*2+1]));

                    $bs->appendNum(11, $val);
                }

                if($this->size & 1) {
                    $val = QRinput::lookAnTable(ord($this->data[$words * 2]));
                    $bs->appendNum(6, $val);
                }
        
                $this->bstream = $bs;
                return 0;
            
            } catch (Exception $e) {
                return -1;
            }
        }
        
                public function encodeMode8($version)
        {
            try {
                $bs = new QRbitstream();

                $bs->appendNum(4, 0x4);
                $bs->appendNum(QRspec::lengthIndicator(QR_MODE_8, $version), $this->size);

                for($i=0; $i<$this->size; $i++) {
                    $bs->appendNum(8, ord($this->data[$i]));
                }

                $this->bstream = $bs;
                return 0;
            
            } catch (Exception $e) {
                return -1;
            }
        }
        
                public function encodeModeKanji($version)
        {
            try {

                $bs = new QRbitrtream();
                
                $bs->appendNum(4, 0x8);
                $bs->appendNum(QRspec::lengthIndicator(QR_MODE_KANJI, $version), (int)($this->size / 2));

                for($i=0; $i<$this->size; $i+=2) {
                    $val = (ord($this->data[$i]) << 8) | ord($this->data[$i+1]);
                    if($val <= 0x9ffc) {
                        $val -= 0x8140;
                    } else {
                        $val -= 0xc140;
                    }
                    
                    $h = ($val >> 8) * 0xc0;
                    $val = ($val & 0xff) + $h;

                    $bs->appendNum(13, $val);
                }

                $this->bstream = $bs;
                return 0;
            
            } catch (Exception $e) {
                return -1;
            }
        }

                public function encodeModeStructure()
        {
            try {
                $bs =  new QRbitstream();
                
                $bs->appendNum(4, 0x03);
                $bs->appendNum(4, ord($this->data[1]) - 1);
                $bs->appendNum(4, ord($this->data[0]) - 1);
                $bs->appendNum(8, ord($this->data[2]));

                $this->bstream = $bs;
                return 0;
            
            } catch (Exception $e) {
                return -1;
            }
        }
        
                public function estimateBitStreamSizeOfEntry($version)
        {
            $bits = 0;

            if($version == 0) 
                $version = 1;

            switch($this->mode) {
                case QR_MODE_NUM:        $bits = QRinput::estimateBitsModeNum($this->size);    break;
                case QR_MODE_AN:        $bits = QRinput::estimateBitsModeAn($this->size);    break;
                case QR_MODE_8:            $bits = QRinput::estimateBitsMode8($this->size);    break;
                case QR_MODE_KANJI:        $bits = QRinput::estimateBitsModeKanji($this->size);break;
                case QR_MODE_STRUCTURE:    return STRUCTURE_HEADER_BITS;            
                default:
                    return 0;
            }

            $l = QRspec::lengthIndicator($this->mode, $version);
            $m = 1 << $l;
            $num = (int)(($this->size + $m - 1) / $m);

            $bits += $num * (4 + $l);

            return $bits;
        }
        
                public function encodeBitStream($version)
        {
            try {
            
                unset($this->bstream);
                $words = QRspec::maximumWords($this->mode, $version);
                
                if($this->size > $words) {
                
                    $st1 = new QRinputItem($this->mode, $words, $this->data);
                    $st2 = new QRinputItem($this->mode, $this->size - $words, array_slice($this->data, $words));

                    $st1->encodeBitStream($version);
                    $st2->encodeBitStream($version);
                    
                    $this->bstream = new QRbitstream();
                    $this->bstream->append($st1->bstream);
                    $this->bstream->append($st2->bstream);
                    
                    unset($st1);
                    unset($st2);
                    
                } else {
                    
                    $ret = 0;
                    
                    switch($this->mode) {
                        case QR_MODE_NUM:        $ret = $this->encodeModeNum($version);    break;
                        case QR_MODE_AN:        $ret = $this->encodeModeAn($version);    break;
                        case QR_MODE_8:            $ret = $this->encodeMode8($version);    break;
                        case QR_MODE_KANJI:        $ret = $this->encodeModeKanji($version);break;
                        case QR_MODE_STRUCTURE:    $ret = $this->encodeModeStructure();    break;
                        
                        default:
                            break;
                    }
                    
                    if($ret < 0)
                        return -1;
                }

                return $this->bstream->size();
            
            } catch (Exception $e) {
                return -1;
            }
        }
    };
    
    class QRinput {

        public $items;
        
        private $version;
        private $level;
        
                public function __construct($version = 0, $level = QR_ECLEVEL_L)
        {
            if ($version < 0 || $version > QRSPEC_VERSION_MAX || $level > QR_ECLEVEL_H) {
                throw new Exception('Invalid version no');
                return NULL;
            }
            
            $this->version = $version;
            $this->level = $level;
        }
        
                public function getVersion()
        {
            return $this->version;
        }
        
                public function setVersion($version)
        {
            if($version < 0 || $version > QRSPEC_VERSION_MAX) {
                throw new Exception('Invalid version no');
                return -1;
            }

            $this->version = $version;

            return 0;
        }
        
                public function getErrorCorrectionLevel()
        {
            return $this->level;
        }

                public function setErrorCorrectionLevel($level)
        {
            if($level > QR_ECLEVEL_H) {
                throw new Exception('Invalid ECLEVEL');
                return -1;
            }

            $this->level = $level;

            return 0;
        }
        
                public function appendEntry(QRinputItem $entry)
        {
            $this->items[] = $entry;
        }
        
                public function append($mode, $size, $data)
        {
            try {
                $entry = new QRinputItem($mode, $size, $data);
                $this->items[] = $entry;
                return 0;
            } catch (Exception $e) {
                return -1;
            }
        }
        
        public function insertStructuredAppendHeader($size, $index, $parity)
        {
            if( $size > MAX_STRUCTURED_SYMBOLS ) {
                throw new Exception('insertStructuredAppendHeader wrong size');
            }
            
            if( $index <= 0 || $index > MAX_STRUCTURED_SYMBOLS ) {
                throw new Exception('insertStructuredAppendHeader wrong index');
            }

            $buf = array($size, $index, $parity);
            
            try {
                $entry = new QRinputItem(QR_MODE_STRUCTURE, 3, buf);
                array_unshift($this->items, $entry);
                return 0;
            } catch (Exception $e) {
                return -1;
            }
        }

                public function calcParity()
        {
            $parity = 0;
            
            foreach($this->items as $item) {
                if($item->mode != QR_MODE_STRUCTURE) {
                    for($i=$item->size-1; $i>=0; $i--) {
                        $parity ^= $item->data[$i];
                    }
                }
            }

            return $parity;
        }
        
                public static function checkModeNum($size, $data)
        {
            for($i=0; $i<$size; $i++) {
                if((ord($data[$i]) < ord('0')) || (ord($data[$i]) > ord('9'))){
                    return false;
                }
            }

            return true;
        }

                public static function estimateBitsModeNum($size)
        {
            $w = (int)$size / 3;
            $bits = $w * 10;
            
            switch($size - $w * 3) {
                case 1:
                    $bits += 4;
                    break;
                case 2:
                    $bits += 7;
                    break;
                default:
                    break;
            }

            return $bits;
        }
        
                public static $anTable = array(
            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
            36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43,
             0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 44, -1, -1, -1, -1, -1,
            -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
            25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1,
            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
        );
        
                public static function lookAnTable($c)
        {
            return (($c > 127)?-1:self::$anTable[$c]);
        }
        
                public static function checkModeAn($size, $data)
        {
            for($i=0; $i<$size; $i++) {
                if (self::lookAnTable(ord($data[$i])) == -1) {
                    return false;
                }
            }

            return true;
        }
        
                public static function estimateBitsModeAn($size)
        {
            $w = (int)($size / 2);
            $bits = $w * 11;
            
            if($size & 1) {
                $bits += 6;
            }

            return $bits;
        }
    
                public static function estimateBitsMode8($size)
        {
            return $size * 8;
        }
        
                public function estimateBitsModeKanji($size)
        {
            return (int)(($size / 2) * 13);
        }
        
                public static function checkModeKanji($size, $data)
        {
            if($size & 1)
                return false;

            for($i=0; $i<$size; $i+=2) {
                $val = (ord($data[$i]) << 8) | ord($data[$i+1]);
                if( $val < 0x8140 
                || ($val > 0x9ffc && $val < 0xe040) 
                || $val > 0xebbf) {
                    return false;
                }
            }

            return true;
        }
        
        public static function check($mode, $size, $data)
        {
            if($size <= 0) 
                return false;

            switch($mode) {
                case QR_MODE_NUM:       return self::checkModeNum($size, $data);   break;
                case QR_MODE_AN:        return self::checkModeAn($size, $data);    break;
                case QR_MODE_KANJI:     return self::checkModeKanji($size, $data); break;
                case QR_MODE_8:         return true; break;
                case QR_MODE_STRUCTURE: return true; break;
                
                default:
                    break;
            }

            return false;
        }
        
        
                public function estimateBitStreamSize($version)
        {
            $bits = 0;

            foreach($this->items as $item) {
                $bits += $item->estimateBitStreamSizeOfEntry($version);
            }

            return $bits;
        }
        
                public function estimateVersion()
        {
            $version = 0;
            $prev = 0;
            do {
                $prev = $version;
                $bits = $this->estimateBitStreamSize($prev);
                $version = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level);
                if ($version < 0) {
                    return -1;
                }
            } while ($version > $prev);

            return $version;
        }
        
                public static function lengthOfCode($mode, $version, $bits)
        {
            $payload = $bits - 4 - QRspec::lengthIndicator($mode, $version);
            switch($mode) {
                case QR_MODE_NUM:
                    $chunks = (int)($payload / 10);
                    $remain = $payload - $chunks * 10;
                    $size = $chunks * 3;
                    if($remain >= 7) {
                        $size += 2;
                    } else if($remain >= 4) {
                        $size += 1;
                    }
                    break;
                case QR_MODE_AN:
                    $chunks = (int)($payload / 11);
                    $remain = $payload - $chunks * 11;
                    $size = $chunks * 2;
                    if($remain >= 6) 
                        $size++;
                    break;
                case QR_MODE_8:
                    $size = (int)($payload / 8);
                    break;
                case QR_MODE_KANJI:
                    $size = (int)(($payload / 13) * 2);
                    break;
                case QR_MODE_STRUCTURE:
                    $size = (int)($payload / 8);
                    break;
                default:
                    $size = 0;
                    break;
            }
            
            $maxsize = QRspec::maximumWords($mode, $version);
            if($size < 0) $size = 0;
            if($size > $maxsize) $size = $maxsize;

            return $size;
        }
        
                public function createBitStream()
        {
            $total = 0;

            foreach($this->items as $item) {
                $bits = $item->encodeBitStream($this->version);
                
                if($bits < 0) 
                    return -1;
                    
                $total += $bits;
            }

            return $total;
        }
        
                public function convertData()
        {
            $ver = $this->estimateVersion();
            if($ver > $this->getVersion()) {
                $this->setVersion($ver);
            }

            for(;;) {
                $bits = $this->createBitStream();
                
                if($bits < 0) 
                    return -1;
                    
                $ver = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level);
                if($ver < 0) {
                    throw new Exception('WRONG VERSION');
                    return -1;
                } else if($ver > $this->getVersion()) {
                    $this->setVersion($ver);
                } else {
                    break;
                }
            }

            return 0;
        }
        
                public function appendPaddingBit(&$bstream)
        {
            $bits = $bstream->size();
            $maxwords = QRspec::getDataLength($this->version, $this->level);
            $maxbits = $maxwords * 8;

            if ($maxbits == $bits) {
                return 0;
            }

            if ($maxbits - $bits < 5) {
                return $bstream->appendNum($maxbits - $bits, 0);
            }

            $bits += 4;
            $words = (int)(($bits + 7) / 8);

            $padding = new QRbitstream();
            $ret = $padding->appendNum($words * 8 - $bits + 4, 0);
            
            if($ret < 0) 
                return $ret;

            $padlen = $maxwords - $words;
            
            if($padlen > 0) {
                
                $padbuf = array();
                for($i=0; $i<$padlen; $i++) {
                    $padbuf[$i] = ($i&1)?0x11:0xec;
                }
                
                $ret = $padding->appendBytes($padlen, $padbuf);
                
                if($ret < 0)
                    return $ret;
                
            }

            $ret = $bstream->append($padding);
            
            return $ret;
        }

                public function mergeBitStream()
        {
            if($this->convertData() < 0) {
                return null;
            }

            $bstream = new QRbitstream();
            
            foreach($this->items as $item) {
                $ret = $bstream->append($item->bstream);
                if($ret < 0) {
                    return null;
                }
            }

            return $bstream;
        }

                public function getBitStream()
        {

            $bstream = $this->mergeBitStream();
            
            if($bstream == null) {
                return null;
            }
            
            $ret = $this->appendPaddingBit($bstream);
            if($ret < 0) {
                return null;
            }

            return $bstream;
        }
        
                public function getByteStream()
        {
            $bstream = $this->getBitStream();
            if($bstream == null) {
                return null;
            }
            
            return $bstream->toByte();
        }
    }
        
    class QRbitstream {
    
        public $data = array();
        
                public function size()
        {
            return count($this->data);
        }
        
                public function allocate($setLength)
        {
            $this->data = array_fill(0, $setLength, 0);
            return 0;
        }
    
                public static function newFromNum($bits, $num)
        {
            $bstream = new QRbitstream();
            $bstream->allocate($bits);
            
            $mask = 1 << ($bits - 1);
            for($i=0; $i<$bits; $i++) {
                if($num & $mask) {
                    $bstream->data[$i] = 1;
                } else {
                    $bstream->data[$i] = 0;
                }
                $mask = $mask >> 1;
            }

            return $bstream;
        }
        
                public static function newFromBytes($size, $data)
        {
            $bstream = new QRbitstream();
            $bstream->allocate($size * 8);
            $p=0;

            for($i=0; $i<$size; $i++) {
                $mask = 0x80;
                for($j=0; $j<8; $j++) {
                    if($data[$i] & $mask) {
                        $bstream->data[$p] = 1;
                    } else {
                        $bstream->data[$p] = 0;
                    }
                    $p++;
                    $mask = $mask >> 1;
                }
            }

            return $bstream;
        }
        
                public function append(QRbitstream $arg)
        {
            if (is_null($arg)) {
                return -1;
            }
            
            if($arg->size() == 0) {
                return 0;
            }
            
            if($this->size() == 0) {
                $this->data = $arg->data;
                return 0;
            }
            
            $this->data = array_values(array_merge($this->data, $arg->data));

            return 0;
        }
        
                public function appendNum($bits, $num)
        {
            if ($bits == 0) 
                return 0;

            $b = QRbitstream::newFromNum($bits, $num);
            
            if(is_null($b))
                return -1;

            $ret = $this->append($b);
            unset($b);

            return $ret;
        }

                public function appendBytes($size, $data)
        {
            if ($size == 0) 
                return 0;

            $b = QRbitstream::newFromBytes($size, $data);
            
            if(is_null($b))
                return -1;

            $ret = $this->append($b);
            unset($b);

            return $ret;
        }
        
                public function toByte()
        {
        
            $size = $this->size();

            if($size == 0) {
                return array();
            }
            
            $data = array_fill(0, (int)(($size + 7) / 8), 0);
            $bytes = (int)($size / 8);

            $p = 0;
            
            for($i=0; $i<$bytes; $i++) {
                $v = 0;
                for($j=0; $j<8; $j++) {
                    $v = $v << 1;
                    $v |= $this->data[$p];
                    $p++;
                }
                $data[$i] = $v;
            }
            
            if($size & 7) {
                $v = 0;
                for($j=0; $j<($size & 7); $j++) {
                    $v = $v << 1;
                    $v |= $this->data[$p];
                    $p++;
                }
                $data[$bytes] = $v;
            }

            return $data;
        }

    }

    class QRsplit {

        public $dataStr = '';
        public $input;
        public $modeHint;

                public function __construct($dataStr, $input, $modeHint) 
        {
            $this->dataStr  = $dataStr;
            $this->input    = $input;
            $this->modeHint = $modeHint;
        }
        
                public static function isdigitat($str, $pos)
        {    
            if ($pos >= strlen($str))
                return false;
            
            return ((ord($str[$pos]) >= ord('0'))&&(ord($str[$pos]) <= ord('9')));
        }
        
                public static function isalnumat($str, $pos)
        {
            if ($pos >= strlen($str))
                return false;
                
            return (QRinput::lookAnTable(ord($str[$pos])) >= 0);
        }

                public function identifyMode($pos)
        {
            if ($pos >= strlen($this->dataStr)) 
                return QR_MODE_NUL;
                
            $c = $this->dataStr[$pos];
            
            if(self::isdigitat($this->dataStr, $pos)) {
                return QR_MODE_NUM;
            } else if(self::isalnumat($this->dataStr, $pos)) {
                return QR_MODE_AN;
            } else if($this->modeHint == QR_MODE_KANJI) {
            
                if ($pos+1 < strlen($this->dataStr)) 
                {
                    $d = $this->dataStr[$pos+1];
                    $word = (ord($c) << 8) | ord($d);
                    if(($word >= 0x8140 && $word <= 0x9ffc) || ($word >= 0xe040 && $word <= 0xebbf)) {
                        return QR_MODE_KANJI;
                    }
                }
            }

            return QR_MODE_8;
        } 
        
                public function eatNum()
        {
            $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion());

            $p = 0;
            while(self::isdigitat($this->dataStr, $p)) {
                $p++;
            }
            
            $run = $p;
            $mode = $this->identifyMode($p);
            
            if($mode == QR_MODE_8) {
                $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln
                     + QRinput::estimateBitsMode8(1)                              - QRinput::estimateBitsMode8($run + 1);                 if($dif > 0) {
                    return $this->eat8();
                }
            }
            if($mode == QR_MODE_AN) {
                $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln
                     + QRinput::estimateBitsModeAn(1)                             - QRinput::estimateBitsModeAn($run + 1);                if($dif > 0) {
                    return $this->eatAn();
                }
            }
            
            $ret = $this->input->append(QR_MODE_NUM, $run, str_split($this->dataStr));
            if($ret < 0)
                return -1;

            return $run;
        }
        
                public function eatAn()
        {
            $la = QRspec::lengthIndicator(QR_MODE_AN,  $this->input->getVersion());
            $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion());

            $p = 0;
            
            while(self::isalnumat($this->dataStr, $p)) {
                if(self::isdigitat($this->dataStr, $p)) {
                    $q = $p;
                    while(self::isdigitat($this->dataStr, $q)) {
                        $q++;
                    }
                    
                    $dif = QRinput::estimateBitsModeAn($p)                          + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln
                         - QRinput::estimateBitsModeAn($q);                          
                    if($dif < 0) {
                        break;
                    } else {
                        $p = $q;
                    }
                } else {
                    $p++;
                }
            }

            $run = $p;

            if(!self::isalnumat($this->dataStr, $p)) {
                $dif = QRinput::estimateBitsModeAn($run) + 4 + $la
                     + QRinput::estimateBitsMode8(1)                       - QRinput::estimateBitsMode8($run + 1);                 if($dif > 0) {
                    return $this->eat8();
                }
            }

            $ret = $this->input->append(QR_MODE_AN, $run, str_split($this->dataStr));
            if($ret < 0)
                return -1;

            return $run;
        }
                public function eatKanji()
        {
            $p = 0;
            
            while($this->identifyMode($p) == QR_MODE_KANJI) {
                $p += 2;
            }
            
            $ret = $this->input->append(QR_MODE_KANJI, $p, str_split($this->dataStr));
            if($ret < 0)
                return -1;

            return $run;
        }

                public function eat8()
        {
            $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion());
            $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion());

            $p = 1;
            $dataStrLen = strlen($this->dataStr);
            
            while($p < $dataStrLen) {
                
                $mode = $this->identifyMode($p);
                if($mode == QR_MODE_KANJI) {
                    break;
                }
                if($mode == QR_MODE_NUM) {
                    $q = $p;
                    while(self::isdigitat($this->dataStr, $q)) {
                        $q++;
                    }
                    $dif = QRinput::estimateBitsMode8($p)                          + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln
                         - QRinput::estimateBitsMode8($q);                     if($dif < 0) {
                        break;
                    } else {
                        $p = $q;
                    }
                } else if($mode == QR_MODE_AN) {
                    $q = $p;
                    while(self::isalnumat($this->dataStr, $q)) {
                        $q++;
                    }
                    $dif = QRinput::estimateBitsMode8($p)                           + QRinput::estimateBitsModeAn($q - $p) + 4 + $la
                         - QRinput::estimateBitsMode8($q);                     if($dif < 0) {
                        break;
                    } else {
                        $p = $q;
                    }
                } else {
                    $p++;
                }
            }

            $run = $p;
            $ret = $this->input->append(QR_MODE_8, $run, str_split($this->dataStr));
            
            if($ret < 0)
                return -1;

            return $run;
        }

                public function splitString()
        {
            while (strlen($this->dataStr) > 0)
            {
                if($this->dataStr == '')
                    return 0;

                $mode = $this->identifyMode(0);
                
                switch ($mode) {
                    case QR_MODE_NUM: $length = $this->eatNum(); break;
                    case QR_MODE_AN:  $length = $this->eatAn(); break;
                    case QR_MODE_KANJI:
                        if ($hint == QR_MODE_KANJI)
                                $length = $this->eatKanji();
                        else    $length = $this->eat8();
                        break;
                    default: $length = $this->eat8(); break;
                
                }

                if($length == 0) return 0;
                if($length < 0)  return -1;
                
                $this->dataStr = substr($this->dataStr, $length);
            }
        }

                public function toUpper()
        {
            $stringLen = strlen($this->dataStr);
            $p = 0;
            
            while ($p<$stringLen) {
                $mode = self::identifyMode(substr($this->dataStr, $p), $this->modeHint);
                if($mode == QR_MODE_KANJI) {
                    $p += 2;
                } else {
                    if (ord($this->dataStr[$p]) >= ord('a') && ord($this->dataStr[$p]) <= ord('z')) {
                        $this->dataStr[$p] = chr(ord($this->dataStr[$p]) - 32);
                    }
                    $p++;
                }
            }

            return $this->dataStr;
        }

                public static function splitStringToQRinput($string, QRinput $input, $modeHint, $casesensitive = true)
        {
            if(is_null($string) || $string == '\0' || $string == '') {
                throw new Exception('empty string!!!');
            }

            $split = new QRsplit($string, $input, $modeHint);
            
            if(!$casesensitive)
                $split->toUpper();
                
            return $split->splitString();
        }
    }

    class QRrsItem {
    
        public $mm;                          public $nn;                          public $alpha_to = array();          public $index_of = array();          public $genpoly = array();           public $nroots;                      public $fcr;                         public $prim;                        public $iprim;                       public $pad;                         public $gfpoly;
    
                public function modnn($x)
        {
            while ($x >= $this->nn) {
                $x -= $this->nn;
                $x = ($x >> $this->mm) + ($x & $this->nn);
            }
            
            return $x;
        }
        
                public static function init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad)
        {
                                    
            $rs = null;
            
                        if($symsize < 0 || $symsize > 8)                     return $rs;
            if($fcr < 0 || $fcr >= (1<<$symsize))                return $rs;
            if($prim <= 0 || $prim >= (1<<$symsize))             return $rs;
            if($nroots < 0 || $nroots >= (1<<$symsize))          return $rs;             if($pad < 0 || $pad >= ((1<<$symsize) -1 - $nroots)) return $rs; 
            $rs = new QRrsItem();
            $rs->mm = $symsize;
            $rs->nn = (1<<$symsize)-1;
            $rs->pad = $pad;

            $rs->alpha_to = array_fill(0, $rs->nn+1, 0);
            $rs->index_of = array_fill(0, $rs->nn+1, 0);
          
                        $NN =& $rs->nn;
            $A0 =& $NN;
            
                        $rs->index_of[0] = $A0;             $rs->alpha_to[$A0] = 0;             $sr = 1;
          
            for($i=0; $i<$rs->nn; $i++) {
                $rs->index_of[$sr] = $i;
                $rs->alpha_to[$i] = $sr;
                $sr <<= 1;
                if($sr & (1<<$symsize)) {
                    $sr ^= $gfpoly;
                }
                $sr &= $rs->nn;
            }
            
            if($sr != 1){
                                $rs = NULL;
                return $rs;
            }

            
            $rs->genpoly = array_fill(0, $nroots+1, 0);
        
            $rs->fcr = $fcr;
            $rs->prim = $prim;
            $rs->nroots = $nroots;
            $rs->gfpoly = $gfpoly;

            
            for($iprim=1;($iprim % $prim) != 0;$iprim += $rs->nn)
            ;             
            $rs->iprim = (int)($iprim / $prim);
            $rs->genpoly[0] = 1;
            
            for ($i = 0,$root=$fcr*$prim; $i < $nroots; $i++, $root += $prim) {
                $rs->genpoly[$i+1] = 1;

                                for ($j = $i; $j > 0; $j--) {
                    if ($rs->genpoly[$j] != 0) {
                        $rs->genpoly[$j] = $rs->genpoly[$j-1] ^ $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[$j]] + $root)];
                    } else {
                        $rs->genpoly[$j] = $rs->genpoly[$j-1];
                    }
                }
                                $rs->genpoly[0] = $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[0]] + $root)];
            }
            
                        for ($i = 0; $i <= $nroots; $i++)
                $rs->genpoly[$i] = $rs->index_of[$rs->genpoly[$i]];

            return $rs;
        }
        
                public function encode_rs_char($data, &$parity)
        {
            $MM       =& $this->mm;
            $NN       =& $this->nn;
            $ALPHA_TO =& $this->alpha_to;
            $INDEX_OF =& $this->index_of;
            $GENPOLY  =& $this->genpoly;
            $NROOTS   =& $this->nroots;
            $FCR      =& $this->fcr;
            $PRIM     =& $this->prim;
            $IPRIM    =& $this->iprim;
            $PAD      =& $this->pad;
            $A0       =& $NN;

            $parity = array_fill(0, $NROOTS, 0);

            for($i=0; $i< ($NN-$NROOTS-$PAD); $i++) {
                
                $feedback = $INDEX_OF[$data[$i] ^ $parity[0]];
                if($feedback != $A0) {      
                                
                                                            $feedback = $this->modnn($NN - $GENPOLY[$NROOTS] + $feedback);
            
                    for($j=1;$j<$NROOTS;$j++) {
                        $parity[$j] ^= $ALPHA_TO[$this->modnn($feedback + $GENPOLY[$NROOTS-$j])];
                    }
                }
                
                                array_shift($parity);
                if($feedback != $A0) {
                    array_push($parity, $ALPHA_TO[$this->modnn($feedback + $GENPOLY[0])]);
                } else {
                    array_push($parity, 0);
                }
            }
        }
    }
    
    class QRrs {
    
        public static $items = array();
        
                public static function init_rs($symsize, $gfpoly, $fcr, $prim, $nroots, $pad)
        {
            foreach(self::$items as $rs) {
                if($rs->pad != $pad)       continue;
                if($rs->nroots != $nroots) continue;
                if($rs->mm != $symsize)    continue;
                if($rs->gfpoly != $gfpoly) continue;
                if($rs->fcr != $fcr)       continue;
                if($rs->prim != $prim)     continue;

                return $rs;
            }

            $rs = QRrsItem::init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad);
            array_unshift(self::$items, $rs);

            return $rs;
        }
    }

	define('N1', 3);
	define('N2', 3);
	define('N3', 40);
	define('N4', 10);

	class QRmask {
	
		public $runLength = array();
		
				public function __construct() 
        {
            $this->runLength = array_fill(0, QRSPEC_WIDTH_MAX + 1, 0);
        }
        
                public function writeFormatInformation($width, &$frame, $mask, $level)
        {
            $blacks = 0;
            $format =  QRspec::getFormatInfo($mask, $level);

            for($i=0; $i<8; $i++) {
                if($format & 1) {
                    $blacks += 2;
                    $v = 0x85;
                } else {
                    $v = 0x84;
                }
                
                $frame[8][$width - 1 - $i] = chr($v);
                if($i < 6) {
                    $frame[$i][8] = chr($v);
                } else {
                    $frame[$i + 1][8] = chr($v);
                }
                $format = $format >> 1;
            }
            
            for($i=0; $i<7; $i++) {
                if($format & 1) {
                    $blacks += 2;
                    $v = 0x85;
                } else {
                    $v = 0x84;
                }
                
                $frame[$width - 7 + $i][8] = chr($v);
                if($i == 0) {
                    $frame[8][7] = chr($v);
                } else {
                    $frame[8][6 - $i] = chr($v);
                }
                
                $format = $format >> 1;
            }

            return $blacks;
        }
        
                public function mask0($x, $y) { return ($x+$y)&1;                       }
        public function mask1($x, $y) { return ($y&1);                          }
        public function mask2($x, $y) { return ($x%3);                          }
        public function mask3($x, $y) { return ($x+$y)%3;                       }
        public function mask4($x, $y) { return (((int)($y/2))+((int)($x/3)))&1; }
        public function mask5($x, $y) { return (($x*$y)&1)+($x*$y)%3;           }
        public function mask6($x, $y) { return ((($x*$y)&1)+($x*$y)%3)&1;       }
        public function mask7($x, $y) { return ((($x*$y)%3)+(($x+$y)&1))&1;     }
        
                private function generateMaskNo($maskNo, $width, $frame)
        {
            $bitMask = array_fill(0, $width, array_fill(0, $width, 0));
            
            for($y=0; $y<$width; $y++) {
                for($x=0; $x<$width; $x++) {
                    if(ord($frame[$y][$x]) & 0x80) {
                        $bitMask[$y][$x] = 0;
                    } else {
                        $maskFunc = call_user_func(array($this, 'mask'.$maskNo), $x, $y);
                        $bitMask[$y][$x] = ($maskFunc == 0)?1:0;
                    }
                    
                }
            }
            
            return $bitMask;
        }
        
                public static function serial($bitFrame)
        {
            $codeArr = array();
            
            foreach ($bitFrame as $line)
                $codeArr[] = join('', $line);
                
            return gzcompress(join("\n", $codeArr), 9);
        }
        
                public static function unserial($code)
        {
            $codeArr = array();
            
            $codeLines = explode("\n", gzuncompress($code));
            foreach ($codeLines as $line)
                $codeArr[] = str_split($line);
            
            return $codeArr;
        }
        
                public function makeMaskNo($maskNo, $width, $s, &$d, $maskGenOnly = false) 
        {
            $b = 0;
            $bitMask = array();
            
            $fileName = QR_CACHE_DIR.'mask_'.$maskNo.DIRECTORY_SEPARATOR.'mask_'.$width.'_'.$maskNo.'.dat';

            if (QR_CACHEABLE) {
                if (file_exists($fileName)) {
                    $bitMask = self::unserial(file_get_contents($fileName));
                } else {
                    $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d);
                    if (!file_exists(QR_CACHE_DIR.'mask_'.$maskNo))
                        mkdir(QR_CACHE_DIR.'mask_'.$maskNo);
                    file_put_contents($fileName, self::serial($bitMask));
                }
            } else {
                $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d);
            }

            if ($maskGenOnly)
                return;
                
            $d = $s;

            for($y=0; $y<$width; $y++) {
                for($x=0; $x<$width; $x++) {
                    if($bitMask[$y][$x] == 1) {
                        $d[$y][$x] = chr(ord($s[$y][$x]) ^ (int)$bitMask[$y][$x]);
                    }
                    $b += (int)(ord($d[$y][$x]) & 1);
                }
            }

            return $b;
        }
        
                public function makeMask($width, $frame, $maskNo, $level)
        {
            $masked = array_fill(0, $width, str_repeat("\0", $width));
            $this->makeMaskNo($maskNo, $width, $frame, $masked);
            $this->writeFormatInformation($width, $masked, $maskNo, $level);
       
            return $masked;
        }
        
                public function calcN1N3($length)
        {
            $demerit = 0;

            for($i=0; $i<$length; $i++) {
                
                if($this->runLength[$i] >= 5) {
                    $demerit += (N1 + ($this->runLength[$i] - 5));
                }
                if($i & 1) {
                    if(($i >= 3) && ($i < ($length-2)) && ($this->runLength[$i] % 3 == 0)) {
                        $fact = (int)($this->runLength[$i] / 3);
                        if(($this->runLength[$i-2] == $fact) &&
                           ($this->runLength[$i-1] == $fact) &&
                           ($this->runLength[$i+1] == $fact) &&
                           ($this->runLength[$i+2] == $fact)) {
                            if(($this->runLength[$i-3] < 0) || ($this->runLength[$i-3] >= (4 * $fact))) {
                                $demerit += N3;
                            } else if((($i+3) >= $length) || ($this->runLength[$i+3] >= (4 * $fact))) {
                                $demerit += N3;
                            }
                        }
                    }
                }
            }
            return $demerit;
        }
        
                public function evaluateSymbol($width, $frame)
        {
            $head = 0;
            $demerit = 0;

            for($y=0; $y<$width; $y++) {
                $head = 0;
                $this->runLength[0] = 1;
                
                $frameY = $frame[$y];
                
                if ($y>0)
                    $frameYM = $frame[$y-1];
                
                for($x=0; $x<$width; $x++) {
                    if(($x > 0) && ($y > 0)) {
                        $b22 = ord($frameY[$x]) & ord($frameY[$x-1]) & ord($frameYM[$x]) & ord($frameYM[$x-1]);
                        $w22 = ord($frameY[$x]) | ord($frameY[$x-1]) | ord($frameYM[$x]) | ord($frameYM[$x-1]);
                        
                        if(($b22 | ($w22 ^ 1))&1) {                                                                     
                            $demerit += N2;
                        }
                    }
                    if(($x == 0) && (ord($frameY[$x]) & 1)) {
                        $this->runLength[0] = -1;
                        $head = 1;
                        $this->runLength[$head] = 1;
                    } else if($x > 0) {
                        if((ord($frameY[$x]) ^ ord($frameY[$x-1])) & 1) {
                            $head++;
                            $this->runLength[$head] = 1;
                        } else {
                            $this->runLength[$head]++;
                        }
                    }
                }
    
                $demerit += $this->calcN1N3($head+1);
            }

            for($x=0; $x<$width; $x++) {
                $head = 0;
                $this->runLength[0] = 1;
                
                for($y=0; $y<$width; $y++) {
                    if($y == 0 && (ord($frame[$y][$x]) & 1)) {
                        $this->runLength[0] = -1;
                        $head = 1;
                        $this->runLength[$head] = 1;
                    } else if($y > 0) {
                        if((ord($frame[$y][$x]) ^ ord($frame[$y-1][$x])) & 1) {
                            $head++;
                            $this->runLength[$head] = 1;
                        } else {
                            $this->runLength[$head]++;
                        }
                    }
                }
            
                $demerit += $this->calcN1N3($head+1);
            }

            return $demerit;
        }
        
        
                public function mask($width, $frame, $level)
        {
            $minDemerit = PHP_INT_MAX;
            $bestMaskNum = 0;
            $bestMask = array();
            
            $checked_masks = array(0,1,2,3,4,5,6,7);
            
            if (QR_FIND_FROM_RANDOM !== false) {
            
                $howManuOut = 8-(QR_FIND_FROM_RANDOM % 9);
                for ($i = 0; $i <  $howManuOut; $i++) {
                    $remPos = rand (0, count($checked_masks)-1);
                    unset($checked_masks[$remPos]);
                    $checked_masks = array_values($checked_masks);
                }
            
            }
            
            $bestMask = $frame;
             
            foreach($checked_masks as $i) {
                $mask = array_fill(0, $width, str_repeat("\0", $width));

                $demerit = 0;
                $blacks = 0;
                $blacks  = $this->makeMaskNo($i, $width, $frame, $mask);
                $blacks += $this->writeFormatInformation($width, $mask, $i, $level);
                $blacks  = (int)(100 * $blacks / ($width * $width));
                $demerit = (int)((int)(abs($blacks - 50) / 5) * N4);
                $demerit += $this->evaluateSymbol($width, $mask);
                
                if($demerit < $minDemerit) {
                    $minDemerit = $demerit;
                    $bestMask = $mask;
                    $bestMaskNum = $i;
                }
            }
            
            return $bestMask;
        }
        
            }

    class QRrsblock {
        public $dataLength;
        public $data = array();
        public $eccLength;
        public $ecc = array();
        
        public function __construct($dl, $data, $el, &$ecc, QRrsItem $rs)
        {
            $rs->encode_rs_char($data, $ecc);
        
            $this->dataLength = $dl;
            $this->data = $data;
            $this->eccLength = $el;
            $this->ecc = $ecc;
        }
    };
    
    
    class QRrawcode {
        public $version;
        public $datacode = array();
        public $ecccode = array();
        public $blocks;
        public $rsblocks = array();         public $count;
        public $dataLength;
        public $eccLength;
        public $b1;
        
                public function __construct(QRinput $input)
        {
            $spec = array(0,0,0,0,0);
            
            $this->datacode = $input->getByteStream();
            if(is_null($this->datacode)) {
                throw new Exception('null imput string');
            }

            QRspec::getEccSpec($input->getVersion(), $input->getErrorCorrectionLevel(), $spec);

            $this->version = $input->getVersion();
            $this->b1 = QRspec::rsBlockNum1($spec);
            $this->dataLength = QRspec::rsDataLength($spec);
            $this->eccLength = QRspec::rsEccLength($spec);
            $this->ecccode = array_fill(0, $this->eccLength, 0);
            $this->blocks = QRspec::rsBlockNum($spec);
            
            $ret = $this->init($spec);
            if($ret < 0) {
                throw new Exception('block alloc error');
                return null;
            }

            $this->count = 0;
        }
        
                public function init(array $spec)
        {
            $dl = QRspec::rsDataCodes1($spec);
            $el = QRspec::rsEccCodes1($spec);
            $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el);
            

            $blockNo = 0;
            $dataPos = 0;
            $eccPos = 0;
            for($i=0; $i<QRspec::rsBlockNum1($spec); $i++) {
                $ecc = array_slice($this->ecccode,$eccPos);
                $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el,  $ecc, $rs);
                $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc);
                
                $dataPos += $dl;
                $eccPos += $el;
                $blockNo++;
            }

            if(QRspec::rsBlockNum2($spec) == 0)
                return 0;

            $dl = QRspec::rsDataCodes2($spec);
            $el = QRspec::rsEccCodes2($spec);
            $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el);
            
            if($rs == NULL) return -1;
            
            for($i=0; $i<QRspec::rsBlockNum2($spec); $i++) {
                $ecc = array_slice($this->ecccode,$eccPos);
                $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs);
                $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc);
                
                $dataPos += $dl;
                $eccPos += $el;
                $blockNo++;
            }

            return 0;
        }
        
                public function getCode()
        {
            $ret;

            if($this->count < $this->dataLength) {
                $row = $this->count % $this->blocks;
                $col = $this->count / $this->blocks;
                if($col >= $this->rsblocks[0]->dataLength) {
                    $row += $this->b1;
                }
                $ret = $this->rsblocks[$row]->data[$col];
            } else if($this->count < $this->dataLength + $this->eccLength) {
                $row = ($this->count - $this->dataLength) % $this->blocks;
                $col = ($this->count - $this->dataLength) / $this->blocks;
                $ret = $this->rsblocks[$row]->ecc[$col];
            } else {
                return 0;
            }
            $this->count++;
            
            return $ret;
        }
    }
        
    class QRcode {
    
        public $version;
        public $width;
        public $data; 
        
                public function encodeMask(QRinput $input, $mask)
        {
            if($input->getVersion() < 0 || $input->getVersion() > QRSPEC_VERSION_MAX) {
                throw new Exception('wrong version');
            }
            if($input->getErrorCorrectionLevel() > QR_ECLEVEL_H) {
                throw new Exception('wrong level');
            }

            $raw = new QRrawcode($input);
            
            QRtools::markTime('after_raw');
            
            $version = $raw->version;
            $width = QRspec::getWidth($version);
            $frame = QRspec::newFrame($version);
            
            $filler = new FrameFiller($width, $frame);
            if(is_null($filler)) {
                return NULL;
            }

                        for($i=0; $i<$raw->dataLength + $raw->eccLength; $i++) {
                $code = $raw->getCode();
                $bit = 0x80;
                for($j=0; $j<8; $j++) {
                    $addr = $filler->next();
                    $filler->setFrameAt($addr, 0x02 | (($bit & $code) != 0));
                    $bit = $bit >> 1;
                }
            }
            
            QRtools::markTime('after_filler');
            
            unset($raw);
            
                        $j = QRspec::getRemainder($version);
            for($i=0; $i<$j; $i++) {
                $addr = $filler->next();
                $filler->setFrameAt($addr, 0x02);
            }
            
            $frame = $filler->frame;
            unset($filler);
            
            
                        $maskObj = new QRmask();
            if($mask < 0) {
            
                if (QR_FIND_BEST_MASK) {
                    $masked = $maskObj->mask($width, $frame, $input->getErrorCorrectionLevel());
                } else {
                    $masked = $maskObj->makeMask($width, $frame, (intval(QR_DEFAULT_MASK) % 8), $input->getErrorCorrectionLevel());
                }
            } else {
                $masked = $maskObj->makeMask($width, $frame, $mask, $input->getErrorCorrectionLevel());
            }
            
            if($masked == NULL) {
                return NULL;
            }
            
            QRtools::markTime('after_mask');
            
            $this->version = $version;
            $this->width = $width;
            $this->data = $masked;
            
            return $this;
        }
    
                public function encodeInput(QRinput $input)
        {
            return $this->encodeMask($input, -1);
        }
        
                public function encodeString8bit($string, $version, $level)
        {
            if(string == NULL) {
                throw new Exception('empty string!');
                return NULL;
            }

            $input = new QRinput($version, $level);
            if($input == NULL) return NULL;

            $ret = $input->append($input, QR_MODE_8, strlen($string), str_split($string));
            if($ret < 0) {
                unset($input);
                return NULL;
            }
            return $this->encodeInput($input);
        }

                public function encodeString($string, $version, $level, $hint, $casesensitive)
        {

            if($hint != QR_MODE_8 && $hint != QR_MODE_KANJI) {
                throw new Exception('bad hint');
                return NULL;
            }

            $input = new QRinput($version, $level);
            if($input == NULL) return NULL;

            $ret = QRsplit::splitStringToQRinput($string, $input, $hint, $casesensitive);
            if($ret < 0) {
                return NULL;
            }

            return $this->encodeInput($input);
        }
        
                public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 1, $saveandprint=true) 
        {
            $enc = QRencode::factory($level, $size, $margin);
            return $enc->encodePNG($text, $outfile, $saveandprint=false);
        }

                public static function text($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) 
        {
            $enc = QRencode::factory($level, $size, $margin);
            return $enc->encode($text, $outfile);
        }

                public static function raw($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4) 
        {
            $enc = QRencode::factory($level, $size, $margin);
            return $enc->encodeRAW($text, $outfile);
        }
    }
    
        
    class FrameFiller {
    
        public $width;
        public $frame;
        public $x;
        public $y;
        public $dir;
        public $bit;
        
                public function __construct($width, &$frame)
        {
            $this->width = $width;
            $this->frame = $frame;
            $this->x = $width - 1;
            $this->y = $width - 1;
            $this->dir = -1;
            $this->bit = -1;
        }
        
                public function setFrameAt($at, $val)
        {
            $this->frame[$at['y']][$at['x']] = chr($val);
        }
        
                public function getFrameAt($at)
        {
            return ord($this->frame[$at['y']][$at['x']]);
        }
        
                public function next()
        {
            do {
            
                if($this->bit == -1) {
                    $this->bit = 0;
                    return array('x'=>$this->x, 'y'=>$this->y);
                }

                $x = $this->x;
                $y = $this->y;
                $w = $this->width;

                if($this->bit == 0) {
                    $x--;
                    $this->bit++;
                } else {
                    $x++;
                    $y += $this->dir;
                    $this->bit--;
                }

                if($this->dir < 0) {
                    if($y < 0) {
                        $y = 0;
                        $x -= 2;
                        $this->dir = 1;
                        if($x == 6) {
                            $x--;
                            $y = 9;
                        }
                    }
                } else {
                    if($y == $w) {
                        $y = $w - 1;
                        $x -= 2;
                        $this->dir = -1;
                        if($x == 6) {
                            $x--;
                            $y -= 8;
                        }
                    }
                }
                if($x < 0 || $y < 0) return null;

                $this->x = $x;
                $this->y = $y;

            } while(ord($this->frame[$y][$x]) & 0x80);
                        
            return array('x'=>$x, 'y'=>$y);
        }
        
    } ;
    
        
    class QRencode {
    
                public $casesensitive = true;
                public $eightbit = false;
        
                public $version = 0;
                public $size = 3;
                public $margin = 4;
        
                public $structured = 0;         
                public $level = QR_ECLEVEL_L;
                public $hint = QR_MODE_8;
        
                public static function factory($level = QR_ECLEVEL_L, $size = 3, $margin = 4){
                    $enc = new QRencode();
                    $enc->size = $size;
                    $enc->margin = $margin;
            
                    switch ($level.'') {
                        case '0':
                        case '1':
                        case '2':
                        case '3':
                                $enc->level = $level;
                         break;
                        case 'l':
                        case 'L':
                                $enc->level = QR_ECLEVEL_L;
                            break;
                        case 'm':
                        case 'M':
                                $enc->level = QR_ECLEVEL_M;
                            break;
                        case 'q':
                        case 'Q':
                                $enc->level = QR_ECLEVEL_Q;
                            break;
                        case 'h':
                        case 'H':
                                $enc->level = QR_ECLEVEL_H;
                            break;
                    }
            
                    return $enc;
                }
        
                public function encodeRAW($intext, $outfile = false){
                    $code = new QRcode();

                    if($this->eightbit) {
                        $code->encodeString8bit($intext, $this->version, $this->level);
                    } else {
                        $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive);
                    }
            
                    return $code->data;
                }

                public function encode($intext, $outfile = false){
                    $code = new QRcode();

                    if($this->eightbit) {
                        $code->encodeString8bit($intext, $this->version, $this->level);
                    } else {
                        $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive);
                    }
            
                    QRtools::markTime('after_encode');
            
                    if ($outfile!== false) {
                        file_put_contents($outfile, join("\n", QRtools::binarize($code->data)));
                    } else {
                        return QRtools::binarize($code->data);
                    }
                }
        
                public function encodePNG($intext, $outfile = false,$saveandprint=false){
                    try {
            
                        ob_start();
                        $tab = $this->encode($intext);
                        $err = ob_get_contents();
                        ob_end_clean();
                
                        if ($err != '')
                            QRtools::log($outfile, $err);
                
                        $maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin));
                
                        QRimage::png($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint);
            
                    } catch (Exception $e) {
            
                        QRtools::log($outfile, $e->getMessage());
            
                    }
            }
    }
$url = empty($_GET['url']) ? '' : $_GET['url'];$size = empty($_GET['size']) ? 10 : $_GET['size'];$margin = empty($_GET['margin']) ? 1 : $_GET['margin'];$ec = empty($_GET['ec']) ? QR_ECLEVEL_L : 'QR_ECLEVEL_'.$_GET['ec'];QRcode::png($url, false, $ec, $size, $margin, true);$qrcodeapi="index.php?url=";?><!doctype html><html><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"><body ondragstart="window.event.returnValue=false;" oncontextmenu="window.event.returnValue=false;" onselectstart="event.returnValue=false;"><title><?php echo $title;?></title><style>*{ margin: 0; padding: 0;font-family: Microsoft yahei; } body { background-color: #f2f2f2; }.code-item {width: 100%;max-width: 310px;max-height: 410px;margin: 0 auto;padding-bottom: 0px;display: none;background-color: #fff;}.code-title {height: 100px;background-color: #f2f2f2;background-position: center;background-repeat: no-repeat;background-size: 80%;}.code-area {text-align:center;}.code-area>img {margin: 15px 0;width: 80%;}.code-footer {height:70px;text-align:center;font-weight:bold;line-height:80px;font-size:30px;letter-spacing:5px;margin: -10px 0px 0px 0px;} #code-all>.code-title {background-image:url("data:image/png;base64,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");} #code-wechat { background-color: #54bc6e;} #code-wechat>.code-title { background-image:url("data:image/png;base64,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");} #code-qq { background-color: #54b4ef;} #code-qq>.code-title { background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUYAAABuCAIAAADUPS1IAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAGwWSURBVHja7L1plJ3VdSZ8zjvfeay5VFJJVaV5RkhCEpIQyBKjbWyDMTY4JHbn82r36q+7E8dxJ1ntJO52Pq/Eba94aGzwhA3GBsQokEAjaB5LKs01qMZbt+48vPP5fjzS4UZQBZLLGTr3LJaWVNy6973ve/bZez/72c+muVyOVFd1Vdf/LUuo3oLqqq6qSVdXdVVX1aSrq7qqq2rS1VVd1VU16eqqrqpJV1d1VVfVpKuruqrr34VJO44jSRKl1LZtx3Fs23Zd1+v1UkpFUZQkSRRFQojruoQQSqnruq7rMsYYY3gHenWpqqooCqVUkiSPxyMIQqFQkGXZtm3btgVBYIyVy2XLsjRNqz7O6qou+vugmiiKkkgkNE0LBoOlUkkQBFVVC4VCMBi0bVvX9Ww229/f39nZeezYse7u7mw2a1mWaZqMMY/HE4lEYrGY3++/6aabOjo6Zs+eHQ6HLcuybVuSJEVRMpkMzNu2bVVVvV6v4zjZbFaW5eoTra6qSU++SQ8PD7e3t7uue/ny5Vgs5vV68/m8KIqJRGL//v0vv/zyvn37EomEIAiKokiSZJqm67pw5oQQSZLgyYvFoq7rkUjk1ltv/fjHP37LLbfU1NQQQhhjeI3rurqum6YJwy6Xy9UnWl1Vk558kw4EAgMDA16v1+fzlUolSZLOnj371FNPvfjii5lMJpvNEkJ8Pp/H43Fd1zRNy7LgfiVJchzHMIxyuWyaZl1dnSiKruvmcrlyuTxjxowHH3zwYx/72KxZsxhj+EVRFBVFsW27XC77fL7qE62uqklPvknbtu33+3O5nOM4hULhiSee+OlPf6rruuM4jDFKqSAIgiA4jmOapmmaPp+PUspTaP4+lmXBaL1eLyGkXC7bti3L8pe+9KWNGzcuXbrUtm3TNIPBoCAIY2NjeFl1VVfVpCd5AeUSBOH111//m7/5myNHjvj9fkTLoigCD7NtmxAiyzIPoS3LusbmGWOu68LOXdd1HAc+OZvNrl+//uGHH7799tuj0aiu63D7hUKh+kSrq2rSk2/SlNKBgYEnnnjiJz/5ydjYWDAYlGVZVVXDMOCEAYMTQgCAl8tlQRA4yo1DAUcAY8xxHMuyKKWyLFNKHcdxXTeTyTQ0NHz+859/5JFHZsyYUS6Xi8Vi1UtXV3WJf/Znfzbpb1osFr/xjW/84Ac/sCyrsbGRUqrrOnAs+GGYPdLmUqkUDAZR1oIlAyQjhOi6riiKLMuO4ziOIwiC67qGYRBCIpFINpvdt29fMpmcM2dOU1NTNptVVbX6RKuratI3btJIg7PZbCAQMAzDMIxoNHrhwoXPfe5zO3bs8Pv9lNJ0Oq0oCoJqQoimaYIg5PN5/CWXyzU2Nuq6jvKy67qqqlqWZRiG1+tVFAU1MF3XBUEIBAIodCmK4jiOx+Oxbfv06dODg4NTp06dPXu2ruuyLLuuK4oizBsFbX5GVFd1VU16ogWIKxwOM8YMwwgGg6dPn/72t7998ODBYrGIFwDEtm07GAx6vd6xsTHAXa7rapomimIul0PCjNib+3BCSCqVCofDoiim02lRFB3HyeVyoVAIKLrP5/N6vcVisaenxzTNlpaWqVOnDg0NBQIBSmmhUPD5fCh3C0KVJFddVZP+EAslZa/XaxiGqqpjY2Pf/e53n3zySbhQ13Vh0uVymTHm8/lg5/Cu+Xy+VCpRSqPRKEwU7hTsEU3TwCdTFEUQBFmWI5GI3+9HBA4PXy6X4Y3HxsYuX76cyWRuueUWRVHwi3DXQN0kSao+6er6d7J+V/clCEI6nQY6/fzzzz/99NOu6yqKoigKIQQwtSzLKFCXy+VIJALEq6mpKRqNmqaJuhRc9JVjRhQBjNXW1iIJd123v78/kUgEg8FAIMDtv1AoiKJYX19vGMYLL7zw4x//OBKJ2LZtWZbf7wcAXrXn6qp66Q+74AYppX6/f9euXd/61rcuXLhQU1PjOA7SY7xG0zRJkjKZjCRJXq937ty5zc3NIyMjpmlGo9FkMsmJnKhdgWriOE46nW5sbOzo6JgyZYogCIlEIpfLSZJkGIYgCMFgkFKay+VwZBSLxYsXLy5atKi9vd22bVEURVE0TRMOv/qkq6vqpT94gcIZDodHRkaefPLJQ4cO1dXVAdCybRupMtLsbDYbj8e//OUvnz9//vXXX//Vr351+fLl73znOzBm1KXgz2VZzufztm23tbU9+eSTBw4c2LZt20svvbRnz55vfvObs2bNKhaLHo8HXFGE2cVi0XEcRVEuXbr0rW99C30dg4ODPp8POHn1MVdX1Ut/qIXSseM4Tz/99I9+9CPDMEKhUKFQUBSFMRYIBMrlsqIohmGIovilL33p61//erFYhK82TXPhwoW33nrr1q1b4XUty0IEXiwW58+f/+Uvf/nuu++ORCLo3/L5fNOmTbNt+/Dhw5qmwZOTqxA6kHBZlru7uxsaGmbOnIkkHEEEb/CqruqqeukJzwNR1DStv7//t7/9bSKRqKmpGR0dhVUDx9J13ev1ejyeqVOnfu1rX9N1HSVopMeEkPb29scee8zj8aAuZZomIcTn8918882PPvpoJBIBM4wQksvlwC2ZNm0akHC/32+aJhJvVL/8fr8gCP/n//yfXC4Xi8W6u7s1TQOnpbqqq2rSH7zgjZ988skTJ06EQqFyuYw/A4EAak6appXL5VKp9Ld/+7eSJGmaBshKURS0N9u2/ZWvfKVYLKLEjQ4Nv9//9a9/ncf2+EswGCwWi42NjX/xF38himKhUEAnJoJ2JNilUsk0zcHBwR/84AeO49TW1lJKLcv613bTJUlCBIF+cvwE1XvGmCiK+L+owE3i9SOWAbhIrvarA3QA8wekesdxEBmRq+QfXlnEAXpj3xfxVCXGgVqmx+NJpVLg+ft8vgk6ZHmC5vF4kNChegJsNRAIlEolNBcIguD1elEWsSwLvb0gFE8isGJZFj4UcaLP50Mjw79hk3YcZ2hoqKury7IsfB/sSG6HiH7D4XBbWxv2kN/vtywLWzaVSsGw77rrLhwB0DlYvnw5x7RkWeZIG/iet912G7YIx+dQtcL1eDwe0zTPnj175swZtFsCe/9XtWzbhmmh+QzGViqVwHiFugPkHwKBQDgcnqzPlWUZ1svzJiw0t4I/rygK9j0ipmvQUMMwUIm8rqXrerFYHB0dZYzpum5ZViQSuXTp0sjICM6UmpoawzAKhUIul8vn8+O9TyVZGGaMDjyEeJlMJpPJwLYppfyYkCSpVCo1NDQYhgHcdBKP5oGBAb/fv2PHjhMnTpw6dcrv94dCoX9hh/E7/v7BgwePHj2KYjKnbcKx4FDUdT0Wi82YMYMQAk0Sv9/f19e3ceNGxtjLL7/c1tb2qU99auvWrbjdkiTde++9fr+f3zU4q1KpFAqF0OOFElelMfM9ivP4+PHjb7311pw5c3K5XCAQ+Bc/ON+7xeGvhKuLO0DcQ/Su4B5OIhCAI4NbRWXT23v/yU9MHNNAOuEnr/dzfT6fYRioLOZyuWKxmEqlHn/88Vgs1tTUFI/Hb7rpJtg2v8LxTBrPnff2gODwR3/0R47j+P1+v9//hS98YebMmX6/v1gs9vb27tu37/jx4/fdd19ra2tdXV1fX19jY+Nk9dVD0mNgYOCpp57K5/Mej6e+vn7ZsmX33Xffv1WTZoy99tprw8PDSGvB5VRVFRsCIiSFQiEUCsmyDAzM7/cPDw//xV/8RX9/v2EYX/rSl375y1/OmDGjWCyqqgrnMH/+fEJIMpk8cuTId77znddee03TtCVLljzzzDN1dXUA2/hu42pHsAq4+sHBwe3btz/22GOAxP+1eWlN0/iRRK7W4REl8hCX96shrZisj+YsenwEDhRcTyX9HuJQhmHwOiVOBJxENxCggozE4czOzs4TJ04gcK2vr58xY0Y4HOb7ZDz4g59HnG5oWRbgWLhrnP6U0lKpNDQ09Pzzz+/atUsUxd7e3i9/+cugGCYSCY/HMyk3M5PJKIry6quvplKpYrGoadrw8PDNN9/8bzjwHhsb27lzJ6JlML2R6lzTUIWNC0Qa8fO+ffuKxWIkEjl06FA0GuX/F5tbVdXR0dFdu3Z95StfWb58eSKR6Ovru+OOOw4ePDg0NDRBbwY44aqqUkoPHz584cIFcEL/tZm0fHXBPCDeVCqVrok40Hw2iZpq9tWFwBVhAqngF/CFn0D4DTJy/DU3YNKyLKPvva+vz7Ztn8937tw5r9cbDodN05QkKRqNQm2qVCpxQPT99+tV1jDuDzJqRVH8fj+KpvzGyrJ84sQJIKyU0u985zvJZLJQKExibw9jrK+vb/fu3UAEisVia2vrlClT/g2b9P79+/v6+jweDwJsPHuYNAdFgFKUSiVN02BdkBacOnVqQ0NDNpsFqywcDmPf+P3+VCoVj8dramoOHz78ta99LRKJRCKRr371q3fffXd9fT3wG+6ceeCKf3LJhOHh4Z07d4LW9q/NpBF8Aqzi5HZCSCAQCAQCXq8XeAQa1yaxro4Dt5JFb9u2YRi8SY5DJKZpwhLQFYuwCJ05N1BBABoKMEwUxUwmc+TIEcMwNE3TNG3RokWxWIwQUigUQCWcuMiCFIBvAEJIIpHARkITLnxMbW3tF7/4xVAoFA6He3t7Xdf9x3/8x9OnT09irhsOh/fu3YuEEUH4Rz/60fdiEP+WTHrLli0Is2FInPuBgxypjqIoxWLx/PnzOK1HR0fD4fBf/dVfpVKpVCr1ne98x+v1HjhwADsJJ9/OnTsppbfccgsemGEY+XweO5tSOjY2xoFi7mrwSlwG/nRdd9u2bYjK/rWZNPjqqL3hBNQ0LRAIDA8Po4kFpyGsGs2kk/Owrx5/+BNVxkKhEAgEPB4PDkRYhcfjCQQCY2NjxWIRuTQHnG/giCwWizgIwuGwoigDAwOZTMZxnGQyadv2ggUL8OwYY2i/m8Ar4olzk0ZYB9ErHvsgYREE4Y477rjjjjsMw4jFYslkcmho6JlnnsFWnJTV2dm5b98+bHhd1+fNmzd37twbgA//FeXSb7/9diQSSaVSjDEUqEKhEEIpmJxhGJIk5fP5c+fOtbe3y7JcU1NTKpXuvfferq6ugYEBJB4vvfQSCtqappVKpS1btvyn//Sf8FbA0hEsoQ/kueeewwPjcSOHTJDPo/VKkqSTJ0/m8/mGhoZ/bTKDe/bsyWQyw8PDo6Oj5XJZkiS/3+/xeJqamhobG6dNmxaJRJBzYtdOFhwAY4Btw0RR+Xv22Wfz+Xw6nQbaHAgEIpFIIBBob28Ph8OxWIwTAW+sWRWWBlZfPp/v7u6WJAlIWDgcnjVrFhd4liQJ3bgTmDRPFrABANQjxMN3xP+llI6Ojt5zzz2U0ieffBL3c3Bw8Gc/+9l/+2//bVLu5+uvv45gvra2NplMbtq0SVGUf3EBPOlDPhK0Iuu6DhALySqEAWFvoiiigCTLcqFYtm2mqn5FkPRCSXS07/zPf7hz3Vq5RiGEeESDELOpqa4m2lTIEl133z58UvJFmKQYppPOjNXV1L6+9dVPfupTosQc13WI6zIhlc9GgqGegaE//9v/KbiWQARLtB1CbIG4rutSRlzqEVXBkUSbIpsSy+LZo2fqg3W/7wEEXKscESalFN4VW1lRFNM0+/v7jxw5cuDAgQsXLvDchIMO/E9RFMvlcjwe37hx4+rVq6PRKJKRkZER4FicvZNOp8dLC23bDgQCiO1DoZBlWblczuPx4NhljNm2feLEia1bt547dw65SWX9mV9YqVTyeDyxWGzmzJlr165dtmyZJEnIGpAdIMjE33lL/HtXPp/3+XwIqm3bfvnll1F5YoxNnTp1x44dU6dOFUURaBz+YhgG+LyIzBOJBEwFkQsvxcEhQy0HgT2gdXCZbNv2er3r168fHR3dtm0b0MdDhw5t3bp1+fLl9fX1uBuIWQDujgfLobdfVVVZllGAHB4ePnLkSKFQiEaj2Wy2rq7u0qVLQ0NDHAiclKgqkUiEw2Fcm23bH/nIR0D6+F1NGkERECxeYjl9+vR4rw+FQrlcET42HA7bZePcuXNf/epX//Z/fVWWZSUQIKaZzI7GYw2GQW6//Xbk0uVi3jHMeDyezWZfffXVefPmtc9s82gemzCBkkgw1D848r3vfQ99mpZlWcxmjDB2hZeqKhoxXOpSTi8pFosXLlxYvXr179ukARFjnyEpFUURoXWhUDhx4sSuXbuOHTuWyWQ4woxT4BqkCocCusqffPLJX/3qVytWrLjzzjvr6uri8Tji3mg0ms/n8/l8bW1tqVQa7wjO5/OSJIGT6zhOKBQChJnL5d55551XX311aGgIYumJRALWxU2ai0YBskqlUvv379+/f39DQwNC2YaGBsdxyuUyziDE8BNUCmGN8KIXL14sFouIqvL5/PHjx8+cOQOUC8EXsDT01TLGFi5cWF9f7/f7AWvjh5IkIZLHDYQCR6lUQj3f6/XirhaLRaQVt99+eyqV2rJliyRJS5YsaWhogGdCNId3myD0QIOwz+dTFCWfz/v9/nQ6/fTTT4+Ojno8nnw+77ru2NjYa6+95vF4UHiflH0Vi8XQ5oi9EQqFgDtMXJT9UCaNG4cNVygUAIPt3bt3vNcbibJPUkIhJ8sSosa8IbVvwHjq+V/6apv/9L/9leCSokGCNeR8/+Wvf+NPL6X2hn1OWHFE3XBUohEpMTj02nNbSZl+9/vflYKaJNgOyRf1zFO/+fbPnvlWpkQUX9R0CREkTfU5TCyXy8xymSgolBDiEIWUSyVF9YyVS3uOH/2k8Og/QzKNe8IVF0AjuXjx4pEjR3bv3t3d3Q1QEJke4ltuD7ziatv26OgopTQejyP92759+5EjRzZu3HjnnXe2tLQUCgXuBCbIJkRR5Mg/FFRVVR0YGDhx4sS2bdtOnDiB+QfpdNp13ZqamrGxMRQakMPzoCMQCCSTyXK5DJLPpUuXfvvb3x47duyhhx6qr6/HeYHaJPbceEgeqk3gwx0+fBiN7oyx+vp6hDOcWsNhQvBDMLMB4hmpVIrX6nlJHwBepXYdgnZ8hM/nS6VSoVBo5syZq1evHhoaisfjn/zkJxsbG3FacVlLLlY53v7HnUEbgmVZJ06ceP3114PBYDgcHhoaikQigiAMDw8TQhCoTsqmGhgYgCQBTgoco5OWSyNXQV6HJ3fy5MkJ9rcsy65rpdPMyZFYzNA0YhjG//7f//v//OCpzz76RytXrnzuxV+9ufMli6XzaVP0kMFsxutRVNVbzBVlSbYs65VXXpk9e/bmzZuXr75pKNn36+efPnb0AhHItFn+kYt5Q7eJLHqIxKhsmiZlTKYwD4ZIUlEUO1/s7Oy0bVsRf7/2jPMO1VdN08BzGBgYePbZZ48fP97f3x8Oh6H0kE6ngccCDwP/Eb9rWVZ/fz+ix1KpBJlHv98viuKbb745Ojp69913z5o1CxhkIBBIpVLj1VfR0EoIQaIEe37ppZeee+45uEGg3MhCC4UCInlYDppb0eg2Ojrq8/kQU8C1JhKJVCqVy+U+8pGPrF69WpZl4Myqqk6AzAMvEAQhlUodP34ceJtlWXhP13UhFMuZcwjUua+Dkei6Dk4hADzsRpTTS6WSz+cDAQkENVSJAY8DX+zo6PjCF75QW1vb2NiIIgs/a9ACOMH1ox8JaWYkEjl16tSuXbuwz5PJJA5xFHdAl5wsL61pWjweHxgYAMzEIecJ2Dgf1qSBiCBYwnFYKpUSicR4ry/IDiFOUPQE4lGXWV7NLzLdsnSBuH6W//U//s0z33bCIdWXz5imM7e1preQpX5ZlWTbtv0K84aCtu0OJ0ZlEn3h2edffOH1bLFcNMxwdKbHF+rrHJlez8pKWbdVZntspmmuKQjEK2iukyVUd0WLyIx4CSvbfan+0fLYVDX2+/bS2FuCIPh8PlEUz5079+abb+7ZswehsiiKY2NjhJC2tra5c+euXbvW4/H4/X7EciDYwF10dXXt37//9OnT6XQauxNO4KWXXkomk5///OdnzpwJpHqCejUeE9+pPT0927Zte/PNNxG7wqpRH16yZMny5cvb2towrgQYEs4m0zRHRkaOHj26Z8+e/v5+j8eDztlkMnngwAFE2kuXLg2HwyhAwH297/WYpun3+8vlcnd3d39/PxhBlbqRpmkijEcYjPgfJxdI1D6fr6amhovGkqu8Otx2BBHINnl/vqqqmUwGRySi5aamJsuyhoeHE4mEaZpNTU0NDQ3FYhGidxzYf+9SVbVYLCKZymQy77zzzqlTp6LRKBL71atXT506FXk7rm2y6qaIQZ566ilUGZHSfyBc+qFMmqOdSGZc1x0aGsJnTBCoW5Yky3K+UBzMDimSVBuJlQomOACpclYqWA21taXS2NjYWNP0qVOaW0eHR4aGhhqnThWoPDg43FTfMJJIBSJxw3YkSWqIxF0qAeYZGekWRZGJIhNsIhJN0whxHcchjNGrrBWQQw3D6Ovrmxr+vZs0Cj8IdC9cuLBjx47XXnsNnWHY6PPmzVuzZs3ixYvj8TipmOOHGwv7LJfLixYtuuWWW0ZHR3fs2LFr1y7AQuVyORaLnTx58oknnnj00UcXL15cKpWAXY0X6IIx7vV6+/r6Xn755d27d6dSKa/XC41HGPOGDRumT59eGXyiAwGDjVRVjcfjs2bNuvPOO0+fPr19+/aDBw8ahhGPxw3D6OzsxC5fs2aNoiichz9eXRqdNihHA5Fpbm7+u7/7O0i7c9+Lz8W7odHCsiwcJdiH2HL4C/4ELYKrVsGiTNNEyI2D6cKFC0NDQ+l0uru7+9KlS4hcNm/efOedd2I/Y8OMZyo+n6+7u3vKlCmSJL399tu4D3j93LlzP/e5z02dOhVCt8VicYKj7Qbq+SgAGYbBe2kmdtHXEXjjDAMCmclkANuOR1Ssr/Vkcwk7n9ZU0uQjip9Mb7KXLRiZO6u+PiLPap8hi7auFwghZd0ry7LNUnV1w+mxsXK+2NiYcxwnnUoHg0FvsJXYcv/gWK5INI1c6B7cty85NEJOnCe2TIp6KZEmZZeIvgYi+QzTlBSHCdRybUEWDcsQZdEl7rlzZ9YsWPx7tWec7mge6Orq2rZt2/79+3FsY/jekiVL7r777qVLl1JKUbdEhAlXw+Exr9ebyWQMwwiHw3fccUdra+uuXbt27dql63pLS8vQ0NC+ffuQZtfV1U1wVPMBgGNjYzt27EDNDPWVkZGR9vb2Rx55ZMWKFYVCIZlMBgIBPgWBxxq4nuHhYXjvZcuWNTc3z5o1C6l4R0dHLpfr6el58803PR7P4sWLVVWFgNx4cJ1pmj09Pfv37wd4q2namjVrEPrxUjmQCAB7SAogHYmoBBcJTTtsSGQruVwOMQ5y+xMnTgwNDeXz+ZGRkX379vGbXBnNIpZGQxGKrDiLx/PS6BtjjB05cuT111/HCEdd130+36pVqxobG3EIFgoFmPRkEU4R0mcyGU40BBI5CSbNQ27UIQzDGBgYmMCkC4WCZVkNce+9m1fdd+fyiN91Sv0hzSJO2iuahlEczYxEo0FVVbO5tKZpXm9wZGREleW6urpCIY9Hbppmsrs74ItHo1FvQCmX2dy5c+fPFwolSjwdl5N0776uV7cd7bqUdV1XulKudMjVUbiGaRBZpJT29/f/vl00bz7Tdf3MmTO7d+8eGxtra2sbGhryer1r16799Kc/XV9fj8Iv1Nd4tbayjgVYFepLoijedNNNtbW10Wj02Wef7evr0zSttrb25MmTr7zyyj333NPY2DjedBHeBNLT07Nnz55kMllbW1ssFgcHBzdv3nzfffdNmzatVCoBAAOqh2icZ6ewBITiiIrr6+vvvfdeiENdvHgRvvr48eN+v7+1tbWlpWVsbCwQCIznDzKZTE9Pz7lz52bOnIlempUrV8JDItdF7z2/n8iQEf+DlwrGAW9BLZVKqKV3dXVhH6qq2tPT88orr+B4QoMQAkZ8L05n0HUdNg88AoEDp0i9d6XT6YaGhnQ6vXXr1lOnTmHUhOu6M2fO3LBhA/hwILcGAgHULCcrmwMigDtT2Q01CUUsRCaU0nw+H41Gu7q6JggAYkZ27U3h//RfPu4Ve5n1w7CTlkRLMwkxAWlF68KkbPeZdqmmxlRV2RgJRZnMLEqKlo95qeO6rs0Y0wjVHEpKGbGYFWxdUUVJEcMa8UQvUT096/55G29b9fc/fO2VHSO2O6J4I7pNFEXxEB+ovK4p+Lz+kYtDv2+T5ij3kSNHnn/+edd16+rqMplMqVT67Gc/u2nTJlmWM5mMpmmqql4Db1xTDcYZDNgW9n///fdblvXzn/88Ho/n8/lsNrt9+/a5c+fW1dUhxUCzLlBZPCxKaU1NzcDAwOOPPw7IA+LKa9euve+++zo6OhA7eL1eGDZvn+aeX7y6YBIoHRFC5s6dG41Gv/GNbyQSCRxSZ86cefXVVx999FHg6oiQ0QKtaVo4HL58+XJNTU2xWPzpT39aU1MDu1q3bh0SEE4dqUxBYRJ+vx9guGmatbW1e/futSwrkUggIU+lUpiRxhv+8vn89OnT8/k8znTcZ7CeeKMuIgK/379w4UI0CwEUxE0DNIhTFZ1/lFLISBNCfvvb3x45ciQSiaBxyOPx/Mmf/AkcvizLxWIRj+8DQWlOdkTcAbLjxL+CyAXH7gcm6jfIHuOjcMbJPURAf6qqSqpfEYuyaMmSQCzNzlmlfFrxejyxgEfzlYzBsTGr3u+njuAyJhBKiEgYIa5NXJcQm1lWuVhmzA6FQtSvEaM0lkmXyJgsq+FwuCREm5uba2r6MmXBsiwqKK7rMvouWQJz9v4ZKDsAYw4cOIANinECmzZtmjt3biQSAXLDnfP10qTvvPPOgYGBQ4cOwVPlcrmtW7fOmTOHw13wQjAPND+XSiVwmxhjkUgkmUxOnz79jjvuaGxsxBaHc0a/wXi5HzY6j/QURYlEIoSQj33sY7/61a90XW9sbEwkEmfOnOnt7Y3FYrAcFF1isRjeNhKJFAqFp556Cuk0VN+XLFmCzrMJAh8+ywGWvGXLlvPnz1cef7xbHlxx27bT6TSKfGg1BxJRW1vb1NQ0derUKVOm1NbWclQSKD3CAQ5rYbIa4IbR0VHTNJubm23b/sEPfoAJymhGKJVK//k//+fr7WCpjGr5UT7Bm/DHyr91pQP4nUz6vZ20uVxuApO+MOSoQuLtfQOzp2utjfMcN17K9EjlcjjglSQ56JfdspXrMZgkaN6Weq/HMPO2YziOJRIqy1SmgksshzmGaQZDUa8WNXRrNFdwcpaoyKI2NRaf747SC6fcg2e6z5zM5DPEcjVJDglMIg5h1BZcS2Iio8wx89nU791LA5k8e/bsnj17gHhjYsFdd93V1tYGR4FoEM78ek26qanpjjvu6OzsRHCoadqRI0e6u7vnzJkDs+Q1JJ5xDQ0NvfXWWxw0yufzt91228033yzLci6Xg3uHb5/gOfLjiTtwr9crSdKdd955/PjxkydPgpp28eLFnTt3Pvjgg8DhTdOEwlwqlUIn2ejo6MGDB6H3ns/nFy1aNHfuXExcmYCtBQwcEEAmk0FdgJPGeDKIfY/6rSRJHR0dM2bM8Pv94XB46dKluOG8PYvjapzzxyNzLHK11wAOCbv91KlTR48ePXXqVHNzM5C8e++9d/369dfrLTiVlXcf48rHewQ4cXDBvPNs0urSeEccjYwxkFrGe/GsttqeC4n/7/97dcFM8uinW1YtbYjH47RYLOXSimCJgiaIcjAaJYrkmOVMJhMIq4zYjDkCoYJABVESGEPopZfLRqHIRCUYDCqyx3KdskG6z58/fS6za//wnuPkUoKUCRE0KgiCS6ht24LI+B3RdR3Vo9+3SRuGsXfvXswSAVC5evXq1tZWgLF4eLwv5Xrfv1wuz507d+XKlTt27BBFMRQKDQ4Ovvnmm7NmzeKVVexyROyKopw4cSKXy3m9XjRmzJ8/f/369QCQwe3llCmY/XiIK7Y4V5LDQ49EIhs2bOjq6kokEvF4XNf1N99889Of/jTKGX6/H8YQCASQzYIBalkWqKP3338/R/vHI9ji2QUCAYTWiqLMmjXr4sWLHHqAKCUk6I4ePYpUOR6P33bbbbfeeitcNxIibsm81Tefz+NSYe38oUiSBK4rHiiqwW+//fb3vve9gYEBjGezLGv58uX33XcfALbrzY25y+VUebAYxjNpnGu8HD2ZJn3NXhwbG5vg+xzrZ2qoOdpYv/vSwJ7/kW6IjN5/780P3X+vI5wP+bOqlLZLSdcak2zqMtGlplSWJEdwGaHUpoJDXEpclxCXCEHL9pUtryBGLVZrmJ5svpjNev76uzuSZXEkIWRMqvnjEU+N5RDbsjVKDMOQFZc5CnEJkZkuWMlS+vdt0ugHeOedd2KxGDjYmqatX78e1R24Gpy4MIwPrENcs3RdD4VCd9111+HDh4vFYiaTUVV1x44dDzzwQG1tLUYRoBYFhjljbM+ePSBjlctlXddvu+22uro6dP9z7VQUbyeAW3gDI+wfKS4OkSVLlnR0dEBzTpKky5cvnzlzZt68ebBGSZJwHxzHOXDgwLFjx4LBYKFQEAQBSPv3vvc9LlzzviaN4OLWW28NBoPAotvb2zs6OkKhUH19fX19fW1tbTwej0ajfr//7rvv5hi4pmmxWAwFNp6M8C5rOCQw57mS2TXEZ7hNOIMTJ0688MILKJ22tbVdunRpzpw5ixYt+v73v39jMpUgxguCAFiOUlpfX//II4+Md//BS+e1aC5HMZleGkcdvPR4dRQU6AYGBqx8Nh5Wh4byTzyx89Xnd87pICtvJiuW1deEZEqpQAVZUjVJJrpNBEGQVEJsQsoEPoeyQi6naHVhXziXJ0ePHt256/LBw2QwTbKEMIHIihQOhIiq2Y5j28x1XSZQfp2OY0uygLT/n8FLnzp1amhoaMaMGcPDw4yxtra2OXPmYCdBR5HH3oBwr+v9wdmePn16R0dHZ2fn0NBQQ0NDMpk8ffp0TU0Ndglv1RRFcWBgoKurC/1JhJC6uroFCxYUi0UQyLFfAerwJvbxEBPsJ0StvOYEGv/q1av7+vrS6XQsFvN6va+99tr8+fPRL8E7OhKJxO7du4vFItCjYDB43333/eIXv9i+fTta38fb96jkzZgxA/CypmkzZ86cMWOGqqo4lcjVng2kvqi6lUqlwcHBVCpl2zZoAhzA5zIylatyEhvuHjA5nMJHjx799a9/3dnZ6fP5gsHgpUuX4vH4F77whUKhsHfvXpye1/UcUQBHsAPuDfCFCYjY0Kiv7H6bHJN+31x6gr5Wl1myIjBBcHw+J96QkyJJw+7Pks6j4pZjRP1hoSbMli+evmHNwhnTayWh7DhpVVVlRSNMLBpmySCOI1uiNpTK7T14eue+o90DGYsoTK1hXq8YEDUi2LYtisx13WI+5RojfsWrSbLsUJcZquhjlqM7jDDZlbwm+efol+7s7IR6ITTGV6xYwTlSsAFs3xtIpLEVdF1HBfjUqVOIFaPR6KFDh1asWAFGDbB0OMkjR45gr4DguWTJEgiwIXfF5oDxc3Wn8eAcdKHApK9hOyxYsOCll15KpVIQFTty5Ah2BRJ10Etqa2tXrFiRy+W6urocx1m7dm1HR0e5XK6pqUE1dAKqDI4/7ktB+YQpIuit1FpCmoCjCgU8cL+vKeyhasjPKT6JCVwOnuuizozEAQ0eqqqGQqFPfOIT8+bN2717N2p416tphwvjl82HqE9s0pzfRd4jETfJiPcErgZUZyoIINOWy2WBSpIkO44tKLJt2j096UT/yL5d+wgj+SyJBInPRzQvYS7JFkm+RByH2BJhEsmUSNklVBVFUSwahkuIpCiuw8qFgqxJgC4FUfbIHsFhxHlX6cJ1XfFDHGmTtS5fvhyLxSBmns/nAf8gRoXPKZfL2Oi8IHRdJo0wFbOBIpEIVGLOnTsH4Vt0d3GneurUqfr6+vPnzyP3mzVrFkwCOx6BA7fkCSgrvJ/xmgMdET4gbhBsQPbKZrNNTU1ow0aKEQgEVq1addNNN7355puHDh164IEHRkdHEVQPDg6OJ36KNnuPx8MFXlA556gByjncUeMOc94blPBAI+UOmVT0yaAFAocaD0BQewPrDpa/dOlSXdcTiUShUEgkEl/+8pdXrVqFvitc0vVqwvGPIxXSiBMksEh2kCxwY54kky5oXp864C+X9NHZsnbhB987s/EjY6nEjr7Os6n8mQKxCBFEyXD9A6qXUuoxBmRDsHxqJOQ1nazXIwsOpZRYrpRyiKlEaSyWJe6YS72WLWokZyjEIE7GdShxBdehxFYdQohhGUQmVHBkKgiEBEUqEkZd26SKEgxLxBEtSxWYQGzqjmmuYZlsmkIi5XSoTJoFsjDoLGiYEg6Hiz/+u/qHHy7FatOm7BBfuWx1WLJlFyTFIoSUZEIIkR2JsCt3w5Suz5EWCoWBgQFwgHO5XEdHBxozOP3YcRycgDeWBSBELJVKzc3NU6dO7erqwp5DIwGkjpE9QjHi8uXL2WwWnQaYUoKZJ0DmK/PkD/xelUQajsGC8+y67qpVq1555RXeI9HV1dXc3AxLRmcVNI8kSdq4cePmzZth/I899hh0hWKx2N///d8PDQ3BNm6//fYVK1bgvECZPRQK4TACsYxryFbCXZTS5ubm3t5e/CSTyViW5fF4yuUyov3KV6LmZ5rm6OjohQsX0un0o48+WiqVMJUJ3hiHEe7PlClT/viP//gf/uEfvvjFL65YsQLnFx4lgqNCofDDH/4QHXL49QluLEjKqqq+8MILb731Fg6gCdq2uIiaJEnBYBCICcg2v6tJ+/0qY4RSGvAH7K7u/v5+78iIZeuLFi2aJrtLNTVXlvsHsud7Ukndcl23LlZXKpUSZqlgOEzRZFHCkUOpXHnMXEMtcIQKkxYdQoisyoIgCKIrMsIcx7VsyzQcx1H8UcdxHNugrkWYoQhEllxCSFNTYGYs2hGLNwpC3HSjhisUrWQyaff01KfTLFaj67qs+TRNNoumJIuETA4XN51OY7chzEa0ht0/Wbk6xwjQk8AdVDabhUYPPhqpWqFQAAajqipEfHjYPCnXgyMGGAF3MoIg5PN5juVwfUIwroGZQRZO0zQAVIqixONxiBYJghAKhVpaWjh6B1+NMj7oLlxYGjgWj7pDoRAkFoB7o3ML6QCkGvP5PDgqIHuPjIzgZXV1dXfccQcwNty6963D//mf//n06dM1TeMa4zhioLvU2NhYSTqYWC4Oz66uri4YDCKqmtg+KxkEHzJx+1AmzTRi5836XF7x28bbO0Kd+8LdXT6/lBwoNkckMR5R5IBJrXKdSzwKDTW8lrjckyaDCSdvOS4zBZor66ToEFEmZVEoycRQqC24VKKiyAghzOMnhBDqioQI1JUIUalDCLFMU7KJTIlMiUqpIouiJiouDQ5fDhKiiaTOJzZGw1Pj8aZYMOrzjPRfiiqCpzgq6bqil3yM+KggiMLZ/YfJsuM+f7TWlW0hoCiK6RRUb8AkxBSJIRHCJEMUCHFd6hJCtOvMdoeHh5HwYKNDb2DSOeQwG1AOUVB1XXd0dDQajWIngWA0NjYG0wIBg7dMfpg07EMu7Cpkm9xuBUEAs4Wrf3Elqcq7wSUK4TMhfsCDWDSoofzGa8XolEI7N1d3rqS4QVcURlUoFCDVkkgkTp8+nUgkBgYG0BnOpU4R46DCXCgU4vE4ovrx6vDxeBz68DgmoK8I9jXXOeMVpgmIpTztr5TQncCr8xuL8BuaOR8Y8H8oky6VTGpZEnGIrnd2dpYKhZgoKorSGFazrpHK5ZirS0SWRB+j1DCMtra2oGFP18uuokr+gECVQtEs5PXDZzqLlIrUJsRybN2yXNMirnvFhmBOjLqEEEIdQgilhLnEcYkiU5/PVxuNxWKxiMd/a12zUirrpSItFgVD97iurutjeslxHMNwCbEU0ySmKdiOQAVRFHN27tKJE9OX3eSva0ldFXYnlJJJ0g5NpVKc3wdc98ZgsAmKZNxLQx4A9oyZEnwn4TVjY2Mc+kKOzUVLJut6uMcA5Zt3RyWTSVgOvArfeTByONhK3XVADMiQUXoFuAXcAX/nQtF8CDGOzsoedag4ALU5evRof39/Op3OZDKRSISPi8BvIQdGVQzWNTw8DP1wzAB53zo8QiGcBagVQ3QBqBW/HjyUCYqCYOCg5I5v/QFsbUnCh0JMFpnd5LDHErSohtUp2TLp6iqc7aw1Ch4fEyRLIRK1XGq5lBqaRhWhyHKlcvmSJ+FpFxVRklTVK6UV6ohuybYs9kg4bMuCrUm2RyaarCiKIAuCIHiy2P2V1+qKjCiSaOuGnssZxRKxLTmre/SkLGczl48QQkSHqS6VGVWoKIlUEIREekyWZVmTJUlyvKpt25bLbEobSd55eze59WbaXCdalqNrxEfLkum4yKIFwgSBEZERQlxCiH2dFAKQNziMiYRqEme1cM0QMBa5Q4CADgJ+TmUBfxvmxIPtSZ83guMDSAF3JlzKi3se/nPuo3DW4KoQR2CwGSg6sLRgMAgdD4DegMqSyaTf7y+VSqlUamBgoK+vr7e3d2hoCDD75cuXAT1aloVJPbFYDFhX5eABPpgtHo/H4/HGxsZ4PB4IBCCugFP4vXX4QCDAWyZREoNkCo4hPvuFHxPjBd6Y8Ygvzg/9CUwUFQeugQvZyQ/cVB9WTtDr8bIxu/v48UwmU3vlwwzHsXC7UT6xXCa4LqVEFEUqy1QQTNMsGCXXJLIjCoIie7wOZY7j6LpjmmXGGDxzxJDe16RVWRIZEQnxeDyCq1CHIY1xJIdSKpIryLZh22XHwlM0TdNyLcuyHMIYY6oka5rmuFJPIhE4d65++UqqBCzT8nn8juMQOmleC46Ix10Ixiad0AIeFR/BAbeDj+ZFEfwE11CpEzC5iQAif7gp/k157Z3LCXCnjQiZkx8re9E4NZIXyRBnQrsP2mkDAwMvvvjiqVOn4JYB3XOfj88CagARxUpeNCAGv9/f2Ng4Y8aMxsbGOXPmoEyA8jWGK3Jq1/vW4ZHAo14NgwSRHoVxHkOhsjtegMa/Pj/UPnABYOfq5Zyj+ruadIjqKsnS/kvFnTum5TKqaOYUh9qCY0uaFCpTOcfKumMpihKXvEzWLZoVSUEigsREWXQVWdRUSRW0UmHUT4hDqU0ZmisY9EB87y0dM0KIntWJKIqiREWRUOIIruVYrusKKtpZRFsQGBEJEZkjM8ZGLZ1ZtihKPkUTmWCVdENndtlSJFZfzI0eP1y//Gb/3HlpSTJUxTQcjQmCKwlMEl1CqCu6RGLODXhpPCEkOXi6E7dD3IBL5G/Ldby4KCf+whNFoLKwukqMahLreVy0oDJ84GaMDc1jBz4o8xp6NrYm2ic5+w0LfRQwRYQh6XT61VdfxefysWGVMoxQFEmlUo7j1NXVYYLqypUra2pqpkyZAkHCSqU3jj8jpkWwAFjxvXV4dCLypi50eqBDG7Afp6xwvc3xKggIvIHeV2oYv++yLCuTySD+55zQDySQfdh+aV3XPZlMb2/vDEUhjnnl6m2G76woiiDIkiTRsm6YpuQjgiBQQkVRFKhAHWKapmlZPo+XXDVplzBu0mU6UV0U3pgyIggClQRCSMbOE0IEIlBKBSYQQigTCCGq6jEMyzRNiVCRSoBqPB4PGJQXh4bifX318xeIVLwxifmJrQ6+qHKs1CSaNLnae8R9GnJO2Cq8N14Mzgl2P980k/tleVs1LomLB10z4xZnCnYwb3WqHNODwg+QcLBT8c6YZ4iJH6ZpxmIxdGLy7JrzXjmzHTlIoVCYNm3apz/96VtvvZXnotzGKkcLILDCHFVoDEN38X3r8MDbQYCBr+aCh/xA5zMAESO8733DF+Rct8qAZTwYEqcMvi8OvolL2deaNNB/Hgvhl0VR9Bk5IV84/9wLU4v6FI9YNpnm9xQKhYAjOdls0BP0CSRn5BXVbXCcXK6c1bxm2XQdRhRKRcGktqsJSlBJuY5pmqZpM8YERZFlmQmUMVExBPlKqnW1VcVh4Fc4jmNYpuM4Lnk3EwsRzXVdx7UqSLyEUurqpkxFUREVRbGJazLXFExbID7FL5KIPaIf3vLW3es2eXyeEnFFSSA2cQXiMmrIxBUEQojEiMgIvU4l/JqaGuxIEJgymQzOkfFKjrwBhufJnGSGsz+dTpumWV9fD209JFG5XC4cDudyuVAoBKVe6IHxxmZUWdrb2/m8DngG3KAJ+mFhXSBaQh4IpSNwWkArQi8KKJPpdLqmpiaTyQAlQh24VCphoLfX683lcth/kUgkk8lks9lvfetbsiyjzbOSHgtFVLBTtm/ffvLkSdwKOEa47sbGxkcffbS+vh4dOKIoYjjetGnTWlpaYrHYnDlzHnvsMeDqSKS5ikY+n4/FYoqiZDKZUCiUTqdfeeWVDRs2gE4HmQQAV/ju71uHh/LJNV1TaKioBKVt20YhfQJEmn9ZLgKHJ+Xz+QYGBlChAIqGae1QOw4Gg3golNJIJDLBvN5rTZrPH+aH05VZvoGAcaYzk8lQwxhIjdqOEyWa4zjxUCyTLliWJaiyoiiSZDPbxtdRFIXYLsdZr8RRoigIAtwJE0XGmGFbluWo1EPJu9kFpZRQAnIFIYQhOScCEkXGmCi9G7xx6WlBECzjioyraZqCIgmCYFhmLlcMWR6v6gvUxgqiONbfH12wKGfpjkMVOjlcUUjqIS5CrRgg7QR9yCjYYK9AxxPl5eHhYVgCtDIymUxLSwvuAwqnyWQSCmFo8OIAFQIzjp2A42HbdjgchljKxNLz8IFwVh6PB+jU6dOnISEOFUGfzxcIBKC4ggMCBskFoaPRKGwAjwNIEiGkt7f3zJkzhmHU1tbm83lO1UCzJNfoTKVS6XRalmUgfJWN5ZIkrVq1Kh6PB4PB2trampoaiKgBvrYsq7m5ubu7G8Dk4OAgD1MbGxtxcHg8nlwut23btt/+9rfvvPPOunXr1qxZ4/P58L0wBOYG+ALxeLxcLgMqx7l5TSvINa/ngodcYh0K5F6vt76+Hk/BsixU7NPpNFQls9ksY6yjowPH5XUE3uPNH84Xfb94+zJzIh2LN+RKSdHOJamRGR6aHWmw7KQiUMmxTcfSXLss2GJQ9RT9sizLrmMYhigTxljRNbyili8WKCGqS0RBFWWJEslgmskcpuoOpYxQiVDCBJExJlCJMUGQGDA016HEoZSKsiQIwoA7KClElQWFqqLj0LJpFZhgkJpAVBI1SxALtmvbIlM1UXYc6qQaG046JC0rvSP54TcPfG7xzSJxJYXKJUaYywhxGDEoIYSoDiGQO7qeBe/Ei6UjIyOQpBzv9XgwnJ0CnWDbtt95552XXnppwYIFH//4x1F5CofD2CIIoDB2xzRNfl6AUwk4FLUfx3EA9vIJ78PDw62trRNHa5VJaSAQME1zeHj4xz/+8fTp09evX9/e3u7z+TjMxhGvS5cu8ZhWFMXm5ma4OI5y4SKhd42qNVS+EEcUCgVAzQinoYgE4BqNSpDyQpfIpz71KR5ogNQJJwlYePbs2V1dXZhEcfHiRZg0usFQPVZV9dixY3v37s1kMul02nGcSCQCKj5IZjdwlEPR8fnnn4d94iujMWa8BBbB1Llz5/L5PAgzYE9ns1kOyAEBxbyhkZERHJqQVeRToq4jl37f+cNEYM8991xm71sLiRQg9tK5Le0dLcGWlp7TF+s1TygSM3JZw2aiKNq6jZPVsixFEvl2cSwHh5PjONQCvuFS4rqiKIiCBUo6oYQRwgSREcao4BJCrvTKvAur2LYoiv6AQAghLrUsy7GZwsAH1vLpvCRakuaXZdVhrKzrkkeNxcL7zp8/Njw6wsgZywyOJTZ99lNKLAjR70nx0giQsDNA9hgYGJg2bdp4VgTDQ2aI7ZvNZo8cOfLss8/u37+/v78/GAzecsstaBKE8ZOr6j/ZbBaaG/l8PhgMQsmM43PAb2fPnn3o0CHgZNlstru7u7W1dQJFVx6gIUWHqNjWrVtPnz4NJdA/+IM/iMfjyWQSUz5w5Y7jXLp0ifddqara3NyMmJlHpDDv/v5+WZZR9eEaPa7rNjc3JxIJwFQ4FHw+H4rAeJnX60XhZ2BgAGPD+P7k9QVssJkzZ6JnRhCE/v5+BPY+nw9TB+rq6iBLdu7cucbGxmw2GwwGkYHDpDkEdb2Pvlgsvvjii3wcB9Ki8dJjZNqQeQFUBuIwTJpTvkHXB7c3kUggLIe2OXQjJkZGpPeygionpOLOHurOHBoupUh0JB5NZ4a3jJSVsTNGIrls5oxZtQ1Ta2JjTr8ai7dNm5JNjxVGBhYGVf3ykE+VVFVSGZFkkneZI1iSSBWHSoIiMJFR4hDRUERBEKhJBZcwxggjhDjElURCCZHKRlmRPaIquoJm25ZuWxYj1GHNiYAkSbailkUhL9KUrJiK19B85lRvT6GYUVShtr7XLO4929U5eJa54iwSGDUdQfJniCAMJTovDs3zegkhEUsmxHUIcSghhBJCvBYlhOSvMx5XVbWpqQnNRnAg/f39bW1t4xGD0A8IigLu8MDAwM6dO8+fPz9t2rRMJvPcc8/V1tbGYjGk5UCPHMcZHBzkWpmu67a2tvKhapVkkjlz5kCL0+fzQel24qoJEnugO5ZlYa7N1q1bp0+fnk6nT506tXPnzjvuuAPAG8exx8bGBgcH4VWQimOmbOXoUtyBu+++e+XKlTg1oHyC3VUoFP7xH//x+PHjcOb33XffZz7zGUVRRkdHoYsG741uEIil4CeVzZUgXTc1NcGuIOGSTqcxAQMHbjab3bp16/Hjx5H0Uko3bNiwatUq5BrBYJAxBlzgeqMzxhiuCtN2UUKbuPiHvAkUVJ/Ph5ANJztvBQXzt6urK51OA3KHIDxSrYnlCqVrTpFKTBJG7jjOiy++WCgUfP6g1+stlVVd15lMZJmc6Lo4dvHSaVXW8+amj6zYdPfdRFPI6FDx2P5j/cPACZhpCYII7NF0HJGIMrk6NtG2SzYhhIS8EnWY67oCI4CyRSpQIvkUH2Gi5Ti6YZu2RWUJ45flkWHgRiWBipHI9OnT/XMWkGkziN+/5Ze/2vLyKwMWKfjEhOvQgFJXX+8O5uORuOwNeS17wCnv2bNn5qyWYDBIrMkheFFK586d29nZWSqVAGBcvHhx3bp1E1QQMMVC13WURmtqahYuXDg4OAj1jEQi8bOf/QwaXXB6qqqOjo6eP38e0Rq20aJFi8Du5vKXMKHW1lbE7QBguru7U6kUNsR418N79wA+tba2Ll269MKFC4qiJJPJLVu2MMY2b95cX1+fSqWwyTo7O/P5PKBgSZLa29sRI3D4l4PtmH0DRYRK/BXeyTAMGDBePzIyEgwGAYV6vV6wWXO5nK7rYIaDZAYLAYYM0K65uXlgYADf5fz588uXLy+VSoAStm7d+sYbb8B6E4nEww8/PHfuXBy+fJT39bZVgdWTy+UaGhrwUCC0PMHRySnr/AhGfS4cDouiODg4qKpqLBaDakU+n3/hhReQiUCDfcaMGR9oz9eaNK924BBFNmIYxtFf/qghkyhqNEWFbEA2DVcSBTlYE/Koo0XdNopFSppa5iVWbvaGw/l8viFIxf37jXKZKrJdznuZ6lEodWxVlUVGmGXZtlliruVVRZ9q+b3HSlcqLq7rEiIIVGYCYaIselRXkC3Kio5rElfye2KxmCcSq79pk7eurrapoTYc1BVatq2M5TDGAh7fidPnjh88nk6ng6GIYll6vjBcTAwwv1cLy2OOIEgF031tyxuf/fT9/ohGSIEQ4lCiy1c8syMK4vUPfmWM3XTTTS+//DLCaUmSDh06tHHjxqampvGiXHhdXpaor6/fvHkzpfT73/++aZo+n+/QoUNIQZubm2F1ly9fPnnyJG8zrK2tXbhwYWUJjYucYajt4OBguVz2+/2XLl06efIkn9c9QRsGnHAwGFy5cmUsFvvGN76RzWZd1x0ZGdm6dWsgELj11lvh0lOp1Ntvvw0TRRF+1apV5GqzMVJuQPFwO5DCRSCAtn6ACNyRcDAZPpyXfwE4oYwE4Q1O0kLuDeliSZLmzp2bTCbx0SdOnFi2bBkC+N27d7/66qsgk5imuWzZss985jO5XG5kZAR4cj6ft207GAxe75BdUA8+9rGPgSKKQHqCujFPafmN0jQNuUY6nf7JT35i2/bs2bPz+bxhGIODg2fPnsVvSZI0bdo06F594OkjvbfeSN4zf3hgYMDj8aSNXDmVYh6FCoIkSaokm6YpMBYMBmOxWGtraywWM1CMmTPH5/MVDEMQBNNxrrB8mV0sFgWXCQ6VJDUajUZaW0nHdDKlaQENEte98h8RCJWJSIkoE9cm4RiJR4k/QERKREIkiageZgSY3y9oikUZcrCIP6gpmmvbYBSUSiVJUVVV1TTNJi4VvaqsllIp9FefPXsWzb0xMjmETcbYzJkzo9EopRTjKTs7O8+cOTOeSXPcCDBSJpNB9L5x48aBgYHXXnutVCq1t7cfOXIkm83+9V//Nfb3wMBAd3c3StCMsZqampaWFn5m4+fYlPF4vKmpaWRkBGDs+fPnT506tXDhwvEQO7AMgKiDrhQIBNra2h588MFnn30WOrinTp1yXTcejy9YsKBQKGQymc7OTjxZvGDBggXcM3N+G8wbG90wDN5NhbIw/DNwJmgqYTpfPp/HjC5gZvh2QAQ5U4VP2wFlGrHJgQMHUODp6emBPz979uxvfvObM2fOzJ49u6enR1GUr3zlKzj+YrGYIAgYZw1nfr0gGTTM7r77btw6jP7lzPD3Lhz3vC2kcmCQpmkXLlzo6ek5f/786OhoLBZD9QEUmtra2lmzZkUiEYQV1+GlObERURz0Yn/0ox+NCjohRPIIAUIIgjfTIqblOI5uWZISHB1NzV+8JJ3OhkIhmVFCppzXve1mQTfzTCOG4JYLXoWKHkKJQFylbIikv6w0zdzg/9O/tG1XNLPjUSDf9+eVgipXNCYdYpZt27aXLr8l/T//LhCLWbYtMNewTK/Xaxhp08n66lXHSSm67lX8T/7wx1//+tdNVdV1XRBsypi3ZPt8Pqp4R0dHx5OYn4Cqqev6nXfe+fjjj+NJxGKxn//85+3t7e3t7Ug7ofyMARHX0BXRiYkg+YEHHtB1fevWrcViEVXc//W//td//a//1XGcV1999fLly6tWrbp8+bIoips3b0ZMjocFFJRvynXr1vX29mLyo6ZpBw4cWLZs2c0332zbNjwbYlrUZuHkAaCEQiFsVsbYLbfcYtv2c88919PTU19ff/bs2V/+8pcdHR0+n++nP/0p6uSWZaXT6Y0bN3LyOQ5Zjt9WNiFxIX5ydd5FsVgEyRFigyjbAhdELs1DVt7DzI9RPgEXXceLFi364Q9/GA6HM5nMiRMnRkZGFEX5y7/8S13X29vbu7q6WlpavvrVr3LdFRwl6O7G+XK9hBzAvQCDkQXg0JmAasJ9J/9qSEBUVb355puHh4cLhUIkEsGM8VQqhQ7QefPm3XXXXVzHAneJM1j5AYeQXnpvYJDL5XCAIZE+cODAB2aS2I78A67Xy91AGjOeafFu22skIHAWgohTLBZRfUHFHxbFZ5HfwCRRRJ5tbW0dHR3Hjh3DP0ul0vbt22VZxtwpDHnWNA0RWiWxkb8PKBx33nmnrutHjx7F4Mh0Ov3iiy/mcrlsNtva2prJZEzTvOmmm6ZNmzaB92hvb589e/bly5dhpclk8sUXX2xoaGhpafH7/bquA0jncyoq2V2cDBMOhzds2HD58mXG2MjIyJQpU7q7u//7f//vy5YtGx4ejsViSGtnzZq1ZMmSSSScIsBGSRVhNurP4z0agOQ+n2/GjBl9fX0YRfbaa6+h41KSpEQi0d7eftddd82ZMwdnLmCqUChUW1tbKBTAJJ1gcuDvdZXLZUzqqK2tRZUeBARN02bMmLFy5co5c+ZMnz69VCplMplKdUFsV9gdL4Zfa9JcwRDnBw68D6Q3g6P3ruiZq/vtfNDSmZBnxNZcy6I6FUWBUUKISA3ZJRqlPievuTnbZaKkTNDEd11HA/DhSnVVPm0TriAQCGQymdOnTw8PD9fW1vJTE0Ug5Gw3AI/Ztt3S0rJq1aqhoSGMkvL5fG+++WZDQ0N9fT1oWIjTALpWghcc5wR7ZM6cOZhid/DgQfzKtm3bxsbG0Evc19dXX1+/bt26pqam8eAu27Zjsdgtt9xy4cKF7u5uMNsOHTo0d+5c0zRnzpyJe4Xjj49Qu6Ze6LoupAL/8A//EKMtent7W1tb0YQ8NjYWiURyuRzcy9KlSyeYiXUDhFPIpEB5C/5nAuoOTNHj8dxyyy3nzp3DV9u5cydObVmWA4HA5s2bN2zYIElSNpuFVz937lw6nW5vbwct9AaoJpO1/H5/IBC44447Zs6cCW8P+/T5fNFoNB6P40Enk0kgqTzMwVnAeaZ42T+JEIBRo8QKPsDRo0cnHgjCFeHxDD6MKOl458KHXxNcDDpsKr0NTJqzFHBsJRKJffv2aZoGxJg3GE8s7zbB50JpbOnSpcuWLcOYIVQRd+7cuX37dsSooIsC1MHthRdCDMYYa2lpgabv9OnT16xZ09LSAjeOOWxI/GRZvuWWW5YsWTJxQKjr+syZM9euXQtdwVgsFggEfvGLX+zcuXNkZAQpHPB2n8/H52/w2iyOGCBVpVLpwQcfDIVCcBTBYDCXyzmOgz/nzJmDMXeTRWjHFud6t4jnC4XCxDkkYulVq1bV1NTgxAQTNpfL+Xy+devWbd68ORAIDA8Po5bm8/lOnjz53HPP7d69G/5wsjphb2AlEolMJhMMBmfOnNne3j5r1qwFCxbMmjVr+vTpGH5QKpUKhUJfX9/Bgwf37dt3+fJlkHAAiAKa4X5Cei9XMRAIjIyMQH7lrbfeqqS8vi+RkOcz786zdlTF8vl1gwkWoyWNaoZNRCZSxkRGJFcmhKjUo1qKaqkus8fzxtd7OnAQ9Ur97CpxWhRFIC4cy7Esa+vWrQ899BDozXj9B07uneBzMZIyFoutW7duaGjo4MGDQ0NDfr//5MmTo6OjmUxmw4YNTU1NaETlpyRuHbelTCYDpxSPx9evX3/58uVUKoUSkd/vB3C1fv36e+65Bx5yvEAUdujz+VasWNHX17dt27ZkMhmLxVKp1J49ewzDWLly5ezZswG3QEiUV8I4Jg+wrbe3t6Ojo6am5g//8A+//e1vY4aG3+/HfZ45c+YnPvGJ9vZ2ENcma4ubpgnvigO3u7sbY9PH2w84s0BNwZ1BAUyW5Xg8fvvtt69fvx4/h0AFpJFOnjx58uTJvr6+hQsXfuITn/gXNGmIn4I0BqlDbBIcbVwH/uzZs2+88UaxWOzo6Fi3bt3KlSsDgQDAQkxcAPx5bRGrWCxCOQEua//+/aAKjbd1OEWBDx+5AS89niFd711GTQU5Kpxt5Qg1PtYcOcKBAwfS6TTyLq4Ue2NYAIg+yE5nzpx5zz33WJa1c+fOxsZGVVVBLe7t7V21atWCBQuCwSBgFT4oi+tyybKMAYgDAwOYqIpchrcc1tbWrlq1qr29fWJ9f5DGAbF88pOfxMhFWZZbWlqGh4dfeOGFnp6e2267beHChZDdAtwC6ARAC5hVhJCGhoahoSGPx/P22297vd7+/v5YLIbz0efzzZkzZ/ny5YSQkZERXPmkbHFAVoqi9PX17d+/f/v27RgAOp5rCQQCqqr29vbu27dvZGQEihRIQJYsWfLggw+i1QT8Wfxf8MkppefOnUsmk2vXrp02bdokBhrXu//hbDkpm0+Hr4Q2gALIsnzo0KG2tjYgmsiheGHvfTje6C8HoffcuXMTT3LldBSetcJsiIcO+4T6kiIxWWCyJctFYokiEYkrMkKpQAjJUpLVSNln2BbzO9J43u+6vDenWwD04uE3SiDIOkAw8Hq9o6OjZ8+enTVrFijNnHF9AybNK6ucvAVz7e3thWhRNpvdvXt3f3//uXPnamtrMYcVNUnee4zb2NfXd/Lkyf379587dy6Xy1Wq+YIO3dfXl0wmIdwzcToKE21qarr33ntt2z59+vTY2Bg+8dKlS319fdOmTbvlllsWLVqEi8Ql8cZJkBwOHjx46NChffv2wQxisRg/tYF1JxIJMKsnd5ePjY2NjIy8+eabhw8fPn78+LRp00AIH684dObMmaNHj+7cubNQKHDBINwHlNAghI54HiGPYRhoFBMEgaMq/1ImTa6KaoJTyOX4eRs8pn+MjY35/f5YLBaJRBBbIazDb+EdpGvgJRCD/H7/8PDwiRMn4NMm7uDhsC0vGN5ALnpd3nu8j+AdvPyScLzx6e2QwgGoQynt6emZMmUK7x+6YbUwaPEAhUqn05qmrVq1SlGU73//+4ODg+AkSpIE5MyyrKeffjoWi02ZMqWurg49T5lMJp/P53K5S5cuWZYFVV1sR13X8cD8fj+q1tOnT0d5abz7gN/CqIBcLnfTTTfFYrFvfvOb/f396FVCBfjcuXM9PT2/+MUvamtrw+FwbW0tOsCKxWIqlcrn84cPH4Zbw7nj9XpTqVQgEAiHw4ZhJJPJw4cP79mzZ9myZZFIZLJcNI7yt99++5VXXjl+/DhG1VNKu7q6Fi9e/L6vP3r06JYtW/r6+sbGxjo6OsDrBjaG8xFFXS7uXSqV0ul0KpVCQIs9gETpX8SksS0h/FBZRcYe4DNY4XQRbMPUKzV2+dhA6ZrTDlRS0Nxee+01hAGIVyFe19raOjQ0BBZHoVBADwp8FHpcKaWE5f00k88mWqPeYl4XLcdvGhKjlLFQyFe0dNGnOSKT80Oxcj/x1JVN5bpMfYKoAbATKv6wBABjjDG017W0tKRSKdyRF1544cEHH8S3GB0dRfbI+TbX9blcphvciXK5PG/evK997Ws7duzYvn07MHA09CLOh3lXNsGDZsz5kjiDcfHr1q17+eWXx8bGWltbL168+Mtf/rKtrS0ajaKBGZ/Ox6+Dn8DV6oHSxePxb37zmz/+8Y87Ozu7u7vB+rQsC6To4eHh4eHhs2fPVvbhEUKQbPMMC62agMfQcGLb9s9+9rMpU6ZMmTJlApPACct7OTguyOUyEWRqmjY8PHzs2LHf/OY3iAKam5sRNq5du7atrQ1jOlzXHRsbg7jFqVOn3nrrrV27dqGfKRgM9vb2olB36dIlTdNSqRSG9SDwhC5FOBx+5ZVX0N0pSdKSJUvQTT1eUyQSK86Bhy2A3I4CPkYRoyvuBrjilUp1uOHk6rxnVNGBcXZ3dxeLxVAoVCwW58+f7zgOIJJK3cX3gcdgmYIgZLPZZDLJ3xdVu/r6+sHBQa7bxgtFwCTr6+uvkDpFEZEh4odIOGK7DrEc19YlSTKLjsOKZcXjsyximkR1bwyUet9oE+BwZdwOD4y0Gc8YeSZjLJFIwHXjYU8w0uXGVk1NzZo1a2Kx2LFjxzo7O4eHhyHyWJm0cxhfEIRIJIIzKJ1OY0MvW7Zs3rx5IPe+9NJLY2NjTU1N3d3djz/++H/4D/8BaTDPxDBoAgfB+17Pl770pX379u3cufPixYtgoYB1jCjsmuH12F5o6kZnb1tb21133XXbbbft3bv37//+74EIBIPBH/3oR4FAYOrUqeOFObysgMoCThwcYUDdo9FoJpN5+eWXt23bNjw8jJehuWXhwoUbNmxYvHgxZu5AhBQknBdffHHXrl3Dw8OoQmWzWa/Xu379+nvvvbe/v/873/kOqON79+6NRCKPPPII6vNgU3d2diJJDAaDaB2dIMrgdT5O4eQMEwgngLGPESgY8TEp+0eSJK5/PDAwoOt6JBLxeDzoPEGtC6ctR4Lepy4Napssy/39/f39/fhl3hvg8XiGh4fj8TiCN16IhmzyrFmzkL+RnF6omyEW/QXLyGTHYjQgOowZZjikCoIwYqesgCp5Y6HQFGJpjiG4bHJugSzLQ0NDlZAYr2xBrMPj8YyNjWHEKSGkv79/aGho+vTpXFyKn5GTsjwez6xZs2bOnLlixYpTp04dP3789OnTg4ODXI8S1shNGltHluU5c+bMnTt3wYIFbW1tEOWQJOnixYv79u2D2b/99tuLFy9es2YNeg+RGZKr8roTbM0VK1YsXrwYo7CPHj2aSCSwESs49lcY/jgKc7mcpmmzZ89eu3bt0qVLEYevXr368OHDO3bsCAQCvb29juO88sorX/7ylydoC0Hmf4XeJEm2bedyOfw9n8/D2sGX9Pl86Hasq6tbunTprbfeunDhQgi2QNnTMIznnnvujTfeACcP5DxwcletWrVmzZrW1tZ4PH7PPfe8/vrrsVgsnU7v2bOnrq4OYia2bW/ZsgWtqcViccGCBcA+JgjNvF4vaOoANSDOgQqf3+8fHBysqamBZApXHZyU/YPurmAw2N/f/+abbwKbNE0TKjqVg7JIhRjLtYRQ6NF4PJ7+/v5kMsmFbBHTjoyMLFmyRBCEvr4+xAO8DNPd3b127dorhZkpU+796EdJxiLJRPrcaVYynILhFHXLzGma5okFtca4L9LobW8nquo4DqOT07csCMLFixe5n+ECQFOnTgXXAik0UhfHcVKpVH9/f3t7O2gSkyt2DW4AZC6DweC6detuvfXW4eHh/v7+ffv2oZAI+hoPStFuMWPGjIaGBhTY+QynSCSyadOmoaGhwcHB2traUqn0zDPPNDY2Tp06FVQ/PFrodSH4f1/MCWpEbW1tM2bM+OQnPzkwMDA4OAjG25Xj+Oo0NkEQZs+ePWfOnLa2Npwa2K84Hx944IGBgQGI4NfV1b399tstLS0f+chHxkOwAcvxdiDc+Z/85Cc9PT3RaBSxIed7UEqXL1/+0Y9+dNGiRVD5RZFidHT06aef3rlzZyaTwYYGoTocDnd0dGzatGnp0qVQIPT7/ffee++BAwcwNTmdTj/11FMXL15csGCBZVmvvvpqY2NjPp83TXPhwoVA8qPR6HiBNxBKcF24MLCmaUja33jjjUKhMG/ePMAN4CBOFqsMAw8OHDjQ2dkJGsXo6Ojy5cvRicmFIidij3HQvK+vDzx73hmv6zpYBydOnMCzRNaOXzlz5gyHxy57/cXV62Z5Y8R19VxKUbxRQxBNh4iMiKwoFmVZtmxSJv6hcHyskOlwJseQXNft6uri/d48sp01a9bs2bPRDIgwBEGj4zi9vb1AF/jwh0m06kgkgoQTHgaj4cLh8KpVq6ARzwejcHkwr9eLp4XmHqSdoKziRHjyySdTqZQsy5cvXx4dHQ2FQl6vF6EXsIMJvHRLSwvkMlDDBLOttbV106ZNQAf5xfAqPS4e+ioIAUZHRyVJam5uvv/++7/5zW+2tbUNDQ1pmrZ9+/bxTHq8dfr0aVEUQ6EQumi8Xm9DQ8P06dMfeughzH+FVEhNTc3Jkydfeumlnp4eiAfw2gqofg8++OCCBQumT59eLBZBa0Pr8uc///lf//rXXV1diMx37NgBZYhEItHY2JjJZGbPnr1o0SIwtCcuUgIjBGYUCATg4TGnaufOnUePHm1oaECRDCneZBXzUFYAXxU0Mo/Hs3TpUpwdyJhwYXwKh3QNzMPVZDE3DI4C4KqiKFOnTr3nnnsEQfjNb34Dj8fxpDNnziB6EQRBlkWv1+taFqpHHk9AFFzi6kQVCXU02RElSVZE4mpX2HzFyclgDcPo6uriKohcHHfu3LmrV69+4403du/ejUQa/1cQBOhy4DjjdazJCpwAQsqyXMnlgDhZZS7NvaKiKGj6gxw8mAZICnDNt91228WLF19//fVoNHrPPfdMnz49Go1WzhPHFx/vevr6+qLRKKRqs9ksZMCQS1dKhZCrYproqcCRgbwXjT043xcsWPDggw/+6le/ymQymzZtWrFixQQBJE5/XKEkSfDMmzdv3rFjx+XLl0GcWrx48aJFi+bNm5dOp+vr6yHTs2XLlr1792KeCSg6UCBDynD77bd/7nOfA7gDHVJEKIjhV69e7fP5nnnmmePHj2PWD1TN4vH48PCwoih33313S0tLNpuNxWITFKUBpiLTxKNpaGg4dOhQPB4HzJTP5zH3D3D6ZEm4Q60JymSCIKRSKcMw5s2b19HRgbimcv4Wd0XXmjQOv3K53N/fX8kbcxwnGo1+6Utfam1tnT9/PneDSJMcx+nu7uaMH1p2ZEfMmq5jC6mApjA1SKhIZY0R17XS1BJcIWaJlLhRxiJModScrEClu7ubA6q8YD5//vyOjo6HHnrowoULaL7DIUUpvXTpEtIkAIYc25+U6wmHw6B2A+5GtM+nOnBsDC4awBgXuMWYdRwHOJuy2WxdXd2dd94J8dD77ruvrq7uXWbv1TrcFWrA+y1og4BEFYvFAAcC3bmGacs5DLzjhxN4sM+AnN1333179+5dsmTJxo0bly1bNp5yJf91TmQQRRHR8pkzZ+bMmbN69eoZM2ZMmzYN2E8sFgORE01I+/fvT6VSTU1N8CuZTGZsbGzlypWf/vSnZ82aBZU1cOlw65LJJCEEmjDz58+Hbu7Q0BC5Op1LluVQKITWNJyAEDCboKLh9XpxTIB9uGbNGsuyLl++DDuHz0RiwmGq331B7SQUCiGy8Pv9M2bM+OhHP4o6FkhBVwQ/BYHzFKT3ssGAWECJAoAN4JNwOPzZz35WEISmpqZrpoG6rptMJhHACIJQ1Iter1eTZdsieRmNYKKmqSKxBXKlr010ReZeIWBTd3JMyLIsICXkn87HbG1tjUQi99xzz5NPPnnhwgWv1wvOMIaSotMYvm7iR3tjoCVQZVC7BUHgeC+nDcHOkYmBEwqPDeI0CJiolwQCgfb29k984hP19fW1tbUQqKgkG0xchEPux9XhgQVCHPcazXrOrsUzxQaA8QAlTSaTUCD+8z//c9u2Jy5i8UGTuDZ0R4ui+NGPfnTKlCkzZswIh8Ojo6OccQFIGRK8M2fOXL9+falUAjW9rq7uYx/72Lp16zDHe3h4GC2i0WgU8im4bNDsEQYvX768o6Pjt7/97fbt21HaTKVSK1euvO+++4LBIM6mXC43AXUnk8mATgNh1vr6+k2bNsXj8RdffPHSpUuwasCTaMKbRMQbGJau65IkbdiwYcWKFTfffDPY9QiXYKEoYl1pwgfwWEmvdRwnEAhs2LDh+PHjkEQaKqWbmpqefPxH82fNqY3EUsnkp+7/xOnjJx3H8flCqWxGkDVJkf/3P/5gw+23O44T8BA+SOWGCdsTIduSR9OUVGZAFEUqSq5Dvd5YKlU4evToAw884PPZplWWRSGTyTXUTa+vr39n3+7+/v6Wlpb9+/f/wR/8wenTp2fOnDkwMCBJUkdHxxtvvAFL5t35/2yD5qtrvIUwCrBCf3//0aNHz5w588ADD3i9XsyO5EykyvGx76WsIKlBKF4oFCB4VF9fj0OQD8rhs3iu9yLL5TKAEpg0MIjJmnDIIwggC5wyOPH7S+8N3wHb+Hw+EG4ymUx9S/1jjz22dOlSYjmpdEpRlE2bNl3oOovgUFEUh9BSqfTqq6/ec+89pVLZtg3u9iv79SYrx8AVwttTQSCMlstOba3/6aeftiyrVCqrmmRZps/nGR4efuihh9DcSwiZO3fuH//xH3//+9+/dOlSJBIZGxtDxgjgh/fi30B/ZXVN4uLqomBxNDc319TUrF27ljcS8gBnYlcBwI/L3aLGzlt0yFUK8w3HyYFAAOorlWFI5ZS/391Lcx/D5VA+cLyZ8L6ZD5AGdA4Eg8H/+PAf/pc/+H8isl/SiexIAW/4I2tvLxfKqqIQpouSKakFJmW3vvWTdLlL8I5UYi0c+7lmeMrvtIjH0Kmq+DVJlFjZQ0uC2Uf0xLaXHg8qKdcoekRLoI7fE3Ud5c7NH8c+KBaLXq/3oYceeuihh6LRaCKRUFW1sbExHA5DnADPY9LH01XXDfAL4I0RPQGjCYfDIAsheueF9AnshxOkebNgIBBAGQKZI0cfbswIM5lMsVgEzsqPCX6C/O4LYCen2XGRpg84CK75d6lUAn2/sbFREIT29vZ77rnnM5/5TDAUGhlO+FTN4/EQRpqamubPn3/mXJfH4ykYRU1TPdRNpUo7d+689957BVvGnarsQ57E4pAsC4ypjOmKLBvFgqpqkuRu27YtnzdisYDp5MGZMU0TeVQwqCBHdV03GAw+/PDDkiQ98cQT4AyiPwH0SdQbJ3E0dHXdwELcBPIPtK+R9mNmVWWxYOLzF7xADlVw6Iez2d4riXtdCxTxSqLr5EajSIq5bXMK0MSmJP7Zn/1ZZcADrAW8wlgsdv/99z/yyCNer0os23HssD9i6pZdcjUlFIs0PPPMFr83nsvofi3suIpP9maTpU/c+2lRlPg35FrqvHt5MpYqioJe0jXZaxZdjxZ1CuI3/+YfhvpGZeKXqGzqlLlKsWT+v//lT29atqysZyG7A9pGXV3dggULmpubJUlas2bN4sWLEX1hB5AJJ49V1z+Pl+YT2FFvB3+OC/HxKPcDA93KSdd4T8C9lfuTXM902MoFpJMz1bntketX9XjfBU0yfPd/Ml5q4rSlEh5D8g0uu+M4IyMjDQ0Nfr+/kM+6huUPhqgl5HJ5vxYUBSGdzq9as7pcLo+OjQSCnoKth8P+XCH78ssvz5u3gFUs/g0ni1XjOj5CiF5KR4I+xzRUST5+uPPBBx8EFdkTUJLplKx56ptant+ytbGx3jBTkKrj/FYcXsPDw6FQKBaLZbNZPkwcjVBVu/qXNWm0u+JhceVgPuqV55bkKqHgfd8H3LLKMZGwYQD4lYMs+Quua1XO0648YiaraALovnJwAk6NidOEa6dt8Hl/9fX1kEFKJBLBeNyUTVOQckaOyTQQFEq6wzT26Bc///jjj3tNv25aMlXtkqDn2M8f//Wf/EUzBvbiYSCTmUTYQFEIuMclw1ZVb8/Q0BPPPjuYz0uSJMiy61KLyvFozec+97nGxrjrmujCKRaLgFswjsjv99fV1YFwh8IJ6DiTJaBVXTe8oIIMRUFuh5U4NrfAynL3eKuyqImHyxGmG3POlVEtn0vDz44bOx3ed0EDozJF/zDw2z/x0qVSCaXFUqlUU1PT09MDxaxsuezxeAQilstl5hKvolIqSozatnv77bcnE6PJZJIP0XQc543dr4TD4UgkgpEr8I2cEP67r1g01t8/2lhfk0ymgsHggQMHPvOZRzKZDMYLFQoZ27YXLlz49NNPB0Jhy7I0D+VDHtPpNDh9KBT7/X7em4ZmQ3QmVO3qX3DxHJgLrfC8upKCxmsf41UoKmewVubek+VaeMtNJQmCd79MCvIPdBn0JF6TmxjrubYu/f6XTjzw4oQ6jNqEOoTahBBRpC+//PKf/elXei+NtLY2lUtmLpfz+ULTWqb++Mc/BrMPtFhEIwAweQEdROvh4eG6urrxzlcMHAFxB8eNruulQpExFoqEPX7/+UvnPvvYZw8dPhCOBNDrN3BhuLGp+e+/9Q/33nlXuVgKBAJlo2qi1fXvZf0TeGzc0IWAYOgSygi9+ich5XJp2eJlhWJh3/59jmWrimbbNqXixQsXmpqaampqeM8Tmma4xgC5qvjn8XgmSFzRAYP+MPQ8o7EhFosrsny5v79k6N/4n3/bda4rnUlRgWBEW2PzlMcefexTn3wg6A/ksjlCCBWq1JHqqpp0xfLYruw6EnMEwgRGKREZkQmTS7rr90UbmtrTaWv/3sP5vFvT0JZN6zXxwDvvvNPU1LRhwwbHcTKZTENDA8pjCB647v/EOTZv9gI0EgqF0OWXLw57fJKiBl747avP/vqV853d8WgLsTyuoQW02jtv/+jDD/1Ba8uUkl4UpLLXL9tWtdRcXVWTrsTQwMGmjGECNCWMEkKI5vXk8qWmhrqOjjn9Q0OXevoIoYokE1YuFAqnT5+WJGnlypXoR43H40Ckr7FVUJrHy1X4jHIw1K9IlvsV0zR37Hj76//jG8mxdLmshyJhQRBymczGj3zkP3zxizfdNM8yHcMsCYJdLBZlyVt90tVVNemKFxGTUMel8M8KdTXRVUVXYQaNal5a1mu9wk2zW/KDp84eORIR01lLqKur6+/vP3ToUCgUmjNnDsRuOCKPHj3M/pigzQAdbaIognM3MjJCCGlsbCyZzquvbf/zP/nL0b5+Ui4unNac6O3yGKmPb1z9nx97aPW6DZJLirkcpRKRJUZkSaiC2NVVNenKFzGXEMKIQIjAiEiIgAHrlBJZFGxLdx2jrrFuSmNdKT+Uy6WTJZLNZltaWizLeuuttyzLmjdvHvQ00KyLwt2HmaEF0ks2mwV5E3LNP/7JE9/97nf7ewcbampNXc8kRxtrA8uW3fSVr3xl8cqVRPaZ2QITBUGSqExCgZBlWtUnXV1Vk353lSXRFEVLUFyiuESkhFBqK6zsDZpCsUvyDUrmQTL2esO0vltnDjYGz+4514iCULlcLhQKnZ2dly5damlpwWAxVVXRTF/ZFv++n+u6LlBxLiS0Z8+eJ5544le/fufSmcHWKc3Joa66oN4Yc778RfnTn2iZ1jQgO++Qcr/osdVQnJJApqSaFpWoWX3S1fXvZH2oIpYJ0heTRVciTBAZocRWXMO1kqI7auS6ey++zfQBTRqzjeGmpqZX+v7o29/+9tmzZ6EKhD7kSCTyH//jf1y/fv306dMxLIIPTJygXo1W1Xg83tvb+6Mf/eiZZ57p7e3VrZrmqVPTA2eZMXrHLYG/+rOHfcpFVMtKpZKgLorUL1PDC4nW7moqY0QT8tUnXV1Vk64waVISBME1a1yXeBTiF01i7yb5g/rAa5o5RPQUsSyHEYHKlkKYqEhCaCxF3zl69jdbnb2dJOcQ4iNlMVgsSqF488aNH3n44YdvXjSP2Sazi5GA19DzlFJKFEpl5kquQ11HYIzJisiYffTY/p//4idbX9+SySZlhTDiRgtEMsmMDvKp+2K3rZ1WGyw6pSxleUZMURQdUTCI4tIWb2Cet2YBCd+cF5ZWn3R1VU363WXRsiAIzIq7LlFEojp5K7fVSO6x07sC9ojq5BljLqGUSIbkuoJcyLG6+rmOHDpyLrf90OX9nckTF3M9QyTcNCuXNdyyTlR1Sl1swdzZ629dvmzxgngsqKqqpgZEUdXLTmosO5pI5/P5p3758/PnzwwMdksyVTWiGwXH1VVNnB+qv3v1mrWbYvWRtG2cU9mgV3QloWTZJUEQHFEou5LpNApyWyjQIXkXGVM/Wn3S1VU16XeXLSUFQWBODWNMojorDWSGt+b6dwTJ+bCb9ZEy58TposUYcx1Hljyu6LFoiCjhsZx88ETvgWOXX36NKF7CKCkViGESRfJSyixDEWNNVwpUtsNsm1gOJTplZb9CSsWiRyUhPykUCbPJmrXKJ+//SGu0tyFScEmxmBlRJRKMeojjsUfTkt9PBIFItu1aZUuxaFRVQ4I8y170o+qTrq5/J+vDVnd4xwkTGFeoEkSBuO/qxTDGHPKu0IRlWTk950pE9TTffPPNsxeuf/SxmnOXsjt2Hd2983hxxJZFJkmiyVgmk0EXiyKIoigSlzCXMpdRKqgqqauT165ecuvaJVMaQy5xHSvdEDPd0lnTNkMhTZEsouvEYpLPRxgjrkscB1r/vPmm+pirq+ql/6k9uwal1HB8jDFVsSWWLWSPFUeOs3KP1zCJoTuO4zCbUmopjiBZKjvNZ0SaukmIxIhouYqqhS3qtYnPFgNM9BUsOZFI9I+UE2l/qVQq5LOOYfpUqa4m2NRQWxtWoiEl7CGqZthmWi8NC6yoealf844OEccwPUG9NhpzbWdsbIw4gXCw0bKpQ4krMIcwInolpcbrCclSq9v2yeqTrq6qSV9r0qbrdxxHVWyvXGb2eTd3TnGHhLJO9DKxLJi0rbqCZElOp21ZV0SePD4iqqRkpHNmKFzviH4ihVw5ZBPNFgOqqoparU1bBEEQKBMZoY7p2kXH0gU7JwmGnhmy7DGv5ggkVy4kTDuvirLHO8PK5bOlHpGRgM8veTzE9FplUfYECSWuwIgoCEqAaHXEEyLitLy0rPqkq6tq0hXRuSnLomYTUraZK9qqh1CaZnrJJ0vUcZklu65rEJcJ1FIMSqmYjvhljUgS0Q29UKAuU/0BEvSTQoZoKlEJca2CWS4Th8hUluWwG3dsYlm2bduU0atKTlSgpFBIE2b6/CqVGLPKVCbE6zXSBTUYJErZLZV005AkidKAbTEHPFXRFgRBkmRJ8AnUQwSSL1WLWNVVNemKJVuKKqsOJSWLmMyUVVcUs9TURceWCBWZh1Jqi9QhzJR1xliQtpK8bhmGLCtE0wilpKSTcpnIjKgKIUbBNhyRiH6PI7iGYQTtKCXylYZyQhm7qi/lWoomEsFxzKJjlajgSjKhlOoWYYy5YoFS6hLwz/ySqFJRppQSEYOXqWvLtumxbVv0ONUnXV1Vk353qTYhhNgicSixRZtQx6UuIUR0ZMI0zMFxKHEF4ogGIY7s2iIjhAmESIIrEiJRRgkhGGfnCCahjiPYhDoOdQm1fRYjhDBCCZMYFQgTHSoQJrmUECa6AiGEoHME3FGv7bz7E6YSJrhXSaUiI4LgCsQgtCwSW2AuIcSkvuqTrq5/J6vadVhd1fV/1fpQRSxbdAkhjuAS4lBiE0ZERgiRBEYE1xaYLrqEEpcQQqhBCLEFmRD822bgV0ODAKkuIYQRycZfRUI8Fq04WVjFn9QlFE6aCFdmUONPpeInBqFXvwZ1RZdQZovMIdQVXQFnllltxKquqpeuruqqrv9rvbRDVEIIYw4h5EorJBNEV4Q7pcyljEhMEFxC8EpJJoSIxCXUoYwQal8ZCk9tngM773pmS3KDVz7n6msosQkhxHUIIQL+Tt7twbTd0JWfUIcSi1CbCgYhRGCEUNGhguN6CZEIkdgVhaIq4l1dVS9dXdVVXf8G1/8/AAfnMVqqHBuhAAAAAElFTkSuQmCC");}</style></head><body id="A1"><div class="code-item" id="code-alipay"><div class="code-title"></div><div class="code-area"><a><img width="100%" id="alipay-url" src="https://img-blog.csdnimg.cn/2022010702322389363.gif"></div></div><div class="code-item" id="code-wechat"><div class="code-title"></div><div class="code-area"><img width="100%" id="wechat-url" src="https://img-blog.csdnimg.cn/2022010702322389363.gif"></div></div><div class="code-item" id="code-qq"><div class="code-title"></div><div class="code-area"><img width="100%" id="qq-url" src="https://img-blog.csdnimg.cn/2022010702322389363.gif"></div></div><div class="code-item" id="code-all"><div class="code-title"></div><div class="code-area"><img width="100%" id="page-url" src="https://img-blog.csdnimg.cn/2022010702322389363.gif"></a></div></div><div class="code-footer" style="font-weight:bold;color:#000;cursor:default;"><a style="text-decoration:none" href="javascript:location.reload();"><?php echo $name;?></a></div><div style="text-align:center;font-size:20px;font-weight:bold;letter-spacing:1px;text-align:center;-webkit-text-fill-color:transparent;background-image:-webkit-linear-gradient(5deg,#0099ff 5%,#0033ff 13%,#cc00ff 23%,#ff0099 27%,#cc6600 32%,#ff0000 36%,#ff6633 42%,#ff8000 45%,rgb(40, 120, 38));background-size:200%,100%;-webkit-background-clip:text;-webkit-animation:word 5s linear infinite;cursor:default;">&#x626B;&#x63CF;&#x6216;&#x957F;&#x6309;&#x8BC6;&#x522B;&#x56FE;&#x4E2D;&#x4E8C;&#x7EF4;&#x7801;&#x4ED8;&#x6B3E;</div><script language="javascript" type="text/javascript">if(navigator.userAgent.match(/alipay/i)) { window.location.href='<?php echo $aliurl;?>';document.getElementById("code-alipay").style.display = "block";} else if(navigator.userAgent.match(/MicroMessenger\//i)) { document.getElementById("wechat-url").src = '<?php echo $qrcodeapi;?>' + urlEncode('<?php echo $wechaturl;?>');document.getElementById("code-wechat").style.display = "block";} else if(navigator.userAgent.match(/QQ\//i)) { document.getElementById("qq-url").src = '<?php echo $qrcodeapi;?>' + urlEncode('<?php echo $qqurl;?>');document.getElementById("code-qq").style.display = "block";} else { document.getElementById("page-url").src = '<?php echo $qrcodeapi;?>' + urlEncode(window.location.href);document.getElementById("code-all").style.display = "block";} function urlEncode(String) { return encodeURIComponent(String).replace(/'/g,"%27").replace(/"/g,"%22");} document.oncontextmenu=function(e){return false;};document.onselectstart=function(e){return false;};</script></body></html>

以上为完整代码信息,喜欢的话点赞关注支持轶软工作室,谢谢。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

轶软工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值