[smarty-php] r4900 committed - - bugfix on $php_handling security and optimization of smarty_interna...

4 views
Skip to first unread message

smart...@googlecode.com

unread,
Oct 16, 2014, 6:53:42 PM10/16/14
to smart...@googlegroups.com
Revision: 4900
Author: Uwe....@googlemail.com
Date: Thu Oct 16 22:53:22 2014 UTC
Log: - bugfix on $php_handling security and optimization of
smarty_internal_parsetree (Thue Kristensen)

https://code.google.com/p/smarty-php/source/detail?r=4900

Modified:
/trunk/development/lexer/smarty_internal_templatelexer.php
/trunk/development/lexer/smarty_internal_templatelexer.plex
/trunk/development/lexer/smarty_internal_templateparser.php
/trunk/development/lexer/smarty_internal_templateparser.y
/trunk/distribution/change_log.txt
/trunk/distribution/libs/sysplugins/smarty_internal_compile_break.php
/trunk/distribution/libs/sysplugins/smarty_internal_compile_continue.php
/trunk/distribution/libs/sysplugins/smarty_internal_compile_function.php
/trunk/distribution/libs/sysplugins/smarty_internal_parsetree.php
/trunk/distribution/libs/sysplugins/smarty_internal_templatelexer.php
/trunk/distribution/libs/sysplugins/smarty_internal_templateparser.php

=======================================
--- /trunk/development/lexer/smarty_internal_templatelexer.php Tue Oct 14
21:45:05 2014 UTC
+++ /trunk/development/lexer/smarty_internal_templatelexer.php Thu Oct 16
22:53:22 2014 UTC
@@ -23,6 +23,7 @@
public $is_phpScript = false;
public $state = 1;
public $smarty;
+ public $literal_cnt = 0;
private $heredoc_id_stack = Array();
public $yyTraceFILE;
public $yyTracePrompt;
@@ -163,13 +164,12 @@
19 => 0,
20 => 0,
21 => 0,
- 22 => 4,
- 27 => 0,
+ 22 => 0,
);
if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
- $yy_global_pattern = "/\G(\\{\\})|\G(" .
$this->ldel . "\\*([\S\s]*?)\\*" . $this->rdel . ")|\G(" .
$this->ldel . "\\s*strip\\s*" . $this->rdel . ")|\G(" .
$this->ldel . "\\s*\/strip\\s*" . $this->rdel . ")|\G(" .
$this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" .
$this->ldel . "\\s*(if|elseif|else if|while)\\s+)|\G(" .
$this->ldel . "\\s*for\\s+)|\G(" . $this->ldel . "\\s*foreach(?![^\s]))|
\G(" . $this->ldel . "\\s*setfilter\\s+)|\G(" . $this->ldel . "\\s*\/)|
\G(" . $this->ldel . "\\s*)|
\G((<script\\s+language\\s*=\\s*[\"']?\\s*php\\s*[\"']?\\s*>)|
(<\\?(?:php\\w+|=|[a-zA-Z]+)?))|\G(\\?>)|\G(<\/script>)|\G(\\s*" .
$this->rdel . ")|\G(<%)|\G(%>)|\G(<(([^>]*?)(?=" . $this->ldel . ")" .
$this->ldel . "([\S\s]*?)" . $this->rdel . ")+([^>]*?)(?!" .
$this->ldel . ")>)|\G([\S\s])/iS";
+ $yy_global_pattern = "/\G(\\{\\})|\G(" .
$this->ldel . "\\*([\S\s]*?)\\*" . $this->rdel . ")|\G(" .
$this->ldel . "\\s*strip\\s*" . $this->rdel . ")|\G(" .
$this->ldel . "\\s*\/strip\\s*" . $this->rdel . ")|\G(" .
$this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" .
$this->ldel . "\\s*(if|elseif|else if|while)\\s+)|\G(" .
$this->ldel . "\\s*for\\s+)|\G(" . $this->ldel . "\\s*foreach(?![^\s]))|
\G(" . $this->ldel . "\\s*setfilter\\s+)|\G(" . $this->ldel . "\\s*\/)|
\G(" . $this->ldel . "\\s*)|
\G((<script\\s+language\\s*=\\s*[\"']?\\s*php\\s*[\"']?\\s*>)|
(<\\?(?:php\\w+|=|[a-zA-Z]+)?))|\G(\\?>)|\G(<\/script>)|\G(\\s*" .
$this->rdel . ")|\G(<%)|\G(%>)|\G([\S\s])/iS";

do {
if (preg_match($yy_global_pattern, $this->data, $yymatches,
null, $this->counter)) {
@@ -345,8 +345,8 @@
} elseif ($this->value == '<?xml') {
$this->token = Smarty_Internal_Templateparser::TP_XMLTAG;
} else {
- $this->token =
Smarty_Internal_Templateparser::TP_FAKEPHPSTARTTAG;
- $this->value = substr($this->value, 0, 2);
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ //$this->value = substr($this->value, 0, 2);
}
}

@@ -383,22 +383,9 @@
function yy_r1_22($yy_subpatterns)
{

- $clean =
preg_replace("/{$this->ldel}([\S\s]*?){$this->rdel}/", '', $this->value);
- if
(preg_match("/<script\s+language\s*=\s*[\"\']?\s*php\s*[\"\']?\s*>/",
$clean, $match)) {
- $this->compiler->trigger_template_error('Security error:
Illegal code injection');
- } else {
- preg_match("/([\S\s]*?)(?={$this->ldel})/", $this->value,
$match);
- $this->value = $match[0];
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- }
- }
-
- function yy_r1_27($yy_subpatterns)
- {
-
$phpEndScript = $this->is_phpScript ? '|<\\/script>' : '';
$to = strlen($this->data);
- preg_match("/<\?|<%|\?>|%>|
<script\s+language\s*=\s*[\"\']?\s*php\s*[\"\']?\s*>|
<(([^>]*?)(?={$this->ldel}){$this->ldel}([\S\s]*?){$this->rdel})+([^>]*?)(?!{$this->ldel})>|
{$this->ldel}{$phpEndScript}/", $this->data, $match, PREG_OFFSET_CAPTURE,
$this->counter);
+ preg_match("/{$this->ldel}|<\?|<%|\?>|%>|
<script\s+language\s*=\s*[\"\']?\s*php\s*[\"\']?\s*>{$phpEndScript}/",
$this->data, $match, PREG_OFFSET_CAPTURE, $this->counter);
if (isset($match[0][1])) {
$to = $match[0][1];
}
@@ -969,20 +956,14 @@
public function yylex3()
{
$tokenMap = array(
- 1 => 0,
- 2 => 0,
- 3 => 2,
- 6 => 0,
- 7 => 0,
- 8 => 0,
- 9 => 0,
- 10 => 4,
- 15 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
);
if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
- $yy_global_pattern = "/\G(" . $this->ldel . "\\s*literal\\s*" .
$this->rdel . ")|\G(" . $this->ldel . "\\s*\/literal\\s*" .
$this->rdel . ")|
\G((<script\\s+language\\s*=\\s*[\"']?\\s*php\\s*[\"']?\\s*>)|
(<\\?(?:php\\w+|=|[a-zA-Z]+)?))|\G(\\?>)|\G(<\/script>)|\G(<%)|\G(%>)|
\G(<(([^>]*?)(?=" . $this->ldel . ")" . $this->ldel . "([\S\s]*?)" .
$this->rdel . ")+([^>]*?)(?!" . $this->ldel . ")>)|\G([\S\s])/iS";
+ $yy_global_pattern = "/\G(" . $this->ldel . "\\s*literal\\s*" .
$this->rdel . ")|\G(" . $this->ldel . "\\s*\/literal\\s*" .
$this->rdel . ")|\G([\S\s])/iS";

do {
if (preg_match($yy_global_pattern, $this->data, $yymatches,
null, $this->counter)) {
@@ -1035,19 +1016,16 @@
function yy_r3_1($yy_subpatterns)
{

- if ($this->smarty->auto_literal &&
isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r",
$this->value[$this->ldel_length]) !== false : false) {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART;
- $this->yypushstate(self::LITERAL);
- }
+ $this->literal_cnt ++;
+ $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
}

function yy_r3_2($yy_subpatterns)
{

- if ($this->smarty->auto_literal &&
isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r",
$this->value[$this->ldel_length]) !== false : false) {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ if ($this->literal_cnt) {
+ $this->literal_cnt --;
+ $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
} else {
$this->token = Smarty_Internal_Templateparser::TP_LITERALEND;
$this->yypopstate();
@@ -1057,60 +1035,8 @@
function yy_r3_3($yy_subpatterns)
{

- if (($script = strpos($this->value, '<s') === 0) ||
in_array($this->value, Array('<?', '<?=', '<?php'))) {
- if ($script) {
- $this->is_phpScript = true;
- }
- $this->token = Smarty_Internal_Templateparser::TP_PHPSTARTTAG;
- } else {
- $this->token =
Smarty_Internal_Templateparser::TP_FAKEPHPSTARTTAG;
- $this->value = substr($this->value, 0, 2);
- }
- }
-
- function yy_r3_6($yy_subpatterns)
- {
-
- $this->token = Smarty_Internal_Templateparser::TP_PHPENDTAG;
- }
-
- function yy_r3_7($yy_subpatterns)
- {
-
- $this->token = Smarty_Internal_Templateparser::TP_PHPENDSCRIPT;
- }
-
- function yy_r3_8($yy_subpatterns)
- {
-
- $this->token = Smarty_Internal_Templateparser::TP_ASPSTARTTAG;
- }
-
- function yy_r3_9($yy_subpatterns)
- {
-
- $this->token = Smarty_Internal_Templateparser::TP_ASPENDTAG;
- }
-
- function yy_r3_10($yy_subpatterns)
- {
-
- $clean =
preg_replace("/{$this->ldel}([\S\s]*?){$this->rdel}/", '', $this->value);
- if
(preg_match("/<script\s+language\s*=\s*[\"\']?\s*php\s*[\"\']?\s*>/",
$clean, $match)) {
- $this->compiler->trigger_template_error('Security error:
Illegal code injection');
- } else {
- preg_match("/([\S\s]*?)(?={$this->ldel})/", $this->value,
$match);
- $this->value = $match[0];
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- }
- }
-
- function yy_r3_15($yy_subpatterns)
- {
-
- $phpEndScript = $this->is_phpScript ? '|<\\/script>' : '';
$to = strlen($this->data);
- preg_match("/<\?|<%|\?>|%>|
<script\s+language\s*=\s*[\"\']?\s*php\s*[\"\']?\s*>|
{$this->ldel}\/?literal{$this->rdel}{$phpEndScript}/", $this->data, $match,
PREG_OFFSET_CAPTURE, $this->counter);
+ preg_match("/{$this->ldel}\/?literal{$this->rdel}/", $this->data,
$match, PREG_OFFSET_CAPTURE, $this->counter);
if (isset($match[0][1])) {
$to = $match[0][1];
} else {
@@ -1132,13 +1058,15 @@
8 => 0,
9 => 0,
10 => 0,
- 11 => 3,
- 15 => 0,
+ 11 => 0,
+ 12 => 0,
+ 13 => 3,
+ 17 => 0,
);
if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
- $yy_global_pattern = "/\G(" . $this->ldel . "\\s*(if|elseif|else
if|while)\\s+)|\G(" . $this->ldel . "\\s*for\\s+)|\G(" .
$this->ldel . "\\s*foreach(?![^\s]))|\G(" . $this->ldel . "\\s*\/)|\G(" .
$this->ldel . "\\s*)|\G(\")|\G(`\\$)|\G(\\$[0-9]*[a-zA-Z_]\\w*)|\G(\\$)|
\G(([^\"\\\\]*?)((?:\\\\.[^\"\\\\]*?)*?)(?=(" . $this->ldel . "|\\$|`\\$|
\")))|\G([\S\s])/iS";
+ $yy_global_pattern = "/\G(" . $this->ldel . "\\s*(if|elseif|else
if|while)\\s+)|\G(" . $this->ldel . "\\s*for\\s+)|\G(" .
$this->ldel . "\\s*foreach(?![^\s]))|\G(" .
$this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" .
$this->ldel . "\\s*\/literal\\s*" . $this->rdel . ")|\G(" .
$this->ldel . "\\s*\/)|\G(" . $this->ldel . "\\s*)|\G(\")|\G(`\\$)|
\G(\\$[0-9]*[a-zA-Z_]\\w*)|\G(\\$)|
\G(([^\"\\\\]*?)((?:\\\\.[^\"\\\\]*?)*?)(?=(" . $this->ldel . "|\\$|`\\$|
\")))|\G([\S\s])/iS";

do {
if (preg_match($yy_global_pattern, $this->data, $yymatches,
null, $this->counter)) {
@@ -1227,6 +1155,18 @@
function yy_r4_5($yy_subpatterns)
{

+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ }
+
+ function yy_r4_6($yy_subpatterns)
+ {
+
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ }
+
+ function yy_r4_7($yy_subpatterns)
+ {
+
if ($this->smarty->auto_literal &&
isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r",
$this->value[$this->ldel_length]) !== false : false) {
$this->token = Smarty_Internal_Templateparser::TP_TEXT;
} else {
@@ -1236,7 +1176,7 @@
}
}

- function yy_r4_6($yy_subpatterns)
+ function yy_r4_8($yy_subpatterns)
{

if ($this->smarty->auto_literal &&
isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r",
$this->value[$this->ldel_length]) !== false : false) {
@@ -1248,14 +1188,14 @@
}
}

- function yy_r4_7($yy_subpatterns)
+ function yy_r4_9($yy_subpatterns)
{

$this->token = Smarty_Internal_Templateparser::TP_QUOTE;
$this->yypopstate();
}

- function yy_r4_8($yy_subpatterns)
+ function yy_r4_10($yy_subpatterns)
{

$this->token = Smarty_Internal_Templateparser::TP_BACKTICK;
@@ -1264,25 +1204,25 @@
$this->taglineno = $this->line;
}

- function yy_r4_9($yy_subpatterns)
+ function yy_r4_11($yy_subpatterns)
{

$this->token = Smarty_Internal_Templateparser::TP_DOLLARID;
}

- function yy_r4_10($yy_subpatterns)
+ function yy_r4_12($yy_subpatterns)
{

$this->token = Smarty_Internal_Templateparser::TP_TEXT;
}

- function yy_r4_11($yy_subpatterns)
+ function yy_r4_13($yy_subpatterns)
{

$this->token = Smarty_Internal_Templateparser::TP_TEXT;
}

- function yy_r4_15($yy_subpatterns)
+ function yy_r4_17($yy_subpatterns)
{

$to = strlen($this->data);
=======================================
--- /trunk/development/lexer/smarty_internal_templatelexer.plex Tue Oct 14
21:45:05 2014 UTC
+++ /trunk/development/lexer/smarty_internal_templatelexer.plex Thu Oct 16
22:53:22 2014 UTC
@@ -22,6 +22,7 @@
public $is_phpScript = false;
public $state = 1;
public $smarty;
+ public $literal_cnt = 0;
private $heredoc_id_stack = Array();
public $yyTraceFILE;
public $yyTracePrompt;
@@ -119,7 +120,6 @@
phpstarttag = /(<script\s+language\s*=\s*[\"\']?\s*php\s*[\"\']?\s*>)|
(<\?(?:php\w+|=|[a-zA-Z]+)?)/
phpendtag = /\?>/
phpendscript = /<\/script>/
- scriptinjection =
/<(([^>]*?)(?=SMARTYldel)SMARTYldel([\S\s]*?)SMARTYrdel)+([^>]*?)(?!SMARTYldel)>/
aspstarttag = /<%/
aspendtag = /%>/
slash = /\//
@@ -289,8 +289,8 @@
} elseif ($this->value == '<?xml') {
$this->token = Smarty_Internal_Templateparser::TP_XMLTAG;
} else {
- $this->token = Smarty_Internal_Templateparser::TP_FAKEPHPSTARTTAG;
- $this->value = substr($this->value, 0, 2);
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ //$this->value = substr($this->value, 0, 2);
}
}
phpendtag {
@@ -308,20 +308,10 @@
aspendtag {
$this->token = Smarty_Internal_Templateparser::TP_ASPENDTAG;
}
- scriptinjection {
- $clean =
preg_replace("/{$this->ldel}([\S\s]*?){$this->rdel}/",'',$this->value);
- if
(preg_match("/<script\s+language\s*=\s*[\"\']?\s*php\s*[\"\']?\s*>/",$clean,$match))
{
- $this->compiler->trigger_template_error ('Security error: Illegal
code injection');
- } else {
- preg_match("/([\S\s]*?)(?={$this->ldel})/",$this->value,$match);
- $this->value = $match[0];
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- }
- }
text {
$phpEndScript = $this->is_phpScript ? '|<\\/script>' : '';
$to = strlen($this->data);
- preg_match("/<\?|<%|\?>|%>|
<script\s+language\s*=\s*[\"\']?\s*php\s*[\"\']?\s*>|
<(([^>]*?)(?={$this->ldel}){$this->ldel}([\S\s]*?){$this->rdel})+([^>]*?)(?!{$this->ldel})>|
{$this->ldel}{$phpEndScript}/",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter);
+ preg_match("/{$this->ldel}|<\?|<%|\?>|%>|
<script\s+language\s*=\s*[\"\']?\s*php\s*[\"\']?\s*>{$phpEndScript}/",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter);
if (isset($match[0][1])) {
$to = $match[0][1];
}
@@ -579,58 +569,21 @@
/*!lex2php
%statename LITERAL
ldel literal rdel {
- if ($this->smarty->auto_literal &&
isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r",
$this->value[$this->ldel_length]) !== false : false) {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART;
- $this->yypushstate(self::LITERAL);
- }
+ $this->literal_cnt++;
+ $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
}
ldel slash literal rdel {
- if ($this->smarty->auto_literal &&
isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r",
$this->value[$this->ldel_length]) !== false : false) {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ if ($this->literal_cnt) {
+ $this->literal_cnt--;
+ $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
} else {
$this->token = Smarty_Internal_Templateparser::TP_LITERALEND;
$this->yypopstate();
}
}
- phpstarttag {
- if (($script = strpos($this->value, '<s') === 0) ||
in_array($this->value, Array('<?', '<?=', '<?php'))) {
- if ($script) {
- $this->is_phpScript = true;
- }
- $this->token = Smarty_Internal_Templateparser::TP_PHPSTARTTAG;
- } else {
- $this->token =
Smarty_Internal_Templateparser::TP_FAKEPHPSTARTTAG;
- $this->value = substr($this->value, 0, 2);
- }
- }
- phpendtag {
- $this->token = Smarty_Internal_Templateparser::TP_PHPENDTAG;
- }
- phpendscript {
- $this->token = Smarty_Internal_Templateparser::TP_PHPENDSCRIPT;
- }
- aspstarttag {
- $this->token = Smarty_Internal_Templateparser::TP_ASPSTARTTAG;
- }
- aspendtag {
- $this->token = Smarty_Internal_Templateparser::TP_ASPENDTAG;
- }
- scriptinjection {
- $clean =
preg_replace("/{$this->ldel}([\S\s]*?){$this->rdel}/",'',$this->value);
- if
(preg_match("/<script\s+language\s*=\s*[\"\']?\s*php\s*[\"\']?\s*>/",$clean,$match))
{
- $this->compiler->trigger_template_error ('Security error: Illegal
code injection');
- } else {
- preg_match("/([\S\s]*?)(?={$this->ldel})/",$this->value,$match);
- $this->value = $match[0];
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- }
- }
text {
- $phpEndScript = $this->is_phpScript ? '|<\\/script>' : '';
$to = strlen($this->data);
- preg_match("/<\?|<%|\?>|%>|
<script\s+language\s*=\s*[\"\']?\s*php\s*[\"\']?\s*>|
{$this->ldel}\/?literal{$this->rdel}{$phpEndScript}/",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter);
+
preg_match("/{$this->ldel}\/?literal{$this->rdel}/",$this->data,$match,PREG_OFFSET_CAPTURE,$this->counter);
if (isset($match[0][1])) {
$to = $match[0][1];
} else {
@@ -669,6 +622,13 @@
$this->taglineno = $this->line;
}
}
+ ldel literal rdel {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ }
+ ldel slash literal rdel {
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ }
+
ldel slash {
if ($this->smarty->auto_literal &&
isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r",
$this->value[$this->ldel_length]) !== false : false) {
$this->token = Smarty_Internal_Templateparser::TP_TEXT;
=======================================
--- /trunk/development/lexer/smarty_internal_templateparser.php Tue Oct 14
21:45:05 2014 UTC
+++ /trunk/development/lexer/smarty_internal_templateparser.php Thu Oct 16
22:53:22 2014 UTC
@@ -125,17 +125,6 @@
$this->asp_tags = (ini_get('asp_tags') != '0');
$this->current_buffer = $this->root_buffer = new
_smarty_template_buffer($this);
}
-
- public static function escape_start_tag($tag_text)
- {
- $tag = preg_replace('/\A<\?(.*)\z/', '<<?php ?>?\1', $tag_text, -
1, $count); //Escape tag
- return $tag;
- }
-
- public static function escape_end_tag($tag_text)
- {
- return '?<?php ?>>';
- }

public function compileVariable($variable)
{
@@ -149,7 +138,7 @@
return '$_smarty_tpl->tpl_vars[' . $variable . ']->value';
}

- #line 139 "smarty_internal_templateparser.php"
+ #line 130 "smarty_internal_templateparser.php"

const TP_VERT = 1;
const TP_COLON = 2;
@@ -160,1527 +149,1618 @@
const TP_PHPENDSCRIPT = 7;
const TP_ASPSTARTTAG = 8;
const TP_ASPENDTAG = 9;
- const TP_FAKEPHPSTARTTAG = 10;
- const TP_XMLTAG = 11;
- const TP_TEXT = 12;
- const TP_STRIPON = 13;
- const TP_STRIPOFF = 14;
- const TP_BLOCKSOURCE = 15;
- const TP_LITERALSTART = 16;
- const TP_LITERALEND = 17;
- const TP_LITERAL = 18;
- const TP_LDEL = 19;
- const TP_DOLLAR = 20;
- const TP_ID = 21;
- const TP_EQUAL = 22;
- const TP_PTR = 23;
- const TP_LDELIF = 24;
- const TP_LDELFOR = 25;
- const TP_SEMICOLON = 26;
- const TP_INCDEC = 27;
- const TP_TO = 28;
- const TP_STEP = 29;
- const TP_LDELFOREACH = 30;
- const TP_SPACE = 31;
- const TP_AS = 32;
- const TP_APTR = 33;
- const TP_LDELSETFILTER = 34;
- const TP_SMARTYBLOCKCHILDPARENT = 35;
- const TP_LDELSLASH = 36;
- const TP_ATTR = 37;
- const TP_INTEGER = 38;
- const TP_COMMA = 39;
- const TP_OPENP = 40;
- const TP_CLOSEP = 41;
- const TP_MATH = 42;
- const TP_UNIMATH = 43;
- const TP_ANDSYM = 44;
- const TP_ISIN = 45;
- const TP_ISDIVBY = 46;
- const TP_ISNOTDIVBY = 47;
- const TP_ISEVEN = 48;
- const TP_ISNOTEVEN = 49;
- const TP_ISEVENBY = 50;
- const TP_ISNOTEVENBY = 51;
- const TP_ISODD = 52;
- const TP_ISNOTODD = 53;
- const TP_ISODDBY = 54;
- const TP_ISNOTODDBY = 55;
- const TP_INSTANCEOF = 56;
- const TP_QMARK = 57;
- const TP_NOT = 58;
- const TP_TYPECAST = 59;
- const TP_HEX = 60;
- const TP_DOT = 61;
- const TP_SINGLEQUOTESTRING = 62;
- const TP_DOUBLECOLON = 63;
- const TP_AT = 64;
- const TP_HATCH = 65;
- const TP_OPENB = 66;
- const TP_CLOSEB = 67;
- const TP_EQUALS = 68;
- const TP_NOTEQUALS = 69;
- const TP_GREATERTHAN = 70;
- const TP_LESSTHAN = 71;
- const TP_GREATEREQUAL = 72;
- const TP_LESSEQUAL = 73;
- const TP_IDENTITY = 74;
- const TP_NONEIDENTITY = 75;
- const TP_MOD = 76;
- const TP_LAND = 77;
- const TP_LOR = 78;
- const TP_LXOR = 79;
- const TP_QUOTE = 80;
- const TP_BACKTICK = 81;
- const TP_DOLLARID = 82;
- const YY_NO_ACTION = 572;
- const YY_ACCEPT_ACTION = 571;
- const YY_ERROR_ACTION = 570;
+ const TP_XMLTAG = 10;
+ const TP_TEXT = 11;
+ const TP_STRIPON = 12;
+ const TP_STRIPOFF = 13;
+ const TP_BLOCKSOURCE = 14;
+ const TP_LITERALSTART = 15;
+ const TP_LITERALEND = 16;
+ const TP_LITERAL = 17;
+ const TP_LDEL = 18;
+ const TP_DOLLAR = 19;
+ const TP_ID = 20;
+ const TP_EQUAL = 21;
+ const TP_PTR = 22;
+ const TP_LDELIF = 23;
+ const TP_LDELFOR = 24;
+ const TP_SEMICOLON = 25;
+ const TP_INCDEC = 26;
+ const TP_TO = 27;
+ const TP_STEP = 28;
+ const TP_LDELFOREACH = 29;
+ const TP_SPACE = 30;
+ const TP_AS = 31;
+ const TP_APTR = 32;
+ const TP_LDELSETFILTER = 33;
+ const TP_SMARTYBLOCKCHILDPARENT = 34;
+ const TP_LDELSLASH = 35;
+ const TP_ATTR = 36;
+ const TP_INTEGER = 37;
+ const TP_COMMA = 38;
+ const TP_OPENP = 39;
+ const TP_CLOSEP = 40;
+ const TP_MATH = 41;
+ const TP_UNIMATH = 42;
+ const TP_ANDSYM = 43;
+ const TP_ISIN = 44;
+ const TP_ISDIVBY = 45;
+ const TP_ISNOTDIVBY = 46;
+ const TP_ISEVEN = 47;
+ const TP_ISNOTEVEN = 48;
+ const TP_ISEVENBY = 49;
+ const TP_ISNOTEVENBY = 50;
+ const TP_ISODD = 51;
+ const TP_ISNOTODD = 52;
+ const TP_ISODDBY = 53;
+ const TP_ISNOTODDBY = 54;
+ const TP_INSTANCEOF = 55;
+ const TP_QMARK = 56;
+ const TP_NOT = 57;
+ const TP_TYPECAST = 58;
+ const TP_HEX = 59;
+ const TP_DOT = 60;
+ const TP_SINGLEQUOTESTRING = 61;
+ const TP_DOUBLECOLON = 62;
+ const TP_AT = 63;
+ const TP_HATCH = 64;
+ const TP_OPENB = 65;
+ const TP_CLOSEB = 66;
+ const TP_EQUALS = 67;
+ const TP_NOTEQUALS = 68;
+ const TP_GREATERTHAN = 69;
+ const TP_LESSTHAN = 70;
+ const TP_GREATEREQUAL = 71;
+ const TP_LESSEQUAL = 72;
+ const TP_IDENTITY = 73;
+ const TP_NONEIDENTITY = 74;
+ const TP_MOD = 75;
+ const TP_LAND = 76;
+ const TP_LOR = 77;
+ const TP_LXOR = 78;
+ const TP_QUOTE = 79;
+ const TP_BACKTICK = 80;
+ const TP_DOLLARID = 81;
+ const YY_NO_ACTION = 560;
+ const YY_ACCEPT_ACTION = 559;
+ const YY_ERROR_ACTION = 558;

- const YY_SZ_ACTTAB = 2314;
+ const YY_SZ_ACTTAB = 2541;
static public $yy_action = array(
/* 0 */
- 216, 3, 322, 202, 323, 309, 305, 301, 302, 303,
+ 225, 35, 312, 333, 198, 272, 273, 275, 283, 292,
/* 10 */
- 304, 310, 311, 317, 318, 319, 316, 196, 200, 323,
+ 293, 294, 295, 287, 288, 267, 190, 43, 19, 8,
/* 20 */
- 9, 23, 251, 281, 138, 4, 107, 216, 273, 436,
+ 204, 14, 212, 299, 2, 108, 225, 9, 424, 41,
/* 30 */
- 18, 136, 216, 18, 398, 232, 24, 234, 289, 24,
+ 139, 208, 225, 41, 250, 32, 228, 13, 159, 32,
/* 40 */
- 296, 46, 48, 52, 45, 20, 28, 354, 360, 39,
+ 51, 52, 50, 44, 11, 12, 298, 300, 21, 23,
/* 50 */
- 37, 278, 361, 40, 43, 216, 216, 436, 237, 216,
+ 303, 302, 25, 17, 225, 424, 234, 225, 225, 381,
/* 60 */
- 5, 430, 23, 436, 281, 12, 201, 362, 359, 358,
+ 421, 424, 45, 38, 145, 357, 313, 323, 322, 324,
/* 70 */
- 355, 356, 357, 343, 342, 328, 329, 330, 327, 11,
+ 325, 326, 320, 315, 314, 316, 317, 319, 127, 41,
/* 80 */
- 25, 229, 49, 41, 18, 18, 18, 49, 335, 18,
+ 46, 42, 338, 41, 168, 32, 41, 421, 14, 32,
/* 90 */
- 24, 24, 24, 204, 341, 24, 46, 48, 52, 45,
+ 299, 34, 32, 421, 51, 52, 50, 44, 11, 12,
/* 100 */
- 20, 28, 354, 360, 39, 37, 278, 361, 40, 43,
+ 298, 300, 21, 23, 303, 302, 25, 17, 225, 104,
/* 110 */
- 216, 571, 95, 265, 238, 306, 22, 140, 350, 31,
+ 185, 46, 46, 559, 95, 279, 242, 271, 3, 321,
/* 120 */
- 129, 185, 362, 359, 358, 355, 356, 357, 343, 342,
+ 313, 323, 322, 324, 325, 326, 320, 315, 314, 316,
/* 130 */
- 328, 329, 330, 327, 23, 351, 281, 15, 233, 23,
+ 317, 319, 14, 241, 299, 34, 208, 41, 225, 14,
/* 140 */
- 18, 281, 266, 34, 3, 33, 24, 271, 216, 195,
+ 418, 299, 28, 32, 179, 7, 356, 285, 51, 52,
/* 150 */
- 3, 46, 48, 52, 45, 20, 28, 354, 360, 39,
+ 50, 44, 11, 12, 298, 300, 21, 23, 303, 302,
/* 160 */
- 37, 278, 361, 40, 43, 14, 158, 138, 23, 158,
+ 25, 17, 225, 225, 274, 424, 240, 41, 134, 190,
/* 170 */
- 281, 12, 353, 138, 109, 334, 204, 362, 359, 358,
+ 332, 343, 340, 32, 313, 323, 322, 324, 325, 326,
/* 180 */
- 355, 356, 357, 343, 342, 328, 329, 330, 327, 46,
+ 320, 315, 314, 316, 317, 319, 37, 122, 182, 31,
/* 190 */
- 48, 52, 45, 20, 28, 354, 360, 39, 37, 278,
+ 202, 225, 424, 352, 225, 14, 7, 299, 424, 225,
/* 200 */
- 361, 40, 43, 216, 207, 274, 124, 216, 216, 393,
+ 150, 386, 51, 52, 50, 44, 11, 12, 298, 300,
/* 210 */
- 307, 238, 306, 249, 270, 362, 359, 358, 355, 356,
+ 21, 23, 303, 302, 25, 17, 225, 46, 349, 134,
/* 220 */
- 357, 343, 342, 328, 329, 330, 327, 299, 286, 216,
+ 41, 278, 242, 271, 7, 29, 32, 341, 313, 323,
/* 230 */
- 287, 284, 285, 216, 180, 436, 325, 18, 196, 312,
+ 322, 324, 325, 326, 320, 315, 314, 316, 317, 319,
/* 240 */
- 300, 26, 158, 24, 46, 48, 52, 45, 20, 28,
+ 226, 227, 197, 304, 103, 184, 232, 134, 46, 14,
/* 250 */
- 354, 360, 39, 37, 278, 361, 40, 43, 216, 32,
+ 35, 299, 265, 46, 321, 18, 51, 52, 50, 44,
/* 260 */
- 296, 36, 49, 436, 293, 193, 203, 323, 16, 436,
+ 11, 12, 298, 300, 21, 23, 303, 302, 25, 17,
/* 270 */
- 362, 359, 358, 355, 356, 357, 343, 342, 328, 329,
+ 225, 208, 264, 259, 258, 218, 6, 109, 345, 35,
/* 280 */
- 330, 327, 124, 19, 49, 254, 255, 223, 49, 6,
+ 193, 263, 313, 323, 322, 324, 325, 326, 320, 315,
/* 290 */
- 194, 344, 23, 23, 281, 281, 137, 231, 153, 46,
+ 314, 316, 317, 319, 241, 192, 304, 107, 102, 175,
/* 300 */
- 48, 52, 45, 20, 28, 354, 360, 39, 37, 278,
+ 269, 201, 191, 304, 203, 142, 253, 208, 321, 335,
/* 310 */
- 361, 40, 43, 216, 216, 208, 433, 204, 282, 197,
+ 51, 52, 50, 44, 11, 12, 298, 300, 21, 23,
/* 320 */
- 172, 33, 245, 264, 99, 362, 359, 358, 355, 356,
+ 303, 302, 25, 17, 225, 208, 268, 196, 208, 305,
/* 330 */
- 357, 343, 342, 328, 329, 330, 327, 244, 249, 321,
+ 485, 208, 230, 200, 308, 485, 313, 323, 322, 324,
/* 340 */
- 211, 105, 497, 108, 433, 8, 204, 497, 199, 33,
+ 325, 326, 320, 315, 314, 316, 317, 319, 30, 159,
/* 350 */
- 433, 276, 142, 247, 46, 48, 52, 45, 20, 28,
+ 105, 20, 233, 161, 186, 305, 301, 274, 256, 247,
/* 360 */
- 354, 360, 39, 37, 278, 361, 40, 43, 216, 49,
+ 208, 225, 321, 36, 51, 52, 50, 44, 11, 12,
/* 370 */
- 263, 250, 128, 27, 235, 253, 174, 291, 280, 101,
+ 298, 300, 21, 23, 303, 302, 25, 17, 225, 204,
/* 380 */
- 362, 359, 358, 355, 356, 357, 343, 342, 328, 329,
+ 207, 14, 254, 299, 131, 259, 249, 225, 158, 127,
/* 390 */
- 330, 327, 192, 158, 321, 254, 230, 104, 161, 162,
+ 313, 323, 322, 324, 325, 326, 320, 315, 314, 316,
/* 400 */
- 23, 23, 246, 226, 182, 139, 280, 279, 279, 46,
+ 317, 319, 237, 262, 130, 225, 45, 183, 187, 14,
/* 410 */
- 48, 52, 45, 20, 28, 354, 360, 39, 37, 278,
+ 169, 223, 301, 342, 274, 334, 321, 321, 51, 52,
/* 420 */
- 361, 40, 43, 216, 204, 207, 216, 44, 314, 23,
+ 50, 44, 11, 12, 298, 300, 21, 23, 303, 302,
/* 430 */
- 313, 241, 98, 124, 117, 362, 359, 358, 355, 356,
+ 25, 17, 225, 204, 204, 14, 6, 244, 141, 259,
/* 440 */
- 357, 343, 342, 328, 329, 330, 327, 321, 173, 321,
+ 291, 46, 98, 194, 313, 323, 322, 324, 325, 326,
/* 450 */
- 216, 233, 103, 160, 254, 268, 23, 279, 220, 216,
+ 320, 315, 314, 316, 317, 319, 132, 262, 227, 166,
/* 460 */
- 261, 292, 279, 260, 46, 48, 52, 45, 20, 28,
+ 163, 189, 14, 284, 231, 26, 237, 27, 321, 321,
/* 470 */
- 354, 360, 39, 37, 278, 361, 40, 43, 216, 204,
+ 321, 32, 51, 52, 50, 44, 11, 12, 298, 300,
/* 480 */
- 183, 256, 191, 247, 298, 295, 320, 131, 339, 279,
+ 21, 23, 303, 302, 25, 17, 225, 204, 14, 276,
/* 490 */
- 362, 359, 358, 355, 356, 357, 343, 342, 328, 329,
+ 245, 206, 22, 4, 144, 328, 150, 120, 313, 323,
/* 500 */
- 330, 327, 321, 294, 123, 49, 207, 100, 181, 204,
+ 322, 324, 325, 326, 320, 315, 314, 316, 317, 319,
/* 510 */
- 153, 269, 245, 296, 94, 132, 42, 279, 280, 46,
+ 195, 348, 262, 176, 171, 39, 30, 199, 143, 180,
/* 520 */
- 48, 52, 45, 20, 28, 354, 360, 39, 37, 278,
+ 148, 281, 321, 260, 159, 230, 51, 52, 50, 44,
/* 530 */
- 361, 40, 43, 216, 204, 205, 151, 13, 14, 35,
+ 11, 12, 298, 300, 21, 23, 303, 302, 25, 17,
/* 540 */
- 29, 6, 97, 24, 115, 362, 359, 358, 355, 356,
+ 225, 296, 205, 129, 346, 289, 124, 329, 125, 339,
/* 550 */
- 357, 343, 342, 328, 329, 330, 327, 321, 340, 321,
+ 97, 119, 313, 323, 322, 324, 325, 326, 320, 315,
/* 560 */
- 168, 175, 277, 189, 164, 206, 288, 179, 346, 279,
+ 314, 316, 317, 319, 127, 262, 262, 239, 277, 282,
/* 570 */
- 279, 7, 279, 279, 46, 48, 52, 45, 20, 28,
+ 307, 94, 266, 351, 269, 170, 159, 181, 172, 106,
/* 580 */
- 354, 360, 39, 37, 278, 361, 40, 43, 216, 207,
+ 51, 52, 50, 44, 11, 12, 298, 300, 21, 23,
/* 590 */
- 207, 171, 337, 133, 122, 145, 308, 159, 116, 114,
+ 303, 302, 25, 17, 225, 330, 270, 301, 15, 115,
/* 600 */
- 362, 359, 358, 355, 356, 357, 343, 342, 328, 329,
+ 331, 310, 326, 255, 140, 126, 313, 323, 322, 324,
/* 610 */
- 330, 327, 321, 321, 321, 125, 283, 198, 126, 169,
+ 325, 326, 320, 315, 314, 316, 317, 319, 301, 326,
/* 620 */
- 44, 293, 184, 282, 178, 280, 275, 21, 242, 46,
+ 262, 326, 326, 326, 326, 326, 326, 326, 326, 326,
/* 630 */
- 48, 52, 45, 20, 28, 354, 360, 39, 37, 278,
+ 326, 326, 326, 243, 51, 52, 50, 44, 11, 12,
/* 640 */
- 361, 40, 43, 216, 272, 106, 315, 110, 259, 333,
+ 298, 300, 21, 23, 303, 302, 25, 17, 225, 40,
/* 650 */
- 333, 333, 333, 333, 333, 362, 359, 358, 355, 356,
+ 326, 326, 326, 326, 326, 326, 326, 113, 99, 100,
/* 660 */
- 357, 343, 342, 328, 329, 330, 327, 333, 190, 333,
+ 313, 323, 322, 324, 325, 326, 320, 315, 314, 316,
/* 670 */
- 333, 333, 333, 333, 333, 333, 333, 333, 333, 333,
+ 317, 319, 262, 262, 262, 326, 326, 326, 326, 326,
/* 680 */
- 333, 333, 333, 333, 46, 48, 52, 45, 20, 28,
+ 326, 326, 326, 326, 326, 326, 326, 326, 51, 52,
/* 690 */
- 354, 360, 39, 37, 278, 361, 40, 43, 216, 333,
+ 50, 44, 11, 12, 298, 300, 21, 23, 303, 302,
/* 700 */
- 333, 333, 333, 333, 333, 333, 333, 333, 333, 333,
+ 25, 17, 225, 326, 326, 326, 326, 326, 326, 326,
/* 710 */
- 362, 359, 358, 355, 356, 357, 343, 342, 328, 329,
+ 326, 114, 326, 326, 313, 323, 322, 324, 325, 326,
/* 720 */
- 330, 327, 333, 333, 333, 333, 333, 333, 333, 239,
+ 320, 315, 314, 316, 317, 319, 262, 326, 326, 326,
/* 730 */
- 333, 333, 333, 333, 333, 333, 333, 333, 333, 46,
+ 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
/* 740 */
- 48, 52, 45, 20, 28, 354, 360, 39, 37, 278,
+ 326, 286, 51, 52, 50, 44, 11, 12, 298, 300,
/* 750 */
- 361, 40, 43, 216, 333, 333, 333, 333, 333, 333,
+ 21, 23, 303, 302, 25, 17, 225, 326, 326, 326,
/* 760 */
- 333, 333, 333, 333, 333, 362, 359, 358, 355, 356,
+ 326, 326, 326, 326, 326, 326, 326, 326, 313, 323,
/* 770 */
- 357, 343, 342, 328, 329, 330, 327, 333, 333, 333,
+ 322, 324, 325, 326, 320, 315, 314, 316, 317, 319,
/* 780 */
- 333, 333, 333, 333, 333, 333, 333, 333, 333, 333,
+ 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
/* 790 */
- 333, 333, 333, 333, 46, 48, 52, 45, 20, 28,
+ 326, 326, 326, 326, 326, 326, 51, 52, 50, 44,
/* 800 */
- 354, 360, 39, 37, 278, 361, 40, 43, 333, 333,
+ 11, 12, 298, 300, 21, 23, 303, 302, 25, 17,
/* 810 */
- 333, 333, 333, 333, 333, 333, 333, 333, 333, 158,
+ 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
/* 820 */
- 362, 359, 358, 355, 356, 357, 343, 342, 328, 329,
+ 159, 326, 313, 323, 322, 324, 325, 326, 320, 315,
/* 830 */
- 330, 327, 333, 333, 333, 333, 333, 46, 48, 52,
+ 314, 316, 317, 319, 326, 326, 326, 326, 51, 52,
/* 840 */
- 45, 20, 28, 354, 360, 39, 37, 278, 361, 40,
+ 50, 44, 11, 12, 298, 300, 21, 23, 303, 302,
/* 850 */
- 43, 333, 333, 333, 333, 333, 333, 211, 333, 333,
+ 25, 17, 326, 326, 326, 326, 326, 326, 212, 326,
/* 860 */
- 333, 333, 8, 362, 359, 358, 355, 356, 357, 343,
+ 326, 326, 326, 9, 313, 323, 322, 324, 325, 326,
/* 870 */
- 342, 328, 329, 330, 327, 333, 333, 333, 333, 333,
+ 320, 315, 314, 316, 317, 319, 326, 326, 326, 326,
/* 880 */
- 333, 333, 333, 9, 134, 92, 333, 333, 4, 107,
+ 326, 326, 326, 8, 138, 211, 326, 326, 2, 108,
/* 890 */
- 333, 333, 186, 333, 136, 333, 177, 333, 232, 324,
+ 326, 235, 326, 326, 139, 157, 165, 326, 250, 128,
/* 900 */
- 234, 279, 252, 333, 38, 279, 333, 51, 333, 333,
+ 228, 326, 246, 326, 24, 321, 326, 48, 261, 326,
/* 910 */
- 333, 228, 333, 280, 333, 144, 333, 280, 86, 127,
+ 326, 251, 336, 353, 326, 311, 326, 301, 174, 173,
/* 920 */
- 333, 333, 50, 47, 297, 243, 349, 290, 326, 105,
+ 326, 326, 49, 47, 280, 238, 297, 321, 321, 105,
/* 930 */
- 1, 257, 352, 348, 188, 347, 333, 333, 333, 333,
+ 1, 337, 326, 147, 326, 326, 326, 326, 326, 301,
/* 940 */
- 333, 333, 224, 279, 96, 9, 130, 212, 333, 333,
+ 301, 8, 123, 92, 96, 257, 2, 108, 326, 311,
/* 950 */
- 4, 107, 333, 228, 333, 280, 136, 157, 333, 228,
+ 326, 326, 139, 326, 326, 235, 250, 309, 228, 146,
/* 960 */
- 232, 127, 234, 146, 252, 333, 38, 127, 333, 51,
+ 246, 326, 24, 128, 162, 48, 326, 326, 326, 326,
/* 970 */
- 267, 333, 333, 257, 352, 348, 345, 347, 333, 257,
+ 235, 326, 350, 321, 155, 251, 336, 353, 128, 311,
/* 980 */
- 352, 348, 333, 347, 50, 47, 297, 243, 349, 333,
+ 49, 47, 280, 238, 297, 301, 326, 105, 1, 326,
/* 990 */
- 333, 105, 1, 262, 333, 228, 333, 333, 155, 154,
+ 251, 336, 353, 326, 311, 14, 326, 299, 326, 8,
/* 1000 */
- 333, 333, 333, 127, 333, 333, 96, 9, 130, 214,
+ 138, 224, 96, 326, 2, 108, 326, 41, 326, 252,
/* 1010 */
- 227, 176, 4, 107, 347, 257, 352, 348, 136, 347,
+ 139, 235, 326, 32, 250, 153, 228, 326, 246, 128,
/* 1020 */
- 279, 333, 232, 333, 234, 333, 252, 333, 38, 333,
+ 24, 326, 326, 48, 326, 326, 326, 326, 326, 326,
/* 1030 */
- 333, 51, 280, 333, 333, 228, 333, 333, 333, 144,
+ 326, 251, 336, 353, 326, 311, 326, 326, 49, 47,
/* 1040 */
- 333, 333, 56, 120, 143, 333, 50, 47, 297, 243,
+ 280, 238, 297, 326, 326, 105, 1, 326, 326, 326,
/* 1050 */
- 349, 290, 326, 105, 1, 257, 352, 348, 333, 347,
+ 326, 326, 14, 326, 299, 326, 326, 8, 142, 224,
/* 1060 */
- 333, 333, 333, 333, 23, 333, 281, 333, 96, 9,
+ 96, 326, 2, 108, 41, 235, 248, 326, 139, 154,
/* 1070 */
- 141, 214, 333, 333, 4, 107, 18, 23, 240, 281,
+ 32, 235, 250, 128, 228, 156, 246, 326, 33, 128,
/* 1080 */
- 136, 333, 24, 333, 232, 333, 234, 333, 252, 18,
+ 326, 48, 326, 326, 326, 251, 336, 353, 326, 311,
/* 1090 */
- 38, 236, 333, 51, 333, 24, 333, 228, 333, 333,
+ 326, 251, 336, 353, 326, 311, 49, 47, 280, 238,
/* 1100 */
- 333, 144, 333, 333, 86, 127, 333, 333, 50, 47,
+ 297, 326, 326, 105, 1, 326, 326, 326, 326, 326,
/* 1110 */
- 297, 243, 349, 290, 326, 105, 1, 257, 352, 348,
+ 326, 326, 326, 326, 326, 8, 138, 213, 96, 326,
/* 1120 */
- 333, 347, 333, 333, 333, 333, 333, 333, 217, 333,
+ 2, 108, 326, 326, 326, 326, 139, 235, 326, 326,
/* 1130 */
- 96, 9, 137, 214, 333, 333, 4, 107, 333, 333,
+ 250, 149, 228, 326, 246, 128, 24, 326, 326, 48,
/* 1140 */
- 333, 333, 136, 333, 333, 333, 232, 333, 234, 333,
+ 326, 326, 326, 326, 326, 326, 326, 251, 336, 353,
/* 1150 */
- 252, 333, 17, 333, 333, 51, 333, 333, 333, 228,
+ 326, 311, 326, 326, 49, 47, 280, 238, 297, 326,
/* 1160 */
- 333, 333, 333, 144, 333, 333, 86, 127, 333, 333,
+ 326, 105, 1, 326, 326, 326, 326, 326, 326, 326,
/* 1170 */
- 50, 47, 297, 243, 349, 290, 326, 105, 1, 257,
+ 326, 326, 326, 8, 138, 210, 96, 326, 2, 108,
/* 1180 */
- 352, 348, 333, 347, 333, 333, 333, 333, 333, 333,
+ 326, 326, 326, 326, 139, 235, 326, 326, 250, 151,
/* 1190 */
- 218, 333, 96, 9, 130, 213, 333, 333, 4, 107,
+ 228, 326, 219, 128, 24, 326, 326, 48, 326, 326,
/* 1200 */
- 333, 333, 333, 333, 136, 333, 333, 333, 232, 333,
+ 326, 326, 326, 326, 326, 251, 336, 353, 326, 311,
/* 1210 */
- 234, 333, 252, 333, 38, 333, 333, 51, 333, 333,
+ 326, 326, 49, 47, 280, 238, 297, 326, 326, 105,
/* 1220 */
- 333, 228, 333, 333, 333, 144, 333, 333, 63, 120,
+ 1, 326, 326, 326, 326, 326, 326, 326, 326, 326,
/* 1230 */
- 230, 333, 50, 47, 297, 243, 349, 290, 326, 105,
+ 326, 8, 136, 224, 96, 326, 2, 108, 326, 326,
/* 1240 */
- 1, 257, 352, 348, 333, 347, 333, 333, 333, 333,
+ 326, 326, 139, 235, 326, 326, 250, 152, 228, 326,
/* 1250 */
- 333, 333, 333, 333, 96, 9, 135, 214, 333, 333,
+ 246, 128, 24, 326, 326, 48, 326, 326, 326, 326,
/* 1260 */
- 4, 107, 333, 333, 333, 333, 136, 333, 333, 333,
+ 326, 326, 326, 251, 336, 353, 326, 311, 326, 326,
/* 1270 */
- 232, 333, 234, 333, 252, 333, 2, 333, 333, 51,
+ 49, 47, 280, 238, 297, 326, 326, 105, 1, 326,
/* 1280 */
- 333, 333, 333, 228, 333, 333, 333, 93, 333, 333,
+ 225, 326, 391, 326, 422, 326, 326, 326, 326, 8,
/* 1290 */
- 53, 118, 333, 333, 50, 47, 297, 243, 349, 290,
+ 135, 224, 96, 326, 2, 108, 326, 326, 326, 326,
/* 1300 */
- 326, 105, 1, 222, 352, 348, 333, 347, 333, 333,
+ 139, 236, 229, 326, 250, 326, 228, 326, 246, 41,
/* 1310 */
- 333, 333, 333, 333, 333, 333, 96, 9, 130, 210,
+ 5, 422, 326, 48, 326, 32, 326, 422, 7, 326,
/* 1320 */
- 333, 333, 4, 107, 333, 333, 333, 333, 136, 333,
+ 7, 326, 326, 326, 198, 178, 326, 326, 49, 47,
/* 1330 */
- 333, 333, 232, 333, 234, 333, 225, 333, 38, 333,
+ 280, 238, 297, 326, 321, 105, 1, 43, 19, 326,
/* 1340 */
- 333, 51, 333, 333, 333, 228, 333, 333, 333, 144,
+ 326, 134, 326, 134, 326, 326, 326, 8, 138, 209,
/* 1350 */
- 333, 333, 66, 127, 333, 333, 50, 47, 297, 243,
+ 96, 208, 2, 108, 326, 326, 326, 326, 139, 326,
/* 1360 */
- 349, 290, 326, 105, 1, 257, 352, 348, 333, 347,
+ 326, 326, 250, 326, 228, 326, 246, 326, 24, 198,
/* 1370 */
- 333, 333, 333, 333, 333, 333, 333, 333, 96, 9,
+ 164, 48, 326, 326, 326, 326, 326, 326, 326, 321,
/* 1380 */
- 130, 209, 333, 333, 4, 107, 333, 333, 333, 333,
+ 326, 326, 43, 19, 326, 326, 49, 47, 280, 238,
/* 1390 */
- 136, 333, 333, 333, 232, 333, 234, 333, 252, 333,
+ 297, 326, 326, 105, 1, 326, 208, 326, 326, 326,
/* 1400 */
- 38, 333, 333, 51, 333, 333, 333, 228, 333, 333,
+ 326, 326, 326, 326, 326, 8, 142, 224, 96, 326,
/* 1410 */
- 333, 144, 333, 333, 68, 127, 333, 333, 50, 47,
+ 2, 108, 326, 326, 326, 326, 139, 326, 326, 326,
/* 1420 */
- 297, 243, 349, 290, 326, 105, 1, 257, 352, 348,
+ 250, 326, 228, 326, 246, 326, 33, 198, 177, 48,
/* 1430 */
- 333, 347, 333, 333, 333, 333, 333, 333, 333, 333,
+ 326, 326, 326, 326, 326, 326, 326, 321, 326, 326,
/* 1440 */
- 96, 9, 137, 214, 333, 333, 4, 107, 333, 333,
+ 43, 19, 326, 326, 49, 47, 280, 238, 297, 326,
/* 1450 */
- 333, 333, 136, 333, 333, 333, 232, 333, 234, 333,
+ 326, 105, 326, 326, 208, 326, 326, 326, 326, 326,
/* 1460 */
- 252, 333, 17, 333, 333, 51, 333, 333, 333, 228,
+ 326, 326, 326, 8, 142, 222, 96, 326, 2, 108,
/* 1470 */
- 333, 333, 333, 144, 333, 333, 65, 127, 333, 333,
+ 326, 326, 326, 326, 139, 326, 326, 326, 250, 326,
/* 1480 */
- 50, 47, 297, 243, 349, 290, 326, 105, 333, 257,
+ 228, 326, 246, 326, 33, 326, 467, 48, 326, 326,
/* 1490 */
- 352, 348, 333, 347, 333, 333, 333, 333, 333, 333,
+ 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
/* 1500 */
- 333, 333, 96, 9, 137, 221, 333, 333, 4, 107,
+ 326, 326, 49, 47, 280, 238, 297, 326, 467, 105,
/* 1510 */
- 333, 333, 333, 228, 136, 333, 333, 148, 232, 333,
+ 467, 467, 326, 467, 467, 326, 326, 326, 326, 467,
/* 1520 */
- 234, 127, 252, 333, 17, 333, 333, 51, 333, 333,
+ 326, 467, 7, 467, 96, 326, 326, 326, 326, 326,
/* 1530 */
- 333, 479, 333, 257, 352, 348, 333, 347, 333, 333,
+ 326, 326, 326, 326, 326, 235, 326, 326, 467, 121,
/* 1540 */
- 333, 333, 50, 47, 297, 243, 349, 333, 333, 105,
+ 326, 326, 86, 128, 326, 134, 326, 326, 326, 467,
/* 1550 */
- 333, 333, 333, 333, 479, 333, 479, 479, 333, 479,
+ 326, 290, 318, 326, 326, 251, 336, 353, 326, 311,
/* 1560 */
- 479, 333, 333, 333, 96, 479, 333, 479, 3, 479,
+ 326, 326, 326, 467, 326, 326, 326, 235, 326, 216,
/* 1570 */
- 333, 333, 228, 333, 333, 333, 119, 333, 228, 84,
+ 354, 133, 326, 326, 68, 117, 249, 326, 326, 326,
/* 1580 */
- 127, 333, 152, 333, 479, 333, 127, 333, 290, 326,
+ 326, 326, 326, 290, 318, 326, 326, 251, 336, 353,
/* 1590 */
- 333, 138, 257, 352, 348, 479, 347, 228, 257, 352,
+ 235, 311, 326, 326, 133, 326, 326, 76, 128, 326,
/* 1600 */
- 348, 119, 347, 333, 84, 127, 219, 363, 333, 479,
+ 326, 326, 326, 326, 326, 326, 290, 318, 326, 235,
/* 1610 */
- 333, 333, 333, 290, 326, 201, 187, 257, 352, 348,
+ 251, 336, 353, 133, 311, 326, 76, 128, 326, 326,
/* 1620 */
- 333, 347, 333, 333, 333, 279, 333, 333, 11, 25,
+ 326, 221, 326, 326, 326, 290, 318, 326, 326, 251,
/* 1630 */
- 228, 333, 336, 333, 121, 333, 333, 57, 127, 333,
+ 336, 353, 326, 311, 326, 326, 326, 326, 235, 326,
/* 1640 */
- 333, 333, 204, 333, 333, 333, 290, 326, 333, 333,
+ 215, 326, 121, 326, 326, 86, 128, 326, 326, 326,
/* 1650 */
- 257, 352, 348, 228, 347, 333, 333, 144, 333, 333,
+ 326, 326, 326, 326, 290, 318, 326, 326, 251, 336,
/* 1660 */
- 87, 127, 333, 333, 228, 333, 333, 333, 144, 290,
+ 353, 235, 311, 326, 326, 133, 326, 326, 59, 117,
/* 1670 */
- 326, 89, 127, 257, 352, 348, 333, 347, 333, 333,
+ 137, 326, 326, 355, 326, 326, 326, 290, 318, 326,
/* 1680 */
- 290, 326, 333, 228, 257, 352, 348, 93, 347, 333,
+ 326, 251, 336, 353, 235, 311, 326, 326, 133, 326,
/* 1690 */
- 55, 118, 333, 333, 228, 333, 333, 333, 144, 290,
+ 326, 76, 128, 326, 326, 326, 326, 326, 326, 326,
/* 1700 */
- 326, 80, 127, 257, 352, 348, 333, 347, 333, 228,
+ 290, 318, 326, 235, 251, 336, 353, 110, 311, 326,
/* 1710 */
- 290, 326, 333, 147, 257, 352, 348, 127, 347, 333,
+ 69, 128, 326, 326, 326, 217, 326, 326, 326, 290,
/* 1720 */
- 228, 333, 333, 333, 144, 333, 333, 60, 127, 257,
+ 318, 326, 326, 251, 336, 353, 326, 311, 326, 235,
/* 1730 */
- 352, 348, 333, 347, 333, 333, 290, 326, 333, 228,
+ 101, 160, 326, 133, 326, 326, 57, 128, 326, 326,
/* 1740 */
- 257, 352, 348, 144, 347, 333, 88, 127, 333, 333,
+ 321, 326, 326, 43, 19, 290, 318, 326, 235, 251,
/* 1750 */
- 333, 333, 333, 333, 333, 290, 326, 333, 228, 257,
+ 336, 353, 133, 311, 326, 73, 128, 208, 326, 326,
/* 1760 */
- 352, 348, 111, 347, 333, 67, 127, 333, 333, 228,
+ 326, 326, 326, 326, 290, 318, 326, 326, 251, 336,
/* 1770 */
- 333, 333, 333, 144, 290, 326, 72, 127, 257, 352,
+ 353, 235, 311, 326, 326, 133, 326, 326, 78, 128,
/* 1780 */
- 348, 333, 347, 333, 333, 290, 326, 333, 228, 257,
+ 326, 326, 326, 326, 326, 326, 326, 290, 318, 326,
/* 1790 */
- 352, 348, 144, 347, 333, 90, 127, 333, 333, 228,
+ 235, 251, 336, 353, 133, 311, 326, 70, 128, 326,
/* 1800 */
- 333, 333, 333, 144, 290, 326, 73, 127, 257, 352,
+ 326, 326, 326, 326, 326, 326, 290, 318, 326, 326,
/* 1810 */
- 348, 333, 347, 333, 333, 290, 326, 333, 333, 257,
+ 251, 336, 353, 326, 311, 326, 235, 198, 167, 326,
/* 1820 */
- 352, 348, 333, 347, 228, 333, 333, 333, 144, 333,
+ 133, 326, 326, 64, 128, 326, 326, 321, 326, 326,
/* 1830 */
- 333, 91, 127, 333, 333, 228, 333, 333, 333, 144,
+ 43, 19, 290, 318, 326, 235, 251, 336, 353, 133,
/* 1840 */
- 290, 326, 82, 127, 257, 352, 348, 333, 347, 333,
+ 311, 326, 67, 128, 208, 326, 326, 326, 326, 326,
/* 1850 */
- 333, 290, 326, 333, 228, 257, 352, 348, 144, 347,
+ 326, 290, 318, 326, 326, 251, 336, 353, 235, 311,
/* 1860 */
- 333, 58, 127, 333, 333, 228, 333, 333, 333, 144,
+ 326, 326, 133, 326, 326, 88, 128, 326, 326, 326,
/* 1870 */
- 290, 326, 78, 127, 257, 352, 348, 333, 347, 333,
+ 326, 326, 326, 326, 290, 318, 326, 235, 251, 336,
/* 1880 */
- 333, 290, 326, 333, 228, 257, 352, 348, 144, 347,
+ 353, 133, 311, 326, 82, 128, 326, 326, 326, 326,
/* 1890 */
- 333, 64, 127, 333, 333, 228, 333, 333, 333, 144,
+ 326, 326, 326, 290, 318, 326, 326, 251, 336, 353,
/* 1900 */
- 290, 326, 76, 127, 257, 352, 348, 333, 347, 333,
+ 326, 311, 326, 235, 198, 188, 326, 133, 326, 326,
/* 1910 */
- 333, 290, 326, 333, 333, 257, 352, 348, 333, 347,
+ 72, 128, 326, 326, 321, 326, 326, 43, 19, 290,
/* 1920 */
- 228, 333, 333, 333, 144, 333, 333, 63, 127, 333,
+ 318, 326, 235, 251, 336, 353, 93, 311, 326, 55,
/* 1930 */
- 333, 228, 333, 333, 333, 144, 290, 326, 75, 127,
+ 116, 208, 326, 326, 326, 326, 326, 326, 290, 318,
/* 1940 */
- 257, 352, 348, 333, 347, 333, 333, 290, 326, 333,
+ 326, 326, 251, 336, 353, 235, 311, 326, 326, 112,
/* 1950 */
- 228, 257, 352, 348, 144, 347, 333, 70, 127, 333,
+ 326, 326, 87, 128, 326, 326, 326, 326, 326, 326,
/* 1960 */
- 333, 228, 333, 333, 333, 113, 290, 326, 74, 127,
+ 326, 290, 318, 326, 235, 251, 336, 353, 133, 311,
/* 1970 */
- 257, 352, 348, 333, 347, 333, 333, 290, 326, 333,
+ 326, 77, 128, 326, 326, 326, 326, 326, 326, 326,
/* 1980 */
- 228, 257, 352, 348, 144, 347, 333, 59, 127, 333,
+ 290, 318, 326, 326, 251, 336, 353, 326, 311, 326,
/* 1990 */
- 333, 228, 333, 333, 333, 144, 290, 326, 54, 127,
+ 235, 326, 326, 326, 133, 326, 326, 89, 128, 326,
/* 2000 */
- 257, 352, 348, 333, 347, 333, 333, 290, 326, 333,
+ 326, 326, 326, 326, 326, 326, 290, 318, 326, 235,
/* 2010 */
- 333, 257, 352, 348, 333, 347, 228, 333, 333, 333,
+ 251, 336, 353, 133, 311, 326, 75, 128, 326, 326,
/* 2020 */
- 144, 333, 333, 62, 127, 333, 333, 228, 333, 333,
+ 326, 326, 326, 326, 326, 290, 318, 326, 326, 251,
/* 2030 */
- 333, 144, 290, 326, 79, 127, 215, 352, 348, 333,
+ 336, 353, 235, 311, 326, 326, 133, 326, 326, 91,
/* 2040 */
- 347, 333, 333, 290, 326, 333, 333, 257, 352, 348,
+ 128, 326, 326, 326, 326, 326, 326, 326, 290, 318,
/* 2050 */
- 333, 347, 10, 333, 333, 333, 228, 4, 107, 333,
+ 326, 235, 251, 336, 353, 133, 311, 326, 62, 128,
/* 2060 */
- 149, 333, 333, 136, 127, 333, 228, 232, 333, 234,
+ 326, 326, 326, 326, 326, 326, 326, 290, 318, 326,
/* 2070 */
- 144, 333, 333, 71, 127, 333, 257, 352, 348, 333,
+ 326, 251, 336, 353, 326, 311, 326, 235, 326, 326,
/* 2080 */
- 347, 333, 290, 326, 333, 228, 257, 352, 348, 144,
+ 326, 93, 326, 326, 53, 116, 326, 326, 326, 326,
/* 2090 */
- 347, 333, 69, 127, 333, 333, 333, 333, 333, 333,
+ 326, 326, 326, 290, 318, 326, 235, 220, 336, 353,
/* 2100 */
- 333, 290, 326, 333, 228, 257, 352, 348, 144, 347,
+ 133, 311, 326, 63, 128, 326, 326, 326, 326, 326,
/* 2110 */
- 333, 77, 127, 331, 30, 338, 333, 333, 333, 333,
+ 326, 326, 290, 318, 326, 326, 251, 336, 353, 235,
/* 2120 */
- 290, 326, 333, 228, 257, 352, 348, 144, 347, 333,
+ 311, 326, 326, 133, 326, 326, 61, 128, 326, 326,
/* 2130 */
- 83, 127, 333, 333, 333, 333, 333, 333, 333, 290,
+ 326, 326, 326, 326, 326, 290, 318, 326, 235, 214,
/* 2140 */
- 326, 333, 333, 257, 352, 348, 333, 347, 10, 333,
+ 336, 353, 133, 311, 326, 71, 128, 326, 326, 326,
/* 2150 */
- 333, 333, 333, 4, 107, 333, 333, 333, 333, 136,
+ 326, 326, 326, 326, 290, 318, 326, 326, 251, 336,
/* 2160 */
- 333, 333, 228, 232, 333, 234, 144, 333, 333, 81,
+ 353, 326, 311, 326, 235, 326, 326, 326, 133, 326,
/* 2170 */
- 127, 333, 333, 228, 333, 333, 333, 144, 290, 326,
+ 326, 85, 128, 326, 326, 326, 326, 326, 326, 326,
/* 2180 */
- 61, 127, 257, 352, 348, 216, 347, 403, 333, 290,
+ 290, 318, 326, 235, 251, 336, 353, 133, 311, 326,
/* 2190 */
- 326, 333, 333, 257, 352, 348, 228, 347, 333, 333,
+ 65, 128, 326, 326, 326, 326, 326, 326, 326, 290,
/* 2200 */
- 112, 333, 333, 85, 127, 333, 333, 258, 333, 332,
+ 318, 326, 326, 251, 336, 353, 235, 311, 326, 326,
/* 2210 */
- 30, 338, 290, 326, 333, 18, 257, 352, 348, 228,
+ 111, 326, 326, 74, 128, 326, 326, 326, 326, 326,
/* 2220 */
- 347, 24, 333, 156, 3, 434, 333, 127, 228, 333,
+ 326, 326, 290, 318, 326, 235, 251, 336, 353, 118,
/* 2230 */
- 333, 333, 150, 333, 333, 333, 127, 333, 333, 257,
+ 311, 326, 58, 128, 326, 326, 326, 326, 326, 326,
/* 2240 */
- 352, 348, 333, 347, 248, 333, 333, 138, 257, 352,
+ 326, 290, 318, 326, 326, 251, 336, 353, 326, 311,
/* 2250 */
- 348, 333, 347, 434, 333, 201, 166, 333, 333, 434,
+ 326, 235, 326, 326, 326, 133, 326, 326, 56, 128,
/* 2260 */
- 333, 333, 3, 201, 163, 279, 333, 333, 11, 25,
+ 326, 326, 326, 326, 326, 326, 326, 290, 318, 326,
/* 2270 */
- 102, 165, 333, 279, 333, 333, 11, 25, 201, 170,
+ 235, 251, 336, 353, 133, 311, 326, 79, 128, 326,
/* 2280 */
- 279, 333, 204, 11, 25, 138, 201, 167, 279, 333,
+ 326, 326, 326, 326, 326, 326, 290, 318, 326, 326,
/* 2290 */
- 204, 11, 25, 333, 333, 333, 279, 204, 333, 11,
+ 251, 336, 353, 235, 311, 326, 326, 133, 326, 326,
/* 2300 */
- 25, 333, 333, 333, 333, 204, 333, 333, 333, 333,
+ 80, 128, 326, 326, 326, 326, 326, 326, 326, 290,
/* 2310 */
- 333, 333, 333, 204,
+ 318, 326, 235, 251, 336, 353, 133, 311, 326, 84,
+ /* 2320 */
+ 128, 326, 326, 326, 326, 326, 326, 326, 290, 318,
+ /* 2330 */
+ 326, 326, 251, 336, 353, 326, 311, 326, 235, 326,
+ /* 2340 */
+ 326, 326, 133, 326, 326, 66, 128, 326, 326, 326,
+ /* 2350 */
+ 326, 326, 326, 326, 290, 318, 326, 344, 251, 336,
+ /* 2360 */
+ 353, 326, 311, 326, 10, 326, 326, 326, 326, 2,
+ /* 2370 */
+ 108, 344, 326, 326, 326, 139, 326, 326, 10, 250,
+ /* 2380 */
+ 326, 228, 326, 2, 108, 326, 326, 326, 326, 139,
+ /* 2390 */
+ 326, 326, 326, 250, 326, 228, 235, 326, 326, 326,
+ /* 2400 */
+ 133, 326, 326, 60, 128, 326, 326, 326, 326, 326,
+ /* 2410 */
+ 326, 326, 290, 318, 326, 326, 251, 336, 353, 326,
+ /* 2420 */
+ 311, 326, 326, 326, 326, 306, 16, 347, 326, 235,
+ /* 2430 */
+ 326, 326, 326, 133, 326, 326, 81, 128, 326, 327,
+ /* 2440 */
+ 16, 347, 326, 326, 326, 290, 318, 326, 326, 251,
+ /* 2450 */
+ 336, 353, 326, 311, 326, 326, 235, 326, 326, 326,
+ /* 2460 */
+ 133, 326, 326, 68, 128, 326, 326, 326, 326, 326,
+ /* 2470 */
+ 326, 326, 290, 318, 326, 326, 251, 336, 353, 326,
+ /* 2480 */
+ 311, 326, 235, 326, 326, 326, 133, 326, 326, 54,
+ /* 2490 */
+ 128, 326, 326, 326, 326, 326, 326, 326, 290, 318,
+ /* 2500 */
+ 326, 326, 251, 336, 353, 235, 311, 326, 326, 133,
+ /* 2510 */
+ 326, 326, 83, 128, 326, 326, 235, 326, 326, 326,
+ /* 2520 */
+ 133, 290, 318, 90, 128, 251, 336, 353, 326, 311,
+ /* 2530 */
+ 326, 326, 290, 318, 326, 326, 251, 336, 353, 326,
+ /* 2540 */
+ 311,
);
static public $yy_lookahead = array(
/* 0 */
- 1, 40, 3, 115, 116, 4, 5, 6, 7, 8,
+ 1, 38, 3, 40, 91, 4, 5, 6, 7, 8,
/* 10 */
- 9, 10, 11, 12, 13, 14, 15, 16, 115, 116,
+ 9, 10, 11, 12, 13, 14, 15, 104, 105, 18,
/* 20 */
- 19, 19, 61, 21, 63, 24, 25, 1, 67, 3,
+ 118, 18, 60, 20, 23, 24, 1, 65, 3, 30,
/* 30 */
- 31, 30, 1, 31, 3, 34, 37, 36, 21, 37,
+ 29, 118, 1, 30, 33, 36, 35, 21, 22, 36,
/* 40 */
- 27, 42, 43, 44, 45, 46, 47, 48, 49, 50,
+ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
/* 50 */
- 51, 52, 53, 54, 55, 1, 1, 31, 32, 1,
+ 51, 52, 53, 54, 1, 30, 31, 1, 1, 3,
/* 60 */
- 39, 3, 19, 37, 21, 22, 92, 68, 69, 70,
+ 3, 36, 2, 18, 19, 20, 67, 68, 69, 70,
/* 70 */
- 71, 72, 73, 74, 75, 76, 77, 78, 79, 105,
+ 71, 72, 73, 74, 75, 76, 77, 78, 62, 30,
/* 80 */
- 106, 64, 56, 29, 31, 31, 31, 56, 67, 31,
+ 55, 28, 37, 30, 111, 36, 30, 30, 18, 36,
/* 90 */
- 37, 37, 37, 119, 81, 37, 42, 43, 44, 45,
+ 20, 21, 36, 36, 41, 42, 43, 44, 45, 46,
/* 100 */
- 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ 47, 48, 49, 50, 51, 52, 53, 54, 1, 91,
/* 110 */
- 1, 84, 85, 86, 87, 88, 19, 20, 21, 19,
+ 92, 55, 55, 83, 84, 85, 86, 87, 38, 101,
/* 120 */
- 20, 21, 68, 69, 70, 71, 72, 73, 74, 75,
+ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
/* 130 */
- 76, 77, 78, 79, 19, 38, 21, 22, 87, 19,
+ 77, 78, 18, 63, 20, 21, 118, 30, 1, 18,
/* 140 */
- 31, 21, 27, 33, 40, 39, 37, 41, 1, 92,
+ 3, 20, 21, 36, 111, 39, 66, 26, 41, 42,
/* 150 */
- 40, 42, 43, 44, 45, 46, 47, 48, 49, 50,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
/* 160 */
- 51, 52, 53, 54, 55, 22, 23, 63, 19, 23,
+ 53, 54, 1, 1, 26, 3, 60, 30, 62, 15,
/* 170 */
- 21, 22, 116, 63, 123, 124, 119, 68, 69, 70,
+ 16, 17, 66, 36, 67, 68, 69, 70, 71, 72,
/* 180 */
- 71, 72, 73, 74, 75, 76, 77, 78, 79, 42,
+ 73, 74, 75, 76, 77, 78, 18, 19, 20, 32,
/* 190 */
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ 100, 1, 30, 109, 1, 18, 39, 20, 36, 1,
/* 200 */
- 53, 54, 55, 1, 119, 3, 63, 1, 1, 3,
+ 116, 3, 41, 42, 43, 44, 45, 46, 47, 48,
/* 210 */
- 86, 87, 88, 64, 67, 68, 69, 70, 71, 72,
+ 49, 50, 51, 52, 53, 54, 1, 55, 80, 62,
/* 220 */
- 73, 74, 75, 76, 77, 78, 79, 5, 6, 1,
+ 30, 85, 86, 87, 39, 32, 36, 66, 67, 68,
***The diff for this file has been truncated for email.***
=======================================
--- /trunk/development/lexer/smarty_internal_templateparser.y Tue Oct 14
21:45:05 2014 UTC
+++ /trunk/development/lexer/smarty_internal_templateparser.y Thu Oct 16
22:53:22 2014 UTC
@@ -47,15 +47,6 @@
$this->asp_tags = (ini_get('asp_tags') != '0');
$this->current_buffer = $this->root_buffer = new
_smarty_template_buffer($this);
}
-
- public static function escape_start_tag($tag_text) {
- $tag = preg_replace('/\A<\?(.*)\z/', '<<?php ?>?\1', $tag_text,
-1 , $count); //Escape tag
- return $tag;
- }
-
- public static function escape_end_tag($tag_text) {
- return '?<?php ?>>';
- }

public function compileVariable($variable) {
if (strpos($variable,'(') == 0) {
@@ -157,12 +148,9 @@
if ($this->php_handling == Smarty::PHP_PASSTHRU) {
if ($this->lex->is_phpScript) {
$s = addcslashes(st, "'");
- $this->compiler->tag_nocache = true;
- $save = $this->template->has_nocache_code;
- res = new _smarty_text($this,
$this->compiler->processNocacheCode("<?php echo '{$s}';?>\n", true));
- $this->template->has_nocache_code = $save;
+ res = new _smarty_text($this, $s);
} else {
- res = new _smarty_text($this, self::escape_start_tag(st));
+ res = new _smarty_text($this, st);
}
} elseif ($this->php_handling == Smarty::PHP_QUOTE) {
res = new _smarty_text($this, htmlspecialchars(st, ENT_QUOTES));
@@ -170,26 +158,26 @@
if (!($this->smarty instanceof SmartyBC)) {
$this->compiler->trigger_template_error (self::Err3);
}
- res = new _smarty_text($this,
$this->compiler->processNocacheCode('<?php ', true));
+ res = new _smarty_tag($this,
$this->compiler->processNocacheCode('<?php ', true));
} elseif ($this->php_handling == Smarty::PHP_REMOVE) {
res = null;
}
}

// '?>' tag
-template_element(res)::= PHPENDTAG. {
+template_element(res)::= PHPENDTAG(st). {
if ($this->is_xml) {
$this->compiler->tag_nocache = true;
$this->is_xml = false;
$save = $this->template->has_nocache_code;
- res = new _smarty_text($this,
$this->compiler->processNocacheCode("<?php echo '?>';?>\n",
$this->compiler, true));
- $this->template->has_nocache_code = $save;
+ res = new _smarty_tag($this,
$this->compiler->processNocacheCode("<?php echo '?>';?>\n",
$this->compiler, true));
+ $this->template->has_nocache_code = $save;
} elseif ($this->php_handling == Smarty::PHP_PASSTHRU) {
- res = new _smarty_text($this, '?<?php ?>>');
+ res = new _smarty_text($this, st);
} elseif ($this->php_handling == Smarty::PHP_QUOTE) {
res = new _smarty_text($this, htmlspecialchars('?>', ENT_QUOTES));
} elseif ($this->php_handling == Smarty::PHP_ALLOW) {
- res = new _smarty_text($this,
$this->compiler->processNocacheCode('?>', true));
+ res = new _smarty_tag($this,
$this->compiler->processNocacheCode('?>', true));
} elseif ($this->php_handling == Smarty::PHP_REMOVE) {
res = null;
}
@@ -205,7 +193,7 @@
} elseif ($this->php_handling == Smarty::PHP_QUOTE) {
res = new _smarty_text($this, htmlspecialchars(st,
ENT_QUOTES));
} elseif ($this->php_handling == Smarty::PHP_ALLOW) {
- res = new _smarty_text($this,
$this->compiler->processNocacheCode('?>', true));
+ res = new _smarty_tag($this,
$this->compiler->processNocacheCode('?>', true));
} elseif ($this->php_handling == Smarty::PHP_REMOVE) {
res = null;
}
@@ -215,7 +203,7 @@
// '<%' tag
template_element(res)::= ASPSTARTTAG(st). {
if ($this->php_handling == Smarty::PHP_PASSTHRU) {
- res = new _smarty_text($this, '<<?php ?>%');
+ res = new _smarty_text($this, st);
} elseif ($this->php_handling == Smarty::PHP_QUOTE) {
res = new _smarty_text($this, htmlspecialchars(st, ENT_QUOTES));
} elseif ($this->php_handling == Smarty::PHP_ALLOW) {
@@ -223,15 +211,15 @@
if (!($this->smarty instanceof SmartyBC)) {
$this->compiler->trigger_template_error (self::Err3);
}
- res = new _smarty_text($this,
$this->compiler->processNocacheCode('<%', true));
+ res = new _smarty_tag($this,
$this->compiler->processNocacheCode('<%', true));
} else {
- res = new _smarty_text($this, '<<?php ?>%');
+ res = new _smarty_text($this, st);
}
} elseif ($this->php_handling == Smarty::PHP_REMOVE) {
if ($this->asp_tags) {
res = null;
} else {
- res = new _smarty_text($this, '<<?php ?>%');
+ res = new _smarty_text($this, st);
}
}
}
@@ -239,38 +227,31 @@
// '%>' tag
template_element(res)::= ASPENDTAG(et). {
if ($this->php_handling == Smarty::PHP_PASSTHRU) {
- res = new _smarty_text($this, '%<?php ?>>');
+ res = new _smarty_text($this, st);
} elseif ($this->php_handling == Smarty::PHP_QUOTE) {
res = new _smarty_text($this, htmlspecialchars('%>', ENT_QUOTES));
} elseif ($this->php_handling == Smarty::PHP_ALLOW) {
if ($this->asp_tags) {
- res = new _smarty_text($this,
$this->compiler->processNocacheCode('%>', true));
+ res = new _smarty_tag($this,
$this->compiler->processNocacheCode('%>', true));
} else {
- res = new _smarty_text($this, '%<?php ?>>');
+ res = new _smarty_text($this, st);
}
} elseif ($this->php_handling == Smarty::PHP_REMOVE) {
if ($this->asp_tags) {
res = null;
} else {
- res = new _smarty_text($this, '%<?php ?>>');
+ res = new _smarty_text($this, st);
}
}
}

-template_element(res)::= FAKEPHPSTARTTAG(o). {
- if ($this->strip) {
- res = new _smarty_text($this, preg_replace('![\t ]*[\r\n]+[\t
]*!', '', self::escape_start_tag(o)));
- } else {
- res = new _smarty_text($this, self::escape_start_tag(o));
- }
-}

// XML tag
template_element(res)::= XMLTAG. {
$this->compiler->tag_nocache = true;
$this->is_xml = true;
$save = $this->template->has_nocache_code;
- res = new _smarty_text($this,
$this->compiler->processNocacheCode("<?php echo '<?xml';?>",
$this->compiler, true));
+ res = new _smarty_tag($this,
$this->compiler->processNocacheCode("<?php echo '<?xml';?>",
$this->compiler, true));
$this->template->has_nocache_code = $save;
}

@@ -324,26 +305,6 @@
literal_element(res) ::= LITERAL(l). {
res = l;
}
-
-literal_element(res) ::= PHPSTARTTAG(st). {
- res = self::escape_start_tag(st);
-}
-
-literal_element(res) ::= FAKEPHPSTARTTAG(st). {
- res = self::escape_start_tag(st);
-}
-
-literal_element(res) ::= PHPENDTAG(et). {
- res = self::escape_end_tag(et);
-}
-
-literal_element(res) ::= ASPSTARTTAG(st). {
- res = '<<?php ?>%';
-}
-
-literal_element(res) ::= ASPENDTAG(et). {
- res = '%<?php ?>>';
-}

//
// output tags start here
=======================================
--- /trunk/distribution/change_log.txt Thu Oct 16 01:33:28 2014 UTC
+++ /trunk/distribution/change_log.txt Thu Oct 16 22:53:22 2014 UTC
@@ -1,4 +1,7 @@
===== 3.1.21-dev ===== (xx.xx.2014)
+ 17.10.2014
+ - bugfix on $php_handling security and optimization of
smarty_internal_parsetree (Thue Kristensen)
+
16.10.2014
- bugfix composer.json update

=======================================
--- /trunk/distribution/libs/sysplugins/smarty_internal_compile_break.php
Fri Jun 6 02:40:04 2014 UTC
+++ /trunk/distribution/libs/sysplugins/smarty_internal_compile_break.php
Thu Oct 16 22:53:22 2014 UTC
@@ -70,6 +70,6 @@
$compiler->trigger_template_error("cannot break {$_levels}
level(s)", $compiler->lex->taglineno);
}

- return "<?php break {$_levels}?>";
+ return "<?php break {$_levels};?>";
}
}
=======================================
---
/trunk/distribution/libs/sysplugins/smarty_internal_compile_continue.php
Fri Jun 6 02:40:04 2014 UTC
+++
/trunk/distribution/libs/sysplugins/smarty_internal_compile_continue.php
Thu Oct 16 22:53:22 2014 UTC
@@ -70,6 +70,6 @@
$compiler->trigger_template_error("cannot continue {$_levels}
level(s)", $compiler->lex->taglineno);
}

- return "<?php continue {$_levels}?>";
+ return "<?php continue {$_levels};?>";
}
}
=======================================
---
/trunk/distribution/libs/sysplugins/smarty_internal_compile_function.php
Fri Jun 6 02:40:04 2014 UTC
+++
/trunk/distribution/libs/sysplugins/smarty_internal_compile_function.php
Thu Oct 16 22:53:22 2014 UTC
@@ -135,12 +135,7 @@
}

$plugins_string .= "?>/*/%%SmartyNocache:{$compiler->template->properties['nocache_hash']}%%*/';?>\n";
}
- // remove last line break from function definition
- $last = count($compiler->parser->current_buffer->subtrees) - 1;
- if ($compiler->parser->current_buffer->subtrees[$last] instanceof
_smarty_linebreak) {
- unset($compiler->parser->current_buffer->subtrees[$last]);
- }
- // if caching save template function for possible nocache call
+ // if caching save template function for possible nocache call
if ($compiler->template->caching) {

$compiler->template->properties['function'][$_name]['compiled'] .=
$plugins_string
. $compiler->parser->current_buffer->to_smarty_php();
=======================================
--- /trunk/distribution/libs/sysplugins/smarty_internal_parsetree.php Fri
Jun 6 02:40:04 2014 UTC
+++ /trunk/distribution/libs/sysplugins/smarty_internal_parsetree.php Thu
Oct 16 22:53:22 2014 UTC
@@ -91,7 +91,7 @@
public function assign_to_var()
{
$var = sprintf('$_tmp%d',
++Smarty_Internal_Templateparser::$prefix_number);
- $this->parser->compiler->prefix_code[] = sprintf('<?php
ob_start();?>%s<?php %s=ob_get_clean();?>', $this->data, $var);
+ $this->parser->compiler->prefix_code[] = sprintf("<?php
ob_start();\n%s\n%s=ob_get_clean();?>",
preg_replace(array('/^\s*<\?php\s+/','/\s*\?>\s*$/'), '', $this->data),
$var);

return $var;
}
@@ -271,7 +271,9 @@
*/
public function append_subtree(_smarty_parsetree $subtree)
{
- $this->subtrees[] = $subtree;
+ if ($subtree->data !== '') {
+ $this->subtrees[] = $subtree;
+ }
}

/**
@@ -283,50 +285,47 @@
{
$code = '';
for ($key = 0, $cnt = count($this->subtrees); $key < $cnt; $key
++) {
- if ($key + 2 < $cnt) {
- if ($this->subtrees[$key] instanceof _smarty_linebreak &&
$this->subtrees[$key + 1] instanceof _smarty_tag && $this->subtrees[$key +
1]->data == '' && $this->subtrees[$key + 2] instanceof _smarty_linebreak) {
- $key = $key + 1;
- continue;
+ if ($this->subtrees[$key] instanceof _smarty_text) {
+ $subtree = $this->subtrees[$key]->to_smarty_php();
+ while ($key + 1 < $cnt && ($this->subtrees[$key+1]
instanceof _smarty_text || $this->subtrees[$key +1]->data == '')) {
+ $key++;
+ if ($this->subtrees[$key]->data == '') {
+ continue;
+ }
+ $subtree .= $this->subtrees[$key]->to_smarty_php();
}
- if (substr($this->subtrees[$key]->data, - 1) == '<' &&
$this->subtrees[$key + 1]->data == '' && substr($this->subtrees[$key +
2]->data, - 1) == '?') {
- $key = $key + 2;
+ if ($subtree == '') {
continue;
}
- }
- if (substr($code, - 1) == '<') {
- $subtree = $this->subtrees[$key]->to_smarty_php();
- if (substr($subtree, 0, 1) == '?') {
- $code = substr($code, 0, strlen($code) -
1) . '<<?php ?>?' . substr($subtree, 1);
- } elseif ($this->parser->asp_tags && substr($subtree, 0,
1) == '%') {
- $code = substr($code, 0, strlen($code) -
1) . '<<?php ?>%' . substr($subtree, 1);
- } else {
- $code .= $subtree;
- }
+ $code .= preg_replace('/(<%|%>|<\?php|<\?|\?>|
<\/?script)/', "<?php echo '\$1'; ?>\n", $subtree);
continue;
}
- if ($this->parser->asp_tags && substr($code, - 1) == '%') {
+ if ($this->subtrees[$key] instanceof _smarty_tag) {
$subtree = $this->subtrees[$key]->to_smarty_php();
- if (substr($subtree, 0, 1) == '>') {
- $code = substr($code, 0, strlen($code) -
1) . '%<?php ?>>' . substr($subtree, 1);
- } else {
- $code .= $subtree;
+ while ($key + 1 < $cnt && ($this->subtrees[$key+1]
instanceof _smarty_tag || $this->subtrees[$key +1]->data == '')) {
+ $key++;
+ if ($this->subtrees[$key]->data == '') {
+ continue;
+ }
+ $newCode = $this->subtrees[$key]->to_smarty_php();
+ if ((preg_match('/^\s*<\?php\s+/', $newCode) &&
preg_match('/\s*\?>\s*$/', $subtree))) {
+ $subtree = preg_replace('/\s*\?>\s*$/', "\n",
$subtree);
+ $subtree .= preg_replace('/^\s*<\?php\s+/', '',
$newCode);
+ } else {
+ $subtree .= $newCode;
+ }
}
- continue;
- }
- if (substr($code, - 1) == '?') {
- $subtree = $this->subtrees[$key]->to_smarty_php();
- if (substr($subtree, 0, 1) == '>') {
- $code = substr($code, 0, strlen($code) -
1) . '?<?php ?>>' . substr($subtree, 1);
- } else {
- $code .= $subtree;
+ if ($subtree == '') {
+ continue;
}
+ $code .= $subtree;
continue;
}
$code .= $this->subtrees[$key]->to_smarty_php();
}
-
return $code;
}
+
}

/**
@@ -360,35 +359,3 @@
return $this->data;
}
}
-
-/**
- * template linebreaks
- *
- * @package Smarty
- * @subpackage Compiler
- * @ignore
- */
-class _smarty_linebreak extends _smarty_parsetree
-{
- /**
- * Create buffer with linebreak content
- *
- * @param object $parser parser object
- * @param string $data linebreak string
- */
- public function __construct($parser, $data)
- {
- $this->parser = $parser;
- $this->data = $data;
- }
-
- /**
- * Return linebrak
- *
- * @return string linebreak
- */
- public function to_smarty_php()
- {
- return $this->data;
- }
-}
=======================================
--- /trunk/distribution/libs/sysplugins/smarty_internal_templatelexer.php
Tue Oct 14 21:45:05 2014 UTC
+++ /trunk/distribution/libs/sysplugins/smarty_internal_templatelexer.php
Thu Oct 16 22:53:22 2014 UTC
@@ -23,6 +23,7 @@
public $is_phpScript = false;
public $state = 1;
public $smarty;
+ public $literal_cnt = 0;
private $heredoc_id_stack = Array();
public $yyTraceFILE;
public $yyTracePrompt;
@@ -163,13 +164,12 @@
19 => 0,
20 => 0,
21 => 0,
- 22 => 4,
- 27 => 0,
+ 22 => 0,
);
if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
- $yy_global_pattern = "/\G(\\{\\})|\G(" .
$this->ldel . "\\*([\S\s]*?)\\*" . $this->rdel . ")|\G(" .
$this->ldel . "\\s*strip\\s*" . $this->rdel . ")|\G(" .
$this->ldel . "\\s*\/strip\\s*" . $this->rdel . ")|\G(" .
$this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" .
$this->ldel . "\\s*(if|elseif|else if|while)\\s+)|\G(" .
$this->ldel . "\\s*for\\s+)|\G(" . $this->ldel . "\\s*foreach(?![^\s]))|
\G(" . $this->ldel . "\\s*setfilter\\s+)|\G(" . $this->ldel . "\\s*\/)|
\G(" . $this->ldel . "\\s*)|
\G((<script\\s+language\\s*=\\s*[\"']?\\s*php\\s*[\"']?\\s*>)|
(<\\?(?:php\\w+|=|[a-zA-Z]+)?))|\G(\\?>)|\G(<\/script>)|\G(\\s*" .
$this->rdel . ")|\G(<%)|\G(%>)|\G(<(([^>]*?)(?=" . $this->ldel . ")" .
$this->ldel . "([\S\s]*?)" . $this->rdel . ")+([^>]*?)(?!" .
$this->ldel . ")>)|\G([\S\s])/iS";
+ $yy_global_pattern = "/\G(\\{\\})|\G(" .
$this->ldel . "\\*([\S\s]*?)\\*" . $this->rdel . ")|\G(" .
$this->ldel . "\\s*strip\\s*" . $this->rdel . ")|\G(" .
$this->ldel . "\\s*\/strip\\s*" . $this->rdel . ")|\G(" .
$this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" .
$this->ldel . "\\s*(if|elseif|else if|while)\\s+)|\G(" .
$this->ldel . "\\s*for\\s+)|\G(" . $this->ldel . "\\s*foreach(?![^\s]))|
\G(" . $this->ldel . "\\s*setfilter\\s+)|\G(" . $this->ldel . "\\s*\/)|
\G(" . $this->ldel . "\\s*)|
\G((<script\\s+language\\s*=\\s*[\"']?\\s*php\\s*[\"']?\\s*>)|
(<\\?(?:php\\w+|=|[a-zA-Z]+)?))|\G(\\?>)|\G(<\/script>)|\G(\\s*" .
$this->rdel . ")|\G(<%)|\G(%>)|\G([\S\s])/iS";

do {
if (preg_match($yy_global_pattern, $this->data, $yymatches,
null, $this->counter)) {
@@ -345,8 +345,8 @@
} elseif ($this->value == '<?xml') {
$this->token = Smarty_Internal_Templateparser::TP_XMLTAG;
} else {
- $this->token =
Smarty_Internal_Templateparser::TP_FAKEPHPSTARTTAG;
- $this->value = substr($this->value, 0, 2);
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ //$this->value = substr($this->value, 0, 2);
}
}

@@ -383,22 +383,9 @@
function yy_r1_22($yy_subpatterns)
{

- $clean =
preg_replace("/{$this->ldel}([\S\s]*?){$this->rdel}/", '', $this->value);
- if
(preg_match("/<script\s+language\s*=\s*[\"\']?\s*php\s*[\"\']?\s*>/",
$clean, $match)) {
- $this->compiler->trigger_template_error('Security error:
Illegal code injection');
- } else {
- preg_match("/([\S\s]*?)(?={$this->ldel})/", $this->value,
$match);
- $this->value = $match[0];
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- }
- }
-
- function yy_r1_27($yy_subpatterns)
- {
-
$phpEndScript = $this->is_phpScript ? '|<\\/script>' : '';
$to = strlen($this->data);
- preg_match("/<\?|<%|\?>|%>|
<script\s+language\s*=\s*[\"\']?\s*php\s*[\"\']?\s*>|
<(([^>]*?)(?={$this->ldel}){$this->ldel}([\S\s]*?){$this->rdel})+([^>]*?)(?!{$this->ldel})>|
{$this->ldel}{$phpEndScript}/", $this->data, $match, PREG_OFFSET_CAPTURE,
$this->counter);
+ preg_match("/{$this->ldel}|<\?|<%|\?>|%>|
<script\s+language\s*=\s*[\"\']?\s*php\s*[\"\']?\s*>{$phpEndScript}/",
$this->data, $match, PREG_OFFSET_CAPTURE, $this->counter);
if (isset($match[0][1])) {
$to = $match[0][1];
}
@@ -969,20 +956,14 @@
public function yylex3()
{
$tokenMap = array(
- 1 => 0,
- 2 => 0,
- 3 => 2,
- 6 => 0,
- 7 => 0,
- 8 => 0,
- 9 => 0,
- 10 => 4,
- 15 => 0,
+ 1 => 0,
+ 2 => 0,
+ 3 => 0,
);
if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
- $yy_global_pattern = "/\G(" . $this->ldel . "\\s*literal\\s*" .
$this->rdel . ")|\G(" . $this->ldel . "\\s*\/literal\\s*" .
$this->rdel . ")|
\G((<script\\s+language\\s*=\\s*[\"']?\\s*php\\s*[\"']?\\s*>)|
(<\\?(?:php\\w+|=|[a-zA-Z]+)?))|\G(\\?>)|\G(<\/script>)|\G(<%)|\G(%>)|
\G(<(([^>]*?)(?=" . $this->ldel . ")" . $this->ldel . "([\S\s]*?)" .
$this->rdel . ")+([^>]*?)(?!" . $this->ldel . ")>)|\G([\S\s])/iS";
+ $yy_global_pattern = "/\G(" . $this->ldel . "\\s*literal\\s*" .
$this->rdel . ")|\G(" . $this->ldel . "\\s*\/literal\\s*" .
$this->rdel . ")|\G([\S\s])/iS";

do {
if (preg_match($yy_global_pattern, $this->data, $yymatches,
null, $this->counter)) {
@@ -1035,19 +1016,16 @@
function yy_r3_1($yy_subpatterns)
{

- if ($this->smarty->auto_literal &&
isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r",
$this->value[$this->ldel_length]) !== false : false) {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- } else {
- $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART;
- $this->yypushstate(self::LITERAL);
- }
+ $this->literal_cnt ++;
+ $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
}

function yy_r3_2($yy_subpatterns)
{

- if ($this->smarty->auto_literal &&
isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r",
$this->value[$this->ldel_length]) !== false : false) {
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ if ($this->literal_cnt) {
+ $this->literal_cnt --;
+ $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
} else {
$this->token = Smarty_Internal_Templateparser::TP_LITERALEND;
$this->yypopstate();
@@ -1057,60 +1035,8 @@
function yy_r3_3($yy_subpatterns)
{

- if (($script = strpos($this->value, '<s') === 0) ||
in_array($this->value, Array('<?', '<?=', '<?php'))) {
- if ($script) {
- $this->is_phpScript = true;
- }
- $this->token = Smarty_Internal_Templateparser::TP_PHPSTARTTAG;
- } else {
- $this->token =
Smarty_Internal_Templateparser::TP_FAKEPHPSTARTTAG;
- $this->value = substr($this->value, 0, 2);
- }
- }
-
- function yy_r3_6($yy_subpatterns)
- {
-
- $this->token = Smarty_Internal_Templateparser::TP_PHPENDTAG;
- }
-
- function yy_r3_7($yy_subpatterns)
- {
-
- $this->token = Smarty_Internal_Templateparser::TP_PHPENDSCRIPT;
- }
-
- function yy_r3_8($yy_subpatterns)
- {
-
- $this->token = Smarty_Internal_Templateparser::TP_ASPSTARTTAG;
- }
-
- function yy_r3_9($yy_subpatterns)
- {
-
- $this->token = Smarty_Internal_Templateparser::TP_ASPENDTAG;
- }
-
- function yy_r3_10($yy_subpatterns)
- {
-
- $clean =
preg_replace("/{$this->ldel}([\S\s]*?){$this->rdel}/", '', $this->value);
- if
(preg_match("/<script\s+language\s*=\s*[\"\']?\s*php\s*[\"\']?\s*>/",
$clean, $match)) {
- $this->compiler->trigger_template_error('Security error:
Illegal code injection');
- } else {
- preg_match("/([\S\s]*?)(?={$this->ldel})/", $this->value,
$match);
- $this->value = $match[0];
- $this->token = Smarty_Internal_Templateparser::TP_TEXT;
- }
- }
-
- function yy_r3_15($yy_subpatterns)
- {
-
- $phpEndScript = $this->is_phpScript ? '|<\\/script>' : '';
$to = strlen($this->data);
- preg_match("/<\?|<%|\?>|%>|
<script\s+language\s*=\s*[\"\']?\s*php\s*[\"\']?\s*>|
{$this->ldel}\/?literal{$this->rdel}{$phpEndScript}/", $this->data, $match,
PREG_OFFSET_CAPTURE, $this->counter);
+ preg_match("/{$this->ldel}\/?literal{$this->rdel}/", $this->data,
$match, PREG_OFFSET_CAPTURE, $this->counter);
if (isset($match[0][1])) {
$to = $match[0][1];
} else {
@@ -1132,13 +1058,15 @@
8 => 0,
9 => 0,
10 => 0,
- 11 => 3,
- 15 => 0,
+ 11 => 0,
+ 12 => 0,
+ 13 => 3,
+ 17 => 0,
);
if ($this->counter >= strlen($this->data)) {
return false; // end of input
}
- $yy_global_pattern = "/\G(" . $this->ldel . "\\s*(if|elseif|else
if|while)\\s+)|\G(" . $this->ldel . "\\s*for\\s+)|\G(" .
$this->ldel . "\\s*foreach(?![^\s]))|\G(" . $this->ldel . "\\s*\/)|\G(" .
$this->ldel . "\\s*)|\G(\")|\G(`\\$)|\G(\\$[0-9]*[a-zA-Z_]\\w*)|\G(\\$)|
\G(([^\"\\\\]*?)((?:\\\\.[^\"\\\\]*?)*?)(?=(" . $this->ldel . "|\\$|`\\$|
\")))|\G([\S\s])/iS";
+ $yy_global_pattern = "/\G(" . $this->ldel . "\\s*(if|elseif|else
if|while)\\s+)|\G(" . $this->ldel . "\\s*for\\s+)|\G(" .
$this->ldel . "\\s*foreach(?![^\s]))|\G(" .
$this->ldel . "\\s*literal\\s*" . $this->rdel . ")|\G(" .
$this->ldel . "\\s*\/literal\\s*" . $this->rdel . ")|\G(" .
$this->ldel . "\\s*\/)|\G(" . $this->ldel . "\\s*)|\G(\")|\G(`\\$)|
\G(\\$[0-9]*[a-zA-Z_]\\w*)|\G(\\$)|
\G(([^\"\\\\]*?)((?:\\\\.[^\"\\\\]*?)*?)(?=(" . $this->ldel . "|\\$|`\\$|
\")))|\G([\S\s])/iS";

do {
if (preg_match($yy_global_pattern, $this->data, $yymatches,
null, $this->counter)) {
@@ -1227,6 +1155,18 @@
function yy_r4_5($yy_subpatterns)
{

+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ }
+
+ function yy_r4_6($yy_subpatterns)
+ {
+
+ $this->token = Smarty_Internal_Templateparser::TP_TEXT;
+ }
+
+ function yy_r4_7($yy_subpatterns)
+ {
+
if ($this->smarty->auto_literal &&
isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r",
$this->value[$this->ldel_length]) !== false : false) {
$this->token = Smarty_Internal_Templateparser::TP_TEXT;
} else {
@@ -1236,7 +1176,7 @@
}
}

- function yy_r4_6($yy_subpatterns)
+ function yy_r4_8($yy_subpatterns)
{

if ($this->smarty->auto_literal &&
isset($this->value[$this->ldel_length]) ? strpos(" \n\t\r",
$this->value[$this->ldel_length]) !== false : false) {
@@ -1248,14 +1188,14 @@
}
}

- function yy_r4_7($yy_subpatterns)
+ function yy_r4_9($yy_subpatterns)
{

$this->token = Smarty_Internal_Templateparser::TP_QUOTE;
$this->yypopstate();
}

- function yy_r4_8($yy_subpatterns)
+ function yy_r4_10($yy_subpatterns)
{

$this->token = Smarty_Internal_Templateparser::TP_BACKTICK;
@@ -1264,25 +1204,25 @@
$this->taglineno = $this->line;
}

- function yy_r4_9($yy_subpatterns)
+ function yy_r4_11($yy_subpatterns)
{

$this->token = Smarty_Internal_Templateparser::TP_DOLLARID;
}

- function yy_r4_10($yy_subpatterns)
+ function yy_r4_12($yy_subpatterns)
{

$this->token = Smarty_Internal_Templateparser::TP_TEXT;
}

- function yy_r4_11($yy_subpatterns)
+ function yy_r4_13($yy_subpatterns)
{

$this->token = Smarty_Internal_Templateparser::TP_TEXT;
}

- function yy_r4_15($yy_subpatterns)
+ function yy_r4_17($yy_subpatterns)
{

$to = strlen($this->data);
=======================================
--- /trunk/distribution/libs/sysplugins/smarty_internal_templateparser.php
Tue Oct 14 21:45:05 2014 UTC
+++ /trunk/distribution/libs/sysplugins/smarty_internal_templateparser.php
Thu Oct 16 22:53:22 2014 UTC
@@ -125,17 +125,6 @@
$this->asp_tags = (ini_get('asp_tags') != '0');
$this->current_buffer = $this->root_buffer = new
_smarty_template_buffer($this);
}
-
- public static function escape_start_tag($tag_text)
- {
- $tag = preg_replace('/\A<\?(.*)\z/', '<<?php ?>?\1', $tag_text, -
1, $count); //Escape tag
- return $tag;
- }
-
- public static function escape_end_tag($tag_text)
- {
- return '?<?php ?>>';
- }

public function compileVariable($variable)
{
@@ -149,7 +138,7 @@
return '$_smarty_tpl->tpl_vars[' . $variable . ']->value';
}

- #line 139 "smarty_internal_templateparser.php"
+ #line 130 "smarty_internal_templateparser.php"

const TP_VERT = 1;
const TP_COLON = 2;
@@ -160,1527 +149,1618 @@
const TP_PHPENDSCRIPT = 7;
const TP_ASPSTARTTAG = 8;
const TP_ASPENDTAG = 9;
- const TP_FAKEPHPSTARTTAG = 10;
- const TP_XMLTAG = 11;
- const TP_TEXT = 12;
- const TP_STRIPON = 13;
- const TP_STRIPOFF = 14;
- const TP_BLOCKSOURCE = 15;
- const TP_LITERALSTART = 16;
- const TP_LITERALEND = 17;
- const TP_LITERAL = 18;
- const TP_LDEL = 19;
- const TP_DOLLAR = 20;
- const TP_ID = 21;
- const TP_EQUAL = 22;
- const TP_PTR = 23;
- const TP_LDELIF = 24;
- const TP_LDELFOR = 25;
- const TP_SEMICOLON = 26;
- const TP_INCDEC = 27;
- const TP_TO = 28;
- const TP_STEP = 29;
- const TP_LDELFOREACH = 30;
- const TP_SPACE = 31;
- const TP_AS = 32;
- const TP_APTR = 33;
- const TP_LDELSETFILTER = 34;
- const TP_SMARTYBLOCKCHILDPARENT = 35;
- const TP_LDELSLASH = 36;
- const TP_ATTR = 37;
- const TP_INTEGER = 38;
- const TP_COMMA = 39;
- const TP_OPENP = 40;
- const TP_CLOSEP = 41;
- const TP_MATH = 42;
- const TP_UNIMATH = 43;
- const TP_ANDSYM = 44;
- const TP_ISIN = 45;
- const TP_ISDIVBY = 46;
- const TP_ISNOTDIVBY = 47;
- const TP_ISEVEN = 48;
- const TP_ISNOTEVEN = 49;
- const TP_ISEVENBY = 50;
- const TP_ISNOTEVENBY = 51;
- const TP_ISODD = 52;
- const TP_ISNOTODD = 53;
- const TP_ISODDBY = 54;
- const TP_ISNOTODDBY = 55;
- const TP_INSTANCEOF = 56;
- const TP_QMARK = 57;
- const TP_NOT = 58;
- const TP_TYPECAST = 59;
- const TP_HEX = 60;
- const TP_DOT = 61;
- const TP_SINGLEQUOTESTRING = 62;
- const TP_DOUBLECOLON = 63;
- const TP_AT = 64;
- const TP_HATCH = 65;
- const TP_OPENB = 66;
- const TP_CLOSEB = 67;
- const TP_EQUALS = 68;
- const TP_NOTEQUALS = 69;
- const TP_GREATERTHAN = 70;
- const TP_LESSTHAN = 71;
- const TP_GREATEREQUAL = 72;
- const TP_LESSEQUAL = 73;
- const TP_IDENTITY = 74;
- const TP_NONEIDENTITY = 75;
- const TP_MOD = 76;
- const TP_LAND = 77;
- const TP_LOR = 78;
- const TP_LXOR = 79;
- const TP_QUOTE = 80;
- const TP_BACKTICK = 81;
- const TP_DOLLARID = 82;
- const YY_NO_ACTION = 572;
- const YY_ACCEPT_ACTION = 571;
- const YY_ERROR_ACTION = 570;
+ const TP_XMLTAG = 10;
+ const TP_TEXT = 11;
+ const TP_STRIPON = 12;
+ const TP_STRIPOFF = 13;
+ const TP_BLOCKSOURCE = 14;
+ const TP_LITERALSTART = 15;
+ const TP_LITERALEND = 16;
+ const TP_LITERAL = 17;
+ const TP_LDEL = 18;
+ const TP_DOLLAR = 19;
+ const TP_ID = 20;
+ const TP_EQUAL = 21;
+ const TP_PTR = 22;
+ const TP_LDELIF = 23;
+ const TP_LDELFOR = 24;
+ const TP_SEMICOLON = 25;
+ const TP_INCDEC = 26;
+ const TP_TO = 27;
+ const TP_STEP = 28;
+ const TP_LDELFOREACH = 29;
+ const TP_SPACE = 30;
+ const TP_AS = 31;
+ const TP_APTR = 32;
+ const TP_LDELSETFILTER = 33;
+ const TP_SMARTYBLOCKCHILDPARENT = 34;
+ const TP_LDELSLASH = 35;
+ const TP_ATTR = 36;
+ const TP_INTEGER = 37;
+ const TP_COMMA = 38;
+ const TP_OPENP = 39;
+ const TP_CLOSEP = 40;
+ const TP_MATH = 41;
+ const TP_UNIMATH = 42;
+ const TP_ANDSYM = 43;
+ const TP_ISIN = 44;
+ const TP_ISDIVBY = 45;
+ const TP_ISNOTDIVBY = 46;
+ const TP_ISEVEN = 47;
+ const TP_ISNOTEVEN = 48;
+ const TP_ISEVENBY = 49;
+ const TP_ISNOTEVENBY = 50;
+ const TP_ISODD = 51;
+ const TP_ISNOTODD = 52;
+ const TP_ISODDBY = 53;
+ const TP_ISNOTODDBY = 54;
+ const TP_INSTANCEOF = 55;
+ const TP_QMARK = 56;
+ const TP_NOT = 57;
+ const TP_TYPECAST = 58;
+ const TP_HEX = 59;
+ const TP_DOT = 60;
+ const TP_SINGLEQUOTESTRING = 61;
+ const TP_DOUBLECOLON = 62;
+ const TP_AT = 63;
+ const TP_HATCH = 64;
+ const TP_OPENB = 65;
+ const TP_CLOSEB = 66;
+ const TP_EQUALS = 67;
+ const TP_NOTEQUALS = 68;
+ const TP_GREATERTHAN = 69;
+ const TP_LESSTHAN = 70;
+ const TP_GREATEREQUAL = 71;
+ const TP_LESSEQUAL = 72;
+ const TP_IDENTITY = 73;
+ const TP_NONEIDENTITY = 74;
+ const TP_MOD = 75;
+ const TP_LAND = 76;
+ const TP_LOR = 77;
+ const TP_LXOR = 78;
+ const TP_QUOTE = 79;
+ const TP_BACKTICK = 80;
+ const TP_DOLLARID = 81;
+ const YY_NO_ACTION = 560;
+ const YY_ACCEPT_ACTION = 559;
+ const YY_ERROR_ACTION = 558;

- const YY_SZ_ACTTAB = 2314;
+ const YY_SZ_ACTTAB = 2541;
static public $yy_action = array(
/* 0 */
- 216, 3, 322, 202, 323, 309, 305, 301, 302, 303,
+ 225, 35, 312, 333, 198, 272, 273, 275, 283, 292,
/* 10 */
- 304, 310, 311, 317, 318, 319, 316, 196, 200, 323,
+ 293, 294, 295, 287, 288, 267, 190, 43, 19, 8,
/* 20 */
- 9, 23, 251, 281, 138, 4, 107, 216, 273, 436,
+ 204, 14, 212, 299, 2, 108, 225, 9, 424, 41,
/* 30 */
- 18, 136, 216, 18, 398, 232, 24, 234, 289, 24,
+ 139, 208, 225, 41, 250, 32, 228, 13, 159, 32,
/* 40 */
- 296, 46, 48, 52, 45, 20, 28, 354, 360, 39,
+ 51, 52, 50, 44, 11, 12, 298, 300, 21, 23,
/* 50 */
- 37, 278, 361, 40, 43, 216, 216, 436, 237, 216,
+ 303, 302, 25, 17, 225, 424, 234, 225, 225, 381,
/* 60 */
- 5, 430, 23, 436, 281, 12, 201, 362, 359, 358,
+ 421, 424, 45, 38, 145, 357, 313, 323, 322, 324,
/* 70 */
- 355, 356, 357, 343, 342, 328, 329, 330, 327, 11,
+ 325, 326, 320, 315, 314, 316, 317, 319, 127, 41,
/* 80 */
- 25, 229, 49, 41, 18, 18, 18, 49, 335, 18,
+ 46, 42, 338, 41, 168, 32, 41, 421, 14, 32,
/* 90 */
- 24, 24, 24, 204, 341, 24, 46, 48, 52, 45,
+ 299, 34, 32, 421, 51, 52, 50, 44, 11, 12,
/* 100 */
- 20, 28, 354, 360, 39, 37, 278, 361, 40, 43,
+ 298, 300, 21, 23, 303, 302, 25, 17, 225, 104,
/* 110 */
- 216, 571, 95, 265, 238, 306, 22, 140, 350, 31,
+ 185, 46, 46, 559, 95, 279, 242, 271, 3, 321,
/* 120 */
- 129, 185, 362, 359, 358, 355, 356, 357, 343, 342,
+ 313, 323, 322, 324, 325, 326, 320, 315, 314, 316,
/* 130 */
- 328, 329, 330, 327, 23, 351, 281, 15, 233, 23,
+ 317, 319, 14, 241, 299, 34, 208, 41, 225, 14,
/* 140 */
- 18, 281, 266, 34, 3, 33, 24, 271, 216, 195,
+ 418, 299, 28, 32, 179, 7, 356, 285, 51, 52,
/* 150 */
- 3, 46, 48, 52, 45, 20, 28, 354, 360, 39,
+ 50, 44, 11, 12, 298, 300, 21, 23, 303, 302,
/* 160 */
- 37, 278, 361, 40, 43, 14, 158, 138, 23, 158,
+ 25, 17, 225, 225, 274, 424, 240, 41, 134, 190,
/* 170 */
- 281, 12, 353, 138, 109, 334, 204, 362, 359, 358,
+ 332, 343, 340, 32, 313, 323, 322, 324, 325, 326,
/* 180 */
- 355, 356, 357, 343, 342, 328, 329, 330, 327, 46,
+ 320, 315, 314, 316, 317, 319, 37, 122, 182, 31,
/* 190 */
- 48, 52, 45, 20, 28, 354, 360, 39, 37, 278,
+ 202, 225, 424, 352, 225, 14, 7, 299, 424, 225,
/* 200 */
- 361, 40, 43, 216, 207, 274, 124, 216, 216, 393,
+ 150, 386, 51, 52, 50, 44, 11, 12, 298, 300,
/* 210 */
- 307, 238, 306, 249, 270, 362, 359, 358, 355, 356,
+ 21, 23, 303, 302, 25, 17, 225, 46, 349, 134,
/* 220 */
- 357, 343, 342, 328, 329, 330, 327, 299, 286, 216,
+ 41, 278, 242, 271, 7, 29, 32, 341, 313, 323,
/* 230 */
- 287, 284, 285, 216, 180, 436, 325, 18, 196, 312,
+ 322, 324, 325, 326, 320, 315, 314, 316, 317, 319,
/* 240 */
- 300, 26, 158, 24, 46, 48, 52, 45, 20, 28,
+ 226, 227, 197, 304, 103, 184, 232, 134, 46, 14,
/* 250 */
- 354, 360, 39, 37, 278, 361, 40, 43, 216, 32,
+ 35, 299, 265, 46, 321, 18, 51, 52, 50, 44,
/* 260 */
- 296, 36, 49, 436, 293, 193, 203, 323, 16, 436,
+ 11, 12, 298, 300, 21, 23, 303, 302, 25, 17,
/* 270 */
- 362, 359, 358, 355, 356, 357, 343, 342, 328, 329,
+ 225, 208, 264, 259, 258, 218, 6, 109, 345, 35,
/* 280 */
- 330, 327, 124, 19, 49, 254, 255, 223, 49, 6,
+ 193, 263, 313, 323, 322, 324, 325, 326, 320, 315,
/* 290 */
- 194, 344, 23, 23, 281, 281, 137, 231, 153, 46,
+ 314, 316, 317, 319, 241, 192, 304, 107, 102, 175,
/* 300 */
- 48, 52, 45, 20, 28, 354, 360, 39, 37, 278,
+ 269, 201, 191, 304, 203, 142, 253, 208, 321, 335,
/* 310 */
- 361, 40, 43, 216, 216, 208, 433, 204, 282, 197,
+ 51, 52, 50, 44, 11, 12, 298, 300, 21, 23,
/* 320 */
- 172, 33, 245, 264, 99, 362, 359, 358, 355, 356,
+ 303, 302, 25, 17, 225, 208, 268, 196, 208, 305,
/* 330 */
- 357, 343, 342, 328, 329, 330, 327, 244, 249, 321,
+ 485, 208, 230, 200, 308, 485, 313, 323, 322, 324,
/* 340 */
- 211, 105, 497, 108, 433, 8, 204, 497, 199, 33,
+ 325, 326, 320, 315, 314, 316, 317, 319, 30, 159,
/* 350 */
- 433, 276, 142, 247, 46, 48, 52, 45, 20, 28,
+ 105, 20, 233, 161, 186, 305, 301, 274, 256, 247,
/* 360 */
- 354, 360, 39, 37, 278, 361, 40, 43, 216, 49,
+ 208, 225, 321, 36, 51, 52, 50, 44, 11, 12,
/* 370 */
- 263, 250, 128, 27, 235, 253, 174, 291, 280, 101,
+ 298, 300, 21, 23, 303, 302, 25, 17, 225, 204,
/* 380 */
- 362, 359, 358, 355, 356, 357, 343, 342, 328, 329,
+ 207, 14, 254, 299, 131, 259, 249, 225, 158, 127,
/* 390 */
- 330, 327, 192, 158, 321, 254, 230, 104, 161, 162,
+ 313, 323, 322, 324, 325, 326, 320, 315, 314, 316,
/* 400 */
- 23, 23, 246, 226, 182, 139, 280, 279, 279, 46,
+ 317, 319, 237, 262, 130, 225, 45, 183, 187, 14,
/* 410 */
- 48, 52, 45, 20, 28, 354, 360, 39, 37, 278,
+ 169, 223, 301, 342, 274, 334, 321, 321, 51, 52,
/* 420 */
- 361, 40, 43, 216, 204, 207, 216, 44, 314, 23,
+ 50, 44, 11, 12, 298, 300, 21, 23, 303, 302,
/* 430 */
- 313, 241, 98, 124, 117, 362, 359, 358, 355, 356,
+ 25, 17, 225, 204, 204, 14, 6, 244, 141, 259,
/* 440 */
- 357, 343, 342, 328, 329, 330, 327, 321, 173, 321,
+ 291, 46, 98, 194, 313, 323, 322, 324, 325, 326,
/* 450 */
- 216, 233, 103, 160, 254, 268, 23, 279, 220, 216,
+ 320, 315, 314, 316, 317, 319, 132, 262, 227, 166,
/* 460 */
- 261, 292, 279, 260, 46, 48, 52, 45, 20, 28,
+ 163, 189, 14, 284, 231, 26, 237, 27, 321, 321,
/* 470 */
- 354, 360, 39, 37, 278, 361, 40, 43, 216, 204,
+ 321, 32, 51, 52, 50, 44, 11, 12, 298, 300,
/* 480 */
- 183, 256, 191, 247, 298, 295, 320, 131, 339, 279,
+ 21, 23, 303, 302, 25, 17, 225, 204, 14, 276,
/* 490 */
- 362, 359, 358, 355, 356, 357, 343, 342, 328, 329,
+ 245, 206, 22, 4, 144, 328, 150, 120, 313, 323,
/* 500 */
- 330, 327, 321, 294, 123, 49, 207, 100, 181, 204,
+ 322, 324, 325, 326, 320, 315, 314, 316, 317, 319,
/* 510 */
- 153, 269, 245, 296, 94, 132, 42, 279, 280, 46,
+ 195, 348, 262, 176, 171, 39, 30, 199, 143, 180,
/* 520 */
- 48, 52, 45, 20, 28, 354, 360, 39, 37, 278,
+ 148, 281, 321, 260, 159, 230, 51, 52, 50, 44,
/* 530 */
- 361, 40, 43, 216, 204, 205, 151, 13, 14, 35,
+ 11, 12, 298, 300, 21, 23, 303, 302, 25, 17,
/* 540 */
- 29, 6, 97, 24, 115, 362, 359, 358, 355, 356,
+ 225, 296, 205, 129, 346, 289, 124, 329, 125, 339,
/* 550 */
- 357, 343, 342, 328, 329, 330, 327, 321, 340, 321,
+ 97, 119, 313, 323, 322, 324, 325, 326, 320, 315,
/* 560 */
- 168, 175, 277, 189, 164, 206, 288, 179, 346, 279,
+ 314, 316, 317, 319, 127, 262, 262, 239, 277, 282,
/* 570 */
- 279, 7, 279, 279, 46, 48, 52, 45, 20, 28,
+ 307, 94, 266, 351, 269, 170, 159, 181, 172, 106,
/* 580 */
- 354, 360, 39, 37, 278, 361, 40, 43, 216, 207,
+ 51, 52, 50, 44, 11, 12, 298, 300, 21, 23,
/* 590 */
- 207, 171, 337, 133, 122, 145, 308, 159, 116, 114,
+ 303, 302, 25, 17, 225, 330, 270, 301, 15, 115,
/* 600 */
- 362, 359, 358, 355, 356, 357, 343, 342, 328, 329,
+ 331, 310, 326, 255, 140, 126, 313, 323, 322, 324,
/* 610 */
- 330, 327, 321, 321, 321, 125, 283, 198, 126, 169,
+ 325, 326, 320, 315, 314, 316, 317, 319, 301, 326,
/* 620 */
- 44, 293, 184, 282, 178, 280, 275, 21, 242, 46,
+ 262, 326, 326, 326, 326, 326, 326, 326, 326, 326,
/* 630 */
- 48, 52, 45, 20, 28, 354, 360, 39, 37, 278,
+ 326, 326, 326, 243, 51, 52, 50, 44, 11, 12,
/* 640 */
- 361, 40, 43, 216, 272, 106, 315, 110, 259, 333,
+ 298, 300, 21, 23, 303, 302, 25, 17, 225, 40,
/* 650 */
- 333, 333, 333, 333, 333, 362, 359, 358, 355, 356,
+ 326, 326, 326, 326, 326, 326, 326, 113, 99, 100,
/* 660 */
- 357, 343, 342, 328, 329, 330, 327, 333, 190, 333,
+ 313, 323, 322, 324, 325, 326, 320, 315, 314, 316,
/* 670 */
- 333, 333, 333, 333, 333, 333, 333, 333, 333, 333,
+ 317, 319, 262, 262, 262, 326, 326, 326, 326, 326,
/* 680 */
- 333, 333, 333, 333, 46, 48, 52, 45, 20, 28,
+ 326, 326, 326, 326, 326, 326, 326, 326, 51, 52,
/* 690 */
- 354, 360, 39, 37, 278, 361, 40, 43, 216, 333,
+ 50, 44, 11, 12, 298, 300, 21, 23, 303, 302,
/* 700 */
- 333, 333, 333, 333, 333, 333, 333, 333, 333, 333,
+ 25, 17, 225, 326, 326, 326, 326, 326, 326, 326,
/* 710 */
- 362, 359, 358, 355, 356, 357, 343, 342, 328, 329,
+ 326, 114, 326, 326, 313, 323, 322, 324, 325, 326,
/* 720 */
- 330, 327, 333, 333, 333, 333, 333, 333, 333, 239,
+ 320, 315, 314, 316, 317, 319, 262, 326, 326, 326,
/* 730 */
- 333, 333, 333, 333, 333, 333, 333, 333, 333, 46,
+ 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
/* 740 */
- 48, 52, 45, 20, 28, 354, 360, 39, 37, 278,
+ 326, 286, 51, 52, 50, 44, 11, 12, 298, 300,
/* 750 */
- 361, 40, 43, 216, 333, 333, 333, 333, 333, 333,
+ 21, 23, 303, 302, 25, 17, 225, 326, 326, 326,
/* 760 */
- 333, 333, 333, 333, 333, 362, 359, 358, 355, 356,
+ 326, 326, 326, 326, 326, 326, 326, 326, 313, 323,
/* 770 */
- 357, 343, 342, 328, 329, 330, 327, 333, 333, 333,
+ 322, 324, 325, 326, 320, 315, 314, 316, 317, 319,
/* 780 */
- 333, 333, 333, 333, 333, 333, 333, 333, 333, 333,
+ 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
/* 790 */
- 333, 333, 333, 333, 46, 48, 52, 45, 20, 28,
+ 326, 326, 326, 326, 326, 326, 51, 52, 50, 44,
/* 800 */
- 354, 360, 39, 37, 278, 361, 40, 43, 333, 333,
+ 11, 12, 298, 300, 21, 23, 303, 302, 25, 17,
/* 810 */
- 333, 333, 333, 333, 333, 333, 333, 333, 333, 158,
+ 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
/* 820 */
- 362, 359, 358, 355, 356, 357, 343, 342, 328, 329,
+ 159, 326, 313, 323, 322, 324, 325, 326, 320, 315,
/* 830 */
- 330, 327, 333, 333, 333, 333, 333, 46, 48, 52,
+ 314, 316, 317, 319, 326, 326, 326, 326, 51, 52,
/* 840 */
- 45, 20, 28, 354, 360, 39, 37, 278, 361, 40,
+ 50, 44, 11, 12, 298, 300, 21, 23, 303, 302,
/* 850 */
- 43, 333, 333, 333, 333, 333, 333, 211, 333, 333,
+ 25, 17, 326, 326, 326, 326, 326, 326, 212, 326,
/* 860 */
- 333, 333, 8, 362, 359, 358, 355, 356, 357, 343,
+ 326, 326, 326, 9, 313, 323, 322, 324, 325, 326,
/* 870 */
- 342, 328, 329, 330, 327, 333, 333, 333, 333, 333,
+ 320, 315, 314, 316, 317, 319, 326, 326, 326, 326,
/* 880 */
- 333, 333, 333, 9, 134, 92, 333, 333, 4, 107,
+ 326, 326, 326, 8, 138, 211, 326, 326, 2, 108,
/* 890 */
- 333, 333, 186, 333, 136, 333, 177, 333, 232, 324,
+ 326, 235, 326, 326, 139, 157, 165, 326, 250, 128,
/* 900 */
- 234, 279, 252, 333, 38, 279, 333, 51, 333, 333,
+ 228, 326, 246, 326, 24, 321, 326, 48, 261, 326,
/* 910 */
- 333, 228, 333, 280, 333, 144, 333, 280, 86, 127,
+ 326, 251, 336, 353, 326, 311, 326, 301, 174, 173,
/* 920 */
- 333, 333, 50, 47, 297, 243, 349, 290, 326, 105,
+ 326, 326, 49, 47, 280, 238, 297, 321, 321, 105,
/* 930 */
- 1, 257, 352, 348, 188, 347, 333, 333, 333, 333,
+ 1, 337, 326, 147, 326, 326, 326, 326, 326, 301,
/* 940 */
- 333, 333, 224, 279, 96, 9, 130, 212, 333, 333,
+ 301, 8, 123, 92, 96, 257, 2, 108, 326, 311,
/* 950 */
- 4, 107, 333, 228, 333, 280, 136, 157, 333, 228,
+ 326, 326, 139, 326, 326, 235, 250, 309, 228, 146,
/* 960 */
- 232, 127, 234, 146, 252, 333, 38, 127, 333, 51,
+ 246, 326, 24, 128, 162, 48, 326, 326, 326, 326,
/* 970 */
- 267, 333, 333, 257, 352, 348, 345, 347, 333, 257,
+ 235, 326, 350, 321, 155, 251, 336, 353, 128, 311,
/* 980 */
- 352, 348, 333, 347, 50, 47, 297, 243, 349, 333,
+ 49, 47, 280, 238, 297, 301, 326, 105, 1, 326,
/* 990 */
- 333, 105, 1, 262, 333, 228, 333, 333, 155, 154,
+ 251, 336, 353, 326, 311, 14, 326, 299, 326, 8,
/* 1000 */
- 333, 333, 333, 127, 333, 333, 96, 9, 130, 214,
+ 138, 224, 96, 326, 2, 108, 326, 41, 326, 252,
/* 1010 */
- 227, 176, 4, 107, 347, 257, 352, 348, 136, 347,
+ 139, 235, 326, 32, 250, 153, 228, 326, 246, 128,
/* 1020 */
- 279, 333, 232, 333, 234, 333, 252, 333, 38, 333,
+ 24, 326, 326, 48, 326, 326, 326, 326, 326, 326,
/* 1030 */
- 333, 51, 280, 333, 333, 228, 333, 333, 333, 144,
+ 326, 251, 336, 353, 326, 311, 326, 326, 49, 47,
/* 1040 */
- 333, 333, 56, 120, 143, 333, 50, 47, 297, 243,
+ 280, 238, 297, 326, 326, 105, 1, 326, 326, 326,
/* 1050 */
- 349, 290, 326, 105, 1, 257, 352, 348, 333, 347,
+ 326, 326, 14, 326, 299, 326, 326, 8, 142, 224,
/* 1060 */
- 333, 333, 333, 333, 23, 333, 281, 333, 96, 9,
+ 96, 326, 2, 108, 41, 235, 248, 326, 139, 154,
/* 1070 */
- 141, 214, 333, 333, 4, 107, 18, 23, 240, 281,
+ 32, 235, 250, 128, 228, 156, 246, 326, 33, 128,
/* 1080 */
- 136, 333, 24, 333, 232, 333, 234, 333, 252, 18,
+ 326, 48, 326, 326, 326, 251, 336, 353, 326, 311,
/* 1090 */
- 38, 236, 333, 51, 333, 24, 333, 228, 333, 333,
+ 326, 251, 336, 353, 326, 311, 49, 47, 280, 238,
/* 1100 */
- 333, 144, 333, 333, 86, 127, 333, 333, 50, 47,
+ 297, 326, 326, 105, 1, 326, 326, 326, 326, 326,
/* 1110 */
- 297, 243, 349, 290, 326, 105, 1, 257, 352, 348,
+ 326, 326, 326, 326, 326, 8, 138, 213, 96, 326,
/* 1120 */
- 333, 347, 333, 333, 333, 333, 333, 333, 217, 333,
+ 2, 108, 326, 326, 326, 326, 139, 235, 326, 326,
/* 1130 */
- 96, 9, 137, 214, 333, 333, 4, 107, 333, 333,
+ 250, 149, 228, 326, 246, 128, 24, 326, 326, 48,
/* 1140 */
- 333, 333, 136, 333, 333, 333, 232, 333, 234, 333,
+ 326, 326, 326, 326, 326, 326, 326, 251, 336, 353,
/* 1150 */
- 252, 333, 17, 333, 333, 51, 333, 333, 333, 228,
+ 326, 311, 326, 326, 49, 47, 280, 238, 297, 326,
/* 1160 */
- 333, 333, 333, 144, 333, 333, 86, 127, 333, 333,
+ 326, 105, 1, 326, 326, 326, 326, 326, 326, 326,
/* 1170 */
- 50, 47, 297, 243, 349, 290, 326, 105, 1, 257,
+ 326, 326, 326, 8, 138, 210, 96, 326, 2, 108,
/* 1180 */
- 352, 348, 333, 347, 333, 333, 333, 333, 333, 333,
+ 326, 326, 326, 326, 139, 235, 326, 326, 250, 151,
/* 1190 */
- 218, 333, 96, 9, 130, 213, 333, 333, 4, 107,
+ 228, 326, 219, 128, 24, 326, 326, 48, 326, 326,
/* 1200 */
- 333, 333, 333, 333, 136, 333, 333, 333, 232, 333,
+ 326, 326, 326, 326, 326, 251, 336, 353, 326, 311,
/* 1210 */
- 234, 333, 252, 333, 38, 333, 333, 51, 333, 333,
+ 326, 326, 49, 47, 280, 238, 297, 326, 326, 105,
/* 1220 */
- 333, 228, 333, 333, 333, 144, 333, 333, 63, 120,
+ 1, 326, 326, 326, 326, 326, 326, 326, 326, 326,
/* 1230 */
- 230, 333, 50, 47, 297, 243, 349, 290, 326, 105,
+ 326, 8, 136, 224, 96, 326, 2, 108, 326, 326,
/* 1240 */
- 1, 257, 352, 348, 333, 347, 333, 333, 333, 333,
+ 326, 326, 139, 235, 326, 326, 250, 152, 228, 326,
/* 1250 */
- 333, 333, 333, 333, 96, 9, 135, 214, 333, 333,
+ 246, 128, 24, 326, 326, 48, 326, 326, 326, 326,
/* 1260 */
- 4, 107, 333, 333, 333, 333, 136, 333, 333, 333,
+ 326, 326, 326, 251, 336, 353, 326, 311, 326, 326,
/* 1270 */
- 232, 333, 234, 333, 252, 333, 2, 333, 333, 51,
+ 49, 47, 280, 238, 297, 326, 326, 105, 1, 326,
/* 1280 */
- 333, 333, 333, 228, 333, 333, 333, 93, 333, 333,
+ 225, 326, 391, 326, 422, 326, 326, 326, 326, 8,
/* 1290 */
- 53, 118, 333, 333, 50, 47, 297, 243, 349, 290,
+ 135, 224, 96, 326, 2, 108, 326, 326, 326, 326,
/* 1300 */
- 326, 105, 1, 222, 352, 348, 333, 347, 333, 333,
+ 139, 236, 229, 326, 250, 326, 228, 326, 246, 41,
/* 1310 */
- 333, 333, 333, 333, 333, 333, 96, 9, 130, 210,
+ 5, 422, 326, 48, 326, 32, 326, 422, 7, 326,
/* 1320 */
- 333, 333, 4, 107, 333, 333, 333, 333, 136, 333,
+ 7, 326, 326, 326, 198, 178, 326, 326, 49, 47,
/* 1330 */
- 333, 333, 232, 333, 234, 333, 225, 333, 38, 333,
+ 280, 238, 297, 326, 321, 105, 1, 43, 19, 326,
/* 1340 */
- 333, 51, 333, 333, 333, 228, 333, 333, 333, 144,
+ 326, 134, 326, 134, 326, 326, 326, 8, 138, 209,
/* 1350 */
- 333, 333, 66, 127, 333, 333, 50, 47, 297, 243,
+ 96, 208, 2, 108, 326, 326, 326, 326, 139, 326,
/* 1360 */
- 349, 290, 326, 105, 1, 257, 352, 348, 333, 347,
+ 326, 326, 250, 326, 228, 326, 246, 326, 24, 198,
/* 1370 */
- 333, 333, 333, 333, 333, 333, 333, 333, 96, 9,
+ 164, 48, 326, 326, 326, 326, 326, 326, 326, 321,
/* 1380 */
- 130, 209, 333, 333, 4, 107, 333, 333, 333, 333,
+ 326, 326, 43, 19, 326, 326, 49, 47, 280, 238,
/* 1390 */
- 136, 333, 333, 333, 232, 333, 234, 333, 252, 333,
+ 297, 326, 326, 105, 1, 326, 208, 326, 326, 326,
/* 1400 */
- 38, 333, 333, 51, 333, 333, 333, 228, 333, 333,
+ 326, 326, 326, 326, 326, 8, 142, 224, 96, 326,
/* 1410 */
- 333, 144, 333, 333, 68, 127, 333, 333, 50, 47,
+ 2, 108, 326, 326, 326, 326, 139, 326, 326, 326,
/* 1420 */
- 297, 243, 349, 290, 326, 105, 1, 257, 352, 348,
+ 250, 326, 228, 326, 246, 326, 33, 198, 177, 48,
/* 1430 */
- 333, 347, 333, 333, 333, 333, 333, 333, 333, 333,
+ 326, 326, 326, 326, 326, 326, 326, 321, 326, 326,
/* 1440 */
- 96, 9, 137, 214, 333, 333, 4, 107, 333, 333,
+ 43, 19, 326, 326, 49, 47, 280, 238, 297, 326,
/* 1450 */
- 333, 333, 136, 333, 333, 333, 232, 333, 234, 333,
+ 326, 105, 326, 326, 208, 326, 326, 326, 326, 326,
/* 1460 */
- 252, 333, 17, 333, 333, 51, 333, 333, 333, 228,
+ 326, 326, 326, 8, 142, 222, 96, 326, 2, 108,
/* 1470 */
- 333, 333, 333, 144, 333, 333, 65, 127, 333, 333,
+ 326, 326, 326, 326, 139, 326, 326, 326, 250, 326,
/* 1480 */
- 50, 47, 297, 243, 349, 290, 326, 105, 333, 257,
+ 228, 326, 246, 326, 33, 326, 467, 48, 326, 326,
/* 1490 */
- 352, 348, 333, 347, 333, 333, 333, 333, 333, 333,
+ 326, 326, 326, 326, 326, 326, 326, 326, 326, 326,
/* 1500 */
- 333, 333, 96, 9, 137, 221, 333, 333, 4, 107,
+ 326, 326, 49, 47, 280, 238, 297, 326, 467, 105,
/* 1510 */
- 333, 333, 333, 228, 136, 333, 333, 148, 232, 333,
+ 467, 467, 326, 467, 467, 326, 326, 326, 326, 467,
/* 1520 */
- 234, 127, 252, 333, 17, 333, 333, 51, 333, 333,
+ 326, 467, 7, 467, 96, 326, 326, 326, 326, 326,
/* 1530 */
- 333, 479, 333, 257, 352, 348, 333, 347, 333, 333,
+ 326, 326, 326, 326, 326, 235, 326, 326, 467, 121,
/* 1540 */
- 333, 333, 50, 47, 297, 243, 349, 333, 333, 105,
+ 326, 326, 86, 128, 326, 134, 326, 326, 326, 467,
/* 1550 */
- 333, 333, 333, 333, 479, 333, 479, 479, 333, 479,
+ 326, 290, 318, 326, 326, 251, 336, 353, 326, 311,
/* 1560 */
- 479, 333, 333, 333, 96, 479, 333, 479, 3, 479,
+ 326, 326, 326, 467, 326, 326, 326, 235, 326, 216,
/* 1570 */
- 333, 333, 228, 333, 333, 333, 119, 333, 228, 84,
+ 354, 133, 326, 326, 68, 117, 249, 326, 326, 326,
/* 1580 */
- 127, 333, 152, 333, 479, 333, 127, 333, 290, 326,
+ 326, 326, 326, 290, 318, 326, 326, 251, 336, 353,
/* 1590 */
- 333, 138, 257, 352, 348, 479, 347, 228, 257, 352,
+ 235, 311, 326, 326, 133, 326, 326, 76, 128, 326,
/* 1600 */
- 348, 119, 347, 333, 84, 127, 219, 363, 333, 479,
+ 326, 326, 326, 326, 326, 326, 290, 318, 326, 235,
/* 1610 */
- 333, 333, 333, 290, 326, 201, 187, 257, 352, 348,
+ 251, 336, 353, 133, 311, 326, 76, 128, 326, 326,
/* 1620 */
- 333, 347, 333, 333, 333, 279, 333, 333, 11, 25,
+ 326, 221, 326, 326, 326, 290, 318, 326, 326, 251,
/* 1630 */
- 228, 333, 336, 333, 121, 333, 333, 57, 127, 333,
+ 336, 353, 326, 311, 326, 326, 326, 326, 235, 326,
/* 1640 */
- 333, 333, 204, 333, 333, 333, 290, 326, 333, 333,
+ 215, 326, 121, 326, 326, 86, 128, 326, 326, 326,
/* 1650 */
- 257, 352, 348, 228, 347, 333, 333, 144, 333, 333,
+ 326, 326, 326, 326, 290, 318, 326, 326, 251, 336,
/* 1660 */
- 87, 127, 333, 333, 228, 333, 333, 333, 144, 290,
+ 353, 235, 311, 326, 326, 133, 326, 326, 59, 117,
/* 1670 */
- 326, 89, 127, 257, 352, 348, 333, 347, 333, 333,
+ 137, 326, 326, 355, 326, 326, 326, 290, 318, 326,
/* 1680 */
- 290, 326, 333, 228, 257, 352, 348, 93, 347, 333,
+ 326, 251, 336, 353, 235, 311, 326, 326, 133, 326,
/* 1690 */
- 55, 118, 333, 333, 228, 333, 333, 333, 144, 290,
+ 326, 76, 128, 326, 326, 326, 326, 326, 326, 326,
/* 1700 */
- 326, 80, 127, 257, 352, 348, 333, 347, 333, 228,
+ 290, 318, 326, 235, 251, 336, 353, 110, 311, 326,
/* 1710 */
- 290, 326, 333, 147, 257, 352, 348, 127, 347, 333,
+ 69, 128, 326, 326, 326, 217, 326, 326, 326, 290,
/* 1720 */
- 228, 333, 333, 333, 144, 333, 333, 60, 127, 257,
+ 318, 326, 326, 251, 336, 353, 326, 311, 326, 235,
/* 1730 */
- 352, 348, 333, 347, 333, 333, 290, 326, 333, 228,
+ 101, 160, 326, 133, 326, 326, 57, 128, 326, 326,
/* 1740 */
- 257, 352, 348, 144, 347, 333, 88, 127, 333, 333,
+ 321, 326, 326, 43, 19, 290, 318, 326, 235, 251,
/* 1750 */
- 333, 333, 333, 333, 333, 290, 326, 333, 228, 257,
+ 336, 353, 133, 311, 326, 73, 128, 208, 326, 326,
/* 1760 */
- 352, 348, 111, 347, 333, 67, 127, 333, 333, 228,
+ 326, 326, 326, 326, 290, 318, 326, 326, 251, 336,
/* 1770 */
- 333, 333, 333, 144, 290, 326, 72, 127, 257, 352,
+ 353, 235, 311, 326, 326, 133, 326, 326, 78, 128,
/* 1780 */
- 348, 333, 347, 333, 333, 290, 326, 333, 228, 257,
+ 326, 326, 326, 326, 326, 326, 326, 290, 318, 326,
/* 1790 */
- 352, 348, 144, 347, 333, 90, 127, 333, 333, 228,
+ 235, 251, 336, 353, 133, 311, 326, 70, 128, 326,
/* 1800 */
- 333, 333, 333, 144, 290, 326, 73, 127, 257, 352,
+ 326, 326, 326, 326, 326, 326, 290, 318, 326, 326,
/* 1810 */
- 348, 333, 347, 333, 333, 290, 326, 333, 333, 257,
+ 251, 336, 353, 326, 311, 326, 235, 198, 167, 326,
/* 1820 */
- 352, 348, 333, 347, 228, 333, 333, 333, 144, 333,
+ 133, 326, 326, 64, 128, 326, 326, 321, 326, 326,
/* 1830 */
- 333, 91, 127, 333, 333, 228, 333, 333, 333, 144,
+ 43, 19, 290, 318, 326, 235, 251, 336, 353, 133,
/* 1840 */
- 290, 326, 82, 127, 257, 352, 348, 333, 347, 333,
+ 311, 326, 67, 128, 208, 326, 326, 326, 326, 326,
/* 1850 */
- 333, 290, 326, 333, 228, 257, 352, 348, 144, 347,
+ 326, 290, 318, 326, 326, 251, 336, 353, 235, 311,
/* 1860 */
- 333, 58, 127, 333, 333, 228, 333, 333, 333, 144,
+ 326, 326, 133, 326, 326, 88, 128, 326, 326, 326,
/* 1870 */
- 290, 326, 78, 127, 257, 352, 348, 333, 347, 333,
+ 326, 326, 326, 326, 290, 318, 326, 235, 251, 336,
/* 1880 */
- 333, 290, 326, 333, 228, 257, 352, 348, 144, 347,
+ 353, 133, 311, 326, 82, 128, 326, 326, 326, 326,
/* 1890 */
- 333, 64, 127, 333, 333, 228, 333, 333, 333, 144,
+ 326, 326, 326, 290, 318, 326, 326, 251, 336, 353,
/* 1900 */
- 290, 326, 76, 127, 257, 352, 348, 333, 347, 333,
+ 326, 311, 326, 235, 198, 188, 326, 133, 326, 326,
/* 1910 */
- 333, 290, 326, 333, 333, 257, 352, 348, 333, 347,
+ 72, 128, 326, 326, 321, 326, 326, 43, 19, 290,
/* 1920 */
- 228, 333, 333, 333, 144, 333, 333, 63, 127, 333,
+ 318, 326, 235, 251, 336, 353, 93, 311, 326, 55,
/* 1930 */
- 333, 228, 333, 333, 333, 144, 290, 326, 75, 127,
+ 116, 208, 326, 326, 326, 326, 326, 326, 290, 318,
/* 1940 */
- 257, 352, 348, 333, 347, 333, 333, 290, 326, 333,
+ 326, 326, 251, 336, 353, 235, 311, 326, 326, 112,
/* 1950 */
- 228, 257, 352, 348, 144, 347, 333, 70, 127, 333,
+ 326, 326, 87, 128, 326, 326, 326, 326, 326, 326,
/* 1960 */
- 333, 228, 333, 333, 333, 113, 290, 326, 74, 127,
+ 326, 290, 318, 326, 235, 251, 336, 353, 133, 311,
/* 1970 */
- 257, 352, 348, 333, 347, 333, 333, 290, 326, 333,
+ 326, 77, 128, 326, 326, 326, 326, 326, 326, 326,
/* 1980 */
- 228, 257, 352, 348, 144, 347, 333, 59, 127, 333,
+ 290, 318, 326, 326, 251, 336, 353, 326, 311, 326,
/* 1990 */
- 333, 228, 333, 333, 333, 144, 290, 326, 54, 127,
+ 235, 326, 326, 326, 133, 326, 326, 89, 128, 326,
/* 2000 */
- 257, 352, 348, 333, 347, 333, 333, 290, 326, 333,
+ 326, 326, 326, 326, 326, 326, 290, 318, 326, 235,
/* 2010 */
- 333, 257, 352, 348, 333, 347, 228, 333, 333, 333,
+ 251, 336, 353, 133, 311, 326, 75, 128, 326, 326,
/* 2020 */
- 144, 333, 333, 62, 127, 333, 333, 228, 333, 333,
+ 326, 326, 326, 326, 326, 290, 318, 326, 326, 251,
/* 2030 */
- 333, 144, 290, 326, 79, 127, 215, 352, 348, 333,
+ 336, 353, 235, 311, 326, 326, 133, 326, 326, 91,
/* 2040 */
- 347, 333, 333, 290, 326, 333, 333, 257, 352, 348,
+ 128, 326, 326, 326, 326, 326, 326, 326, 290, 318,
/* 2050 */
- 333, 347, 10, 333, 333, 333, 228, 4, 107, 333,
+ 326, 235, 251, 336, 353, 133, 311, 326, 62, 128,
/* 2060 */
- 149, 333, 333, 136, 127, 333, 228, 232, 333, 234,
+ 326, 326, 326, 326, 326, 326, 326, 290, 318, 326,
/* 2070 */
- 144, 333, 333, 71, 127, 333, 257, 352, 348, 333,
+ 326, 251, 336, 353, 326, 311, 326, 235, 326, 326,
/* 2080 */
- 347, 333, 290, 326, 333, 228, 257, 352, 348, 144,
+ 326, 93, 326, 326, 53, 116, 326, 326, 326, 326,
/* 2090 */
- 347, 333, 69, 127, 333, 333, 333, 333, 333, 333,
+ 326, 326, 326, 290, 318, 326, 235, 220, 336, 353,
/* 2100 */
- 333, 290, 326, 333, 228, 257, 352, 348, 144, 347,
+ 133, 311, 326, 63, 128, 326, 326, 326, 326, 326,
/* 2110 */
- 333, 77, 127, 331, 30, 338, 333, 333, 333, 333,
+ 326, 326, 290, 318, 326, 326, 251, 336, 353, 235,
/* 2120 */
- 290, 326, 333, 228, 257, 352, 348, 144, 347, 333,
+ 311, 326, 326, 133, 326, 326, 61, 128, 326, 326,
/* 2130 */
- 83, 127, 333, 333, 333, 333, 333, 333, 333, 290,
+ 326, 326, 326, 326, 326, 290, 318, 326, 235, 214,
/* 2140 */
- 326, 333, 333, 257, 352, 348, 333, 347, 10, 333,
+ 336, 353, 133, 311, 326, 71, 128, 326, 326, 326,
/* 2150 */
- 333, 333, 333, 4, 107, 333, 333, 333, 333, 136,
+ 326, 326, 326, 326, 290, 318, 326, 326, 251, 336,
/* 2160 */
- 333, 333, 228, 232, 333, 234, 144, 333, 333, 81,
+ 353, 326, 311, 326, 235, 326, 326, 326, 133, 326,
/* 2170 */
- 127, 333, 333, 228, 333, 333, 333, 144, 290, 326,
+ 326, 85, 128, 326, 326, 326, 326, 326, 326, 326,
/* 2180 */
- 61, 127, 257, 352, 348, 216, 347, 403, 333, 290,
+ 290, 318, 326, 235, 251, 336, 353, 133, 311, 326,
/* 2190 */
- 326, 333, 333, 257, 352, 348, 228, 347, 333, 333,
+ 65, 128, 326, 326, 326, 326, 326, 326, 326, 290,
/* 2200 */
- 112, 333, 333, 85, 127, 333, 333, 258, 333, 332,
+ 318, 326, 326, 251, 336, 353, 235, 311, 326, 326,
/* 2210 */
- 30, 338, 290, 326, 333, 18, 257, 352, 348, 228,
+ 111, 326, 326, 74, 128, 326, 326, 326, 326, 326,
/* 2220 */
- 347, 24, 333, 156, 3, 434, 333, 127, 228, 333,
+ 326, 326, 290, 318, 326, 235, 251, 336, 353, 118,
/* 2230 */
- 333, 333, 150, 333, 333, 333, 127, 333, 333, 257,
+ 311, 326, 58, 128, 326, 326, 326, 326, 326, 326,
/* 2240 */
- 352, 348, 333, 347, 248, 333, 333, 138, 257, 352,
+ 326, 290, 318, 326, 326, 251, 336, 353, 326, 311,
/* 2250 */
- 348, 333, 347, 434, 333, 201, 166, 333, 333, 434,
+ 326, 235, 326, 326, 326, 133, 326, 326, 56, 128,
/* 2260 */
- 333, 333, 3, 201, 163, 279, 333, 333, 11, 25,
+ 326, 326, 326, 326, 326, 326, 326, 290, 318, 326,
/* 2270 */
- 102, 165, 333, 279, 333, 333, 11, 25, 201, 170,
+ 235, 251, 336, 353, 133, 311, 326, 79, 128, 326,
/* 2280 */
- 279, 333, 204, 11, 25, 138, 201, 167, 279, 333,
+ 326, 326, 326, 326, 326, 326, 290, 318, 326, 326,
/* 2290 */
- 204, 11, 25, 333, 333, 333, 279, 204, 333, 11,
+ 251, 336, 353, 235, 311, 326, 326, 133, 326, 326,
/* 2300 */
- 25, 333, 333, 333, 333, 204, 333, 333, 333, 333,
+ 80, 128, 326, 326, 326, 326, 326, 326, 326, 290,
/* 2310 */
- 333, 333, 333, 204,
+ 318, 326, 235, 251, 336, 353, 133, 311, 326, 84,
+ /* 2320 */
+ 128, 326, 326, 326, 326, 326, 326, 326, 290, 318,
+ /* 2330 */
+ 326, 326, 251, 336, 353, 326, 311, 326, 235, 326,
+ /* 2340 */
+ 326, 326, 133, 326, 326, 66, 128, 326, 326, 326,
+ /* 2350 */
+ 326, 326, 326, 326, 290, 318, 326, 344, 251, 336,
+ /* 2360 */
+ 353, 326, 311, 326, 10, 326, 326, 326, 326, 2,
+ /* 2370 */
+ 108, 344, 326, 326, 326, 139, 326, 326, 10, 250,
+ /* 2380 */
+ 326, 228, 326, 2, 108, 326, 326, 326, 326, 139,
+ /* 2390 */
+ 326, 326, 326, 250, 326, 228, 235, 326, 326, 326,
+ /* 2400 */
+ 133, 326, 326, 60, 128, 326, 326, 326, 326, 326,
+ /* 2410 */
+ 326, 326, 290, 318, 326, 326, 251, 336, 353, 326,
+ /* 2420 */
+ 311, 326, 326, 326, 326, 306, 16, 347, 326, 235,
+ /* 2430 */
+ 326, 326, 326, 133, 326, 326, 81, 128, 326, 327,
+ /* 2440 */
+ 16, 347, 326, 326, 326, 290, 318, 326, 326, 251,
+ /* 2450 */
+ 336, 353, 326, 311, 326, 326, 235, 326, 326, 326,
+ /* 2460 */
+ 133, 326, 326, 68, 128, 326, 326, 326, 326, 326,
+ /* 2470 */
+ 326, 326, 290, 318, 326, 326, 251, 336, 353, 326,
+ /* 2480 */
+ 311, 326, 235, 326, 326, 326, 133, 326, 326, 54,
+ /* 2490 */
+ 128, 326, 326, 326, 326, 326, 326, 326, 290, 318,
+ /* 2500 */
+ 326, 326, 251, 336, 353, 235, 311, 326, 326, 133,
+ /* 2510 */
+ 326, 326, 83, 128, 326, 326, 235, 326, 326, 326,
+ /* 2520 */
+ 133, 290, 318, 90, 128, 251, 336, 353, 326, 311,
+ /* 2530 */
+ 326, 326, 290, 318, 326, 326, 251, 336, 353, 326,
+ /* 2540 */
+ 311,
);
static public $yy_lookahead = array(
/* 0 */
- 1, 40, 3, 115, 116, 4, 5, 6, 7, 8,
+ 1, 38, 3, 40, 91, 4, 5, 6, 7, 8,
/* 10 */
- 9, 10, 11, 12, 13, 14, 15, 16, 115, 116,
+ 9, 10, 11, 12, 13, 14, 15, 104, 105, 18,
/* 20 */
- 19, 19, 61, 21, 63, 24, 25, 1, 67, 3,
+ 118, 18, 60, 20, 23, 24, 1, 65, 3, 30,
/* 30 */
- 31, 30, 1, 31, 3, 34, 37, 36, 21, 37,
+ 29, 118, 1, 30, 33, 36, 35, 21, 22, 36,
/* 40 */
- 27, 42, 43, 44, 45, 46, 47, 48, 49, 50,
+ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
/* 50 */
- 51, 52, 53, 54, 55, 1, 1, 31, 32, 1,
+ 51, 52, 53, 54, 1, 30, 31, 1, 1, 3,
/* 60 */
- 39, 3, 19, 37, 21, 22, 92, 68, 69, 70,
+ 3, 36, 2, 18, 19, 20, 67, 68, 69, 70,
/* 70 */
- 71, 72, 73, 74, 75, 76, 77, 78, 79, 105,
+ 71, 72, 73, 74, 75, 76, 77, 78, 62, 30,
/* 80 */
- 106, 64, 56, 29, 31, 31, 31, 56, 67, 31,
+ 55, 28, 37, 30, 111, 36, 30, 30, 18, 36,
/* 90 */
- 37, 37, 37, 119, 81, 37, 42, 43, 44, 45,
+ 20, 21, 36, 36, 41, 42, 43, 44, 45, 46,
/* 100 */
- 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ 47, 48, 49, 50, 51, 52, 53, 54, 1, 91,
/* 110 */
- 1, 84, 85, 86, 87, 88, 19, 20, 21, 19,
+ 92, 55, 55, 83, 84, 85, 86, 87, 38, 101,
/* 120 */
- 20, 21, 68, 69, 70, 71, 72, 73, 74, 75,
+ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
/* 130 */
- 76, 77, 78, 79, 19, 38, 21, 22, 87, 19,
+ 77, 78, 18, 63, 20, 21, 118, 30, 1, 18,
/* 140 */
- 31, 21, 27, 33, 40, 39, 37, 41, 1, 92,
+ 3, 20, 21, 36, 111, 39, 66, 26, 41, 42,
/* 150 */
- 40, 42, 43, 44, 45, 46, 47, 48, 49, 50,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
/* 160 */
- 51, 52, 53, 54, 55, 22, 23, 63, 19, 23,
+ 53, 54, 1, 1, 26, 3, 60, 30, 62, 15,
/* 170 */
- 21, 22, 116, 63, 123, 124, 119, 68, 69, 70,
+ 16, 17, 66, 36, 67, 68, 69, 70, 71, 72,
/* 180 */
- 71, 72, 73, 74, 75, 76, 77, 78, 79, 42,
+ 73, 74, 75, 76, 77, 78, 18, 19, 20, 32,
/* 190 */
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ 100, 1, 30, 109, 1, 18, 39, 20, 36, 1,
/* 200 */
- 53, 54, 55, 1, 119, 3, 63, 1, 1, 3,
+ 116, 3, 41, 42, 43, 44, 45, 46, 47, 48,
/* 210 */
- 86, 87, 88, 64, 67, 68, 69, 70, 71, 72,
+ 49, 50, 51, 52, 53, 54, 1, 55, 80, 62,
/* 220 */
- 73, 74, 75, 76, 77, 78, 79, 5, 6, 1,
+ 30, 85, 86, 87, 39, 32, 36, 66, 67, 68,
***The diff for this file has been truncated for email.***
Reply all
Reply to author
Forward
0 new messages